基于MATLAB的數(shù)字電子琴設(shè)計_第1頁
基于MATLAB的數(shù)字電子琴設(shè)計_第2頁
基于MATLAB的數(shù)字電子琴設(shè)計_第3頁
基于MATLAB的數(shù)字電子琴設(shè)計_第4頁
基于MATLAB的數(shù)字電子琴設(shè)計_第5頁
已閱讀5頁,還剩20頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、*實踐教學(xué)* 題 目: 基于MATLAB的數(shù)字電子琴設(shè)計 專業(yè)班級: 姓 名: 學(xué) 號: 指導(dǎo)教師: 成 績: 摘要本次課設(shè)的任務(wù)是基于MATLAB設(shè)計一個數(shù)字電子琴,首先實現(xiàn)數(shù)字信號發(fā)生器的設(shè)計。數(shù)字信號發(fā)生器是一種基于軟硬件實現(xiàn)的波形發(fā)生器,可以實現(xiàn)各種基本波形的產(chǎn)生。在工程的各種復(fù)雜信號是由這些基本信號疊加產(chǎn)生,因此它在工程分析和實驗教學(xué)中有著廣泛的應(yīng)用,可用MATLAB實現(xiàn)。MATLAB是一個數(shù)據(jù)分析和處理功能十分強大的工程實用軟件,它的數(shù)據(jù)采集工具箱為實現(xiàn)數(shù)據(jù)的輸入和輸出提供了十分方便的函數(shù)和命令,在數(shù)字信號處理方面方便實用。本文首先詳細介紹了基于MATLAB的數(shù)字發(fā)生器的設(shè)計過程,

2、實現(xiàn)了簡單波形(正弦波、方波、三角波、鋸齒波、白噪聲、脈沖、階躍)信號的具體實現(xiàn)方法。其次介紹了利用該數(shù)字信號發(fā)生器產(chǎn)生的正弦波信號和聲卡設(shè)計的簡易電子琴。關(guān)鍵詞:MATLAB;數(shù)字信號發(fā)生器;簡易電子琴 目錄前言1一、數(shù)字信號發(fā)生器21.1圖形用戶界面的簡介21.2設(shè)計流程21.3波形實現(xiàn)的基本原理4二、電子琴的實現(xiàn)62.1簡易數(shù)字電子琴的簡介62.2實現(xiàn)原理6三、基于MATLAB的仿真及結(jié)果分析83.1 GUI界面83.2編寫M文件9總結(jié)19參考文獻20附錄21致謝34前言MATLAB(矩陣實驗室)是Matrix Laboratory的縮寫,是一種用于算法開發(fā)、數(shù)據(jù)可視化、數(shù)據(jù)分析以及數(shù)值

3、計算的高級計算機語言和交互式環(huán)境。MATLAB可以進行矩陣運算、繪制函數(shù)圖像和數(shù)據(jù)、實現(xiàn)算法、創(chuàng)建用戶界面、連接其他編程語言的程序等,主要應(yīng)用于工程計算、控制設(shè)計、信號處理與通訊、圖像處理、信號檢測、金融建模設(shè)計與分析等領(lǐng)域。Matlab環(huán)境下的圖形用戶界面(GUI)是由窗口、光標(biāo)、按鍵、菜單、文字說明等對象構(gòu)成的一個用戶界面,可在圖形用戶界面內(nèi)根據(jù)需要搭建圖形,并對控件的回調(diào)函數(shù)進行編寫,完成最完整的GUI界面編輯即可運行。本文主要利用MATLAB的圖形用戶界面設(shè)計數(shù)字信號發(fā)生器,在數(shù)字信號發(fā)生的基礎(chǔ)上實現(xiàn)簡易電子琴的設(shè)計。信號發(fā)生器又稱信號源或振蕩器,是一種能提供各種頻率、波形和輸出電平電

