数字信号处理课设报告.docx

上传人:b****8 文档编号:10892907 上传时间:2023-02-23 格式:DOCX 页数:26 大小:112.50KB
下载 相关 举报
数字信号处理课设报告.docx_第1页
第1页 / 共26页
数字信号处理课设报告.docx_第2页
第2页 / 共26页
数字信号处理课设报告.docx_第3页
第3页 / 共26页
数字信号处理课设报告.docx_第4页
第4页 / 共26页
数字信号处理课设报告.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

数字信号处理课设报告.docx

《数字信号处理课设报告.docx》由会员分享,可在线阅读,更多相关《数字信号处理课设报告.docx(26页珍藏版)》请在冰豆网上搜索。

数字信号处理课设报告.docx

数字信号处理课设报告

燕山大学

课程设计说明书

 

题目:

虚拟电子琴设计

学院(系):

电气工程学院

年级专业:

学号:

学生姓名:

指导教师:

职称:

电气工程学院《课程设计》任务书

院(系):

电气工程学院基层教学单位:

自动化仪表系

学号

学生姓名

(专业)班级

设计题目

虚拟电子琴设计

(a)利用Matlab设计基于虚拟琴键的信号发生器。

(b)基于单片机对按键输入操作的识别,通过串口发送请求指令给上位机,启动相应琴键发声。

在发出不同琴键声音的同时,同时控制单片机系统的LED显示琴键音节数字及波形参数(如幅度、频率等)。

(c)扩展:

也可编制程序自动生成一节旋律,或进行组合和弦声音输出。

要求至少输出7个音符的信号并实现相应信号的频谱分析,对比不同信号的时域波形和频谱特性。

其中可调参数包括幅值、相位、频率、采样频率等。

设计软件分析界面。

两周的课程设计时间,独立完成了一份课程设计报告书,包括设计的基本原理、设计思路与设计的基本思想、设计体会以及相关的程序代码和软件界面的设计。

1)《微型计算机控制系统》赖寿宏,机械工业出版社(教材)

2)《单片机及应用》李大友,高等教育出版社(教材)

3)《信号处理原理及应用》谢平等机械工业出版社(教材)

4)《Matlab程序设计及其在信号处理中的应用》聂祥飞等西南交通大学出版社

5)自选其他有关资料

周次

第一周

第二周

熟悉伟福单片机编程环境,调试单片机各基本功能模块;熟悉matlab信号处理工具箱,信号处理系统基本功能模块学习和调试

单片机系统与信号处理系统综合进行硬件调试,

撰写课程设计报告

指导教

师签字

基层教学单位主任签字

说明:

1、此表一式四份,系、指导教师、学生各一份,报送院教务科一份。

2、学生那份任务书要求装订到课程设计报告前面。

目录

目录………………………………………………………2

第一章摘要…………………………………………………3

第二章系统总体设计方案………………………………4

第三章信号处理模块基本原理…………………………5

第四章matlab软件实现…………………………………7

4.1图形界面设计………………………………………7

4.2matlab编程…………………………………………8

4.3存在的问题…………………………………………13

第五章课设心得及总结……………………………………14

参考文献………………………………………………………15

附录………………………………………………………………16

 

第一章摘要

目前,音频信号处理技术发展迅猛,其中数字信号处理已成为主流。

数字信号适合计算机处理,数字信号的处理速度非常快,发展前景非常广阔。

Matlab是矩阵实验室的简称,用于算法开发、数据可视化、数据分析以及数值计算的高级计数计算语言和交互式环境。

本次“单片机原理及其应用——数字信号处理”课程设计的题目为虚拟电子琴设计。

要求上位机和下位机通过串行通讯技术共同控制并实现。

本文着重介绍了上位机利用matlab产生虚拟信号发生器,产生不同频率的信号对应不用琴键的音调,通过串行口传给下位机实现功能。

在matlab中利用GUI界面设计软件分析界面,对产生的虚拟信号做时域和频域的分析。

关键词:

matlab,虚拟电子琴,数字信号

 

第二章系统总体设计方案

根据课程设计任务书要求,设计7个音符信号,利用matlab设计对应7个虚拟琴键,没按下一次琴键,通过串口通讯技术,对单片机传送,单片机对接收到的信号进行识别,启动蜂鸣器发出相应频率的音调,同时控制LED显示琴键音节数字和16*16LED点阵显示琴键音节字符。

扩展部分:

编制一段简单旋律自动输出。

下面具体介绍上位机控制实现部分。

下位机控制和实现部分见单片机课程设计报告。

在matlab中主要涉及的问题是:

第一,设计7种不同频率的信号发生器对应七种不同的音调;第二,对这七种不同频率的信号进行时域和频域分析,计算一些参数值进行对比;第三,学会使用GUI界面,设计虚拟电子琴界面,其中包括时域和频域图形显示模块,频率,幅值等参数显示模块,虚拟琴键模块等。

