基于MATLAB的数字电子琴设计_第1页
基于MATLAB的数字电子琴设计_第2页
基于MATLAB的数字电子琴设计_第3页
基于MATLAB的数字电子琴设计_第4页
基于MATLAB的数字电子琴设计_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、*实践教学* 题 目: 基于MATLAB的数字电子琴设计 专业班级: 姓 名: 学 号: 指导教师: 成 绩: 摘要本次课设的任务是基于MATLAB设计一个数字电子琴,首先实现数字信号发生器的设计。数字信号发生器是一种基于软硬件实现的波形发生器,可以实现各种基本波形的产生。在工程的各种复杂信号是由这些基本信号叠加产生,因此它在工程分析和实验教学中有着广泛的应用,可用MATLAB实现。MATLAB是一个数据分析和处理功能十分强大的工程实用软件,它的数据采集工具箱为实现数据的输入和输出提供了十分方便的函数和命令,在数字信号处理方面方便实用。本文首先详细介绍了基于MATLAB的数字发生器的设计过程,

2、实现了简单波形(正弦波、方波、三角波、锯齿波、白噪声、脉冲、阶跃)信号的具体实现方法。其次介绍了利用该数字信号发生器产生的正弦波信号和声卡设计的简易电子琴。关键词:MATLAB;数字信号发生器;简易电子琴 目录前言1一、数字信号发生器21.1图形用户界面的简介21.2设计流程21.3波形实现的基本原理4二、电子琴的实现62.1简易数字电子琴的简介62.2实现原理6三、基于MATLAB的仿真及结果分析83.1 GUI界面83.2编写M文件9总结19参考文献20附录21致谢34前言MATLAB(矩阵实验室)是Matrix Laboratory的缩写,是一种用于算法开发、数据可视化、数据分析以及数值

3、计算的高级计算机语言和交互式环境。MATLAB可以进行矩阵运算、绘制函数图像和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。Matlab环境下的图形用户界面(GUI)是由窗口、光标、按键、菜单、文字说明等对象构成的一个用户界面,可在图形用户界面内根据需要搭建图形,并对控件的回调函数进行编写,完成最完整的GUI界面编辑即可运行。本文主要利用MATLAB的图形用户界面设计数字信号发生器,在数字信号发生的基础上实现简易电子琴的设计。信号发生器又称信号源或振荡器,是一种能提供各种频率、波形和输出电平电

4、信号的仪器,数字信号发生器只是信号发生器的一种,在生产实践和科技领域中有着广泛的应用。信号发生器按信号波形可分为正弦信号、函数(波形)信号、脉冲信号和随机信号发生器等四大类。能够产生多种波形,如正弦波、三角波、锯齿波、矩形波(含方波)、阶跃信号、脉冲信号的电路被称为函数信号发生器。本文设计了一种基于MATLAB图形用户界面的可以产生正弦波、方波、三角波、锯齿波、白噪声、脉冲信号、阶跃信号的虚拟数字信号发生器。一、数字信号发生器1.1图形用户界面的简介图形用户界面即Graphical User Interface,简称 GUI,又称图形用户接口。Matlab环境下的图形用户界面(GUI)是由窗口

5、、光标、按键、菜单、文字说明等对象构成的一个用户界面。用户通过一定的方法(如鼠标或键盘)选择、激活这些图形对象,使计算机产生某种动作或变化,比如实现计算、绘图等。MATLAB的用户,在指令窗中运行demo 打开那图形界面后,只要用鼠标进行选择和点击, 就可产生丰富的内容。对图形用户界面的操作一般有两个部分,首先按照设计的原理、要求,根据需要选择适当的图形对象搭建合理的GUI界面;然后对每个控件的回调函数在M文件内进行编写,使搭建的GUI界面能够运行。数字信号发生器的设计所使用的工具即GUI界面,用到的图形对象有pushbutton、Aexs、Slider、Static Text、Edit Te

