至诚matlab实验报告.docx
《至诚matlab实验报告.docx》由会员分享,可在线阅读,更多相关《至诚matlab实验报告.docx(15页珍藏版)》请在冰豆网上搜索。
至诚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