1、至诚matlab实验报告 至诚学院 MATLAB 实践 课程设计学生姓名: 学 号: 专业班级: 指导教师: 二一二 年 四月十四日目 录1.设计目的32.题目分析33.总体设计44.具体设计45.心得体会146.参考书目151、 设计目的(1)通过MATLAB实践设计的训练,提高学生对已学相关专业知识的掌握和应用水平(2)培养学生将已学课程基础理论与实践环节实际相结合。(3)运用MATLAB实现MATLAB的GUI程序设计。(4)培养学生合理安排实现设计的基本程序流程,利用强大的仿真功能与丰富的工具箱来制作、调试、评价自己设计的作品。(5)培养学生的工程实践能力,增强学生程序设计能力和解决实
2、际问题的能力。提高学生实践动手能力,为日后参加工作奠定一定的实践基础。2、题目分析学习MATLAB GUI程序设计,设计和实现一个音乐键盘仿真系统。要求:按照软件工程方法,根据需求进行程序的功能分析和界面设计,给出设计详细说明。然后按照自己拟定的功能要求进行程序设计和调试。 以下几点是程序的功能,供参考。 1)设计音乐键盘GUI界面,实现单音键盘的发声。 2)实现键盘的双音多频,即每个键盘对应低音频组的一个频率和高音频组的一个频率,实现按键的发出双音。 3)能改变音乐包络形式,实现音型的改变。 4)能够演奏一段音乐。3、总体设计4、具体设计4.1 GUI界面设计(1)Pushbutton 36
3、个:钢琴键盘的仿真设置;Pushbutton 1个:音区包络复位。(2)Axes 17个:背景图(3)Edit Text 1个:标题(4)Pop-up Menu 1个:音乐播放区(5)Menu Editor:功能模块的选择设计界面如下:4.2钢琴键盘原理:从小字组到小字一组之间共12键,7个白键,5个黑键,按规定每相邻半音的频率比值为122=1.059463,根据这规定,就可以得出钢琴上每一个琴键音的频率。如与a1右边相邻a1的频率是4401.059463466.16372Hz;再往上,b1的频率是493.088321Hz;c2的频率是523.25099.同理,与a1左边相邻的g1的频率是44
4、01.059463415.030473Hz。用CDEFGAG来表示不同的音名,一次唱成do,re,mi,sol,la,si(简谱:1234567)又称唱名(syllable names)。每个唱名并未固定基波频率,当指定乐曲的音调时才知道此时对应的音名,亦即确定了对应的频率值。使用组建Pushbutton,并且运用其回调函数Callback。函数代码如下:k=2.(1/12);t00=220.*(k.0);n=0:1/8000:0.3;global a0 b0 c0o=isempty(a0);p=isempty(b0);if (o=1|p=1) msgbox(请选择音区、包络,oh,My Go
5、d!,warn)elseswitch b0 case 1 x=exp(-2*n); case 2 x=sawtooth(1*pi*n); otherwise x=square(1*pi*n);end endif(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,设置在菜单中,根据不同的值设置低音,中音,高音。function Untitled_5_
6、Callback(hObject, eventdata, handles)% hObject handle to Untitled_5 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)global a0a0=50;(低音)global a0a0=110;(中音)global a0a0=440;(高音)菜单中选择如下:4.4包络选择区使用全局变量定义b0,设置在菜单中,根据不
7、同的值设置指数包络、三角包络、方波包络。function Untitled_9_Callback(hObject, eventdata, handles)% hObject handle to Untitled_9 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)global b0b0=1;(指数包络)global b0b0=2;(三角包络)global b0b0=3;(方
8、波包络)菜单中选择如下:当取得b0的之后,进入switch循环判断选择哪个包络。 switch b0 case 1 x=exp(-2*t); case 2 x=sawtooth(1*pi*t); case 3 x=square(1*pi*t); end4.5音频选择区使用全局变量定义c0,设置在菜单中,根据不同的值设置单音单频和双音多频。function Untitled_13_Callback(hObject, eventdata, handles)% hObject handle to Untitled_13 (see GCBO)% eventdata reserved - to be d
9、efined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)global c0c0=1;(单音单频)global c0c0=2;(双音多频)菜单中选择如下:4.6音乐播放区利用Pop-up Menu回调函数,播放一闪一闪亮晶晶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/
10、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
11、)+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/
12、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);sounds
13、c(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.*(
14、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
15、.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
16、*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*
17、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
18、);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
19、.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
20、;x=exp(-2*n);f0000=x.*(sin(f00*2*pi*n)+0.5*sin(f00*4*pi*n);soundsc(f0000);4.7音区包络复位区利用Pushbutton回调函数进行复位。function pushbutton41_Callback(hObject, eventdata, handles)% hObject handle to pushbutton41 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with ha
21、ndles and user data (see GUIDATA)clear global复位完后按下音乐键盘会提示重新选择所需的音区、包络、音频。程序如下:global a0 b0 c0o=isempty(a0);p=isempty(b0);if (o=1|p=1) msgbox(请选择音区、包络,oh,My God!,warn)4.8 背景图利用axes回调函数Imshow(12.jpg)5、小结和心得通过本次的MATLAB实践设计的训练,复习了大量的理论知识,提高了对所学知识的理解,在选题过程中的理论知识复习以及制定设计基本程序流程中都得到很大的能力提高,特别在动手实践过程中,因对GUI
22、界面的不熟悉,导致布局不美观,经过与同学探讨得以解决,在回调函数中,遇到单音单频和双音双频不懂如何选择,只知道用switch 或if函数,具体的程序在这块浪费了大量的课上课下时间,后经老师提点得以解决,运用同样的思路比较顺利地完善了包络选择,利用强大的仿真功能与丰富的工具箱来制作、调试、评价自己设计的作品,确实不仅提高了我们的动手能力,还提高了发现问题,思考问题,解决问题的能力,以及与同学互相探讨,沟通的能力,同时也发现了MATLAB这门课原来有很强大的功能,只是平时拘于理论而导致认识不深,本次的实践可谓意义非凡啊!看看,这是我的小小成果哦!参考书目:(五号,宋体加粗)1、基于MATLAB的信号与系统试教程 徐利民 舒军等编著 清华大学出版社2、MATLAB实用教程 郑阿奇 电子工业出版社3、信号系统-MATLAB综合实验 谷源涛 高等教育出版社
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1