2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩13頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p>  《 MATLAB 實(shí)踐 》</p><p><b>  課程設(shè)計(jì)</b></p><p>  目 錄</p><p>  1.設(shè)計(jì)目的…………………………………………………3</p><p>  2.題目分析…………………………………………………3</p><p&g

2、t;  3.總體設(shè)計(jì)…………………………………………………4</p><p>  4.具體設(shè)計(jì)…………………………………………………4</p><p>  5.結(jié)果分析…………………………………………………15</p><p>  6.心得體會…………………………………………………15</p><p><b>  設(shè)計(jì)目的:<

3、/b></p><p>  運(yùn)用MATLAB實(shí)現(xiàn)MATLAB的GUI程序設(shè)計(jì)。</p><p><b>  2、題目分析:</b></p><p><b>  課程設(shè)計(jì)題目:</b></p><p>  MATLAB GUI的音樂鍵盤仿真 </p><p>  課程設(shè)計(jì)

4、的基本要求:</p><p>  1)熟悉和掌握MATLAB 程序設(shè)計(jì)方法。</p><p>  2)掌握MATLAB GUI 程序設(shè)計(jì)。</p><p>  3)學(xué)習(xí)音樂合成基本知識。</p><p><b>  設(shè)計(jì)分析:</b></p><p>  這次使用的設(shè)計(jì)軟件是MATLAB的GUI模

5、塊,要設(shè)計(jì)一個音樂鍵盤要知道一個最簡單的鍵盤本身要有36個發(fā)音鍵,既21個音階和15個輔音階。于是就要在界面上畫出36個pushbutton鍵,再根據(jù)其他要求的功能設(shè)計(jì)出其他相應(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ì)界面根據(jù)功能編寫相應(yīng)的回調(diào)函數(shù)。</p><p><b>  課程設(shè)計(jì)的內(nèi)容:</b></p><p>  學(xué)習(xí)MATLAB GUI程序設(shè)計(jì),設(shè)計(jì)和實(shí)現(xiàn)一個音樂鍵盤仿真系統(tǒng)。要求:按照軟件工程方法,根據(jù)需求進(jìn)行程序的功能分析和界面設(shè)計(jì),給出設(shè)計(jì)詳細(xì)說明。然后按照自己擬定的功能要求進(jìn)行程序設(shè)計(jì)和調(diào)試。</p><p>  1)設(shè)計(jì)音

7、樂鍵盤GUI界面,實(shí)現(xiàn)單音鍵盤的發(fā)聲。</p><p>  2)實(shí)現(xiàn)鍵盤的雙音多頻,即每個鍵盤對應(yīng)低音頻組的一個頻率和高音頻組的一個頻率,實(shí)現(xiàn)按鍵的發(fā)出雙音。</p><p>  3)能改變音樂包絡(luò)形式,實(shí)現(xiàn)音型的改變。</p><p>  4)能夠演奏一段音樂。</p><p>  5)改變鍵盤的音色,給基音加上泛音序列,模擬不同的樂器演奏

8、。</p><p>  6)選作:根據(jù)節(jié)奏節(jié)拍,根據(jù)簡譜自動演奏一段音樂。</p><p><b>  3、總體設(shè)計(jì)</b></p><p>  其中琴鍵區(qū)域?qū)崿F(xiàn)按鍵發(fā)聲,可用鼠標(biāo)點(diǎn)擊,也可以用鍵盤實(shí)現(xiàn);顯示屏區(qū)域?qū)崿F(xiàn)聲音波形的實(shí)時顯示;控制區(qū)域?qū)崿F(xiàn)對整個系統(tǒng)的控制,包括音樂播放、暫停、停止,視屏播放,樂器切換,節(jié)拍切換和諧波切換。</p

9、><p><b>  4、具體設(shè)計(jì)</b></p><p><b>  外板設(shè)計(jì)圖如下:</b></p><p>  4.1 琴鍵區(qū)域設(shè)計(jì)</p><p><b>  界面設(shè)計(jì)</b></p><p><b>  單個按鍵函數(shù)設(shè)計(jì)</b>

10、;</p><p>  該琴鍵設(shè)計(jì)為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>  實(shí)現(xiàn)結(jié)果:</b></p><p>  可以根據(jù)按下不同的鍵,發(fā)出不同音調(diào)的聲音,且沒有失真。</p><p>  4.2顯示屏區(qū)域設(shè)計(jì)</p><p

20、><b> ?。?)界面設(shè)計(jì)</b></p><p><b>  (2)函數(shù)設(shè)計(jì)</b></p><p>  改模塊主要功能是用來實(shí)現(xiàn)聲音波形實(shí)時顯示,因此只需要要在每個按鍵函數(shù)里面添加波形顯示函數(shù)即可:</p><p>  plot(n,ft);</p><p>  axis tight;&

21、lt;/p><p><b>  (3)功能實(shí)現(xiàn)</b></p><p>  鋼琴,1/2節(jié)拍,單音波形</p><p>  敲擊,1/8節(jié)拍,2次諧波波形</p><p>  4.3 節(jié)拍切換設(shè)計(jì)</p><p><b> ?。?)界面設(shè)計(jì)</b></p><