6、xt。模拟了七种信号:正弦波、方波、三角波、阶跃信号、斜波信号、锯齿波以及白噪声信号。具体的实现原理如下。1.2设计流程根据设计的要求分析出数字信号发生器的GUI界面构图,然后在MATLAB的workplace界面中输入guide,打开GUI界面。在GUI界面中搭建好具体的数字信号发生器的界面,并对每个控件的回调函数进行编写、保存M文件。运行,若结果正确,再同一个GUI界面中搭建好电子琴的GUI界面,利用数字信号发生器产生的正弦波,对电子琴每个控件的回调函数进行编写、保存M文件。运行,观察仿真结果。若数字信号发生器的仿真结果不正确,检查控件的回调函数,修改并保存M文件,再次运行观察仿真结果。具

7、体的设计流程图如下:1.3波形实现的基本原理1.3.1正弦波的实现正弦信号的数学表达式如下: (1.1)其中:为幅值;为频率;为相位。在MATLAB中,由于处理对象均是离散的数字信号,将时间变量离散化并构造成一个一维数组用 其中:为采样频率。但的值不能太大,否则波形显示会很慢。相应的正弦波信号的数字信号表达式为 (1.2)幅值、频率、相位参数可以由用户界面上的滑动条或编辑框输入。在分别得到与的离散值后,用plot作图函数即可获得相应波形显示。1.3.2方波信号的实现方波信号的数学表达式为 (1.3)该式可直接生成一个周期为,峰值为,占空比为的方波信号,的默认值为50%。在MATLAB中可得到幅

8、值、频率、相位可调的方波信号函数 (1.4)1.3.3三角波信号的实现在MATLAB中,可以用函数直接生成一个三角波信号, 该函数可生成一个周期为,峰值为,最大值出现在位置的三角波。利用该函数,可得到幅值、频率、相位可调的三角波信号函数 (1.5) 1.3.4锯齿波信号的实现由于锯齿波信号与三角波信号相似,所以将函数中的参数值设为1,可得到锯齿波。该函数得到的幅值、频率、相位可调的锯齿波信号函数 (1.6)1.3.5脉冲信号的实现由于脉冲信号与方波信号波形相似,用方波信号函数函数为基础,将其函数值加1,可得到最大值为2,最小值为0的脉冲波形,原函数的参数可用来调节脉冲的宽度。用该函数,得到幅值

9、、频率、相位可调的脉冲信号函数。 (1.7)1.3.6阶跃信号的实现由于阶跃信号比较特殊,可用函数直接表示,其函数表达式为 (1.8)1.3.7白噪声信号的实现白噪声信号是指功率谱密度在整个频域内均匀分布的噪声。白噪声的实现可借助于MATLAB中的函数,它的功能是产生一个均值为0,标准差为1的随机数列或矩阵函数,可得到一个均值为0,标准差为的维的随机矩阵。二、电子琴的实现2.1简易数字电子琴的简介在设计界面中包含A、B、C、D、E、F、G共7个琴键,由于低音频率区分不是很明显,此次课设选择的是中音频率,其中每个按键对应一个频率的正弦波信号,各按键对应的信号频率分别为392、440、494、52

10、3、587、659、698、784Hz。当用鼠标按下相应的键时发声,松开时发声停止,然后将数字信号写入声卡的缓冲区,由声卡播放出相应的声音。当用鼠标按下对应的键时即可发出相应频率的声音。2.2实现原理电子琴的实现基于之前设计的数字信号发生器,选择数字发生器产生的正弦波信号作为发声及显示波形,由回调函数和数字信号发生器结合起来,实现对波形的调用。每个键对应一定的频率,在各个键的回调函数中设置好频率及频谱显示,实现每个键有自己特定频率的功能,为了使最终仿真结果更好,选择音阶中音调高的频率作为调试频率。当键按下的时候,首先由相应的键和数字信号关联起来,随后将数字信号写入声卡的缓冲区,由声卡发出相应频

