matlab音樂合成報告_第1頁
matlab音樂合成報告_第2頁
matlab音樂合成報告_第3頁
matlab音樂合成報告_第4頁
matlab音樂合成報告_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、MATLAB音樂合成綜合實(shí)驗(yàn) 學(xué)院: 班級: 指導(dǎo)老師:吳憲祥 同做者: 二0一六年十二月24摘 要 本實(shí)驗(yàn)共有三部分:1.簡單的音樂合成;2.用傅里葉變換分析音樂;3.基于傅里葉級數(shù)的音樂合成。一步一步分析了用MATLAB進(jìn)行音樂合成的過程。通過本實(shí)驗(yàn)達(dá)到加深對傅里葉級數(shù)和傅里葉分析的理解,熟悉對MATLAB基本使用的目標(biāo)。該實(shí)驗(yàn)采用MATLAB軟件仿真來實(shí)現(xiàn)。首先,通過編程對一段真實(shí)的音樂進(jìn)行分析、處理,求得這段音樂的基頻、諧波分量、等數(shù)據(jù);然后,通過對樂理的研究,根據(jù)分析中求得的數(shù)據(jù)編寫程序,進(jìn)行基于傅里葉分析的音樂合成設(shè)計,并設(shè)計了圖形用戶界面。目 錄1. 緒論 1.1 引言.3 1.

2、2 實(shí)驗(yàn)要求.3 1.3 實(shí)驗(yàn)原理.32. 簡單的合成音樂 2.1 樂理知識介紹.4 2.2 利用MATLAB實(shí)現(xiàn)音樂合成器,生成 WAV文件.5 2.3 除噪音,加包絡(luò).5 2.4 音樂升高和降八度.9 2.5 加入諧波.93. 用傅里葉變換分析音樂 3.1 載入fmt.wav并播放.11 3.2 處理realware.11 3.3 分析wave2proc的基波和諧波.13 3.4 自動分析fmt.wav的音調(diào)和節(jié)拍.164. 基于傅里葉級數(shù)的音樂合成 4.1 重新加諧波.17 4.2 通過音調(diào)信息彈奏送別.195. 制作GUI界面.206.實(shí)驗(yàn)難點(diǎn)及問題.217.實(shí)驗(yàn)收獲.22 1.緒論1

3、.1 引言信號與系統(tǒng)的概念及分析方法廣泛應(yīng)用于通信、自動控制、航空航天、電子信息、地震學(xué)、生物工程等領(lǐng)域,因此“信號與系統(tǒng)”是一門電子信息學(xué)科相關(guān)專業(yè)的主干技術(shù)課程。MATLAB是國際上公認(rèn)的優(yōu)秀的科技應(yīng)用軟件,隨著版本的不斷升級,內(nèi)容也在不斷擴(kuò)充?;贛ATLAB的音樂分析與合成實(shí)驗(yàn)是針對“信號與系統(tǒng)”課程的重點(diǎn)和難點(diǎn)之一的傅里葉變換和傅里葉級數(shù)等內(nèi)容而設(shè)計的。由于該實(shí)驗(yàn)是真實(shí)音樂的實(shí)際應(yīng)用,可以增進(jìn)對傅里葉級數(shù)和傅里葉變換的理解,加深對信號分析工程應(yīng)用的理解,提高在信號分析領(lǐng)域的應(yīng)用能力。1.2 實(shí)驗(yàn)要求1、3-5人一組,選擇不同樂曲,利用MATLAB實(shí)現(xiàn)音樂合成器,生成WAV文件;2、給

4、樂音加包絡(luò)消噪;3、實(shí)現(xiàn)音樂的升八度和降八度;4、在音樂中添加諧波;5、用傅里葉級數(shù)分析音樂的基頻、音調(diào)和節(jié)拍;6、模仿一些常用樂器(如鋼琴、吉他等)實(shí)現(xiàn)音樂合成;7、設(shè)計GUI界面;8、提交設(shè)計報告。1.3實(shí)驗(yàn)原理 傅里葉變換建立了信號頻譜的概念。所謂傅里葉分析即分析信號的頻譜(頻率構(gòu)成)、頻帶寬度等。要想合成出一段音樂,就要了解該段音樂的基波頻率、諧波構(gòu)成等。因此,必須采用傅里葉變換這一工具。對于連續(xù)時間信號f(t),其傅里葉變換為:由于其變換兩邊的函數(shù)f (t) 和F(w)都是連續(xù)函數(shù),不適合于計算機(jī)處理。MATLAB語言提供了符號函數(shù)FOURIER來實(shí)現(xiàn)傅里葉變換,但該函數(shù)需要信號的解

