至诚matlab实验报告.docx
《至诚matlab实验报告.docx》由会员分享,可在线阅读,更多相关《至诚matlab实验报告.docx(17页珍藏版)》请在冰豆网上搜索。
至诚matlab实验报告
至诚学院
《MATLAB实践》
课程设计
学生姓名:
学号:
专业班级:
指导教师:
二○一二年四月十四日
目录
1.设计目的…………………………………………………3
2.题目分析…………………………………………………3
3.总体设计…………………………………………………4
4.具体设计…………………………………………………4
5.心得体会…………………………………………………14
6.参考书目…………………………………………………15
1、设计目的
(1)通过MATLAB实践设计的训练,提高学生对已学相关专业知识的掌握和应用水平
(2)培养学生将已学课程基础理论与实践环节实际相结合。
(3)运用MATLAB实现MATLAB的GUI程序设计。
(4)培养学生合理安排实现设计的基本程序流程,利用强大的仿真功能与丰富的工具箱来制作、调试、评价自己设计的作品。
(5)培养学生的工程实践能力,增强学生程序设计能力和解决实际问题的能力。
提高学生实践动手能力,为日后参加工作奠定一定的实践基础。
2、题目分析
学习MATLABGUI程序设计,设计和实现一个音乐键盘仿真系统。
要求:
按照软件工程方法,根据需求进行程序的功能分析和界面设计,给出设计详细说明。
然后按照自己拟定的功能要求进行程序设计和调试。
以下几点是程序的功能,供参考。
1)设计音乐键盘GUI界面,实现单音键盘的发声。
2)实现键盘的双音多频,即每个键盘对应低音频组的一个频率和高音频组的一个频率,实现按键的发出双音。
3)能改变音乐包络形式,实现音型的改变。
4)能够演奏一段音乐。
3、总体设计
4、具体设计
4.1GUI界面设计
(1)Pushbutton36个:
钢琴键盘的仿真设置;
Pushbutton1个:
音区包络复位。
(2)Axes17个:
背景图
(3)EditText1个:
标题
(4)Pop-upMenu1个:
音乐播放区
(5)MenuEditor:
功能模块的选择
设计界面如下:
4.2钢琴键盘
原理:
从小字组到小字一组之间共12键,7个白键,5个黑键,按规定每相邻半音的频率比值为12√2=1.059463,根据这规定,就可以得出钢琴上每一个琴键音的频率。
如与a1右边相邻#a1的频率是440×1.059463=466.16372Hz;再往上,b1的频率是493.088321Hz;c2的频率是523.25099......同理,与a1左边相邻的#g1的频率是440÷1.059463=415.030473Hz。
用CDEFGAG来表示不同的音名,一次唱成do,re,mi,sol,la,si(简谱:
1234567)又称唱名(syllablenames)。
每个唱名并未固定基波频率,当指定乐曲的音调时才知道此时对应的音名,亦即确定了对应的频率值。
使用组建Pushbutton,并且运用其回调函数Callback。
函数代码如下:
k=2.^(1/12);
t00=220.*(k.^0);
n=0:
1/8000:
0.3;
globala0b0c0
o=isempty(a0);
p=isempty(b0);
if(o==1||p==1)
msgbox('请选择音区、包络','oh,MyGod!
','warn')
else
switchb0
case1
x=exp(-2*n);
case2
x=sawtooth(1*pi*n);
otherwise
x=square(1*pi*n);
end
end
if(c0==1)
t0000=x.*sin(t00*2*pi*n);
else
t0000=x.*(sin(t00*2*pi*n)+0.5*sin(t00*4*pi*n)+0.3*sin(t00*6*pi*n));
end
soundsc(t0000)
根据原理回调每个键的程序。
4.3选音区
使用全局变量定义a0,设置在菜单中,根据不同的值设置低音,中音,高音。
functionUntitled_5_Callback(hObject,eventdata,handles)
%hObjecthandletoUntitled_5(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
globala0
a0=50;(低音)
……
globala0
a0=110;(中音)
……
globala0
a0=440;(高音)
菜单中选择如下:
4.4包络选择区
使用全局变量定义b0,设置在菜单中,根据不同的值设置指数包络、三角包络、方波包络。
functionUntitled_9_Callback(hObject,eventdata,handles)
%hObjecthandletoUntitled_9(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
globalb0
b0=1;(指数包络)
……
globalb0
b0=2;(三角包络)
……
globalb0
b0=3;(方波包络)
菜单中选择如下:
当取得b0的之后,进入switch循环判断选择哪个包络。
switchb0
case1
x=exp(-2*t);
case2
x=sawtooth(1*pi*t);
case3
x=square(1*pi*t);
end
4.5音频选择区
使用全局变量定义c0,设置在菜单中,根据不同的值设置单音单频和双音多频。
functionUntitled_13_Callback(hObject,eventdata,handles)
%hObjecthandletoUntitled_13(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
globalc0
c0=1;(单音单频)
……
globalc0
c0=2;(双音多频)
菜单中选择如下:
4.6音乐播放区
利用Pop-upMenu回调函数,播放一闪一闪亮晶晶
k=2.^(1/12);
f00=220.*(k.^3);
n=0:
1/8000:
0.3;
x=exp(-2*n);
f0000=x.*(sin(f00*2*pi*n)+0.5*sin(f00*4*pi*n));
soundsc(f0000);
k=2.^(1/12);
f00=220.*(k.^3);
n=0:
1/8000:
0.3;
x=exp(-2*n);
f0000=x.*(sin(f00*2*pi*n)+0.5*sin(f00*4*pi*n));
soundsc(f0000);
k=2.^(1/12);
f00=220.*(k.^10);
n=0:
1/8000:
0.3;
x=exp(-2*n);
f0000=x.*(sin(f00*2*pi*n)+0.5*sin(f00*4*pi*n));
soundsc(f0000);
k=2.^(1/12);
f00=220.*(k.^10);
n=0:
1/8000:
0.3;
x=exp(-2*n);
f0000=x.*(sin(f00*2*pi*n)+0.5*sin(f00*4*pi*n));
soundsc(f0000);
k=2.^(1/12);
f00=220.*(k.^12);
n=0:
1/8000:
0.3;
x=exp(-2*n);
f0000=x.*(sin(f00*2*pi*n)+0.5*sin(f00*4*pi*n));
soundsc(f0000);
k=2.^(1/12);
f00=220.*(k.^12);
n=0:
1/8000:
0.3;
x=exp(-2*n);
f0000=x.*(sin(f00*2*pi*n)+0.5*sin(f00*4*pi*n));
soundsc(f0000);
k=2.^(1/12);
f00=220.*(k.^10);
n=0:
1/8000:
1;
x=exp(-2*n);
f0000=x.*(sin(f00*2*pi*n)+0.5*sin(f00*4*pi*n));
soundsc(f0000);
k=2.^(1/12);
f00=220.*(k.^8);
n=0:
1/8000:
0.3;
x=exp(-2*n);
f0000=x.*(sin(f00*2*pi*n)+0.5*sin(f00*4*pi*n));
soundsc(f0000);
k=2.^(1/12);
f00=220.*(k.^8);
n=0:
1/8000:
0.3;
x=exp(-2*n);
f0000=x.*(sin(f00*2*pi*n)+0.5*sin(f00*4*pi*n));
soundsc(f0000);
k=2.^(1/12);
f00=220.*(k.^7);
n=0:
1/8000:
0.3;
x=exp(-2*n);
f0000=x.*(sin(f00*2*pi*n)+0.5*sin(f00*4*pi*n));
soundsc(f0000);
k=2.^(1/12);
f00=220.*(k.^7);
n=0:
1/8000:
0.3;
x=exp(-2*n);
f0000=x.*(sin(f00*2*pi*n)+0.5*sin(f00*4*pi*n));
soundsc(f0000);
k=2.^(1/12);
f00=220.*(k.^5);
n=0:
1/8000:
0.3;
x=exp(-2*n);
f0000=x.*(sin(f00*2*pi*n)+0.5*sin(f00*4*pi*n));
soundsc(f0000);
k=2.^(1/12);
f00=220.*(k.^5);
n=0:
1/8000:
0.3;
x=exp(-2*n);
f0000=x.*(sin(f00*2*pi*n)+0.5*sin(f00*4*pi*n));
soundsc(f0000);
k=2.^(1/12);
f00=220.*(k.^3);
n=0:
1/8000:
1;
x=exp(-2*n);
f0000=x.*(sin(f00*2*pi*n)+0.5*sin(f00*4*pi*n));
soundsc(f0000);
k=2.^(1/12);
f00=220.*(k.^10);
n=0:
1/8000:
0.3;
x=exp(-2*n);
f0000=x.*(sin(f00*2*pi*n)+0.5*sin(f00*4*pi*n));
soundsc(f0000);
k=2.^(1/12);
f00=220.*(k.^10);
n=0:
1/8000:
0.3;
x=exp(-2*n);
f0000=x.*(sin(f00*2*pi*n)+0.5*sin(f00*4*pi*n));
soundsc(f0000);
k=2.^(1/12);
f00=220.*(k.^8);
n=0:
1/8000:
0.3;
x=exp(-2*n);
f0000=x.*(sin(f00*2*pi*n)+0.5*sin(f00*4*pi*n));
soundsc(f0000);
k=2.^(1/12);
f00=220.*(k.^8);
n=0:
1/8000:
0.3;
x=exp(-2*n);
f0000=x.*(sin(f00*2*pi*n)+0.5*sin(f00*4*pi*n));
soundsc(f0000);
k=2.^(1/12);
f00=220.*(k.^7);
n=0:
1/8000:
0.3;
x=exp(-2*n);
f0000=x.*(sin(f00*2*pi*n)+0.5*sin(f00*4*pi*n));
soundsc(f0000);
k=2.^(1/12);
f00=220.*(k.^7);
n=0:
1/8000:
0.3;
x=exp(-2*n);
f0000=x.*(sin(f00*2*pi*n)+0.5*sin(f00*4*pi*n));
soundsc(f0000);
k=2.^(1/12);
f00=220.*(k.^5);
n=0:
1/8000:
1;
x=exp(-2*n);
f0000=x.*(sin(f00*2*pi*n)+0.5*sin(f00*4*pi*n));
soundsc(f0000);
k=2.^(1/12);
f00=220.*(k.^10);
n=0:
1/8000:
0.3;
x=exp(-2*n);
f0000=x.*(sin(f00*2*pi*n)+0.5*sin(f00*4*pi*n));
soundsc(f0000);
k=2.^(1/12);
f00=220.*(k.^10);
n=0:
1/8000:
0.3;
x=exp(-2*n);
f0000=x.*(sin(f00*2*pi*n)+0.5*sin(f00*4*pi*n));
soundsc(f0000);
k=2.^(1/12);
f00=220.*(k.^8);
n=0:
1/8000:
0.3;
x=exp(-2*n);
f0000=x.*(sin(f00*2*pi*n)+0.5*sin(f00*4*pi*n));
soundsc(f0000);
k=2.^(1/12);
f00=220.*(k.^8);
n=0:
1/8000:
0.3;
x=exp(-2*n);
f0000=x.*(sin(f00*2*pi*n)+0.5*sin(f00*4*pi*n));
soundsc(f0000);
k=2.^(1/12);
f00=220.*(k.^7);
n=0:
1/8000:
0.3;
x=exp(-2*n);
f0000=x.*(sin(f00*2*pi*n)+0.5*sin(f00*4*pi*n));
soundsc(f0000);
k=2.^(1/12);
f00=220.*(k.^7);
n=0:
1/8000:
0.3;
x=exp(-2*n);
f0000=x.*(sin(f00*2*pi*n)+0.5*sin(f00*4*pi*n));
soundsc(f0000);
k=2.^(1/12);
f00=220.*(k.^5);
n=0:
1/8000:
1;
x=exp(-2*n);
f0000=x.*(sin(f00*2*pi*n)+0.5*sin(f00*4*pi*n));
soundsc(f0000);
4.7音区包络复位区
利用Pushbutton回调函数进行复位。
functionpushbutton41_Callback(hObject,eventdata,handles)
%hObjecthandletopushbutton41(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
clearglobal
复位完后按下音乐键盘会提示重新选择所需的音区、包络、音频。
程序如下:
globala0b0c0
o=isempty(a0);
p=isempty(b0);
if(o==1||p==1)
msgbox('请选择音区、包络','oh,MyGod!
','warn')
4.8背景图
利用axes回调函数
Imshow(’12.jpg’)
5、小结和心得
通过本次的MATLAB实践设计的训练,复习了大量的理论知识,提高了对所学知识的理解,在选题过程中的理论知识复习以及制定设计基本程序流程中都得到很大的能力提高,特别在动手实践过程中,因对GUI界面的不熟悉,导致布局不美观,经过与同学探讨得以解决,在回调函数中,遇到单音单频和双音双频不懂如何选择,只知道用switch或if函数,具体的程序在这块浪费了大量的课上课下时间,后经老师提点得以解决,运用同样的思路比较顺利地完善了包络选择,利用强大的仿真功能与丰富的工具箱来制作、调试、评价自己设计的作品,确实不仅提高了我们的动手能力,还提高了发现问题,思考问题,解决问题的能力,以及与同学互相探讨,沟通的能力,同时也发现了MATLAB这门课原来有很强大的功能,只是平时拘于理论而导致认识不深,本次的实践可谓意义非凡啊!
看看,这是我的小小成果哦!
参考书目:
(五号,宋体加粗)
1、基于MATLAB的信号与系统试教程徐利民舒军等编著清华大学出版社
2、《MATLAB实用教程》郑阿奇电子工业出版社
3、《信号系统-MATLAB综合实验》谷源涛高等教育出版社