基于MATLAB的数字电子琴设计Word文件下载.docx

上传人:b****4 文档编号:17741435 上传时间:2022-12-09 格式:DOCX 页数:20 大小:304.07KB
下载 相关 举报
基于MATLAB的数字电子琴设计Word文件下载.docx_第1页
第1页 / 共20页
基于MATLAB的数字电子琴设计Word文件下载.docx_第2页
第2页 / 共20页
基于MATLAB的数字电子琴设计Word文件下载.docx_第3页
第3页 / 共20页
基于MATLAB的数字电子琴设计Word文件下载.docx_第4页
第4页 / 共20页
基于MATLAB的数字电子琴设计Word文件下载.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

基于MATLAB的数字电子琴设计Word文件下载.docx

《基于MATLAB的数字电子琴设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于MATLAB的数字电子琴设计Word文件下载.docx(20页珍藏版)》请在冰豆网上搜索。

基于MATLAB的数字电子琴设计Word文件下载.docx

能够产生多种波形,如正弦波、三角波、锯齿波、矩形波(含方波)、阶跃信号、脉冲信号的电路被称为函数信号发生器。

本文设计了一种基于MATLAB图形用户界面的可以产生正弦波、方波、三角波、锯齿波、白噪声、脉冲信号、阶跃信号的虚拟数字信号发生器。

一、数字信号发生器

1.1图形用户界面的简介

图形用户界面即GraphicalUserInterface,简称GUI,又称图形用户接口。

Matlab环境下的图形用户界面(GUI)是由窗口、光标、按键、菜单、文字说明等对象构成的一个用户界面。

用户通过一定的方法(如鼠标或键盘)选择、激活这些图形对象,使计算机产生某种动作或变化,比如实现计算、绘图等。

MATLAB的用户,在指令窗中运行demo打开那图形界面后,只要用鼠标进行选择和点击,就可产生丰富的内容。

对图形用户界面的操作一般有两个部分,首先按照设计的原理、要求,根据需要选择适当的图形对象搭建合理的GUI界面;

然后对每个控件的回调函数在M文件内进行编写,使搭建的GUI界面能够运行。

数字信号发生器的设计所使用的工具即GUI界面,用到的图形对象有pushbutton、Aexs、Slider、StaticText、EditText。

模拟了七种信号:

正弦波、方波、三角波、阶跃信号、斜波信号、锯齿波以及白噪声信号。

具体的实现原理如下。

1.2设计流程

根据设计的要求分析出数字信号发生器的GUI界面构图,然后在MATLAB的workplace界面中输入guide,打开GUI界面。

在GUI界面中搭建好具体的数字信号发生器的界面,并对每个控件的回调函数进行编写、保存M文件。

运行,若结果正确,再同一个GUI界面中搭建好电子琴的GUI界面,利用数字信号发生器产生的正弦波,对电子琴每个控件的回调函数进行编写、保存M文件。

运行,观察仿真结果。

若数字信号发生器的仿真结果不正确,检查控件的回调函数,修改并保存M文件,再次运行观察仿真结果。

具体的设计流程图如下:

1.3波形实现的基本原理

1.3.1正弦波的实现

正弦信号的数学表达式如下:

(1.1)

其中:

为幅值;

为频率;

为相位。

在MATLAB中,由于处理对象均是离散的数字信号,将时间变量离散化并构造成一个一维数组用

其中:

为采样频率。

的值不能太大,否则波形显示会很慢。

相应的正弦波信号的数字信号表达式为

(1.2)

幅值、频率、相位参数可以由用户界面上的滑动条或编辑框输入。

在分别得到

的离散值后,用plot作图函数即可获得相应波形显示。

1.3.2方波信号的实现

方波信号的数学表达式为

(1.3)

该式可直接生成一个周期为

,峰值为

,占空比为

的方波信号,

的默认值为50%。

在MATLAB中可得到幅值、频率、相位可调的方波信号函数

(1.4)

1.3.3三角波信号的实现

在MATLAB中,可以用函数

直接生成一个三角波信号,该函数可生成一个周期为

,最大值出现在

位置的三角波。

利用该函数,可得到幅值、频率、相位可调的三角波信号函数

(1.5)

1.3.4锯齿波信号的实现

由于锯齿波信号与三角波信号相似,所以将

函数中的

参数值设为1,可得到锯齿波。

该函数得到的幅值、频率、相位可调的锯齿波信号函数

(1.6)

1.3.5脉冲信号的实现

由于脉冲信号与方波信号波形相似,用方波信号函数

函数为基础,将其函数值加1,可得到最大值为2,最小值为0的脉冲波形,原函数的

参数可用来调节脉冲的宽度。

用该函数,得到幅值、频率、相位可调的脉冲信号函数

(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、523、587、659、698、784Hz。

当用鼠标按下相应的键时发声,松开时发声停止,然后将数字信号写入声卡的缓冲区,由声卡播放出相应的声音。

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

2.2实现原理

电子琴的实现基于之前设计的数字信号发生器,选择数字发生器产生的正弦波信号作为发声及显示波形,由回调函数和数字信号发生器结合起来,实现对波形的调用。

每个键对应一定的频率,在各个键的回调函数中设置好频率及频谱显示,实现每个键有自己特定频率的功能,为了使最终仿真结果更好,选择音阶中音调高的频率作为调试频率。

当键按下的时候,首先由相应的键和数字信号关联起来,随后将数字信号写入声卡的缓冲区,由声卡发出相应频率的声音,并显示波形及对应频率的频谱图,当键松开时声音即停止。

此次电子琴的设计实现了正弦波显示、频谱显示以及发声的功能,从而实现虚拟电子琴的模仿功能。

具体的实现流程图如下:

图2.1电子琴的实现流程图

三、基于MATLAB的仿真及结果分析

3.1GUI界面

3.1.1搭建数字信号发生器的GUI界面

搭建的GUI界面如下图3.1:

图3.1数字信号发生器的GUI界面

3.1.2电子琴的GUI界面

搭建的数字电子琴GUI界面如图3.2所示:

图3.2数字电子琴的GUI界面

G该界面主要由琴键组成,每个按键对应一定的频率,模拟电子琴的发声功能,它的波形显示及频谱图在数字信号发生器中。

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]。