时域分析

 

频域分析

第三章信号处理模块基本原理

一、常用的虚拟信号发生器一般可产生正弦信号,方波新号,三角波信号,锯齿波信号,脉冲信号,阶跃信号,斜坡信号等。

对应的数字信号又可称为离散信号,即时间为离散变量的信号。

它只是在离散时间上给出的函数值,是时间上不连续的序列。

离散时间的间隔是均匀的,以

表示。

的值是由信号的采样频率

决定。

为保证采样后信号能真实地保留原始模拟信号信息,信号采样频率必须至少为原信号中最高频率成份为2倍。

这是采样的基本法则,成为采样定理。

Matlab程序提供了常用的各种基本信号的生成函数。

本设计中主要应用正弦信号,直接调用matlab提供的函数。

二、正弦信号的实现

正弦信号的数学表达式如下(2.1)所示

(2.1)

其中:

A为幅值;

为频率;

为相位。

在matlab中,将时间变量离散化并构成一个一维数组,如下式(2.2)所示

(2.2)

其中:

为采样频率。

相应的正弦波信号的数字信号表达式如下(2.3)

(2.3)

三、虚拟电子琴的功能是基于虚拟信号发生器的。

通过调用虚拟信号发生器产生一系列指定的频率的正弦信号,对应相应的虚拟琴键,通过按键和串口通讯使单片机的各个模块实现功能。

虚拟电子琴界面上设计了七个虚拟琴键1—7,每个按键对应一个频率的正弦波新号,各按键对应的信号频率分别为:

440Hz,494Hz,554Hz,587Hz,659Hz,740Hz,831Hz。

当用鼠标按下对应的键时,就可发出相应频率的声音。

四、当载入一段简单音频信号(“music.Txt”)时,通过在matlab中编程,实现for循环,相当于连续自动按下虚拟琴键,并通过串口发送到单片机部分连续接收,识别,做出连续的响应,产生一段连续的音频信号,形成一段旋律。

五、一些重要参数指标

标准差:

也称均方差,是个数据偏离平均数的距离的平均数,它是离均差平方和平均后的方根,用

表示。

标准差是方差的算术平方根。

标准差能反映一个数据集的离散程度。

方差:

是各个数据与平均数之差的平方和的平均数。

用来度量随机变量和数学期望之间的偏离程度。

峰峰值:

在规定的时间范围内,正向与负向峰值之差。

第四章matlab软件实现

Matlab是美国mathworks公司出品的商业数学软件,用于算法开发,数据可视化,数据分析以及数值计算的高级计数计算语言和交互式环境。

matlab开发环境是一套方便用户使用的matlab函数和文件工具集,其中许多工具是图形化用户接口。

它是一个集成的用户工作空间,允许用户输入输出数据,并提供了m文件的集成编译和调试环境,包括matlab桌面,命令窗口,m文件编辑调试器,matlab工作空间和在线帮助文档。

4.1图形界面设计

主要分成三部分:

第一为波形显示区,显示相应音频信号的时域和频域波形;第二为按键区,用于虚拟琴键实际操作;第三为参数显示区,通过调用matlab中函数,计算相应的参数值,进行分析和对比。

打开matlab,进入GUI图形设计界面。

在新建一个空白的图形界面文件,添加如下控件并设计布局。

(1)添加2个axes控件,用于显示时域和频域波形;

(2)添加8个statictext,用于标题及参数名称的标注;

(3)添加7个edittext,用于各参数值的显示;

(4)添加9个pushbutton,用于七个虚拟琴键,音乐载入和关闭界面功能。

(5)添加2个panel,将相关的控件框在一起。

双击各个控件,打开其属性编辑窗,即可改变其名称,大小,颜色等属性,最终设计好的界面如下:

4.2matlab编程

当GUI界面创建完成之后,点击运行即可自动生成包含各个控件回调函数在内的m文件。

Matlab对于编辑文本,按钮等空间的相应都是通过自动调用相应的回调函数来实现的。

回调函数即在一定的操作下自动执行的指令代码。

4.2.1matlab环境下PC机和单片机串口通讯模块

在matlab环境下,实现串口通讯的方式有两种——查询和中断。

在本次设计中用的是查询方式。

matlab对串行口编程控制主要分为四个步骤。

1)创建串口设备对象并设置其属性

2)打开串口设备对象

3)读/写串口操作

4)关闭并清除设备对象

function[]=dtmf_series(Key)

ss=serial('com1');%创建串口1设备对象ss

ss.BaudRate=2400;%波特率为2400b/s

ss.DataBits=8;%通讯数据格式为8位数据位

ss.Parity='none';%无奇偶校验位