5、析表達(dá)式。而工程應(yīng)用中經(jīng)常需要對抽樣數(shù)據(jù)進(jìn)行傅里葉分析,這種情況下往往無法得到信號的解析表達(dá)式,必須采用傅里葉變換的數(shù)值計算方法。如果f(t)的主要取值區(qū)間為t1,t2,定義T=t2-t1為區(qū)間長度。在該區(qū)間內(nèi)抽樣N個點(diǎn),抽樣間隔為: 則有:可以計算出任意頻點(diǎn)的傅里葉變換值,假設(shè)F()的主要取值區(qū)間位于1,2,要計算其間均勻抽樣的k個值,則有:式中 ,為頻域抽樣間隔。2. 簡單的合成音樂2.1 樂理知識介紹 樂音的基本特征可以用基波頻率、諧波頻譜和包絡(luò)波形3個方面來描述?;l率:每個指定音調(diào)的唱名都對應(yīng)固定的基波信號頻率。所謂唱名是指平日讀樂譜唱出的1(do)、2(re)、3(mi) ,每個

6、唱名并未固定基波頻率。當(dāng)指定樂曲的音調(diào)時才知道此時唱名對應(yīng)的頻率值。如C調(diào)“ 1”的基波頻率為261.63HZ,F調(diào)“1”的基波頻率為349.23HZ,F調(diào)“ 5”的基波頻率為523.25HZ。諧波頻譜:在音樂領(lǐng)域中稱諧波為“泛音”,由諧波產(chǎn)生的作用稱為音色變化。當(dāng)指定音調(diào)之后,僅指定了樂音信號的基波頻率,諧波情況并未說明。各種樂器,如鋼琴或單簧管,都可以發(fā)出某一音調(diào)下的唱名,而人的聽覺會明顯感覺兩者不同,這是由于諧波成分有所區(qū)別,頻譜結(jié)構(gòu)各異。包絡(luò)波形:不同類型的樂器,包絡(luò)形狀也不相同。在音樂合成實(shí)驗(yàn)中,為簡化編程描述,通常把復(fù)雜的包絡(luò)函數(shù)用少量直線近似。于是,樂音波形的包絡(luò)呈拆線。有時為了

7、保證在樂音的鄰接處信號幅度為零,也可以用指數(shù)衰減的包絡(luò)來表示,這也是最簡單的辦法。2.2 利用MATLAB實(shí)現(xiàn)音樂合成器,生成 WAV文件而在MATLAB中表示樂音所用的抽樣頻率為fs=10000Hz,也就是所1s鐘內(nèi)有1000個點(diǎn),抽樣點(diǎn)數(shù)的多少就可表示出每個樂音的持續(xù)時間的長短。用一個行向量來存儲這段音樂對應(yīng)的抽樣點(diǎn),在用sound函數(shù)播放即可。根據(jù)以上分析在MATLAB中編寫如下程序:Clear clc;fs=10000;f=784 659 784 1047 880 1047 784 784 523 587 659 587 523 587 784 659 784 1047 988 880

8、 1047 784 784 587 659 698 494 523 880 1047 1047 988 880 988 1047 880 988 1047 880 880 784 659 523 587 ;time=fs*1 0.5 0.5 2 1 1 2 1 0.5 0.5 1 0.5 0.5 4 1 0.5 0.5 1 0.5 1 1 2 1 0.5 0.5 1 0.5 4 1 1 2 1 0.5 0.5 2 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 4 ;N=length(time); %這段音樂的總抽樣點(diǎn)數(shù)y=zeros(1,N); %用y向量來儲存抽樣點(diǎn)n=1;