得到的幅值、频率、相位可调的脉冲信号函数。

具体的函数

(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阶跃信号的仿真结果

(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界面中搭建好电子琴的GUI界面,利用数字信号发生器产生的正弦波,对电子琴每个控件的回调函数进行编写、保存M文件搭建完成之后对各个控件进行回调函数的编写。

如果数字信号发生器的运行结果正确,则继续搭建电子琴否则修改直到正确为止。

在本次的课程设计中,确实遇到了很多问题,但通过大家的帮助和自己的努力,最终实现所有的设计要求。

本次课程设计也许还存在着一些不足,在以后学习生活中会更加努力,争取做得更好。

参考文献

[1]丁玉美.数字信号处理[M].西安电子科技大学出版社,2003,3.

[2]朱冰莲.数字信号处理[M].电子工业出版社,2003,7.

[3]程佩青.数字信号处理教程(第二版)[M].北京:

清华大学出版社,2001.

[4]韩纪庆,张磊,郑铁然.语音信号处理[M].北京:

清华大学出版社,2004.

[5]王济,胡晓.MATLAB在振动信号处理中的应用[M].北京:

中国水利水电出版社:

知识产权出版社,2006.

[6]周祥才,杨铮.基于MATLAB的信号采样与重构的实现[J].实验技术与管理,2007,24

[7]张志涌等.精通MATLAB[M].北京:

北京航空航天大学出版社,2003.

[8]车子萍.基于Matlab的虚拟信号发生器设计[J].电脑学习,2010.1.

[9]李益华.MATLAB辅助现代工程数字信号处理(第2版).西安:

西安电子科技大学出版社,2010

[10]杨洁芳.基于MATLAB与声卡的低频信号发生器的设计与实现.电脑学习,2006

附录:

functionpushbutton16_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(513:

1024));

plot(w,F);

频谱图'

w'

F(w)'

sound(y);

functionpushbutton24_Callback(hObject,eventdata,handles)

a2=587;

y=sin(a2*pit);

functionpushbutton25_Callback(hObject,eventdata,handles)

a3=659;

y=sin(a3*pit);

functionpushbutton26_Callback(hObject,eventdata,handles)

a4=698;

y=sin(a4*pit);

f

f=ff

t=0:

1/fs:

1.0;

y=a*sin(2*pi*(f*t+q/360));

);

gridon;

axis([0,.01,-2,2]);

allback(hObject,eventdata,handles)

pi/100:

2*pi);

t0=1;

A=1;

y=0*(t<

t0)+A*(t>

t0);

end

y=randn(size(t));

axis([0,Ts,-(a+1),(a+1)]);

functionslider1_Callback(hObject,eventdata,handles)

w=get(hObject,'

value'

set(handles.edit1,'

string'

num2str(w));

functionslider1_CreateFcn(hObject,eventdata,handles)

ifisequal(get(hObject,'

BackgroundColor'

),get(0,'

defaultUicontrolBackgroundColor'

))

functionslider2_Callback(hObject,eventdata,handles)

set(handles.edit2,'

functionslider2_CreateFcn(hObject,eventdata,handles)

set(hObject,'

[.9.9.9]);

end

functionedit1_Callback(hObject,eventdata,handles)

v=get(hObject,'

set(handles.slider1,'

str2double(v));

functionedit1_CreateFcn(hObject,eventdata,handles)

ifispc&

&

isequal(get(hObject,'

))

functionedit3_Callback(hObject,eventdata,handles)

set(handles.slider3,'

functionedit3_CreateFcn(hObject,eventdata,handles)

get(0,'

'

white'

致谢

本次课设,我遇到了很多问题,首先感谢我的课程设计指导教师老师在这段时间一直给我的支持与鼓励。

认真负责的监督我们课程设计的进度,耐心的指导我们使我们能够按时的完成任务。

同时还要感谢在设计过程中同学们尤其是同组成员给给了我很大的帮助,对我课设过程中不明白的问题给予了即使的、耐心的帮助,让我对此次课设涉及的知识有了更加深刻的把握。

他们提出了许多宝贵的建议使我们的设计能得到更好的完善,也加快设计的进程。

还有感谢学校为我们提供的良好实验环境以及充足的实验设备,为我们的设计和调试提供了很大的方便。

在这段时间学到了很多,虽然由于自身的不足没有能够为系统提出更好的解决方案。

但这对我来说绝对是一个非常宝贵的历练。

从中我切身体会到了理论和现实的差距,只有真正动手去做才能发现问题。

同时,小组成员相互商讨解决方案,发现设计中的不足之处,使错误得到了即使改正,在此衷心地感谢老师以及这几周的殷切指导以及同学们提出诸多宝贵意见真诚地道一声,谢谢!

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

当前位置:首页 > 高等教育 > 研究生入学考试

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

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