11、率的声音,并显示波形及对应频率的频谱图,当键松开时声音即停止。此次电子琴的设计实现了正弦波显示、频谱显示以及发声的功能,从而实现虚拟电子琴的模仿功能。具体的实现流程图如下:开始打开MATLAB搭建电子琴的GUI界面 执行并观察仿真结果结束 图2.1 电子琴的实现流程图三、基于MATLAB的仿真及结果分析3.1 GUI界面 3.1.1搭建数字信号发生器的GUI界面搭建的GUI界面如下图3.1:图3.1 数字信号发生器的GUI界面3.1.2电子琴的GUI界面。搭建的数字电子琴GUI界面如图3.2所示:图3.2 数字电子琴的GUI界面G该界面主要由琴键组成,每个按键对应一定的频率,模拟电子琴的发声功

12、能,它的波形显示及频谱图在数字信号发生器中。3.2编写M文件3.2.1数字信号发生器的M文件(1)正弦信号的实现由正弦信号的数学表达式可知在程序中用到的具体表达式为 (3.1)将时间变量离散化并构造成一个一维数组,要求采样频率不能太大,否则波形显示会很慢(2)方波信号的实现用函数直接生成一个方波信号,程序中使用的具体函数为 (3.2)(3)三角波的实现 函数直接生成一个三角波信号,程序中用到的具体实现函数为 (3.3) (4)锯齿波信号的实现具体的函数实现形式为 (3.4)(5)脉冲信号的实现抽样频率为8000,时间范围为0,1,坐标抽为0,a+1。得到的幅值、频率、相位可调的脉冲信号函数。具

13、体的函数 (3.5) (6)阶跃信号的实现取1,A取1,t取0,2,时间间隔为/100。阶跃信号的函数表达式为 (3.6)(7)白噪声信号的实现白噪声是指功率谱密度在整个频域内均匀分布的噪声。白噪声的实现可借于MATLAB中的函数,产生一个均值为0,标准差为1的随机数列或矩阵该函数可得到一个均值为0,标准差为的维的随机矩阵。 (3.7)3.3仿真结果数字信号发生器的仿真结果如下:(1) 正弦波的仿真结果 图3.3 数字信号发生器的正弦波波形(2) 方波信号的仿真结果 图3.4 方波信号的波形(3) 三角波信号仿真结果 图3.5 三角波信号的波形(4) 阶跃信号仿真结果图3.6 阶跃信号的仿真结

14、果 (5)斜波信号 图3.7 斜波信号的仿真结果(6)锯齿波信号的仿真结果图3.8 阶跃信号的仿真结果(7)白噪声仿真结果(1)按键A的仿真结果 图3.10 按下A键,电子琴演奏时的效果(2)按键B的仿真结果图3.11 按下B键,电子琴演奏时的效果(3)按键C的仿真结果图3.12 按下C键,电子琴演奏时的效果总结本次的课程设计的任务是基于MATLAB设计一个数字电子琴,首先设计一个数字信号发生器。数字信号发生器和电子琴的搭建都是在GUI界面中进行搭建的,在GUI界面中搭建好具体的数字信号发生器的界面,并对每个控件的回调函数进行编写、保存M文件。运行,若结果正确,再同一个GUI界面中搭建好电子琴

15、的GUI界面,利用数字信号发生器产生的正弦波,对电子琴每个控件的回调函数进行编写、保存M文件搭建完成之后对各个控件进行回调函数的编写。如果数字信号发生器的运行结果正确,则继续搭建电子琴否则修改直到正确为止。在本次的课程设计中,确实遇到了很多问题,但通过大家的帮助和自己的努力,最终实现所有的设计要求。本次课程设计也许还存在着一些不足,在以后学习生活中会更加努力,争取做得更好。 参考文献1 丁玉美. 数字信号处理M. 西安电子科技大学出版社,2003,3.2 朱冰莲. 数字信号处理M. 电子工业出版社,2003,7.3 程佩青.数字信号处理教程(第二版)M.北京:清华大学出版社,2001.4 韩纪

