基于MATLAB軟件的音樂合成_第1頁
基于MATLAB軟件的音樂合成_第2頁
基于MATLAB軟件的音樂合成_第3頁
基于MATLAB軟件的音樂合成_第4頁
基于MATLAB軟件的音樂合成_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

河北經(jīng)貿(mào)大學(xué)畢業(yè)論文河北經(jīng)貿(mào)大學(xué)畢業(yè)論文基于MATLAB軟件的音樂合成專業(yè)名稱:電子信息工程班級:學(xué)生姓名:指導(dǎo)老師:完成時間:2015年5月④在設(shè)計GUI界面時的布局、各種參數(shù)設(shè)置以及各個模塊演示編程的問題。本設(shè)計使用的是MATLAB2013a軟件,設(shè)計所實現(xiàn)的功能都在GUI圖形應(yīng)用界面體現(xiàn)出來,便于研究與操作。通過本設(shè)計讓用戶更直觀地了解簡單音樂處理的幾種方法,并在各種相應(yīng)處理前后的對比中更容易接受與其對應(yīng)的方法及特點,學(xué)會并掌握MATLAB信號處理的編程以及MATLAB下GUI的設(shè)計。2MATLAB軟件的簡介MATLAB(matrix&laboratory)矩陣實驗室,作為一款擁有算法開發(fā)、數(shù)據(jù)分析及數(shù)值計算、創(chuàng)建用戶界面等強(qiáng)大功能的仿真軟件,被美國MathWorks公司發(fā)行,將眾多功能合成在一個便于操作的視窗交互化環(huán)境中。在科學(xué)研究、工程計算、信號處理、圖像處理等方面得到廣泛應(yīng)用。而在本設(shè)計中用到的是MATLAB2013a時頻域分析、音樂合成及GUI圖形應(yīng)用界面等信號處理方面的功能。2.1MATLAB的發(fā)展史1980年,身為美國NewMexico大學(xué)計算機(jī)系系主任的CleveMoler為了讓學(xué)生方便地調(diào)用EISPACK和LINPACK,編寫了它們的接口程序,命名為MATLAB。在此之后,國內(nèi)外許多大學(xué)將MATLAB作為教學(xué)輔助軟件廣泛使用。CleveMoler和JohnLittle在1984年創(chuàng)建了MathWorks并推出了MATLABDOS版,即第一版,其核心是用C語言編寫。自此之后,MATLAB不斷發(fā)展,功能愈加強(qiáng)大。MATLAB5.x版本于20世紀(jì)90年代末期推出,可以處理更多的數(shù)據(jù)結(jié)構(gòu)。2000年,MATLAB6.0被發(fā)行,其操作界面擁有了程序、歷史信息及變量管理三個窗口。并且替換為FFTW系統(tǒng),使得計算速度更佳。2001年,MATLAB6.1及Simulink4.0問世和2002年,公司推出MATLAB6.5,其功能更加強(qiáng)大。2004年發(fā)行了MATLAB7.0版本,在編程環(huán)境、數(shù)據(jù)可視化、計算和文件I/O等方面的功能進(jìn)行了改善。隨后幾年,公司陸續(xù)推出了MATLAB7.1~7.14版本,不斷優(yōu)化性能。近幾年公司推出了MATLAB2012b(8.0版)及MATLAB2013a版本,有了很大改變,最明顯的是其桌面,在主窗口中,工具條取代了菜單和工具欄。重新設(shè)計了幫助文檔,在搜索、瀏覽及篩選功能上有進(jìn)一步的提高。到目前為止,還有MATLAB2014a和MATLAB2014b版本。在本設(shè)計中用到的是MATLAB2013a版本,此版本較之前版本添加了許多新函數(shù),功能也更加強(qiáng)大,使用更加方便快捷。2.2MATLAB的系統(tǒng)構(gòu)成MATLAB軟件可以說是由以下五大部分組成,分別是:軟件的開發(fā)環(huán)境、數(shù)學(xué)函數(shù)庫、軟件的編程語言、圖形處理系統(tǒng)以及該軟件的應(yīng)用接口(API)。MATLAB開發(fā)環(huán)境是一個方便用戶使用的集成工作空間,擁有M文件的編程與調(diào)試環(huán)境,許可用戶進(jìn)行數(shù)據(jù)的輸入與輸出。MATLAB軟件的數(shù)學(xué)函數(shù)庫擁有全面的計算算法,可以說從加減法最基本的算法到傅里葉變換等復(fù)雜算法都涵括在內(nèi)。所以說,MATLAB能夠解決很多復(fù)雜的數(shù)據(jù)計算與工程設(shè)計仿真運(yùn)算。MATLAB語言的語法特征與C++語言非常相似,是在矩陣與數(shù)組的基礎(chǔ)上進(jìn)行設(shè)計的語言。操作者能夠在命令窗口輸入命令語句后就可執(zhí)行該命令,也能夠先編寫好程序,保存為.M文件后再執(zhí)行程序。MATLAB的圖形處理系統(tǒng)的功能應(yīng)用主要體現(xiàn)在GUI圖形用戶應(yīng)用界面,能夠使向量與矩陣完成圖形化顯示,滿足用戶的特殊要求。MATLAB軟件應(yīng)用程序接口主要完成的功能是能讓MATLAB語言與其他編程語言進(jìn)行交互,例如在MATLAB中調(diào)用C語言程序等。3MATLAB音樂合成的原理在本設(shè)計中,通過MATLAB軟件對音樂信號頻率與時長的分析與組合來完成音樂的簡單合成。所以在設(shè)計過程中,根據(jù)音調(diào)用頻率來體現(xiàn),節(jié)拍用時長來體現(xiàn)的原理,用MATLAB軟件進(jìn)行編程來存儲音樂的頻率與時長,通過將正弦波形的不同疊加與包絡(luò)設(shè)置來仿真實現(xiàn)音樂的音調(diào)與節(jié)奏的變化。3.1所涉及的樂理知識簡述要想實現(xiàn)音樂的合成,就要了解合成音樂所需要的相關(guān)數(shù)據(jù),也就是音樂的三個特性:音調(diào)、響度、音色。音樂的音調(diào)就是音的高低,需要考慮影響音調(diào)的主要因素即聲波的頻率。音樂的響度是音的強(qiáng)弱,需要考慮影響響度的主要因素即聲波的振動幅度。而音樂音色的變化是由音樂波形中諧波的作用產(chǎn)生的。3.1.1音調(diào)與唱名在日常生活中,讀音樂曲譜時發(fā)出的1(do)、2(re)、3(mi)、4(fa)這些就稱作為唱名。這些唱名分別代表著相應(yīng)的基波頻率。但是只有當(dāng)確定了音樂的音調(diào)之后才能確切的知道各個唱名所真正代表的基波頻率值。例如樂譜為1=C,代表著音調(diào)為C調(diào)則“1(do)”的基波頻率是261.6Hz,若樂譜為1=E則“1(do)”頻率是239.6Hz,樂譜為1=G則“1(do)”的頻率是392.1Hz,“3(mi)”的頻率是493.9Hz。3.1.2音色與諧波音色的變化是由音樂波形中諧波的作用產(chǎn)生的。在音樂的專業(yè)中所指的“泛音”指的就是諧波,在得知音調(diào)之后,只能確定音樂信號的基波頻率值,但是諧波頻率無法確定。不同的樂器會發(fā)出不同的音色,這是由于不同的諧波成分和頻譜結(jié)構(gòu)導(dǎo)致的。并且不同的樂器所發(fā)出的的音樂包絡(luò)波形是不同的,為了便于用程序來表示波形包絡(luò),通常把音樂的復(fù)雜包絡(luò)函數(shù)近似直線化,所以音樂波形的包絡(luò)通常都是折線型。3.1.3十二平均律十二平均律,在音樂領(lǐng)域中作為一種音樂定律的方法,指將音樂的八度按照頻率等比例地分成十二份。由于“五度相生律”和“十二平均律”發(fā)音非常相似而且十二平均律能夠解決轉(zhuǎn)調(diào)問題,所以,它被廣泛應(yīng)用在鍵盤樂器與交響樂隊中。根據(jù)國際標(biāo)準(zhǔn)音的規(guī)定,相鄰的半音之間的頻率之比定為2^(1/12)≈1.059,作為最常見的應(yīng)用十二平均律而制成的樂器就是鋼琴,鋼琴的琴鍵a1的頻率規(guī)定為440Hz,那么就可以根據(jù)比值得出鋼琴其他的琴鍵音對應(yīng)的頻率。例如與a1左邊相鄰#g1頻率是440/1.059=415.03Hz,同理,與a1右邊相鄰的半音#a1的頻率是466.16Hz,也可以算出不同音調(diào)下“1(do)”的對應(yīng)的基波頻率,即C:261.63Hz,F(xiàn):349.23Hz和G:392Hz等。3.2傅里葉變換與頻譜分析合成一段簡單的音樂,需要綜合考慮音樂的三要素,也就是必須知道該段音樂的基波與諧波頻率成分以及包絡(luò)的形狀特征。為了便于分析上述特征,就要進(jìn)行信號的頻譜分析,也就是利用傅里葉變化,得出該音樂信號的頻譜結(jié)構(gòu),來進(jìn)行其頻譜特征的提取。有限長序列的離散傅氏變換(DFT),在信號處理的理論上有重要意義,它將頻域也離散化,是現(xiàn)代信號頻譜分析主要方法。N點DFT實質(zhì)上是其頻譜的離散頻域采樣,對頻率具有選擇性(ωk=2πk/N),在這些點上反映了信號的頻譜。但DFT計算量大,處理復(fù)雜,所以引用了快速傅里葉變化(FFT)算法最簡單、編程最容易的是基2FFT,還有基4FFT、基8FFT等快速算法。根據(jù)采樣定律,F(xiàn)FT變換相當(dāng)于對有限長序列進(jìn)行頻域采樣,而不丟失任何信息。所以只要時域序列的長度足夠長,采樣的點數(shù)足夠多,頻域采樣也可以很好地反映信號的頻譜趨勢,所以在設(shè)計中可以用FFT進(jìn)行語音信號的頻譜分析。4MATLAB音樂合成系統(tǒng)的總體設(shè)計4.1系統(tǒng)的總體設(shè)計MATLAB音樂合成系統(tǒng),能實現(xiàn)音樂的簡單合成、音樂的降噪處理、音樂的加諧波處理、音樂的升八度處理、音樂的降八度處理、音樂時域與頻域波形顯示、利用傅里葉級數(shù)合成音樂以及音樂字幕的動態(tài)顯示的操作。該系統(tǒng)的全部功能都通過GUI圖形用戶界面顯示出來,并且使用模塊化的設(shè)計方法,將系統(tǒng)分為四個模塊,如圖4-1所示?;贛ATLAB軟件的音樂合成系統(tǒng)基于MATLAB軟件的音樂合成系統(tǒng)簡單合成及處理音樂的模塊音樂的傅里葉頻域分析模塊傅里葉級數(shù)合成音樂模塊音樂的字幕動態(tài)顯示模塊圖4-1系統(tǒng)總體設(shè)計結(jié)構(gòu)圖4.2GUI界面的設(shè)計GUIDE(GraphicUserInterfaceDesignEnvironment)是專門設(shè)計圖形用戶界面GUI的集成開發(fā)環(huán)境。GUI界面一般包括窗口、菜單、按鈕和文本框等各種圖形對象。在設(shè)計GUI時,可以通過鼠標(biāo)操作就能產(chǎn)生各種GUI控件,這樣讓用戶對圖形界面的生成與管理變得直接、方便,能讓用戶定制用戶與MATLAB2013a的交互方式??梢孕纬梢环N除命令窗口之外的與MATLAB2013a的交互方式。4.2.1啟動GUIDE在MATLAB2013a中Command窗口里面輸入guide按回車鍵,或者從菜單里面均可進(jìn)入GUIDE。MATLAB2013a為GUI圖形應(yīng)用界面的設(shè)計準(zhǔn)備了以下四種模板,如圖4-2所示。圖4-2GUI設(shè)計模板選擇對話框在GUI設(shè)計模板中選中第一個模板,新建并且保存為yinyuehecheng后,MATLAB2013a會自動產(chǎn)生相應(yīng)的.fig文件和.m文件。4.2.2GUIDE設(shè)計環(huán)境在進(jìn)入GUI界面之后,下一步就是進(jìn)行界面設(shè)計編輯。在GUIDE設(shè)計環(huán)境中用到的事Layout編輯器,操作者可以通過鼠標(biāo)移動模板左邊的控件到中間布局區(qū)域,如按鈕、坐標(biāo)軸、文本框等。接下來,通過屬性編輯器和對齊編輯器對各控件設(shè)置相關(guān)屬性和進(jìn)行界面布置,以完善界面功能。本設(shè)計總體布局如下圖4-3所示。圖4-3GUI設(shè)計面板布局4.2.3GUI界面的功能設(shè)計設(shè)計好GUI界面的整體布局之后,接下來就該利用程序代碼的編寫進(jìn)行各個按鈕功能的設(shè)置。找到上述的GUI的M文件yinyuehecheng.m,打開之后,會看到里面已經(jīng)存在許多自動生成的程序代碼,只需要找到各個按鈕及文本編輯框?qū)?yīng)的函數(shù)。在對應(yīng)的函數(shù)名下輸入要實現(xiàn)相應(yīng)功能所需要的程序。例如在yinyuehecheng.m文件中找到函數(shù):functionbutton1_Callback在這個函數(shù)名稱下面寫入具有簡單音樂合成功能的程序。globalflagglobalwestfsftimef_flag;flag=1;f_flag=0;fs=8000;%該段音樂抽樣頻率F=[493.88493.88493.88587.33493.88440392329.63392440493.88];%各個唱名對應(yīng)的頻率time=fs*[1/4,1/4,1/4,1/4,3/4,1/4,1/4,1/4,1/4,1/4,1];%各個唱名的持續(xù)時間值N=length(time);%這段音樂的總抽樣點數(shù)west=zeros(1,N);%用west向量來儲存抽樣點n=1;fora=1:N%利用循環(huán)產(chǎn)生抽樣數(shù)據(jù),a表示樂音編號t=1/fs:1/fs:time(a)/fs;%產(chǎn)生第a個樂音的抽樣點west(n:n+time(a)-1)=sin(2*pi*f(a)*t);%抽樣點對應(yīng)的幅值n=n+time(a);End然后定位相應(yīng)的簡單音樂合成按鈕的坐標(biāo)程序。t1=linspace(0,length(west)/fs,length(west));set(handles.axes1,'HandleVisibility','ON');%開始使用坐標(biāo),便于操作axes(handles.axes1);%使用圖像,操作在坐標(biāo)1plot(t1,west');axis([-0.24.2-1.21.2]);xlabel('t/s');ylabel('幅度');這樣相應(yīng)設(shè)置好各個功能按鈕所對應(yīng)的程序,就算基本完成了GUI界面的設(shè)置。5MATLAB音樂合成系統(tǒng)的設(shè)計與實現(xiàn)5.1簡單合成及處理音樂模塊的設(shè)計與實現(xiàn)通過給定的音樂簡譜和掌握的樂理知識與頻譜分析來進(jìn)行簡單音樂的合成。并且在此基礎(chǔ)上對音樂進(jìn)行相應(yīng)的處理,來比較經(jīng)不同處理后的音樂播放效果。5.1.1合成《社會主義好》依據(jù)音樂《社會主義好》一小段的音樂簡譜和國際規(guī)定的十二平均律的計算方法對應(yīng)地得到此小段音樂中各個唱名的頻率,利用MATLAB軟件來編程仿真實現(xiàn)音樂的簡單合成。音樂簡譜如圖5-1所示。圖5-1音樂簡譜由圖5-1可知《社會主義好》的曲調(diào)定為G,也就是說1=G,那么可以知道其對應(yīng)的頻率為329.1Hz,其中6是低音的意思,即對應(yīng)G調(diào)“6”的頻率659.26Hz,取其頻率的一半,即659.26/2=329.63Hz。根據(jù)“十二平均律”計算得到各個唱名對應(yīng)的頻率如下表5-1。表5-1唱名對應(yīng)的頻率表唱名33353216123頻率493.88493.88493.88587.33493.88440392329.63392440493.88得到該小段音樂各個唱名對應(yīng)的頻率之后,還有很重要的一個數(shù)據(jù)需要得到,那就是根據(jù)樂理知識推算出各個唱名對應(yīng)的持續(xù)時間。由圖5-1中1=G2/4可以知道各唱名的持續(xù)時間如下表5-2所示。表5-2唱名持續(xù)時間表唱名33353216123時間50.250.750.250.251依據(jù)上述得到的數(shù)據(jù)可以編寫如下程序。functionbutton1_Callback(hObject,eventdata,handles)%簡單音樂的合成globalflagglobalwestfsftimef_flag;flag=1;f_flag=0;fs=8000;%該段音樂抽樣的頻率f=[493.88493.88493.88587.33493.88440392329.63392440493.88];%各個唱名所對應(yīng)的頻率值time=fs*[1/4,1/4,1/4,1/4,3/4,1/4,1/4,1/4,1/4,1/4,1];%各個唱名的持續(xù)時間N=length(time);%這段音樂的總抽樣點數(shù)west=zeros(1,N);%用west向量來儲存抽樣點n=1;fora=1:N%利用循環(huán)產(chǎn)生抽樣數(shù)據(jù),a表示樂音編號t=1/fs:1/fs:time(a)/fs;%產(chǎn)生第a個樂音的抽樣點west(n:n+time(a)-1)=sin(2*pi*f(a)*t);%抽樣點對應(yīng)的幅值n=n+time(a);end5.1.2加包絡(luò),除噪音在MATLAB中,播放出了《社會主義好》的第一小節(jié),但可聽出聲音不是很好,只能聽出具有《社會主義好》的調(diào)子而已。會聽到有“啪”的雜聲,聲音比較刺耳,下面通過加上外形相似的包絡(luò)來消噪音,使不同音的連接處的響度為零即可。編寫如下程序。functionbutton4_Callback(hObject,eventdata,handles)%音樂的降噪globalflagglobalwestfsftimef_flag;ifflag==1f_flag=0;N=length(time);%這段音樂的總抽樣點數(shù)west=zeros(1,N);%用west向量來儲存抽樣點n=1;fora=1:N%利用循環(huán)產(chǎn)生抽樣數(shù)據(jù),a表示樂音編號t=1/fs:1/fs:time(a)/fs;%產(chǎn)生第a個樂音的抽樣點G=zeros(1,time(a));%G為存儲包絡(luò)數(shù)據(jù)的向量G(1:time(a))=exp(1:(-1/time(a)):1/8000);%產(chǎn)生包絡(luò)點west(n:n+time(a)-1)=sin(2*pi*f(a)*t).*G(1:time(a));n=n+time(a);end加包絡(luò)后的仿真時域波形如圖5-2所示。圖5-2音樂降噪時域圖形由圖可見,通過加包絡(luò),使每個音的連接處的幅度有所減小,使音樂聽起來更加連續(xù),悅耳。5.1.3音樂升降度處理升高一個八度即每個唱名的頻率都提高一倍,變?yōu)樵瓉淼?倍;降低一個八度即每個唱名的頻率都減小一倍,變?yōu)樵瓉淼?/2。因此最簡單的辦法是將存儲該段音樂的各個樂音頻率的向量中每個元素改變?yōu)樵瓉淼?或1/2倍即可。編寫程序如下。functionbutton6_Callback(hObject,eventdata,handles)%音樂升八度globalflag%定義全局變量globalwestfstimef_flag;ifflag==1f_flag=1;f=[493.88493.88493.88587.33493.88440392329.63392440493.88]*2;%頻率升高N=length(time);%這段音樂的總抽樣點數(shù)west=zeros(1,N);%用west向量來儲存抽樣點n=1;fora=1:N%利用循環(huán)產(chǎn)生抽樣數(shù)據(jù),a表示樂音編號t=1/fs:1/fs:(time(a))/fs;%產(chǎn)生第a個樂音的抽樣點P=zeros(1,time(a));%P為存儲包絡(luò)數(shù)據(jù)的向量L=(time(a))*[01/5333/1000333/5001];%包絡(luò)線端點對應(yīng)的橫坐標(biāo)T=[0.21.5110.2];%包絡(luò)線端點對應(yīng)的縱坐標(biāo)s=1;b=1:1:time(a);%產(chǎn)生包絡(luò)線抽樣點fork=1:4P(s:L(k+1)-1)=(T(k+1)-T(k))/(L(k+1)-L(k))*(b(s:L(k+1)-1)-L(k+1)*ones(1,L(k+1)-s))+T(k+1)*ones(1,L(k+1)-s);%包絡(luò)線直線方程通式s=L(k+1);endwest(n:n+time(a)-1)=sin(2*pi*f(a)*t).*P(1:time(a));n=n+time(a);end將音樂升八度之后的仿真時域波形如下圖5-3所示。圖5-3音樂升八度時域圖同樣地,將音樂進(jìn)行降八度處理只需改變上述程序中的一條語句即可。即將f=[493.88493.88493.88587.33493.88440392329.63392440493.88]*2改為:f=[493.88493.88493.88587.33493.88440392329.63392440493.88]/2。5.1.4音樂加諧波處理在5.1.1的音樂中加上二、三、四次諧波,基波幅度為1,高次諧波幅度分別為0.2、0.3、0.1。主要的功能程序如下。functionbutton5_Callback(hObject,eventdata,handles)%音樂加諧波m=[10.30.2];%波形幅值矩陣ss=zeros(1,length(t));fori=1:length(m)ss=ss+m(i)*sin(2*i*pi*f(a)*t);%加諧波endwest(n:n+time(a)-1)=ss.*P(1:time(a));n=n+time(a);end加入諧波之后的仿真時域波形如圖5-5。圖5-5音樂加諧波的時域圖形由圖可見,每個音的連接處同樣是衰減到一較小值而不是0,同時音樂聽起來更加真是實,效果更好。5.2用傅里葉變換分析音樂頻譜模塊的設(shè)計與實現(xiàn)為了更加清晰地了解經(jīng)過不同處理的音樂所發(fā)生的變化,就要研究音樂的基波與諧波,即每種音樂的頻譜圖,可以對音樂時域波形進(jìn)行傅里葉變換,得到的幅值譜,在頻譜圖上的第一個突出的波峰對應(yīng)的頻率即為基頻。編寫了如下程序。functionbutton10_Callback(hObject,eventdata,handles)%傅里葉分析globalflagglobalwestfsff_flag;%定義全局變量ifflag==1iff_flag==1f1=f*2;elseiff_flag==2f1=f/2;elseiff_flag==0f1=f;end%所用到的抽樣頻率為8000.NFFT=2^nextpow2(length(west));Y=fft(west,NFFT)*2/length(west);g=fs/2*linspace(0,1,NFFT/2+1);set(handles.axes2,'HandleVisibility','ON');%開始使用坐標(biāo),更便于操作axes(handles.axes2);%開始用圖像,在坐標(biāo)2處進(jìn)行操作plot(g,2*abs(Y(1:NFFT/2+1)));axis([-0.1max(f1)+50-0.1max(2*abs(Y(1:NFFT/2+1)))+0.2]);xlabel('f/Hz');ylabel('幅度');elseerrordlg('請您先點擊簡單音樂合成按鈕??!','溫馨提示');end經(jīng)過分別處理的音樂通過調(diào)用該段程序就會分別顯示出相對應(yīng)的頻譜圖,以便從視覺上更加直觀地了解各個音樂的不同之處,在各種相應(yīng)處理前后的對比中更容易讓用戶接受與其對應(yīng)的方法及特點。音樂《社會主義好》簡單合成后的仿真頻譜圖形如下圖5-6所示。圖5-6簡單音樂合成頻譜圖由圖5-6可知,該段音樂的基波頻率為329.1Hz,它的幅度值是0.125,以此類推,它對應(yīng)的各個高次諧波幅度值如下表5-3所示。表5-3高次諧波幅值表諧波234567幅度0.250.2560.7550.0250.1250.01圖5-7為音樂加諧波之后的仿真頻譜圖。圖5-7音樂加諧波頻譜圖該圖與圖5-6所示的簡單音樂合成有明顯的區(qū)別,波形邊緣更加平緩,音樂聽起來更加清晰,效果更好。圖5-8與圖5-9分別為音樂升八度和降八度處理的仿真頻譜圖。圖5-8音樂升八度頻譜圖圖5-9音樂降八度處理頻譜圖由上述圖5-8與圖5-9所示頻譜圖可以清楚地看到,升八度處理是在簡單音樂合成圖5-6的基礎(chǔ)上頻率增加了一倍,并且各個幅值有所升高,降八度處理是在圖5-6的基礎(chǔ)上頻率降低了一倍,并且幅值有輕微的下降。利用傅里葉級數(shù)的原理合成的音樂的仿真頻譜圖形,如圖5-10所示。圖5-10基于傅里葉級數(shù)合成的音樂頻譜由上圖5-10與5-6頻譜圖的比較,可以直觀的看出,利用傅里葉級數(shù)分析原理合成的音樂頻譜曲線愈加光滑,噪聲干擾少,只是幅值很小,質(zhì)量較簡單音樂合成的高。5.3基于傅里葉級數(shù)合成的音樂模塊的設(shè)計與實現(xiàn)運(yùn)用傅里葉級數(shù)變換的原理來再次合成音樂《社會主義好》的第一小節(jié),只需將5.1.4中音樂加諧波的程序幅度修改一下。將m=[10.30.2];%波形幅值矩陣改為:m=[0.1250.250.2560.7550.0250.1250.01];%波形幅值矩陣運(yùn)行后可以聽出聲音更加真實了。仿真時域波形如圖5-11。圖5-11基于傅里葉級數(shù)合成音樂的時域波形利用傅里葉級數(shù)合成音樂的部分程序。functionbutton11_Callback(hObject,eventdata,handles)%傅里葉級數(shù)合成的音樂%m=[10.30.2];%波形幅值矩陣m=[0.1250.250.2560.7550.0250.1250.01]*1;ss=zeros(1,length(t));fori=1:length(m)ss=ss+m(i)*sin(2*i*pi*f(a)*t);%加諧波endwest(n:n+time(a)-1)=ss.*P(1:time(a));%給第a個樂音加上包絡(luò)n=n+time(a);endt1=linspace(0,length(west)/fs,length(west));set(handles.axes1,'HandleVisibility','ON');%開始使用坐標(biāo),便于操作axes(handles.axes1);%操作在坐標(biāo)1plot(t1,west');axis([-0.24.2-1.71.7]);xlabel('t/s');ylabel('幅度');5.4音樂《小星星》字幕動態(tài)顯示模塊的設(shè)計與實現(xiàn)運(yùn)用前面的簡單音樂合成的相關(guān)原理及方法來合成音樂《小星星》并且實現(xiàn)小星星歌詞字幕的動態(tài)顯示?!缎⌒切恰返囊魳泛喿V如圖5-12所示。圖5-12《小星星》音樂簡譜用鋼琴的標(biāo)準(zhǔn)音A4=440Hz,根據(jù)國際上規(guī)定的十二平均律,相鄰的半音之間頻率之比是1.059463,而且由圖可知樂譜的基調(diào)是1=C,即該段音樂的基準(zhǔn)頻率設(shè)置為Pt=44100Hz。在編寫程序的過程中運(yùn)用十二平均律的計算方法即:scale12=A4/2^(9/12)*2.^((0:11)/12)。由上圖5-12的音樂簡譜可知,此音樂為七音符,程序中設(shè)置為map=[135681012]。其中的樂譜寫為:score=[1155665,4433221,5544332,5544332,1155665,4433221]。音樂的每個唱名持續(xù)的時間設(shè)置為rhythm=repmat([1111112],1,6)。針對于音樂《小星星》的歌詞在GUI界面實現(xiàn)邊播放邊顯示,用到的是GUI中的edit1文本框,應(yīng)用語句set(handles.edit1,‘string’,變量名)來達(dá)到顯示的目的,其中歌詞的文字用矩陣lyric=[‘一閃一閃亮晶晶’‘滿天都是小星星’‘掛在天上放光明’‘它是我們的小眼睛’‘一閃一閃亮晶晶’‘滿天都是小星星’]來完成編輯。其中該段音樂合成及頻譜顯示的程序如下。y=[];fori=1:length(score)%length(score)為score的長度為7*6=42y=[ysin((1:rhythm(i)*p0)/pt*2*pi*scale12(map(score(i))))];%音樂合成endt=linspace(0,length(y)/pt,length(y));%時域波形在界面坐標(biāo)顯示set(handles.axes1,'HandleVisibility','ON');%開始啟動坐標(biāo),便于操作axes(handles.axes1);%開始圖像的使用,基本操作在坐標(biāo)1plot(t(1:pt/10),y(1:pt/10));axis([-0.010.11-1.21.2]);xlabel('t/s');ylabel('幅度');NFFT=2^nextpow2(length(y));%傅里葉頻譜分析Y=fft(y,NFFT)*2/length(y);g=pt/2*linspace(0,1,NFFT/2+1);set(handles.axes2,'HandleVisibility','ON');%開始啟動坐標(biāo),便于操作axes(handles.axes2);%開始使用圖像,操作在坐標(biāo)2plot(g,2*abs(Y(1:NFFT/2+1)));axis([-0.1550-0.1max(2*abs(Y(1:NFFT/2+1)))+0.2]);xlabel('f/Hz');ylabel('幅度');str=[];fori=1:length(score)ifmod(i,7)==0s=sprintf('%1c',[lyric(i)]);str=strcat(str,s);str=[str,10];set(handles.edit1,'String',str);pause(0);wavplay(sin((1:rhythm(i)*p0)/pt*2*pi*scale12(map(score(i)))),pt);elsewavplay(sin((1:rhythm(i)*p0)/pt*2*pi*scale12(map(score(i)))),pt);s=sprintf('%1c',lyric(i));str=strcat(str,s);set(handles.edit1,'String',str)pause(0);End圖5-13為音樂《小星星》在GUI界面的字幕顯示。圖5-13《小星星》的字幕顯示圖5-13中的字幕顯示在GUI界面中實現(xiàn)的是邊播放邊顯示。圖5-14是音樂小星星的時域與頻域仿真實現(xiàn)圖。圖5-14《小星星》時域與頻域圖形6系統(tǒng)的調(diào)試與運(yùn)行本設(shè)計利用MATLAB軟件,通過MATLABGUI構(gòu)建一個具有圖形用戶界面的音樂合成系統(tǒng),界面友好、操作方便。該系統(tǒng)成功地實現(xiàn)了音樂的簡單合成、音樂的降噪處理、音樂的加諧波處理、音樂的升降度處理、音樂的時域和頻域波形顯示分析及基于傅里葉級數(shù)分析合成的音樂的操作。但這些操作并不是輕松實現(xiàn)的,在編程與設(shè)計過程中,各個模塊也是經(jīng)過驗證與調(diào)試才達(dá)到如今的效果。6.1音樂的播放、暫停的調(diào)試與運(yùn)行在設(shè)計音樂的播放與暫停這個功能時,一開始是用MATLAB中的sound函數(shù),將向量轉(zhuǎn)換成聲音,進(jìn)行音樂的播放,但是它的不足之處是在播放的過程中不能中途暫停,也就是暫停的功能不能體現(xiàn)出來,因此,將sound函數(shù)的語句sound(west,8000)替換,分別有播放、暫停、繼續(xù)播放,實現(xiàn)了音樂的暫停與播放功能。編寫程序如下。functionbutton8_Callback(hObject,eventdata,handles)%音樂的播放globalflagglobalwestfsp;ifflag==1p=audioplayer(west,fs);%將向量轉(zhuǎn)換成聲音play(p);%播放音樂endfunctionbutton9_Callback(hObject,eventdata,handles)%音樂的暫停globalpflag;ifflag==1pause(p);%音樂的暫停endfunctionbutton12_Callback(hObject,eventdata,handles)%音樂的繼續(xù)播放globalp;ifflag==1reae(p);%音樂的繼續(xù)播放end6.2傅里葉變換分析音樂的調(diào)試與運(yùn)行在用傅里葉分析合成的音樂的模塊中,一開始計劃使用MATLAB中的wavread函數(shù)來讀取.wav文件,實現(xiàn)相應(yīng)功能,但是總不成功,后來通過查閱資料和MATLABhelp的幫助才意識到那個光盤中并不存在現(xiàn)成的fmt.wav文件,所以用另一種方法實現(xiàn)音樂傅里葉頻譜顯示,通過學(xué)習(xí)了MATLAB中快速傅里葉變換函數(shù)FFT的用法,利用FFT函數(shù)實現(xiàn)了該功能,編寫程序如下。NFFT=2^nextpow2(length(west));Y=fft(west,NFFT)*2/length(west);g=fs/2*linspace(0,1,NFFT/2+1);set(handles.axes2,'HandleVisibility','ON');%打開坐標(biāo),方便操作axes(handles.axes2);%使用圖像,操作在坐標(biāo)2plot(g,2*abs(Y(1:NFFT/2+1)));axis([-0.1max(f1)+50-0.1max(2*abs(Y(1:NFFT/2+1)))+0.2]);xlabel('f/Hz');ylabel('幅度');在該系統(tǒng)各個模塊設(shè)計的過程中,都會也遇到或大或小的問題,比如,在合成音樂的過程中,4節(jié)拍對應(yīng)的頻率與持續(xù)時間的計算問題;在GUI界面設(shè)計過程中參數(shù)的設(shè)置問題等,這些問題都通過查閱資料,進(jìn)一步的調(diào)試與運(yùn)行,成功地實現(xiàn)了要達(dá)到的功能。成功地實現(xiàn)了音樂的播放以及經(jīng)過各種處理之后的音樂播放??偨Y(jié)本設(shè)計利用PC機(jī),通過MATLABGUI構(gòu)建了一個具有圖形用戶界面的音樂合成的軟件系統(tǒng),該系統(tǒng)成功的實現(xiàn)了音樂的簡單合成、音樂的降噪處理、音樂的加諧波處理、音樂的升八度處理、音樂的降八度處理、音樂時域波形和用傅里葉變換的頻域波形顯示分析以及利用傅里葉級數(shù)分析再次合成音樂的操作。基于MATLAB軟件的音樂合成系統(tǒng)作為教學(xué)輔助軟件可以為語音信號處理課程的教學(xué)提供一定的幫助,學(xué)會應(yīng)用MATLAB這個仿真軟件,讓我們能夠更好地深入學(xué)習(xí)與了解信號處理的相關(guān)課程內(nèi)容,充分發(fā)揮自己的創(chuàng)新能力,該系統(tǒng)可以通過選取不同的加工算法,對音樂分別處理,達(dá)到抑制噪聲,改善音樂質(zhì)量的效果,便于更高層次的處理。該系統(tǒng)界面友好、操作方便,通過菜單、控件的使用可以方便的選取不同的方法,設(shè)置不同的參數(shù)以便于用戶操作使用。系統(tǒng)通過對各種處理效果的演示,也可以讓用戶更直觀地了解簡單音樂處理的幾種方法,并在各種相應(yīng)處理前后的對比中更容易接受與其對應(yīng)的方法及特點。該系統(tǒng)也存在一定的局限性,該系統(tǒng)只能作為語音信號處理和信號與系統(tǒng)課程的輔助學(xué)習(xí)使用,實現(xiàn)簡單的相應(yīng)的處理功能,加深學(xué)生對相關(guān)知識的了解,對于更高層次的應(yīng)用是不行的,還有該系統(tǒng)存在許多不足,在用傅里葉分析音樂時沒有使用.wav文件,只是簡單的進(jìn)行了音樂信號的傅里葉變換。參考文獻(xiàn)[1]程佩青,數(shù)字信號處理教程,北京:清華大學(xué)出版社,2007,30-120。[2]叢玉良,王宏志,數(shù)字信號處理原理及其MATLAB實現(xiàn)(第2版),北京:電子工業(yè)出版社,2009,3-100。[3]徐明遠(yuǎn),劉增力,MATLAB仿真在信號處理中的應(yīng)用,西安:西安電子科技大學(xué)出版社,2007,1-30。[4]鄭君里,信號與系統(tǒng)(第三版)上?下冊[M],北京:高等教育出版社,2012,1-255。[5]樓天順,李博菡,基于MATLAB的系統(tǒng)分析與設(shè)計—信號處理,西安電子科技大學(xué)出版社,1998,10-30。[6]李敏,基于MATLAB的音樂分析與合成實驗設(shè)計,大連:大連民族學(xué)院學(xué)報,2010。[7]馮彥君,靳鴻,章曉眉,應(yīng)用MATLAB分析語音信號,光電技術(shù)應(yīng)用,2011年,第3期。[8]陳垚光,精通MATLABGUI設(shè)計,北京:電子工業(yè)出版社,2011,125-190。[9]紀(jì)元法,孫希延,基于MATLAB的“信號與系統(tǒng)”軟件實驗系統(tǒng)設(shè)計與實踐,科技信息,2010年,第30期。[10]石良辰,MATLAB/Simulink系統(tǒng)仿真超級學(xué)習(xí)手冊,北京:人民郵電出版社,2014,1-146。[11]陳懷琛,MATLAB及在電子信息課程中的應(yīng)用,北京:電子工業(yè)出版社2006,52-130。[12]高西全,丁玉美,數(shù)字信號處理,西安:西安電子科技大學(xué)出版社,2008,1-230。[13]D.Hanselman,B.Littlefield,MasteringMATLAB5,PrenticeHall,NewJerscy,1998。[14]王亞芳,MATLAB仿真及電子信息應(yīng)用,北京:人民郵電出版社,2011,26-100。[15]Xiao-hanGuan,《MatlabSimulationinSignals&Systems——UsingMatlabatdifferentlevels》,Beijing,China:CollegeofElectromechanicalEngineeringNorth。ChinaUniversityofTechnology,2009?;贑8051F單片機(jī)直流電動機(jī)反饋控制系統(tǒng)的設(shè)計與研究基于單片機(jī)的嵌入式Web服務(wù)器的研究MOTOROLA單片機(jī)MC68HC(8)05PV8/A內(nèi)嵌EEPROM的工藝和制程方法及對良率的影響研究基于模糊控制的電阻釬焊單片機(jī)溫度控制系統(tǒng)的研制基于MCS-51系列單片機(jī)的通用控制模塊的研究基于單片機(jī)實現(xiàn)的供暖系統(tǒng)最佳啟停自校正(STR)調(diào)節(jié)器單片機(jī)控制的二級倒立擺系統(tǒng)的研究基于增強(qiáng)型51系列單片機(jī)的TCP/IP協(xié)議棧的實現(xiàn)基于單片機(jī)的蓄電池自動監(jiān)測系統(tǒng)基于32位嵌入式單片機(jī)系統(tǒng)的圖像采集與處理技術(shù)的研究基于單片機(jī)的作物營養(yǎng)診斷專家系統(tǒng)的研究基于單片機(jī)的交流伺服電機(jī)運(yùn)動控制系統(tǒng)研究與開發(fā)基于單片機(jī)的泵管內(nèi)壁硬度測試儀的研制基于單片機(jī)的自動找平控制系統(tǒng)研究基于C8051F040單片機(jī)的嵌入式系統(tǒng)開發(fā)基于單片機(jī)的液壓動力系統(tǒng)狀態(tài)監(jiān)測儀開發(fā)模糊Smith智能控制方法的研究及其單片機(jī)實現(xiàn)一種基于單片機(jī)的軸快流CO〈,2〉激光器的手持控制面板的研制基于雙單片機(jī)沖床數(shù)控系統(tǒng)的研究基于CYGNAL單片機(jī)的在線間歇式濁度儀的研制基于單片機(jī)的噴油泵試驗臺控制器的研制基于單片機(jī)的軟起動器的研究和設(shè)計基于單片機(jī)控制的高速快走絲電火花線切割機(jī)床短循環(huán)走絲方式研究基于單片機(jī)的機(jī)電產(chǎn)品控制系統(tǒng)開發(fā)基于PIC單片機(jī)的智能手機(jī)充電器基于單片機(jī)的實時內(nèi)核設(shè)計及其應(yīng)用研究基于單片機(jī)的遠(yuǎn)程抄表系統(tǒng)的設(shè)計與研究基于單片機(jī)的煙氣二氧化硫濃度檢測儀的研制基于微型光譜儀的單片機(jī)系統(tǒng)單片機(jī)系統(tǒng)軟件構(gòu)件開發(fā)的技術(shù)研究基于單片機(jī)的液體點滴速度自動檢測儀的研制基于單片機(jī)系統(tǒng)的多功能溫度測量儀的研制基于PIC單片機(jī)的電能采集終端的設(shè)計和應(yīng)用基于單片機(jī)的光纖光柵解調(diào)儀的研制氣壓式線性摩擦焊機(jī)單片機(jī)控制系統(tǒng)的研制基于單片機(jī)的數(shù)字磁通門傳感器基于單片機(jī)的旋轉(zhuǎn)變壓器-數(shù)字轉(zhuǎn)換器的研究基于單片機(jī)的光纖Bragg光柵解調(diào)系統(tǒng)的研究單片機(jī)控制的便攜式多功能乳腺治療儀的研制基于C8051F020單片機(jī)的多生理信號檢測儀基于單片機(jī)的電機(jī)運(yùn)動控制系統(tǒng)設(shè)計Pico專用單片機(jī)核的可測性設(shè)計研究基于MCS-51單片機(jī)的熱量計基于雙單片機(jī)的智能遙測微型氣象站MCS-51單片機(jī)構(gòu)建機(jī)器人的實踐研究基于單片機(jī)的輪軌力檢測基于單片機(jī)的GPS定位儀的研究與實現(xiàn)基于單片機(jī)的電液伺服控制系統(tǒng)用于單片機(jī)系統(tǒng)的MMC卡文件系統(tǒng)研制基于單片機(jī)的時控和計數(shù)系統(tǒng)性能優(yōu)化的研究基于單片機(jī)和CPLD的粗光柵位移測量系統(tǒng)研究單片機(jī)控制的后備式方波UPS提升高職學(xué)生單片機(jī)應(yīng)用能力的探究基于單片機(jī)控制的自動低頻減載裝置研究基于單片機(jī)控制的水下焊接電源的研究基于單片機(jī)的多通道數(shù)據(jù)采集系統(tǒng)基于uPSD3234單片機(jī)的氚表面污染測量儀的研制基于單片機(jī)的紅外測油儀的研究96系列單片機(jī)仿真器研究與設(shè)計基于單片機(jī)的單晶金剛石刀具刃磨設(shè)備的數(shù)控改造基于單片機(jī)的溫度智能控制系統(tǒng)的設(shè)計與實現(xiàn)基于MSP430單片機(jī)的電梯門機(jī)控制器的研制基于單片機(jī)的氣體測漏儀的研究基于三菱M16C/6N系列單片機(jī)的CAN/USB協(xié)議轉(zhuǎn)換器基于單片機(jī)和DSP的變壓器油色譜在線監(jiān)測技術(shù)研究基于單片機(jī)的膛壁溫度報警系統(tǒng)設(shè)計基于AVR單片機(jī)的低壓無功補(bǔ)償控制器的設(shè)計基于單片機(jī)船舶電力推進(jìn)電機(jī)監(jiān)測系統(tǒng)基于單片機(jī)網(wǎng)絡(luò)的振動信號的采集系統(tǒng)基于單片機(jī)的大容量數(shù)據(jù)存儲技術(shù)的應(yīng)用研究基于單片機(jī)的疊圖機(jī)研究與教學(xué)方法實踐基于單片機(jī)嵌入式Web服務(wù)器技術(shù)的研究及實現(xiàn)基于AT89S52單片機(jī)的通用數(shù)據(jù)采集系統(tǒng)基于單片機(jī)的多道脈沖幅度分析儀研究機(jī)器人旋轉(zhuǎn)電弧傳感角焊縫跟蹤單片機(jī)控制系統(tǒng)基于單片機(jī)的控制系統(tǒng)在PLC虛擬教學(xué)實驗中的應(yīng)用研究基于單片機(jī)系統(tǒng)的網(wǎng)絡(luò)通信研究與應(yīng)用基于PIC16F877單片機(jī)的莫爾斯碼自動譯碼系統(tǒng)設(shè)計與研究基于單片機(jī)的模糊控制器在工業(yè)電阻爐上的應(yīng)用研究基于雙單片機(jī)沖床數(shù)控系統(tǒng)的研究與開發(fā)基于Cygnal單片機(jī)的μC/OS-Ⅱ的研究基于單片機(jī)的一體化智能差示掃描量熱儀系統(tǒng)研究HYPERLINK"/detail.htm?36

溫馨提示

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

最新文檔

評論

0/150

提交評論