ss.StopBits=1;%1位停止位

ss.TimeOut=60;%设置一次读或写操作最大完成时间60s

ss.DataTerminalReady='off';%数据终端准备

ss.RequestToSend='off';%请求发送

ss.FlowControl='none';%流量控制

ss.InputBufferSize=1000;%输入缓冲区

fopen(ss);%打开串口设备对象

fwrite(ss,Key);%写串口,发送握手信号key

%释放串口设备对象

fclose(ss);%关闭串口设备对象

delete(ss);%删除内存中串口设备对象

clearss%清除工作空间中串口设备对象

end

4.2.2虚拟琴键模块

1)设计方案中设计了七个虚拟琴键,对应的频率值为440Hz,494Hz,554Hz,587Hz,659Hz,740Hz,831Hz。

对1-7这七个虚拟按键进行回调函数设计。

虚拟键盘模块的设计实在GUI界面上,把键设计出来后,激活后自动生成m文件。

程序内容包括:

对应频率正弦信号的载入,通过串口传输给单片机,时域频域波形分析,一些参数计算值。

例如对按键1的回调函数:

functionpushbutton1_Callback(hObject,eventdata,handles)

根据回调函数找到琴键1的主函数位置,在对应下面编写。

globalss;

r=1;

dtmf_series(r);

t=0:

0.0001:

0.01;

A=3;

f=440;

p=0;

y=A*sin(2*pi*f*t+p);

set(gcf,'CurrentAxes',handles.axesTime);

plot(t,y)

axis([00.01-55])

xlabel('time(s)');

ylabel('amplitude');

title('时域波形');

gridon;

fs=1000;

frequency_domain(handles,y,fs);

[A,B,C,D,E,F]=index_calculation(y);

set(handles.textMean,'string',num2str(A));%平均值

set(handles.textStd,'string',num2str(B));%标准差

set(handles.textVar,'string',num2str(C));%方差

set(handles.textMax,'string',num2str(D));%最大值

set(handles.textMin,'string',num2str(E));%最小值

set(handles.textPeak,'string',num2str(F));%峰峰值

set(handles.text23,'string',440);%频率值

其余六个琴键对应回调函数同上。

2)音频信号载入(music)

【11556654433221554433255443321155********21】

functionpushbutton10_Callback(hObject,eventdata,handles)

globald;

d=load('music.txt');

%时域

time_domain(handles,d);

fs=1000;%采样频率

%频域

frequency_domain(handles,d,fs);

[A,B,C,D,E,F]=index_calculation(d);

set(handles.textMean,'string',num2str(A));

set(handles.textStd,'string',num2str(B));

set(handles.textVar,'string',num2str(C));

set(handles.textMax,'string',num2str(D));

set(handles.textMin,'string',num2str(E));

set(handles.textPeak,'string',num2str(F));

%for循环语句实现音频信号自动每隔0.3s传输一个频率的音节

globali;

fori=1:

42

dtmf_series(d(i,1));

pause(0.3);

end

4.3存在的问题

1)在用matlab语言进行程序设计的过程中,由于语法的不熟悉,总是出错。

例如,matlab中的数组元素标号是从1开始,而不是从0开始;for语句与C语言不同。

2)第一次接触GUI界面,不熟悉界面和控件含义,总是重复操作,效率很低。

3)由于自己对Matlab的语法以及函数不熟悉,导致自己的想法无法用matlab来实现,进度很慢。

 

第五章课设心得体会

本学期的数字信号处理课程设计,内容丰富,形式多样。

不但丰富了我们的知识面,把书本上的理论知识相应的结合到了课设实践中,与实际问题相联系,让我们对数字信号处理这个课程有了进一步的了解,而且在matlab软件中编程,设计GUI界面,强化训练了我们实际操作动手的能力。

又学习到了更多关于matlab软件的功能实现。

本次课程设计主题思想是模块化实现系统。

每个模块完成他的子功能,把一个大的复杂的问题分解成了几个较为容易的小问题,减轻了工作负担,提高了效率,并且使做出的东西效果更好!

这种思想对我们今后的学习和工作都有很大的帮助,在设计思路上有很好的作用,值得我们反复学习,反复实践。

在这两周的课程设计中,除了及时翻阅资料解决问题,还积极与小组成员不断进行交流沟通,使课题能顺利进行,遇到一些大家都无从下手的问题,就虚心请教研究生学长,一起探讨,和大家的合作都非常愉快,很感谢小组成员的团结协作,也很感谢老师和研究生学长提供这么多强有力的帮助。

此次课程设计中也暴露出我的很多不足,平时积累的知识太少,虽然作业都及时完成,但是还是缺乏课余时间的训练。