16、庆,张磊,郑铁然.语音信号处理M.北京:清华大学出版社,2004.5 王济, 胡晓. MATLAB 在振动信号处理中的应用M . 北京: 中国水利水电出版社: 知识产权出版社, 2006.6 周祥才, 杨铮. 基于MATLAB的信号采样与重构的实现 J .实验技术与管理, 2007, 247 张志涌等精通MATLAB M北京:北京航空航天大学出版社,20038 车子萍. 基于Matlab的虚拟信号发生器设计J. 电脑学习, 2010.1.9 李益华. MATLAB辅助现代工程数字信号处理(第2版). 西安:西安电子科技大学出版社,201010 杨洁芳. 基于MATLAB与声卡的低频信号发生器的

17、设计与实现. 电脑学习,2006附录:function pushbutton16_Callback(hObject, eventdata, handles)Fs=8000; t=(0:2000)/Fs;pit=2*pi*t;a1=523;y=sin(a1*pit);axes (handles.axes1);plot(t,y);title(时域波形)xlabel(t)ylabel(y)axis(0,.01,-2,2)axes (handles.axes2);f=fft(y,1024);f1=fftshift(f);w1=513:1024;w=4000*(w1-512)/512;F=abs(f1(

18、513:1024);plot(w,F);title(频谱图)xlabel(w)ylabel(F(w)sound(y);function pushbutton24_Callback(hObject, eventdata, handles)Fs=8000; t=(0:2000)/Fs;pit=2*pi*t;a2=587;y=sin(a2*pit);axes (handles.axes1);plot(t,y);title(时域波形)xlabel(t)ylabel(y)axis(0,.01,-2,2)axes (handles.axes2);f=fft(y,1024);f1=fftshift(f);w

19、1=513:1024;w=4000*(w1-512)/512;F=abs(f1(513:1024);plot(w,F);title(频谱图)xlabel(w)ylabel(F(w)sound(y);function pushbutton25_Callback(hObject, eventdata, handles)Fs=8000; t=(0:2000)/Fs;pit=2*pi*t;a3=659;y=sin(a3*pit);axes (handles.axes1);plot(t,y);title(时域波形)xlabel(t)ylabel(y)axis(0,.01,-2,2)axes (handl

20、es.axes2);f=fft(y,1024);f1=fftshift(f);w1=513:1024;w=4000*(w1-512)/512;F=abs(f1(513:1024);plot(w,F);title(频谱图)xlabel(w)ylabel(F(w)sound(y);function pushbutton26_Callback(hObject, eventdata, handles)Fs=8000; t=(0:2000)/Fs;pit=2*pi*t;a4=698;y=sin(a4*pit);axes (handles.axes1);plot(t,y);title(时域波形)xlabe

21、l(t)ylabel(y)axis(0,.01,-2,2)axes (handles.axes2);faxes (handles.axes1);plot(t,y);title(时域波形)xlabel(t)ylabel(y)axis(0,.01,-2,2)axes (handles.axes2);f=fft=0:1/fs:1.0; y=a*sin(2*pi*(f*t+q/360); axes (handles.axes1);plot(t,y); title(时域波形);xlabel(t);ylabel(y);grid on; axis(0,.01,-2,2);allback(hObject, e

22、ventdata, handles)t=(0:pi/100:2*pi);t0=1;A=1;y=0*(tt0);end t=0:1/fs:1.0; y=randn(size(t);title(时域波形);plot(t,y); title(时域波形);xlabel(t);ylabel(y); grid on; axis(0,Ts,-(a+1),(a+1); function slider1_Callback(hObject, eventdata, handles)w=get(hObject,value);set(handles.edit1,string,num2str(w);function sl

23、ider1_CreateFcn(hObject, eventdata, handles)if isequal(get(hObject,BackgroundColor), get(0,defaultUicontrolBackgroundColor)function slider2_Callback(hObject, eventdata, handles)w=get(hObject,value);set(handles.edit2,string,num2str(w);function slider2_CreateFcn(hObject, eventdata, handles)if isequal(get(hObject,BackgroundColor), get(0,defaultUicontrolBackgroundColor) set(hObject,BackgroundColor,.9 .9 .9);endfunction edit1_Callback(hObject, eventdata, handles)v=get(hObject,string); set(handles.slider1,value,str2double(v);function edit1_C

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论