22、p><b> ?。?)函數(shù)設(shè)計(jì)</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>  (3)功能實(shí)現(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è)計(jì)</p><p><b> ?。?)界面設(shè)計(jì)</b></p><p>

28、;<b> ?。?)函數(shù)設(shè)計(jì)</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)功能實(shí)現(xiàn)</b></p><p>  ‘duo’音,單音諧波:</p&

31、gt;<p>  ‘duo’音,1次諧波:</p><p>  ‘duo’音,2次諧波:</p><p>  4.5 音樂播放設(shè)計(jì)</p><p><b> ?。?)界面設(shè)計(jì)</b></p><p><b> ?。?)函數(shù)設(shè)計(jì)</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>  (3)功能實(shí)現(xiàn)</b></p><p>  4.6 電影播放設(shè)計(jì)</p><

37、;p><b> ?。?)界面設(shè)計(jì)</b></p><p><b> ?。?)函數(shù)設(shè)計(jì)</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)功能實(shí)現(xiàn)</b></p><p>  4.7 音量控制設(shè)計(jì)</p><p>&

39、lt;b>  (1)界面設(shè)計(jì)</b></p><p><b> ?。?)函數(shù)設(shè)計(jì)</b></p><p>  voice=get(handles.voice,'Value')</p><p>  sound(ft*voice,8000);</p><p><b>  (3)功能

40、實(shí)現(xiàn)</b></p><p><b>  能實(shí)現(xiàn)對音量的調(diào)節(jié)</b></p><p>  4.8鍵盤控制發(fā)音設(shè)計(jì)</p><p><b> ?。?)界面設(shè)計(jì)</b></p><p><b> ?。?)函數(shù)設(shè)計(jì)</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)功能實(shí)現(xiàn)</b></p><p>  能通過按下對應(yīng)鍵盤,發(fā)出對應(yīng)聲音。如按下C鍵,發(fā)“duo”音</p><p>  4.9界面美觀設(shè)計(jì):選自己的圖片作為背景</p><p><b> ?。?)界面設(shè)計(jì)

54、</b></p><p><b> ?。?)函數(shù)設(shè)計(jì)</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> ?。?)功能實(shí)現(xiàn)</b></p><p>  4.10樂譜播放設(shè)計(jì)</p><p><b> ?。?)界面設(shè)

57、計(jì)</b></p><p><b>  (2)函數(shù)設(shè)計(jì)</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> ?。?)功能實(shí)現(xiàn)<

61、/b></p><p>  播放事先編輯好的樂譜</p><p><b>  5、結(jié)果分析</b></p><p>  基本上要求的內(nèi)容都能實(shí)現(xiàn),但是也純在一些欠缺:</p><p>  (1)使用鍵盤發(fā)聲時如果彈得太快,函數(shù)執(zhí)行的速度跟不上容易形成音階與節(jié)拍對不上位,在用其演奏歌曲時有點(diǎn)欠缺。</p>

62、<p> ?。?)在播放視頻時無法將食品中的聲音一起播出,我有上網(wǎng)查過好像MATLAB現(xiàn)在還無法實(shí)現(xiàn)播放視頻連帶視頻中的聲音。</p><p> ?。?)樂器切換功能做的不夠完善,一方面也是因?yàn)樽约簩σ袈芍R的欠缺。</p><p>  在今后的學(xué)習(xí)過程中,希望能通過自己的努力去完成修補(bǔ)這些欠缺的點(diǎn)。</p><p><b>  6、心得體會

63、</b></p><p>  說實(shí)在的這次的MATLAB實(shí)驗(yàn)的題目比較令人感興趣,無論是做PS,音樂鍵盤還是數(shù)據(jù)庫都讓人比較有興趣去嘗試。跟以往很學(xué)術(shù)性的實(shí)驗(yàn)課設(shè)題目大大不同,做完實(shí)驗(yàn)每個人都可以利用自己的作品要么玩弄自己的照片,要嘛編歌或者自彈自唱等!模板的設(shè)計(jì)多種做樣格局自己的審美可以設(shè)計(jì)不同的界面。查數(shù)據(jù)、編程序的過程也可以讓自己學(xué)到許多知識同時也培養(yǎng)了自己的動手能力,總之,通過這次試驗(yàn)和同學(xué)的

64、交流學(xué)到了很多東西,培養(yǎng)了動手實(shí)驗(yàn)的興趣也很有成就感。</p><p>  通過對電子琴此程序的研究與設(shè)計(jì),對我們以后論文的書寫打下了堅(jiān)實(shí)的基礎(chǔ),同時也使思想提前進(jìn)入了對論文的思考,這些無疑是給我們提供了一個很好的平臺。</p><p><b>  參考書目:</b></p><p>  MATLAB實(shí)用教程(第二版)電子工業(yè)出版社</p

65、><p>  《信號與系統(tǒng)—MATLAB綜合實(shí)驗(yàn)》 谷源濤 高等教育出版社</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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論