4、信號的儀器,數(shù)字信號發(fā)生器只是信號發(fā)生器的一種,在生產(chǎn)實踐和科技領(lǐng)域中有著廣泛的應(yīng)用。信號發(fā)生器按信號波形可分為正弦信號、函數(shù)(波形)信號、脈沖信號和隨機信號發(fā)生器等四大類。能夠產(chǎn)生多種波形,如正弦波、三角波、鋸齒波、矩形波(含方波)、階躍信號、脈沖信號的電路被稱為函數(shù)信號發(fā)生器。本文設(shè)計了一種基于MATLAB圖形用戶界面的可以產(chǎn)生正弦波、方波、三角波、鋸齒波、白噪聲、脈沖信號、階躍信號的虛擬數(shù)字信號發(fā)生器。一、數(shù)字信號發(fā)生器1.1圖形用戶界面的簡介圖形用戶界面即Graphical User Interface,簡稱 GUI,又稱圖形用戶接口。Matlab環(huán)境下的圖形用戶界面(GUI)是由窗口

5、、光標(biāo)、按鍵、菜單、文字說明等對象構(gòu)成的一個用戶界面。用戶通過一定的方法(如鼠標(biāo)或鍵盤)選擇、激活這些圖形對象,使計算機產(chǎn)生某種動作或變化,比如實現(xiàn)計算、繪圖等。MATLAB的用戶,在指令窗中運行demo 打開那圖形界面后,只要用鼠標(biāo)進行選擇和點擊, 就可產(chǎn)生豐富的內(nèi)容。對圖形用戶界面的操作一般有兩個部分,首先按照設(shè)計的原理、要求,根據(jù)需要選擇適當(dāng)?shù)膱D形對象搭建合理的GUI界面;然后對每個控件的回調(diào)函數(shù)在M文件內(nèi)進行編寫,使搭建的GUI界面能夠運行。數(shù)字信號發(fā)生器的設(shè)計所使用的工具即GUI界面,用到的圖形對象有pushbutton、Aexs、Slider、Static Text、Edit Te

6、xt。模擬了七種信號:正弦波、方波、三角波、階躍信號、斜波信號、鋸齒波以及白噪聲信號。具體的實現(xiàn)原理如下。1.2設(shè)計流程根據(jù)設(shè)計的要求分析出數(shù)字信號發(fā)生器的GUI界面構(gòu)圖,然后在MATLAB的workplace界面中輸入guide,打開GUI界面。在GUI界面中搭建好具體的數(shù)字信號發(fā)生器的界面,并對每個控件的回調(diào)函數(shù)進行編寫、保存M文件。運行,若結(jié)果正確,再同一個GUI界面中搭建好電子琴的GUI界面,利用數(shù)字信號發(fā)生器產(chǎn)生的正弦波,對電子琴每個控件的回調(diào)函數(shù)進行編寫、保存M文件。運行,觀察仿真結(jié)果。若數(shù)字信號發(fā)生器的仿真結(jié)果不正確,檢查控件的回調(diào)函數(shù),修改并保存M文件,再次運行觀察仿真結(jié)果。具

7、體的設(shè)計流程圖如下:1.3波形實現(xiàn)的基本原理1.3.1正弦波的實現(xiàn)正弦信號的數(shù)學(xué)表達式如下: (1.1)其中:為幅值;為頻率;為相位。在MATLAB中,由于處理對象均是離散的數(shù)字信號,將時間變量離散化并構(gòu)造成一個一維數(shù)組用 其中:為采樣頻率。但的值不能太大,否則波形顯示會很慢。相應(yīng)的正弦波信號的數(shù)字信號表達式為 (1.2)幅值、頻率、相位參數(shù)可以由用戶界面上的滑動條或編輯框輸入。在分別得到與的離散值后,用plot作圖函數(shù)即可獲得相應(yīng)波形顯示。1.3.2方波信號的實現(xiàn)方波信號的數(shù)學(xué)表達式為 (1.3)該式可直接生成一個周期為,峰值為,占空比為的方波信號,的默認值為50%。在MATLAB中可得到幅

8、值、頻率、相位可調(diào)的方波信號函數(shù) (1.4)1.3.3三角波信號的實現(xiàn)在MATLAB中,可以用函數(shù)直接生成一個三角波信號, 該函數(shù)可生成一個周期為,峰值為,最大值出現(xiàn)在位置的三角波。利用該函數(shù),可得到幅值、頻率、相位可調(diào)的三角波信號函數(shù) (1.5) 1.3.4鋸齒波信號的實現(xiàn)由于鋸齒波信號與三角波信號相似,所以將函數(shù)中的參數(shù)值設(shè)為1,可得到鋸齒波。該函數(shù)得到的幅值、頻率、相位可調(diào)的鋸齒波信號函數(shù) (1.6)1.3.5脈沖信號的實現(xiàn)由于脈沖信號與方波信號波形相似,用方波信號函數(shù)函數(shù)為基礎(chǔ),將其函數(shù)值加1,可得到最大值為2,最小值為0的脈沖波形,原函數(shù)的參數(shù)可用來調(diào)節(jié)脈沖的寬度。用該函數(shù),得到幅值