9、for num=1:N %利用循環(huán)產(chǎn)生抽樣數(shù)據(jù),num表示樂音編號 t=1/fs:1/fs:time(num)/fs; %產(chǎn)生第num個樂音的抽樣點(diǎn)y(n:n+time(num)-1)=sin(2*pi*f(num)*t); %抽樣點(diǎn)對應(yīng)的幅值 n=n+time(num);endsound(y,fs); Wavwrite(y,test4);在MATLAB中運(yùn)行,但是可以聽出效果不是很好。2.3 除噪音,加包絡(luò)下面通過加包絡(luò)來消噪音。最簡單的包絡(luò)為指數(shù)衰減。最簡單的指數(shù)衰減是對每個音乘以因子,在實(shí)驗(yàn)中首先加的是的衰減,這種衰減方法使用的是相同速度的衰減,但是發(fā)現(xiàn)噪音并沒有完全消除,播放的音樂效果

10、不是很好,感覺音樂起伏性不強(qiáng)。于是采用不同速度的衰減,根據(jù)樂音持續(xù)時間的長短來確定衰減的快慢,樂音持續(xù)時間越長,衰減的越慢,持續(xù)時間越短,衰減的越快。在1.1程序的基礎(chǔ)上加上包絡(luò),編寫如下程序:加包絡(luò)前:clear;clc;fs=10000;f=784 659 784 1047 880 1047 784 784 523 587 659 587 523 587 784 659 784 1047 988 880 1047 784 784 587 659 698 494 523 880 1047 1047 988 880 988 1047 880 988 1047 880 880 784 659 5

11、23 587 ;time=fs*1 0.5 0.5 2 1 1 2 1 0.5 0.5 1 0.5 0.5 4 1 0.5 0.5 1 0.5 1 1 2 1 0.5 0.5 1 0.5 4 1 1 2 1 0.5 0.5 2 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 4 ;N=length(time); %這段音樂的總抽樣點(diǎn)數(shù)y=zeros(1,N); %用y向量來儲存抽樣點(diǎn)n=1;for num=1:N %利用循環(huán)產(chǎn)生抽樣數(shù)據(jù),num表示樂音編號 t=1/fs:1/fs:time(num)/fs; %產(chǎn)生第num個樂音的抽樣點(diǎn)y(n:n+time(num)-1)=si

12、n(2*pi*f(num)*t); %抽樣點(diǎn)對應(yīng)的幅值 n=n+time(num);endsound(y,fs); 播放后可以聽出噪音已經(jīng)消除,同時因?yàn)椴煌瑫r長的樂音衰減的快慢不一樣,音樂聽起來更有起伏感,下圖是加包絡(luò)后的east圖像(未放大):更科學(xué)的包絡(luò)如下圖所示,每個樂音都經(jīng)過沖激、衰減、持續(xù)、消失四個階段。由上圖可以看出這個包絡(luò)是四段直線段構(gòu)成的,因此只要確定了每段線段的端點(diǎn),即可用端點(diǎn)數(shù)據(jù)寫出直線方程,因?yàn)橹本€方程可以用通式寫出(我用的是斜截式),因此這段包絡(luò)可以用簡單的循環(huán)來完成。例如認(rèn)為包絡(luò)線上的數(shù)據(jù)如下圖所示:據(jù)此在MATLAB中編寫如下程序:clear;clc;fs=1000

13、0;f=784 659 784 1047 880 1047 784 784 523 587 659 587 523 587 784 659 784 1047 988 880 1047 784 784 587 659 698 494 523 880 1047 1047 988 880 988 1047 880 988 1047 880 880 784 659 523 587 ;time=fs*1 0.5 0.5 2 1 1 2 1 0.5 0.5 1 0.5 0.5 4 1 0.5 0.5 1 0.5 1 1 2 1 0.5 0.5 1 0.5 4 1 1 2 1 0.5 0.5 2 0.5 0