编程能力有待提高,平时应该多翻阅相关的书籍资料,自己应该充分利用时间,来多做些软件编程的练习,多思考,多与实际问题相联系,为今后的学习和工作打下坚实的基础。

参考文献

[1]谢平林洪彬信号处理原理及应用机械工业出版社2008

[2]刘敏魏玲Matlab通信仿真与应用国防工业出版社2007

[3]楼顺天基于Matlab7.x的系统分析与设计-信号处理2005

 

附录

主程序部分:

functionvarargout=dzq(varargin)

gui_Singleton=1;

gui_State=struct('gui_Name',mfilename,...

'gui_Singleton',gui_Singleton,...

'gui_OpeningFcn',@dzq_OpeningFcn,...

'gui_OutputFcn',@dzq_OutputFcn,...

'gui_LayoutFcn',[],...

'gui_Callback',[]);

ifnargin&&ischar(varargin{1})

gui_State.gui_Callback=str2func(varargin{1});

end

ifnargout

[varargout{1:

nargout}]=gui_mainfcn(gui_State,varargin{:

});

else

gui_mainfcn(gui_State,varargin{:

});

end

functiondzq_OpeningFcn(hObject,eventdata,handles,varargin)

handles.output=hObject;

guidata(hObject,handles);

functionvarargout=dzq_OutputFcn(hObject,eventdata,handles)

varargout{1}=handles.output;

%虚拟琴键

%---Executesonbuttonpressinpushbutton1.

functionpushbutton1_Callback(hObject,eventdata,handles)

t=0:

0.0001:

0.01;

A=3;

f=440;

p=0;

y=A*sin(2*pi*f*t+p);

set(gcf,'CurrentAxes',handles.axesTime);

plot(t,y)

axis([00.01-55])

xlabel('time(s)');

ylabel('amplitude');

title('ʱÓò²¨ÐÎ');

gridon;

fs=2000;

frequency_domain(handles,y,fs);

[A,B,C,D,E,F]=index_calculation(y);

set(handles.textMean,'string',num2str(A));

set(handles.textStd,'string',num2str(B));

set(handles.textVar,'string',num2str(C));

set(handles.textMax,'string',num2str(D));

set(handles.textMin,'string',num2str(E));

set(handles.textPeak,'string',num2str(F));

set(handles.text23,'string',440);

%---Executesonbuttonpressinpushbutton2.

functionpushbutton2_Callback(hObject,eventdata,handles)

globalss;

r=2;

dtmf_series(r);

t=0:

0.0001:

0.01;

A=3;

f=494;

p=0;

y=A*sin(2*pi*f*t+p);

set(gcf,'CurrentAxes',handles.axesTime);

plot(t,y)

axis([00.01-55])

xlabel('time(s)');

ylabel('amplitude');

title('ʱÓò²¨ÐÎ');

gridon;

fs=1000;

frequency_domain(handles,y,fs);

[A,B,C,D,E,F]=index_calculation(y);

set(handles.textMean,'string',num2str(A));

set(handles.textStd,'string',num2str(B));

set(handles.textVar,'string',num2str(C));

set(handles.textMax,'string',num2str(D));

set(handles.textMin,'string',num2str(E));

set(handles.textPeak,'string',num2str(F));

set(handles.text23,'string',494);

%---Executesonbuttonpressinpushbutton3.

functionpushbutton3_Callback(hObject,eventdata,handles)

globalss;

r=3;

dtmf_series(r);

t=0:

0.0001:

0.01;

A=3;

f=554;

p=0;

y=A*sin(2*pi*f*t+p);

set(gcf,'CurrentAxes',handles.axesTime);

plot(t,y)

axis([00.01-55])

xlabel('time(s)');

ylabel('amplitude');

title('ʱÓò²¨ÐÎ');

gridon;

fs=1000;

frequency_domain(handles,y,fs);

[A,B,C,D,E,F]=index_calculation(y);

set(handles.textMean,'string',num2str(A));

set(handles.textStd,'string',num2str(B));

set(handles.textVar,'string',num2str(C));

set(handles.textMax,'string',num2str(D));

set(handles.textMin,'string',num2str(E));

set(handles.textPeak,'string',num2str(F));

set(handles.text23,'string',554);

%---Executesonbuttonpressinpushbutton4.

functionpushbutton4_Callback(hObject,eventdata,handles)

globalss;

r=4;

dtmf_series(r);

t=0:

0.0001:

0.01;

A=3;

f=587;

p=0;

y=A*sin(2*pi*f*t+p);

set(gcf,'CurrentAxes',handles.axesTime);

plot(t,y)

axis([00.01-55])

xlabel('time(s)');

ylabel('amplitude');

title('ʱÓò²¨ÐÎ');

gridon;

fs=1000;

frequency_domain(handles,y,fs);

[A,B,C,D,E

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 起诉状

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1