9、、頻率、相位可調(diào)的脈沖信號函數(shù)。 (1.7)1.3.6階躍信號的實現(xiàn)由于階躍信號比較特殊,可用函數(shù)直接表示,其函數(shù)表達式為 (1.8)1.3.7白噪聲信號的實現(xiàn)白噪聲信號是指功率譜密度在整個頻域內(nèi)均勻分布的噪聲。白噪聲的實現(xiàn)可借助于MATLAB中的函數(shù),它的功能是產(chǎn)生一個均值為0,標(biāo)準(zhǔn)差為1的隨機數(shù)列或矩陣函數(shù),可得到一個均值為0,標(biāo)準(zhǔn)差為的維的隨機矩陣。二、電子琴的實現(xiàn)2.1簡易數(shù)字電子琴的簡介在設(shè)計界面中包含A、B、C、D、E、F、G共7個琴鍵,由于低音頻率區(qū)分不是很明顯,此次課設(shè)選擇的是中音頻率,其中每個按鍵對應(yīng)一個頻率的正弦波信號,各按鍵對應(yīng)的信號頻率分別為392、440、494、52

10、3、587、659、698、784Hz。當(dāng)用鼠標(biāo)按下相應(yīng)的鍵時發(fā)聲,松開時發(fā)聲停止,然后將數(shù)字信號寫入聲卡的緩沖區(qū),由聲卡播放出相應(yīng)的聲音。當(dāng)用鼠標(biāo)按下對應(yīng)的鍵時即可發(fā)出相應(yīng)頻率的聲音。2.2實現(xiàn)原理電子琴的實現(xiàn)基于之前設(shè)計的數(shù)字信號發(fā)生器,選擇數(shù)字發(fā)生器產(chǎn)生的正弦波信號作為發(fā)聲及顯示波形,由回調(diào)函數(shù)和數(shù)字信號發(fā)生器結(jié)合起來,實現(xiàn)對波形的調(diào)用。每個鍵對應(yīng)一定的頻率,在各個鍵的回調(diào)函數(shù)中設(shè)置好頻率及頻譜顯示,實現(xiàn)每個鍵有自己特定頻率的功能,為了使最終仿真結(jié)果更好,選擇音階中音調(diào)高的頻率作為調(diào)試頻率。當(dāng)鍵按下的時候,首先由相應(yīng)的鍵和數(shù)字信號關(guān)聯(lián)起來,隨后將數(shù)字信號寫入聲卡的緩沖區(qū),由聲卡發(fā)出相應(yīng)頻

11、率的聲音,并顯示波形及對應(yīng)頻率的頻譜圖,當(dāng)鍵松開時聲音即停止。此次電子琴的設(shè)計實現(xiàn)了正弦波顯示、頻譜顯示以及發(fā)聲的功能,從而實現(xiàn)虛擬電子琴的模仿功能。具體的實現(xiàn)流程圖如下:開始打開MATLAB搭建電子琴的GUI界面 執(zhí)行并觀察仿真結(jié)果結(jié)束 圖2.1 電子琴的實現(xiàn)流程圖三、基于MATLAB的仿真及結(jié)果分析3.1 GUI界面 3.1.1搭建數(shù)字信號發(fā)生器的GUI界面搭建的GUI界面如下圖3.1:圖3.1 數(shù)字信號發(fā)生器的GUI界面3.1.2電子琴的GUI界面。搭建的數(shù)字電子琴GUI界面如圖3.2所示:圖3.2 數(shù)字電子琴的GUI界面G該界面主要由琴鍵組成,每個按鍵對應(yīng)一定的頻率,模擬電子琴的發(fā)聲功

