版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 《 MATLAB 實踐 》</p><p><b> 課程設(shè)計</b></p><p> 目 錄</p><p> 1.設(shè)計目的…………………………………………………3</p><p> 2.題目分析…………………………………………………3</p><p&g
2、t; 3.總體設(shè)計…………………………………………………4</p><p> 4.具體設(shè)計…………………………………………………4</p><p> 5.結(jié)果分析…………………………………………………15</p><p> 6.心得體會…………………………………………………15</p><p><b> 設(shè)計目的:<
3、/b></p><p> 運用MATLAB實現(xiàn)MATLAB的GUI程序設(shè)計。</p><p><b> 2、題目分析:</b></p><p><b> 課程設(shè)計題目:</b></p><p> MATLAB GUI的音樂鍵盤仿真 </p><p> 課程設(shè)計
4、的基本要求:</p><p> 1)熟悉和掌握MATLAB 程序設(shè)計方法。</p><p> 2)掌握MATLAB GUI 程序設(shè)計。</p><p> 3)學(xué)習(xí)音樂合成基本知識。</p><p><b> 設(shè)計分析:</b></p><p> 這次使用的設(shè)計軟件是MATLAB的GUI模
5、塊,要設(shè)計一個音樂鍵盤要知道一個最簡單的鍵盤本身要有36個發(fā)音鍵,既21個音階和15個輔音階。于是就要在界面上畫出36個pushbutton鍵,再根據(jù)其他要求的功能設(shè)計出其他相應(yīng)的模塊。</p><p> 模擬鍵盤發(fā)音是使用音頻函數(shù)soundsc將不同頻率的函數(shù)以聲音的模式表現(xiàn)出來,而每個音階相差頻率f=440*2^2/12;音階與相應(yīng)的輔音階相差頻率f=440*2^1/12。有了音樂合成的這些基本知識后便可根
6、據(jù)自己需要設(shè)計界面根據(jù)功能編寫相應(yīng)的回調(diào)函數(shù)。</p><p><b> 課程設(shè)計的內(nèi)容:</b></p><p> 學(xué)習(xí)MATLAB GUI程序設(shè)計,設(shè)計和實現(xiàn)一個音樂鍵盤仿真系統(tǒng)。要求:按照軟件工程方法,根據(jù)需求進行程序的功能分析和界面設(shè)計,給出設(shè)計詳細說明。然后按照自己擬定的功能要求進行程序設(shè)計和調(diào)試。</p><p> 1)設(shè)計音
7、樂鍵盤GUI界面,實現(xiàn)單音鍵盤的發(fā)聲。</p><p> 2)實現(xiàn)鍵盤的雙音多頻,即每個鍵盤對應(yīng)低音頻組的一個頻率和高音頻組的一個頻率,實現(xiàn)按鍵的發(fā)出雙音。</p><p> 3)能改變音樂包絡(luò)形式,實現(xiàn)音型的改變。</p><p> 4)能夠演奏一段音樂。</p><p> 5)改變鍵盤的音色,給基音加上泛音序列,模擬不同的樂器演奏
8、。</p><p> 6)選作:根據(jù)節(jié)奏節(jié)拍,根據(jù)簡譜自動演奏一段音樂。</p><p><b> 3、總體設(shè)計</b></p><p> 其中琴鍵區(qū)域?qū)崿F(xiàn)按鍵發(fā)聲,可用鼠標點擊,也可以用鍵盤實現(xiàn);顯示屏區(qū)域?qū)崿F(xiàn)聲音波形的實時顯示;控制區(qū)域?qū)崿F(xiàn)對整個系統(tǒng)的控制,包括音樂播放、暫停、停止,視屏播放,樂器切換,節(jié)拍切換和諧波切換。</p
9、><p><b> 4、具體設(shè)計</b></p><p><b> 外板設(shè)計圖如下:</b></p><p> 4.1 琴鍵區(qū)域設(shè)計</p><p><b> 界面設(shè)計</b></p><p><b> 單個按鍵函數(shù)設(shè)計</b>
10、;</p><p> 該琴鍵設(shè)計為C調(diào),1對應(yīng)頻率為261.63Hz,相鄰兩鍵為一個半音,頻率比為:2^1/12,因此后面頻率類推,如2對應(yīng)293.67Hz。</p><p><b> 單個按鍵函數(shù)如下:</b></p><p> function pushbutton1_Callback(hObject, eventdata, hand
11、les)</p><p><b> f=261.63;</b></p><p> if get(handles.radiobutton3,'Value')==1;</p><p><b> N=8000;</b></p><p><b> end;</b>
12、;</p><p> if get(handles.radiobutton4,'Value')==1;</p><p><b> N=2000;</b></p><p><b> end;</b></p><p> if get(handles.radiobutton5,
13、39;Value')==1;</p><p><b> N=25000;</b></p><p><b> end;</b></p><p> if get(handles.radiobutton9,'Value')==1;</p><p><b> T=1
14、;</b></p><p><b> end;</b></p><p> if get(handles.radiobutton10,'Value')==1;</p><p><b> T=0.5;</b></p><p><b> end;</b&
15、gt;</p><p> if get(handles.radiobutton11,'Value')==1;</p><p><b> T=0.25;</b></p><p><b> end;</b></p><p> n=0:1/N:T;</p><p
16、> x=exp(-2*n);</p><p> if get(handles.radiobutton14,'Value')==1;</p><p> ft=x.*sin(f*2*pi*n);</p><p><b> end</b></p><p> if get(handles.radi
17、obutton13,'Value')==1;</p><p> ft=x.*sin(f*2*pi*n)+0.2*sin(f*2*2*pi*n);</p><p><b> end</b></p><p> if get(handles.radiobutton12,'Value')==1;</p>
18、<p> ft=x.*sin(f*2*pi*n)+0.2*sin(f*2*2*pi*n)+0.3*sin(f*3*2*pi*n);</p><p><b> end</b></p><p> voice=get(handles.voice,'Value')</p><p> sound(ft*voice,8
19、000);</p><p> plot(n,ft);</p><p> axis tight;</p><p><b> 實現(xiàn)結(jié)果:</b></p><p> 可以根據(jù)按下不同的鍵,發(fā)出不同音調(diào)的聲音,且沒有失真。</p><p> 4.2顯示屏區(qū)域設(shè)計</p><p
20、><b> ?。?)界面設(shè)計</b></p><p><b> ?。?)函數(shù)設(shè)計</b></p><p> 改模塊主要功能是用來實現(xiàn)聲音波形實時顯示,因此只需要要在每個按鍵函數(shù)里面添加波形顯示函數(shù)即可:</p><p> plot(n,ft);</p><p> axis tight;&
21、lt;/p><p><b> ?。?)功能實現(xiàn)</b></p><p> 鋼琴,1/2節(jié)拍,單音波形</p><p> 敲擊,1/8節(jié)拍,2次諧波波形</p><p> 4.3 節(jié)拍切換設(shè)計</p><p><b> ?。?)界面設(shè)計</b></p><
22、p><b> ?。?)函數(shù)設(shè)計</b></p><p> if get(handles.radiobutton3,'Value')==1;</p><p><b> N=8000;</b></p><p><b> end;</b></p><p>
23、 if get(handles.radiobutton4,'Value')==1;</p><p><b> N=2000;</b></p><p><b> end;</b></p><p> if get(handles.radiobutton5,'Value')==1;<
24、/p><p><b> N=25000;</b></p><p><b> end;</b></p><p> if get(handles.radiobutton9,'Value')==1;</p><p><b> T=1;</b></p>
25、<p><b> end;</b></p><p> if get(handles.radiobutton10,'Value')==1;</p><p><b> T=0.5;</b></p><p><b> end;</b></p><p&g
26、t; if get(handles.radiobutton11,'Value')==1;</p><p><b> T=0.25;</b></p><p><b> end;</b></p><p> n=0:1/N:T;</p><p><b> ?。?)功能實現(xiàn)
27、</b></p><p> ‘duo’音,1/2節(jié)拍:</p><p> ‘duo’音,1/4節(jié)拍:</p><p> ‘duo’音,1/8節(jié)拍:</p><p> 4.4 諧波切換設(shè)計</p><p><b> (1)界面設(shè)計</b></p><p>
28、;<b> ?。?)函數(shù)設(shè)計</b></p><p> if get(handles.radiobutton14,'Value')==1;</p><p> ft=x.*sin(f*2*pi*n);</p><p><b> end</b></p><p> if get(h
29、andles.radiobutton13,'Value')==1;</p><p> ft=x.*sin(f*2*pi*n)+0.2*sin(f*2*2*pi*n);</p><p><b> end</b></p><p> if get(handles.radiobutton12,'Value')==1
30、;</p><p> ft=x.*sin(f*2*pi*n)+0.2*sin(f*2*2*pi*n)+0.3*sin(f*3*2*pi*n);</p><p><b> end</b></p><p><b> (3)功能實現(xiàn)</b></p><p> ‘duo’音,單音諧波:</p&
31、gt;<p> ‘duo’音,1次諧波:</p><p> ‘duo’音,2次諧波:</p><p> 4.5 音樂播放設(shè)計</p><p><b> ?。?)界面設(shè)計</b></p><p><b> ?。?)函數(shù)設(shè)計</b></p><p> Mus
32、ic:選取音樂</p><p> function pushbutton35_Callback(hObject, eventdata, handles)</p><p> global yinyue;</p><p> [FileName,PathName]=uigetfile('*.wav','Music Play');<
33、;/p><p> [y,fs,bits]=wavread(FileName);</p><p> yinyue=audioplayer(y,fs)</p><p> voice=get(handles.voice,'Value')</p><p> play(yinyue);</p><p> P
34、auses:播放暫停</p><p> function pushbutton38_Callback(hObject, eventdata, handles)</p><p> global yinyue;</p><p> pause(yinyue);</p><p><b> Stop:播放停止</b><
35、;/p><p> function pushbutton37_Callback(hObject, eventdata, handles)</p><p> global yinyue;</p><p> stop(yinyue);</p><p> Resume:播放恢復(fù)</p><p> function pu
36、shbutton40_Callback(hObject, eventdata, handles)</p><p> global yinyue;</p><p> resume(yinyue);</p><p><b> ?。?)功能實現(xiàn)</b></p><p> 4.6 電影播放設(shè)計</p><
37、;p><b> ?。?)界面設(shè)計</b></p><p><b> ?。?)函數(shù)設(shè)計</b></p><p> function pushbutton48_Callback(hObject, eventdata, handles)</p><p> [name,path]=uigetfile('*.*
38、39;,'');</p><p> file=sprintf('%s%s',path,name);</p><p> mplay(file,24);</p><p><b> (3)功能實現(xiàn)</b></p><p> 4.7 音量控制設(shè)計</p><p>&
39、lt;b> ?。?)界面設(shè)計</b></p><p><b> ?。?)函數(shù)設(shè)計</b></p><p> voice=get(handles.voice,'Value')</p><p> sound(ft*voice,8000);</p><p><b> ?。?)功能
40、實現(xiàn)</b></p><p><b> 能實現(xiàn)對音量的調(diào)節(jié)</b></p><p> 4.8鍵盤控制發(fā)音設(shè)計</p><p><b> ?。?)界面設(shè)計</b></p><p><b> ?。?)函數(shù)設(shè)計</b></p><p> fu
41、nction figure1_KeyPressFcn(hObject, eventdata, handles)</p><p> if get(gcf,'CurrentCharacter')==49, %Èç¹û°´ÏµÄÊÇ1</p><p>
42、 pushbutton10_Callback(hObject,eventdata,handles);end</p><p> if get(gcf,'CurrentCharacter')==50, %Èç¹û°´ÏµÄÊÇ2</p><p> p
43、ushbutton15_Callback(hObject,eventdata,handles);end</p><p> if get(gcf,'CurrentCharacter')==51, %Èç¹û°´ÏµÄÊÇ3</p><p> pus
44、hbutton16_Callback(hObject,eventdata,handles);end</p><p> if get(gcf,'CurrentCharacter')==52, %Èç¹û°´ÏµÄÊÇ4</p><p> pushb
45、utton17_Callback(hObject,eventdata,handles);end</p><p> if get(gcf,'CurrentCharacter')==53, %Èç¹û°´ÏµÄÊÇ5</p><p> pushbu
46、tton18_Callback(hObject,eventdata,handles);end</p><p> if get(gcf,'CurrentCharacter')=='C', %Èç¹û°´ÏµÄÊÇC</p><p>
47、 pushbutton1_Callback(hObject,eventdata,handles); end</p><p> if get(gcf,'CurrentCharacter')==68, %Èç¹û°´ÏµÄÊÇD</p><p>
48、pushbutton2_Callback(hObject,eventdata,handles);end</p><p> if get(gcf,'CurrentCharacter')==69, %Èç¹û°´ÏµÄÊÇE</p><p> pus
49、hbutton3_Callback(hObject,eventdata,handles);end</p><p> if get(gcf,'CurrentCharacter')==70, %Èç¹û°´ÏµÄÊÇF</p><p> pushbu
50、tton4_Callback(hObject,eventdata,handles);end</p><p> if get(gcf,'CurrentCharacter')==71, %Èç¹û°´ÏµÄÊÇG</p><p> pushbutto
51、n5_Callback(hObject,eventdata,handles);end</p><p> if get(gcf,'CurrentCharacter')==65, %Èç¹û°´ÏµÄÊÇA</p><p> pushbutton6_
52、Callback(hObject,eventdata,handles);end</p><p> if get(gcf,'CurrentCharacter')==66, %Èç¹û°´ÏµÄÊÇB</p><p> pushbutton7_Cal
53、lback(hObject,eventdata,handles);end</p><p><b> (3)功能實現(xiàn)</b></p><p> 能通過按下對應(yīng)鍵盤,發(fā)出對應(yīng)聲音。如按下C鍵,發(fā)“duo”音</p><p> 4.9界面美觀設(shè)計:選自己的圖片作為背景</p><p><b> ?。?)界面設(shè)計
54、</b></p><p><b> ?。?)函數(shù)設(shè)計</b></p><p> function figure1_CreateFcn(hObject, eventdata, handles)</p><p> ha=axes('units','normalized','position
55、39;,[0.583 0.01 0.417 0.984]);</p><p> uistack(ha,'down')</p><p> II=imread('2.bmp');</p><p><b> image(II)</b></p><p> colormap gray<
56、/p><p> set(ha,'handlevisibility','off','visible','off');</p><p><b> (3)功能實現(xiàn)</b></p><p> 4.10樂譜播放設(shè)計</p><p><b> ?。?)界面設(shè)
57、計</b></p><p><b> (2)函數(shù)設(shè)計</b></p><p> function qinpu(a,b) </p><p> f=261.6*2^(a/12);</p><p> n=0:1/8000:b*0.5;</p><p> x=exp(-2*n);
58、</p><p> ft=x.*sin(f*2*pi*n)+0.2*sin(f*2*2*pi*n)+0.3*sin(f*3*2*pi*n);</p><p> soundsc(ft);</p><p> plot(n,ft);</p><p> axis tight;</p><p> function pu
59、shbutton49_Callback(hObject, eventdata, handles)</p><p> [name,path]=uigetfile('*.*',''); </p><p> file=sprintf('%s%s',path,name);</p><p> de=importdata(f
60、ile);</p><p> for k=1:length(de)</p><p> qinpu(de(k),de(k+length(de)));</p><p> pause(0.5)</p><p><b> end</b></p><p><b> (3)功能實現(xiàn)<
61、/b></p><p> 播放事先編輯好的樂譜</p><p><b> 5、結(jié)果分析</b></p><p> 基本上要求的內(nèi)容都能實現(xiàn),但是也純在一些欠缺:</p><p> (1)使用鍵盤發(fā)聲時如果彈得太快,函數(shù)執(zhí)行的速度跟不上容易形成音階與節(jié)拍對不上位,在用其演奏歌曲時有點欠缺。</p>
62、<p> (2)在播放視頻時無法將食品中的聲音一起播出,我有上網(wǎng)查過好像MATLAB現(xiàn)在還無法實現(xiàn)播放視頻連帶視頻中的聲音。</p><p> ?。?)樂器切換功能做的不夠完善,一方面也是因為自己對音律知識的欠缺。</p><p> 在今后的學(xué)習(xí)過程中,希望能通過自己的努力去完成修補這些欠缺的點。</p><p><b> 6、心得體會
63、</b></p><p> 說實在的這次的MATLAB實驗的題目比較令人感興趣,無論是做PS,音樂鍵盤還是數(shù)據(jù)庫都讓人比較有興趣去嘗試。跟以往很學(xué)術(shù)性的實驗課設(shè)題目大大不同,做完實驗每個人都可以利用自己的作品要么玩弄自己的照片,要嘛編歌或者自彈自唱等!模板的設(shè)計多種做樣格局自己的審美可以設(shè)計不同的界面。查數(shù)據(jù)、編程序的過程也可以讓自己學(xué)到許多知識同時也培養(yǎng)了自己的動手能力,總之,通過這次試驗和同學(xué)的
64、交流學(xué)到了很多東西,培養(yǎng)了動手實驗的興趣也很有成就感。</p><p> 通過對電子琴此程序的研究與設(shè)計,對我們以后論文的書寫打下了堅實的基礎(chǔ),同時也使思想提前進入了對論文的思考,這些無疑是給我們提供了一個很好的平臺。</p><p><b> 參考書目:</b></p><p> MATLAB實用教程(第二版)電子工業(yè)出版社</p
65、><p> 《信號與系統(tǒng)—MATLAB綜合實驗》 谷源濤 高等教育出版社</p><p> 張志涌 等 精通MATLAB【M】6.5版 .北京:北京航空航天大學(xué)出版社,2003,3</p><p> 董霖. MATLAB使用詳解——基礎(chǔ)、開發(fā)及工程應(yīng)用 北京:電子工業(yè)出版社,2009.1</p><p> 蔡旭輝,劉衛(wèi)國,蔡立燕. MA
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- matlab課程設(shè)計--gui圖像處理
- matlab課程設(shè)計報告---基于matlab_gui_的濾波器設(shè)計軟件
- matlab課程設(shè)計---matlab程序應(yīng)用與仿真
- matlab與通信仿真課程設(shè)計報告
- matlab與仿真系統(tǒng)課程設(shè)計報告
- matlab課程設(shè)計---利用matlab仿真軟件進行繪圖
- matlab課程設(shè)計報告
- matlab課程設(shè)計報告
- 課程設(shè)計報告——matlab瑞利衰落信道仿真
- 課程設(shè)計報告——matlab瑞利衰落信道仿真
- matlab課程設(shè)計--matlab的繪圖
- matlab課程設(shè)計報告 (2)
- 《matlab課程設(shè)計》報告-matlab的基本運算與繪圖
- matlab課程設(shè)計--matlab矩陣操作設(shè)計
- 自激振蕩系統(tǒng)matlab仿真課程設(shè)計
- matlab課程設(shè)計
- matlab課程設(shè)計
- matlab課程設(shè)計--ssb信號的仿真分析
- 基于matlab的am調(diào)制仿真課程設(shè)計
- 基于matlab的pcm系統(tǒng)仿真課程設(shè)計
評論
0/150
提交評論