14、.5 0.5 0.5 0.5 0.5 0.5 0.5 4 ; N=length(time); %這段音樂的總抽樣點(diǎn)數(shù)y=zeros(1,N); %用y向量來儲存抽樣點(diǎn)n=1;for num=1:N %利用循環(huán)產(chǎn)生抽樣數(shù)據(jù),num表示樂音編號 t=1/fs:1/fs:(time(num)/fs; %產(chǎn)生第num個樂音的抽樣點(diǎn) P=zeros(1,time(num); %P為存儲包絡(luò)數(shù)據(jù)的向量L=(time(num)*0 1/5 333/1000 333/500 1; %包絡(luò)線端點(diǎn)對應(yīng)的橫坐標(biāo) T=0 1 0.5 0.5 0; %包絡(luò)線端點(diǎn)對應(yīng)的縱坐標(biāo) s=1; b=1:1:time(num);

15、%產(chǎn)生包絡(luò)線抽樣點(diǎn) for k=1:4 P(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); end y(n:n+time(num)-1)=sin(2*pi*f(num)*t).*P(1:time(num); %給第num個樂音加上包絡(luò) n=n+time(num);endsound(y,fs);plot(y);運(yùn)行得到的圖像為:下圖是兩個樂音交接處的局部放大圖,可以看到前一個樂音一直衰減到0,后一個樂

16、音從0開始增加,因此消除了噪音。 2.4 音樂升高和降八度升高一個八度即每個樂音的頻率都提高一倍,變?yōu)樵瓉淼?被;降低一個八度即每個樂音的頻率都減小一倍,變?yōu)樵瓉淼?/2。因此最簡單的辦法是將存儲樂音頻率的向量每個元素改變?yōu)?或1/2倍。即將程序中的f=784 659 784 1047 880 1047 784 784 523 587 659 587 523 587 784 659 784 1047 988 880 1047 784 784 587 659 698 494 523 880 1047 1047 988 880 988 1047 880 988 1047 880 880 784 6

17、59 523 587 改為f=784 659 784 1047 880 1047 784 784 523 587 659 587 523 587 784 659 784 1047 988 880 1047 784 784 587 659 698 494 523 880 1047 1047 988 880 988 1047 880 988 1047 880 880 784 659 523 587 *2或f=784 659 784 1047 880 1047 784 784 523 587 659 587 523 587 784 659 784 1047 988 880 1047 784 784

18、587 659 698 494 523 880 1047 1047 988 880 988 1047 880 988 1047 880 880 784 659 523 587 /2.將上述音樂上高半個音階,即將頻率變?yōu)樵瓉淼模?.06)倍,可以利用resamlpe函數(shù)對原來的數(shù)據(jù)點(diǎn)進(jìn)行重采樣來實(shí)現(xiàn),因?yàn)閞esample進(jìn)行重新采樣后會使每個樂音的持續(xù)時間改變,但是因?yàn)樯甙雮€音階,頻率改變不大,所以每個音的持續(xù)時間是基本不變的。2.5 加入諧波在1.2的音樂中加上二、三、四次諧波,基波幅度為1,高次諧波幅度分別為0.2、0.3、0.1。只需將1.2程序改為:clear;clc;fs=10000

19、;%抽樣頻率f=784 659 784 1047 880 1047 784 784 523 587 659 587 523 587 784 659 784 1047 988 880 1047 784 784 587 659 698 494 523 880 1047 1047 988 880 988 1047 880 988 1047 880 880 784 659 523 587 ;time=fs*1 0.5 0.5 2 1 1 2 1 0.5 0.5 1 0.5 0.5 4 1 0.5 0.5 1 0.5 1 1 2 1 0.5 0.5 1 0.5 4 1 1 2 1 0.5 0.5 2 0