12、能,它的波形顯示及頻譜圖在數(shù)字信號發(fā)生器中。3.2編寫M文件3.2.1數(shù)字信號發(fā)生器的M文件(1)正弦信號的實現(xiàn)由正弦信號的數(shù)學(xué)表達式可知在程序中用到的具體表達式為 (3.1)將時間變量離散化并構(gòu)造成一個一維數(shù)組,要求采樣頻率不能太大,否則波形顯示會很慢(2)方波信號的實現(xiàn)用函數(shù)直接生成一個方波信號,程序中使用的具體函數(shù)為 (3.2)(3)三角波的實現(xiàn) 函數(shù)直接生成一個三角波信號,程序中用到的具體實現(xiàn)函數(shù)為 (3.3) (4)鋸齒波信號的實現(xiàn)具體的函數(shù)實現(xiàn)形式為 (3.4)(5)脈沖信號的實現(xiàn)抽樣頻率為8000,時間范圍為0,1,坐標(biāo)抽為0,a+1。得到的幅值、頻率、相位可調(diào)的脈沖信號函數(shù)。具

13、體的函數(shù) (3.5) (6)階躍信號的實現(xiàn)取1,A取1,t取0,2,時間間隔為/100。階躍信號的函數(shù)表達式為 (3.6)(7)白噪聲信號的實現(xiàn)白噪聲是指功率譜密度在整個頻域內(nèi)均勻分布的噪聲。白噪聲的實現(xiàn)可借于MATLAB中的函數(shù),產(chǎn)生一個均值為0,標(biāo)準(zhǔn)差為1的隨機數(shù)列或矩陣該函數(shù)可得到一個均值為0,標(biāo)準(zhǔn)差為的維的隨機矩陣。 (3.7)3.3仿真結(jié)果數(shù)字信號發(fā)生器的仿真結(jié)果如下:(1) 正弦波的仿真結(jié)果 圖3.3 數(shù)字信號發(fā)生器的正弦波波形(2) 方波信號的仿真結(jié)果 圖3.4 方波信號的波形(3) 三角波信號仿真結(jié)果 圖3.5 三角波信號的波形(4) 階躍信號仿真結(jié)果圖3.6 階躍信號的仿真結(jié)

14、果 (5)斜波信號 圖3.7 斜波信號的仿真結(jié)果(6)鋸齒波信號的仿真結(jié)果圖3.8 階躍信號的仿真結(jié)果(7)白噪聲仿真結(jié)果(1)按鍵A的仿真結(jié)果 圖3.10 按下A鍵,電子琴演奏時的效果(2)按鍵B的仿真結(jié)果圖3.11 按下B鍵,電子琴演奏時的效果(3)按鍵C的仿真結(jié)果圖3.12 按下C鍵,電子琴演奏時的效果總結(jié)本次的課程設(shè)計的任務(wù)是基于MATLAB設(shè)計一個數(shù)字電子琴,首先設(shè)計一個數(shù)字信號發(fā)生器。數(shù)字信號發(fā)生器和電子琴的搭建都是在GUI界面中進行搭建的,在GUI界面中搭建好具體的數(shù)字信號發(fā)生器的界面,并對每個控件的回調(diào)函數(shù)進行編寫、保存M文件。運行,若結(jié)果正確,再同一個GUI界面中搭建好電子琴

15、的GUI界面,利用數(shù)字信號發(fā)生器產(chǎn)生的正弦波,對電子琴每個控件的回調(diào)函數(shù)進行編寫、保存M文件搭建完成之后對各個控件進行回調(diào)函數(shù)的編寫。如果數(shù)字信號發(fā)生器的運行結(jié)果正確,則繼續(xù)搭建電子琴否則修改直到正確為止。在本次的課程設(shè)計中,確實遇到了很多問題,但通過大家的幫助和自己的努力,最終實現(xiàn)所有的設(shè)計要求。本次課程設(shè)計也許還存在著一些不足,在以后學(xué)習(xí)生活中會更加努力,爭取做得更好。 參考文獻1 丁玉美. 數(shù)字信號處理M. 西安電子科技大學(xué)出版社,2003,3.2 朱冰蓮. 數(shù)字信號處理M. 電子工業(yè)出版社,2003,7.3 程佩青.數(shù)字信號處理教程(第二版)M.北京:清華大學(xué)出版社,2001.4 韓紀(jì)

16、慶,張磊,鄭鐵然.語音信號處理M.北京:清華大學(xué)出版社,2004.5 王濟, 胡曉. MATLAB 在振動信號處理中的應(yīng)用M . 北京: 中國水利水電出版社: 知識產(chǎn)權(quán)出版社, 2006.6 周祥才, 楊錚. 基于MATLAB的信號采樣與重構(gòu)的實現(xiàn) J .實驗技術(shù)與管理, 2007, 247 張志涌等精通MATLAB M北京:北京航空航天大學(xué)出版社,20038 車子萍. 基于Matlab的虛擬信號發(fā)生器設(shè)計J. 電腦學(xué)習(xí), 2010.1.9 李益華. MATLAB輔助現(xiàn)代工程數(shù)字信號處理(第2版). 西安:西安電子科技大學(xué)出版社,201010 楊潔芳. 基于MATLAB與聲卡的低頻信號發(fā)生器的

17、設(shè)計與實現(xiàn). 電腦學(xué)習(xí),2006附錄:function pushbutton16_Callback(hObject, eventdata, handles)Fs=8000; t=(0:2000)/Fs;pit=2*pi*t;a1=523;y=sin(a1*pit);axes (handles.axes1);plot(t,y);title(時域波形)xlabel(t)ylabel(y)axis(0,.01,-2,2)axes (handles.axes2);f=fft(y,1024);f1=fftshift(f);w1=513:1024;w=4000*(w1-512)/512;F=abs(f1(

18、513:1024);plot(w,F);title(頻譜圖)xlabel(w)ylabel(F(w)sound(y);function pushbutton24_Callback(hObject, eventdata, handles)Fs=8000; t=(0:2000)/Fs;pit=2*pi*t;a2=587;y=sin(a2*pit);axes (handles.axes1);plot(t,y);title(時域波形)xlabel(t)ylabel(y)axis(0,.01,-2,2)axes (handles.axes2);f=fft(y,1024);f1=fftshift(f);w

19、1=513:1024;w=4000*(w1-512)/512;F=abs(f1(513:1024);plot(w,F);title(頻譜圖)xlabel(w)ylabel(F(w)sound(y);function pushbutton25_Callback(hObject, eventdata, handles)Fs=8000; t=(0:2000)/Fs;pit=2*pi*t;a3=659;y=sin(a3*pit);axes (handles.axes1);plot(t,y);title(時域波形)xlabel(t)ylabel(y)axis(0,.01,-2,2)axes (handl

20、es.axes2);f=fft(y,1024);f1=fftshift(f);w1=513:1024;w=4000*(w1-512)/512;F=abs(f1(513:1024);plot(w,F);title(頻譜圖)xlabel(w)ylabel(F(w)sound(y);function pushbutton26_Callback(hObject, eventdata, handles)Fs=8000; t=(0:2000)/Fs;pit=2*pi*t;a4=698;y=sin(a4*pit);axes (handles.axes1);plot(t,y);title(時域波形)xlabe

21、l(t)ylabel(y)axis(0,.01,-2,2)axes (handles.axes2);faxes (handles.axes1);plot(t,y);title(時域波形)xlabel(t)ylabel(y)axis(0,.01,-2,2)axes (handles.axes2);f=fft=0:1/fs:1.0; y=a*sin(2*pi*(f*t+q/360); axes (handles.axes1);plot(t,y); title(時域波形);xlabel(t);ylabel(y);grid on; axis(0,.01,-2,2);allback(hObject, e

22、ventdata, handles)t=(0:pi/100:2*pi);t0=1;A=1;y=0*(tt0);end t=0:1/fs:1.0; y=randn(size(t);title(時域波形);plot(t,y); title(時域波形);xlabel(t);ylabel(y); grid on; axis(0,Ts,-(a+1),(a+1); function slider1_Callback(hObject, eventdata, handles)w=get(hObject,value);set(handles.edit1,string,num2str(w);function sl

23、ider1_CreateFcn(hObject, eventdata, handles)if isequal(get(hObject,BackgroundColor), get(0,defaultUicontrolBackgroundColor)function slider2_Callback(hObject, eventdata, handles)w=get(hObject,value);set(handles.edit2,string,num2str(w);function slider2_CreateFcn(hObject, eventdata, handles)if isequal(get(hObject,BackgroundColor), get(0,defaultUicontrolBackgroundColor) set(hObject,BackgroundColor,.9 .9 .9);endfunction edit1_Callback(hObject, eventdata, handles)v=get(hObject,string); set(handles.slider1,value,str2double(v);function edit1_C

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論