20、.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 4 ;N=length(time);%這段音樂的總抽樣點(diǎn)數(shù)east=zeros(1,N);%用east向量來儲存抽樣點(diǎn)n=1;for num=1:N%利用循環(huán)產(chǎn)生抽樣數(shù)據(jù),num表示樂音編號 t=1/fs:1/fs:(time(num)/fs;%產(chǎn)生第num個樂音的抽樣點(diǎn) P=zeros(1,time(num);%P為存儲包絡(luò)數(shù)據(jù)的向量L=(time(num)*0 1/5 333/1000 333/500 1;%包絡(luò)線端點(diǎn)對應(yīng)的橫坐標(biāo) T=0 1.5 1 1 0;%包絡(luò)線端點(diǎn)對應(yīng)的縱坐標(biāo) s=1; b=1:1:time(num);%

21、產(chǎn)生包絡(luò)線抽樣點(diǎn) for k=1:4 P(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); end m=1 0.3 0.2; %波形幅值矩陣 ss=zeros(1,length(t); for i=1:length(m) ss=ss+m(i)*sin(2*i*pi*f(num)*t);%加諧波 endeast(n:n+time(num)-1)=ss.*P(1:time(num); %給第num個樂音加上

22、包絡(luò) n=n+time(num);endsound(2*east,8000);plot(east);即可,加顏色部分為修改的部分,加上諧波后音樂效果變得更好了。運(yùn)行得到的圖像為:3. 用傅里葉變換分析音樂3.1 載入fmt.wav并播放 步驟:載入fmt.wav并播放,利用wavread函數(shù)載入,用sound函數(shù)播放,程序如下:wave=wavread('fmt.wav');sound(wave)這段音樂聽起來比之前合成的音樂更加真實(shí),因?yàn)槔镞吅胸S富的諧波。3.2 載入文件Guitar.mat,處理原始數(shù)據(jù)realwave 步驟:載入文件Guitar.mat,分析wave2p

23、roc是怎么由realwave得到的。利用load Guitar.mat;載入并用plot函數(shù)將realwave、wave2proc分別畫出,得到以下兩幅圖wave2proc可以看到,wave2proc比realwave的周期性好得多,去掉了非線性諧波和噪聲。在時域做,從圖上可以看到,realwave的數(shù)據(jù)大約是10個周期的共243個數(shù)據(jù),因此可以用resample函數(shù)對realwave進(jìn)行重新采樣,將采樣點(diǎn)提高到250個,那么重采樣后每個周期有25個點(diǎn),將這25個點(diǎn)對應(yīng)相加求平均值后得到一個周期的值,因?yàn)檫M(jìn)行了平均,減小了非線性諧波和噪音,然后將這25個數(shù)據(jù)延托成十個周期即250個點(diǎn),在利用

24、resample函數(shù)對得到的函數(shù)重新采樣將采樣點(diǎn)數(shù)恢復(fù)到243個。根據(jù)以上分析,編寫實(shí)現(xiàn)這個思路的程序如下:clear;clc;load Guitar.mat;wave=resample(realwave,250,243); %重采樣,將點(diǎn)數(shù)變?yōu)?50w=zeros(1,25);for i=1:25 for k=0:9 w(i)=w(i)+wave(25*k+i);%10個周期的對應(yīng)點(diǎn)分別求和 endendw=w/10; %取平均值wave2=repmat(w,1,10); %將1個周期的10個點(diǎn)延拓至250個點(diǎn)wave2=resample(wave2,243,250); %重采樣,將點(diǎn)數(shù)變回

25、243hold on,plot(wave2,'r'),hold off; %將處理后的數(shù)據(jù)繪出,紅色hold on,plot(wave2proc); %將所給的數(shù)據(jù)繪出,藍(lán)色運(yùn)行后的結(jié)果為:由圖可見,兩組數(shù)據(jù)重合的很好,說明這種方法是很不錯的方法。3.3 分析wave2proc的基波和諧波為了分析wave2proc的基波和諧波,可以對wave2proc進(jìn)行傅里葉變換,得到wave2proc的幅值譜,在頻譜圖上的第一個突出的波峰對應(yīng)的頻率即為wave2proc基頻,利用help fft學(xué)習(xí)了MATLAB中快速傅里葉變換函數(shù)fft的用法,編寫了如下程序:clear;clc;load

26、 Guitar.mat;fs=8000; NFFT = 2nextpow2(length(wave2proc); Y = fft(wave2proc,NFFT)/length(wave2proc);g = fs/2*linspace(0,1,NFFT/2+1);plot(g,2*abs(Y(1:NFFT/2+1)運(yùn)行后得到的結(jié)果為雖然從圖上可以大概看出包絡(luò),但是非常不明顯,假如提高頻域的抽樣頻率,例如將抽樣頻率由NFFT = 2nextpow2(length(wave2proc)改為NFFT = 8nextpow2(length(wave2proc)得到的結(jié)果如下;由圖可見雖然頻域的抽樣頻率提

27、高了很多,但是得到的包絡(luò)依然不精確,這是因?yàn)閣ave2proc是周期函數(shù),但是現(xiàn)在的wave2proc只有243個數(shù)據(jù)點(diǎn),并不能非常明顯的體現(xiàn)出其周期性,因此它的幅值譜的離散化程度不高,雖然提高了頻域的抽樣頻率,但是wave2proc數(shù)據(jù)點(diǎn)的周期性并沒有增加,所以要顯示出離散化程度高的幅值譜,就要增加wave2proc的周期性,即讓wave2proc在時域重復(fù)多次后在進(jìn)行傅里葉變換。利用repmat函數(shù)可以將wave2proc在時域重復(fù)。將程序修改為:clear;clc;load Guitar.mat;fs=8000; wave2proc =repmat(wave2proc,20,1);%將w

28、ave2proc重復(fù)20次NFFT = 2nextpow2(length(wave2proc); Y = fft(wave2proc,NFFT)/length(wave2proc);g = fs/2*linspace(0,1,NFFT/2+1);plot(g,2*abs(Y(1:NFFT/2+1)由圖讀出wave2proc的基頻為329.1Hz,幅值為0.05401,高次諧波幅值分別為:諧波23456789幅值0.076760.048410.051900.0057090.019230.0067410.0073263.4 自動分析fmt.wav的音調(diào)和節(jié)拍思路分析: 將fmt.wav導(dǎo)入后得到的

29、是一個向量,它包含了這段音樂的所有信息,要自動分析這段音樂的音調(diào)就需要將每個音調(diào)對應(yīng)的點(diǎn)進(jìn)行傅里葉變換得到其幅值譜,在幅值譜上找到第一個幅值較大的極大值點(diǎn),該點(diǎn)對應(yīng)的就是該音調(diào)的基頻,得到基頻后就可以得到高次諧波的幅值。為了使對每個音調(diào)進(jìn)行傅里葉變換后得到的幅值譜離散程度高,應(yīng)該將每個音調(diào)的數(shù)據(jù)在時域上重復(fù)多次,由于這些點(diǎn)都是直接采集的為做處理的點(diǎn),因此其重復(fù)次數(shù)應(yīng)該足夠大才能體現(xiàn)出較強(qiáng)周期性,本實(shí)驗(yàn)采用重復(fù)1000次,雖然重復(fù)次數(shù)越多越好,但是次數(shù)太大,程序運(yùn)行的速度會大大降低。這里邊還有兩個關(guān)鍵點(diǎn):第一,在從幅值譜上找基頻時,因?yàn)閳D上的極大值點(diǎn)很多,怎么能讓程序自動確定出準(zhǔn)確的基頻。第二,

30、在程序找到了基頻之后,再由基頻去獲取高次諧波的幅值時需要有一定的容錯能力,例如若基頻為200Hz,幅值為1,那么對應(yīng)的二次諧波的頻率為400Hz,但是很可能恰好幅值譜上400Hz處的幅值為0.01,但是401Hz處的幅值為0.2,這時實(shí)際上的二次諧波應(yīng)該為401Hz,但是若沒有給基頻一個容錯范圍,顯然找到的二次諧波的幅值是不正確的。針對以上提出的兩個關(guān)鍵點(diǎn),我找到了兩條有針對性的解決辦法。對于第一點(diǎn),因?yàn)榉底V上極大值點(diǎn)的幅值足夠大才能將其定位基頻,因此在分析了幾個音調(diào)后發(fā)現(xiàn)基頻處的幅值都在0.025以上,因此將基頻處的限定條件改為幅值大于0.025的,但是在運(yùn)行后發(fā)現(xiàn),有幾個音調(diào)沒有分析出來

31、,說明它們的基頻幅值小于0.025,其實(shí)可以觀察一下fmt.wav的波形就會發(fā)現(xiàn),有幾段的整體幅值很小,因此基頻幅值小,于是又在加上限定條件,若所有點(diǎn)的幅值都小于0.02,那么再用0.015作為幅值的限定條件繼續(xù)找,這樣就將剩下的音調(diào)基頻也確定出來了。對于上述的第二點(diǎn),可以將確定出的基頻的誤差設(shè)為+-1Hz,例如程序確定的基頻為200Hz,實(shí)際的基頻應(yīng)該在(200-1)到(200+1)之間,那么k次諧波對應(yīng)的頻率范圍是k*(200-1)到k*(200+1),在這個區(qū)間中繼續(xù)找幅值的極大值點(diǎn)就是k次諧波對應(yīng)點(diǎn)。根據(jù)以上思路,下面開始編寫用于分析一個音調(diào)頻率的函數(shù)analysis。在取諧波幅值時,

32、幅值小于基波幅值5%的諧波認(rèn)為其幅值為0,最終諧波的幅值用歸一化后的數(shù)據(jù)表示。4. 基于傅里葉級數(shù)的音樂合成4.1 用2.3分析出來的結(jié)果重新加諧波基頻329.1Hz 幅值為0.05401由圖讀出wave2proc的基頻為329.1Hz,幅值為0.05401,高次諧波幅值分別為:諧波23456789幅值0.076760.048410.051900.0057090.019230.0067410.007326再次完成1.4只需將1.4程序中的波形幅度矩陣m=1 0.3 0.2改為m=0.05401 0.07676 0.04841 0.0519 0.005709 0.01923 0.006791 0

33、.007326;即可重新加諧波根據(jù)2.4分析的結(jié)果可以提取出吉他的音調(diào)信息4.2 通過音調(diào)信息彈奏送別根據(jù)2.4分析的結(jié)果可以提取出吉他的音調(diào)信息,在“自動分析結(jié)果”Excel文件中用黃色標(biāo)出了出來,一下所用的音調(diào)信息用最接近的頻率來近似。而所給信息中缺少523.25和587.33的數(shù)據(jù),因此用它們的一半來近似頻率293.66349.23392523.25587.33近似頻率291.97350.65391.942*261.632*295.4511111120.520305440.2757865390.1086165950.3071496930.205838324300.1758122440.0

34、6907235600.15708081340000.057298602050.052802710.05603520200.0753863870.08891702260.095940260000700000.065977510將1.4中的程序改為clear;clcfs=10000;f=784 659 784 1047 880 1047 784 784 523 587 659 587 523 587 784 659 784 1047 988 880 1047 784 784 587 659 698 494 523 880 1047 1047 988 880 988 1047 880 988 104

35、7 880 880 784 659 523 587 ;time=fs*1 0.5 0.5 2 1 1 2 1 0.5 0.5 1 0.5 0.5 4 1 0.5 0.5 1 0.5 1 1 2 1 0.5 0.5 1 0.5 4 1 1 2 1 0.5 0.5 2 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 4 ;N=length(time);y=zeros(1,N);n=1;for num=1:N%利用循環(huán)產(chǎn)生抽樣數(shù)據(jù),num表示樂音編號 t=1/fs:1/fs:(time(num)/fs;%產(chǎn)生第num個樂音的抽樣點(diǎn) P=zeros(1,time(num);%P為存儲包

36、絡(luò)數(shù)據(jù)的向量L=(time(num)*0 1/5 333/1000 333/500 1;%包絡(luò)線端點(diǎn)對應(yīng)的橫坐標(biāo) T=0 1 0.5 0.5 0;%包絡(luò)線端點(diǎn)對應(yīng)的縱坐標(biāo) s=1; b=1:1:time(num);%產(chǎn)生包絡(luò)線抽樣點(diǎn) for k=1:4 P(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); end m=1 0.307149693 0 0.057298602 0.075386387 0 0

37、;. 1 0.307149693 0 0.057298602 0.075386387 0 0;. 1 0.205838324 0.157080813 0 0.088917022 0 0.06597751;. 1 0.108616595 0.069072356 0 0 0 0;. 1 0.275786539 0.175812244 0 0.056035202 0 0;. 1 0.275786539 0.175812244 0 0.056035202 0 0;. 1 0.52030544 0 0 0.05280271 0.09594026 0;. 1 0.108616595 0.069072356 0 0 0 0;%波形幅值矩陣 ss=zeros(1,length(t); for i=1:8 ss=ss+m(i)*sin(2*i*pi*f(num)*t);%加諧波 end y(n:n+time(num)-1)=sin(2*pi*f(num)*t).*P(1:time(num);%給第num個樂音加上包絡(luò) n=n+time(num);endsound(y,fs);plot(y);運(yùn)行后可以聽出聲音更加真實(shí)了。5. 制作GUI界面GUI是Graphical User Interface 圖形用戶界面首先新建一個GUI文件:

溫馨提示

  • 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

提交評論