最新Matlab音樂(lè)合成實(shí)驗(yàn)報(bào)告_第1頁(yè)
最新Matlab音樂(lè)合成實(shí)驗(yàn)報(bào)告_第2頁(yè)
最新Matlab音樂(lè)合成實(shí)驗(yàn)報(bào)告_第3頁(yè)
最新Matlab音樂(lè)合成實(shí)驗(yàn)報(bào)告_第4頁(yè)
最新Matlab音樂(lè)合成實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、精品文檔音樂(lè)合成實(shí)驗(yàn)?zāi)夸浺魳?lè)合成實(shí)驗(yàn) 1摘要: 1第一部分 簡(jiǎn)單的合成音樂(lè) 21.1 合成東方紅 21.2 除噪音,加包絡(luò) 31.3 改變程序,實(shí)現(xiàn)1.2中的音樂(lè)升高和降低一個(gè)八度 71.4 在1.2的音樂(lè)中加入諧波 81.5 自選音樂(lè)合成兩只老虎 8第二部分 用傅里葉變換分析音樂(lè) 92.1 載入 fmt.wav 并播放 92.2 載入文件Guitar.mat ,處理原始數(shù)據(jù)realwave 92.3 分析wave2proc的基波和諧波 112.4 自動(dòng)分析fmt.wav的音調(diào)和節(jié)拍 14第三部分基于傅里葉級(jí)數(shù)的音樂(lè)合成 163.1 用2.3分析出來(lái)的結(jié)果重新加諧波 163.2 通過(guò)2.4提取

2、的吉他音調(diào)信息彈奏東方紅 17實(shí)驗(yàn)收獲 17摘要:本文共有三大部分:第一部分,簡(jiǎn)單的音樂(lè)合成;第二部分,用傅里葉變換 分析音樂(lè);第三部分,基于傅里葉級(jí)數(shù)的音樂(lè)合成。由潛入深,一步一步分析了 用MATLA進(jìn)行音樂(lè)合成的過(guò)程。通過(guò)本實(shí)驗(yàn)達(dá)到了加深對(duì)傅里葉級(jí)數(shù)和傅里葉 分析的理解,熟悉對(duì)MATLABS本使用的目標(biāo)。第一部分簡(jiǎn)單的合成音樂(lè)1.1 合成東方紅根據(jù)東方紅第一小節(jié)的簡(jiǎn)譜和十二平均律計(jì)算出該小節(jié)每個(gè)樂(lè)音的頻率, 在MATLA呻生成幅度為1,抽樣頻率為8kHz的正弦信號(hào)表示這些樂(lè)音,用sound 播放合成的音樂(lè)1=F g 5 S I 2 - | 1 161 2 - |SM樂(lè)一樂(lè)方-3第一小節(jié)前譜

3、由圖可知東方紅的曲調(diào)定為 F,即1=F,對(duì)應(yīng)的頻率為349.23Hz,據(jù)此 可以計(jì)算出其他樂(lè)音的頻率,例如 5對(duì)應(yīng)的頻率為7/12f5 = 349.23父2= 523.25, 一次類推計(jì)算出第一小節(jié)各樂(lè)音對(duì)應(yīng)的頻率為:55621162523.25523.25587.33392349.23349.23293.66392在確定了各樂(lè)音的頻率之后需要確定每個(gè)樂(lè)音的持續(xù)時(shí)間。每小節(jié)有兩拍, 一拍的時(shí)間是0.5s,因此各樂(lè)音的持續(xù)時(shí)間為:55621162時(shí)間0.50.250.2510.50.250.251而在MATLAB表示樂(lè)音所用的抽樣頻率為fs=8000Hz,也就是所1s鐘內(nèi)有 8000個(gè)點(diǎn),抽樣點(diǎn)

4、數(shù)的多少就可表示出每個(gè)樂(lè)音的持續(xù)時(shí)間的長(zhǎng)短。用一個(gè)行向 量來(lái)存儲(chǔ)這段音樂(lè)對(duì)應(yīng)的抽樣點(diǎn),在用 sound函數(shù)播放即可。根據(jù)以上分析在MATLAB編寫如下程序:sound_1_1.mclear;clc;fs=8000; %由樣頻率f=523.25 523.25 587.33 392 349.23 349.23 293.66 392;%&個(gè)樂(lè)音對(duì)應(yīng)的頻率time=fs*1/2,1/4,1/4,1,1/2,1/4,1/4,1;%&個(gè)樂(lè)音的抽樣點(diǎn)數(shù)N=length(time);%£段音樂(lè)的總抽樣點(diǎn)數(shù)east=zeros(1,N);%ffl east向量來(lái)儲(chǔ)存抽樣點(diǎn)n=1;for

5、 num=1:N%RJ用循環(huán)產(chǎn)生抽樣數(shù)據(jù),numg示樂(lè)音編號(hào)t=1/fs:1/fs:time(num)/fs;峻生第 num樂(lè)音的抽樣點(diǎn)east(n:n+time(num)-1)=sin(2*pi*f(num)*t);%由樣點(diǎn)對(duì)應(yīng)的幅值 n=n+time(num);endsound(east,8000);%8放音樂(lè)在MATLAB運(yùn)行sound_1_1.m,播放出了東方紅的第一段,但是可以聽(tīng) 出效果很不好,只能聽(tīng)出具有東方紅的調(diào)子而已。1.2 除噪音,加包絡(luò)在1.1中聽(tīng)到有“啪”的雜聲,下面通過(guò)加包絡(luò)來(lái)消噪音。最簡(jiǎn)單的包絡(luò)為指數(shù)衰減。最簡(jiǎn)單的指數(shù)衰減是對(duì)每個(gè)音乘以et因子,在實(shí)驗(yàn)中首先加的是e5

6、t的衰減,這種衰減方法使用的是相同速度的衰減,但是發(fā)現(xiàn)噪音并沒(méi)有完全消除,播放的音樂(lè)效果不是很好,感覺(jué)音樂(lè)起伏性不強(qiáng)。于 是采用不同速度的衰減,根據(jù)樂(lè)音持續(xù)時(shí)間的長(zhǎng)短來(lái)確定衰減的快慢,樂(lè)音持續(xù) 時(shí)間越長(zhǎng),衰減的越慢,持續(xù)時(shí)間越短,衰減的越快。在 1.1程序的基礎(chǔ)上加上 包絡(luò),編寫如下程序:sound_1_21.mclear;clc;fs=8000; %由樣頻率f=523.25 523.25 587.33 392 349.23 349.23 293.66 392;%&個(gè)樂(lè)音對(duì)應(yīng)的頻率time=fs*1/2,1/4,1/4,1,1/2,1/4,1/4,1;%&個(gè)樂(lè)音的抽樣點(diǎn)數(shù)N=l

7、ength(time);%£段音樂(lè)的總抽樣點(diǎn)數(shù)east=zeros(1,N);%ffl east向量來(lái)儲(chǔ)存抽樣點(diǎn)n=1;for num=1:N%RJ用循環(huán)產(chǎn)生抽樣數(shù)據(jù),numg示樂(lè)音編號(hào)t=1/fs:1/fs:time(num)/fs;峻生第 num樂(lè)音的抽樣點(diǎn)G=zeros(1,time(num);%G/存儲(chǔ)包絡(luò)數(shù)據(jù)的向量G(1:time(num)=exp(1:(-1/time(num):1/8000);%生包絡(luò)點(diǎn)east(n:n+time(num)-1)=sin(2*pi*f(num)*t).*G(1:time(num);%合第num樂(lè)音加上包絡(luò) n=n+time(num);en

8、dsound(east,8000);%§放plot(east);播放后可以聽(tīng)出噪音已經(jīng)消除,同時(shí)因?yàn)椴煌瑫r(shí)長(zhǎng)的樂(lè)音衰減的快慢不一樣, 音樂(lè)聽(tīng)起來(lái)更有起伏感,下圖是加包絡(luò)后的 east圖像。-3210-1-200.511.522.533.54X 10精品文檔更科學(xué)的包絡(luò)如下圖所示,每個(gè)樂(lè)音都經(jīng)過(guò)沖激、衰減、持續(xù)、消失四個(gè)階由上圖可以看出這個(gè)包絡(luò)是四段直線段構(gòu)成的, 因此只要確定了每段線段的 端點(diǎn),即可用端點(diǎn)數(shù)據(jù)寫出直線方程,因?yàn)橹本€方程可以用通式寫出(我用的是 斜截式),因此這段包絡(luò)可以用簡(jiǎn)單的循環(huán)來(lái)完成。例如認(rèn)為包絡(luò)線上的數(shù)據(jù)如 下圖所示:據(jù)此在MATLAB編寫如下程序: sound

9、122.mclear;clc;fs=8000;%由樣頻率f=523.25 523.25 587.33 392 349.23 349.23 293.66 392;%&個(gè)樂(lè)音對(duì)應(yīng)的頻率time=fs*1/2,1/4,1/4,1,1/2,1/4,1/4,1;%&個(gè)樂(lè)音的抽樣點(diǎn)數(shù)N=length(time);%£段音樂(lè)的總抽樣點(diǎn)數(shù)east=zeros(1,N);%ffl east向量來(lái)儲(chǔ)存抽樣點(diǎn)n=1;for num=1:N%RJ用循環(huán)產(chǎn)生抽樣數(shù)據(jù),numg示樂(lè)音編號(hào)t=1/fs:1/fs:(time(num)/fs;%產(chǎn)生第 num樂(lè)音的抽樣點(diǎn)P=zeros(1,time(

10、num);%的存儲(chǔ)包絡(luò)數(shù)據(jù)的向量L=(time(num)*0 1/5 333/1000 333/500 1;%包絡(luò)線端點(diǎn)對(duì)應(yīng)的橫坐標(biāo)T=0 1.5 1 1 0;%包絡(luò)線端點(diǎn)對(duì)應(yīng)的縱坐標(biāo)s=1;b=1:1:time(num);聯(lián)生包絡(luò)線抽樣點(diǎn)for k=1:4P(s:L(k+1)-1)=(T(k+1)-T(k)/(L(k+1)-L(k)*(bL(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 east(n:n+time(num)-1)=sin(2*pi*f(num)*t).*P(1:t

11、ime(num); %合第num樂(lè)音加上包絡(luò)n=n+time(num);endsound(east,8000); plot(east);運(yùn)行得到的圖像為:21.5 10.5 0-0.5-1-1.5-200.511.522.533.54X 10下圖是兩個(gè)樂(lè)音交接處的局部放大圖,可以看到前一個(gè)樂(lè)音一直衰減到0,后一個(gè)樂(lè)音從0開始增加,因此消除了噪音。若不需要每個(gè)音都衰減到0,例如只需衰減到持續(xù)階段幅值的20%對(duì)程序做 簡(jiǎn)單的修改即可,將T=0 1.5 1 1 0改為T=0.2 1.5 1 1 0.2 運(yùn)行得到的結(jié)果2 1.51 0.50 -0.5-1 -1.5-200.511.522.533.54

12、x 10由圖可見(jiàn),每個(gè)樂(lè)音都是衰減到一較小值而不是0,也能消除噪音,同時(shí)音樂(lè)聽(tīng)起來(lái)更加連續(xù)。1.3 改變程序,實(shí)現(xiàn)1.2中的音樂(lè)升高和降低一個(gè)八度升高一個(gè)八度即每個(gè)樂(lè)音的頻率都提高一倍,變?yōu)樵瓉?lái)的 2被;降低一個(gè)八 度即每個(gè)樂(lè)音的頻率都減小一倍,變?yōu)樵瓉?lái)的 1/2。因此最簡(jiǎn)單的辦法是將存儲(chǔ) 樂(lè)音頻率的向量每個(gè)元素改變?yōu)?或1/2倍。即將程序中的 f=523.25 523.25 587.33 392 349.23 349.23 293.66 392; 改為 f=523.25 523.25 587.33 392 349.23 349.23 293.66 392*2; 或 f=523.25 523.

13、25 587.33 392 349.23 349.23 293.66 392/2;將上述音樂(lè)上高半個(gè)音階,即將頻率變?yōu)樵瓉?lái)的21/12 (1.06)倍,可以利用resamlpe函數(shù)對(duì)原來(lái)的數(shù)據(jù)點(diǎn)進(jìn)行重采樣來(lái)實(shí)現(xiàn) east=resample(east,100,106);因?yàn)閞esample進(jìn)行重新采樣后會(huì)使每個(gè)樂(lè)音的持續(xù)時(shí)間改變,但是因?yàn)樯甙雮€(gè)音階,頻率改變不大,所以每個(gè)音的持續(xù)時(shí)間是基本不變的。1.4在1.2的音樂(lè)中加入諧波在1.2的音樂(lè)中加上二、三、四次諧波,基波幅度為1,高次諧波幅度分別為0.2、0.3、0.1。只需將1.2程序改為sound14.mclear;clc;fs=8000;%

14、由樣頻率f=523.25 523.25 587.33 392 349.23 349.23 293.66 392;time=fs*1/2,1/4,1/4,1,1/2,1/4,1/4,1;珞個(gè)樂(lè)音對(duì)應(yīng)的頻率 %各個(gè)樂(lè)音的抽樣點(diǎn)數(shù)N=length(time);east=zeros(1,N);n=1;for num=1:N地段音樂(lè)的總抽樣點(diǎn)數(shù)%用east向量來(lái)儲(chǔ)存抽樣點(diǎn)%RJ用循環(huán)產(chǎn)生抽樣數(shù)據(jù),numg示樂(lè)音編號(hào)t=1/fs:1/fs:(time(num)/fs;P=zeros(1,time(num);%產(chǎn)生第num樂(lè)音的抽樣點(diǎn)%的存儲(chǔ)包絡(luò)數(shù)據(jù)的向量L=(time(num)*0 1/5 333/100

15、0 333/500 1;T=0 1.5 1 1 0; s=1;b=1:1:time(num);for k=1:4%包絡(luò)線端點(diǎn)對(duì)應(yīng)的橫坐標(biāo) %包絡(luò)線端點(diǎn)對(duì)應(yīng)的縱坐標(biāo)%產(chǎn)生包絡(luò)線抽樣點(diǎn)P(s:L(k+1)-1)=(T(k+1)-T(k)/(L(k+1)-L(k)*(bL(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);蹴形幅值矩陣endm=1 0.3 0.2;ss=zeros(1,length(t);勵(lì)口諧波for i=1:length(m) ss=ss+m(i)*sin(2*i*pi*f(nu

16、m)*t);endeast(n:n+time(num)-1)=ss.*P(1:time(num);%合第num樂(lè)音加上包絡(luò)n=n+time(num);endsound(2*east,8000); plot(east);即可,加顏色部分為修改的部分,加上諧波后音樂(lè)效果變得更好了。1.5自選音樂(lè)合成一一兩只老虎兩只老虎41 = C 1231 12311345- 345-p曲調(diào)為C,因此可以得到每個(gè)樂(lè)音對(duì)應(yīng)的頻率分別為:12345262.63293.66329.63349.23392每小節(jié)有四拍,一拍的時(shí)間是0.5s,因此各樂(lè)音的持續(xù)時(shí)間為:12311231時(shí)間0.50.50.50.50.50.50

17、.50.5345345時(shí)間0.50.510.50.510.25sound_1_5.mclear;clc;fs=8000;%由樣頻率f=262.63 293.66 329.63 262.63 262.63 293.66 329.63 262.63 329.63349.23 392;%&個(gè)樂(lè)音對(duì)應(yīng)的頻率time=fs*1/2,1/2,1/2,1/2,1/2,1/2,1/2,1/2,1/2,1/2,1,1/2,1/2,1;%各個(gè)樂(lè)音的抽樣點(diǎn)數(shù)N=length(time);%£段音樂(lè)的總抽樣點(diǎn)數(shù)east=zeros(1,N);%ffl east向量來(lái)儲(chǔ)存抽樣點(diǎn)n=1;for num=

18、1:N%RJ用循環(huán)產(chǎn)生抽樣數(shù)據(jù),numg示樂(lè)音編號(hào)t=1/fs:1/fs:time(num)/fs;峻生第 num樂(lè)音的抽樣點(diǎn)G=zeros(1,time(num);%G/存儲(chǔ)包絡(luò)數(shù)據(jù)的向量G(1:time(num)=exp(1:(-1/time(num):1/8000);%生包絡(luò)點(diǎn)east(n:n+time(num)-1)=sin(2*pi*f(num)*t).*G(1:time(num);%合第num樂(lè)音加上包絡(luò) n=n+time(num);endsound(east,8000);%§放plot(east);第二部分用傅里葉變換分析音樂(lè)2.1 載入fmt.wav并播放利用wavr

19、ead函數(shù)載入,用sound函數(shù)播放,程序如下:sound_2_1.mwave=wavread('fmt.wav');sound(wave)這段音樂(lè)聽(tīng)起來(lái)比之前合成的音樂(lè)更加真實(shí),因?yàn)槔镞吅胸S富的諧波。2.2 載入文件Guitar.mat ,處理原始數(shù)據(jù) realwave載入文件Guitar.mat ,分析wave2proc是怎么由realwave得到的。利用load Guitar.mat; 載入并用 plot 函數(shù)將realwave、wave2proc分別畫出,得 到以下兩幅圖0.25-0.1-0.15realwave0.20.150.10.050-0.05-0.2 0r5

20、01001502002500.250.20.150.1wave2procI i II j n Ii10.050-0.05-0.1-0.15 050100150200250可以看到,wave2proc比realwave的周期性好得多,去掉了非線性諧波和噪 聲。在時(shí)域做,從圖上可以看到,realwave的數(shù)據(jù)大約是10個(gè)周期的共243個(gè)數(shù) 據(jù),因此可以用resample函數(shù)對(duì)realwave進(jìn)行重新采樣,將采樣點(diǎn)提高到250個(gè), 那么重采樣后每個(gè)周期有25個(gè)點(diǎn),將這25個(gè)點(diǎn)對(duì)應(yīng)相加求平均值后得到一個(gè)周期 的值,因?yàn)檫M(jìn)行了平均,減小了非線性諧波和噪音,然后將這25個(gè)數(shù)據(jù)延托成十 個(gè)周期即250個(gè)點(diǎn),

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

22、,250); %B采樣,將點(diǎn)數(shù)變回 243 hold on,plot(wave2, 'r' ),hold off ; %等處理后的數(shù)據(jù)繪出,紅色 hold on,plot(wave2proc);%等所給的數(shù)據(jù)繪出,藍(lán)色運(yùn)行后的結(jié)果為:0.250.20.150.10.050-0.05-0.1-0.15由圖可見(jiàn),兩組數(shù)據(jù)重合的很好,說(shuō)明這種方法是很不錯(cuò)的方法。2.3 分析wave2proc的基波和諧波為了分析wave2proc的基波和諧波,可以對(duì)wave2proc進(jìn)行傅里葉變換,得到 wave2proc的幅值譜,在頻譜圖上的第一個(gè)突出的波峰對(duì)應(yīng)的頻率即為wave2proc基頻,利用

23、help fft學(xué)習(xí)了 MATLAB快速傅里葉變換函數(shù)fft的用法,編寫了如 下程序:clear;clc;load Guitar.mat;fs=8000;NFFT = 2Anextpow2(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)0.080.070.060.050.040.030.020.01005001000150020002500300035004000雖然從圖上可以大概看出包絡(luò),但是非常不明顯,

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

25、000;wave2proc =repmat(wave2proc,20,1);%等 wave2proc重復(fù)20次NFFT = 2Anextpow2(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)可以看出幅值譜的離散化程度已經(jīng)非常高了。由圖讀出wave2proc的基頻為329.1Hz,幅值為0.05401,高次諧波幅值分別為:W 23456789波幅0.076760.048410.051900.0057090.

26、019230.0067410.007326值2.4 自動(dòng)分析fmt.wav的音調(diào)和節(jié)拍思路分析:將fmt.wav導(dǎo)入后得到的是一個(gè)向量,它包含了這段音樂(lè)的所有信息,要自 動(dòng)分析這段音樂(lè)的音調(diào)就需要將每個(gè)音調(diào)對(duì)應(yīng)的點(diǎn)進(jìn)行傅里葉變換得到其幅值 譜,在幅值譜上找到第一個(gè)幅值較大的極大值點(diǎn),該點(diǎn)對(duì)應(yīng)的就是該音調(diào)的基頻,得到基頻后就可以得到高次諧波的幅值。為了使對(duì)每個(gè)音調(diào)進(jìn)行傅里葉變換后得 到的幅值譜離散程度高,應(yīng)該將每個(gè)音調(diào)的數(shù)據(jù)在時(shí)域上重復(fù)多次,由于這些點(diǎn)都是直接采集的為做處理的點(diǎn),因此其重復(fù)次數(shù)應(yīng)該足夠大才能體現(xiàn)出較強(qiáng)周期 性,本實(shí)驗(yàn)采用重復(fù)1000次,雖然重復(fù)次數(shù)越多越好,但是次數(shù)太大,程序運(yùn)行

27、 的速度會(huì)大大降低。這里邊還有兩個(gè)關(guān)鍵點(diǎn):第一,在從幅值譜上找基頻時(shí),因?yàn)閳D上的極大值 點(diǎn)很多,怎么能讓程序自動(dòng)確定出準(zhǔn)確的基頻。第二,在程序找到了基頻之后, 再由基頻去獲取高次諧波的幅值時(shí)需要有一定的容錯(cuò)能力,例如若基頻為200Hz, 幅值為1,那么對(duì)應(yīng)的二次諧波的頻率為400Hz,但是很可能恰好幅值譜上400Hz 處的幅值為0.01,但是401Hzi的幅值為0.2,這時(shí)實(shí)際上的二次諧波應(yīng)該為401Hz, 但是若沒(méi)有給基頻一個(gè)容錯(cuò)范圍,顯然找到的二次諧波的幅值是不正確的。針對(duì)以上提出的兩個(gè)關(guān)鍵點(diǎn),我找到了兩條有針對(duì)性的解決辦法。對(duì)于第一 點(diǎn),因?yàn)榉底V上極大值點(diǎn)的幅值足夠大才能將其定位基頻,

28、因此在分析了幾個(gè)音調(diào)后發(fā)現(xiàn)基頻處的幅值都在0.025以上,因此將基頻處的限定條件改為幅值大 于0.025的,但是在運(yùn)行后發(fā)現(xiàn),有幾個(gè)音調(diào)沒(méi)有分析出來(lái),說(shuō)明它們的基頻幅 值小于0.025 ,其實(shí)可以觀察一下fmt.wav的波形就會(huì)發(fā)現(xiàn),有幾段的整體幅值很 小,因此基頻幅值小,于是又在加上限定條件,若所有點(diǎn)的幅值都小于0.02,那么再用0.015作為幅值的限定條件繼續(xù)找,這樣就將剩下的音調(diào)基頻也確定出來(lái) 了。對(duì)于上述的第二點(diǎn),可以將確定出的基頻的誤差設(shè)為+-1Hz,例如程序確定的基頻為200Hz,實(shí)際的基頻應(yīng)該在(200-1 )到(200+1)之間,那么k次諧波對(duì) 應(yīng)的頻率范圍是k*(200-1)

29、到k*(200+1),在這個(gè)區(qū)間中繼續(xù)找幅值的極大值點(diǎn)就 是k次諧波對(duì)應(yīng)點(diǎn)。根據(jù)以上思路,下面開始編寫用于分析一個(gè)音調(diào)頻率的函數(shù)analysis 。在取諧波幅值時(shí),幅值小于基波幅值5%的諧波認(rèn)為其幅值為0,最終諧波的幅值用歸一化后的數(shù)據(jù)表示。每一步的詳細(xì)思路見(jiàn)注釋。analysis.m精品文檔function y1 y2=analysis(w,a)%設(shè)有兩個(gè)返回值,y1返回頻率,y2返回幅值,兩個(gè)變量,w為待分析數(shù)組, a為數(shù)據(jù)的抽樣頻率fs=a;%!里葉變換的抽樣頻率y1=zeros(1,7);%求最大7次諧波,因此定義1*7矩陣y2=zeros(1,7);NFFT = 2Anextpow2

30、(length(w);Y = fft(w,NFFT)/length(w);g = fs/2*linspace(0,1,NFFT/2+1);p=2*abs(Y(1:NFFT/2+1);plot(g,p)%以上為傅里葉變換部分d=floor(NFFT/fs);%等誤差I(lǐng)Hzft成對(duì)應(yīng)的點(diǎn)數(shù)for k=2:length(p)-1if (p(k)>0.02)&&(p(k)>p(k-1)&&(p(k)>p(k+1)始找基頻的條件y1(1)=g(k);儲(chǔ)基頻y2(1)=p(k);%存儲(chǔ)基波幅值breakelseif (p(k)>0.015)&

31、&(p(k)>p(k-1)&&(p(k)>p(k+1)%若未找到基頻,將幅值限制改為0.015,繼續(xù)尋找y1(1)=g(k);y2(1)=p(k);endendfor t=2:7for i=t*(k-d):t*(k+d)就誤差允許的范圍內(nèi)尋找t次諧波點(diǎn)if(p(k)>0.02)&&(p(i)>0.05*p(k)&&(p(i)>p(i-1)&&(p(i)>p(i+1)y2(t)=p(i)/y2(1);%皆波幅值歸一化yi(t)=g(i);breakelseif(p(k)>0.015)

32、&&(p(i)>0.05*p(k)&&(p(i)>p(i-1)&&(p(i)>p(i+1)y2(t)=p(i)/y2(1);y1(t)=g(i);應(yīng)一段循環(huán)是與找基頻條件相對(duì)應(yīng)的獲取高次諧波幅值end精品文檔endend精品文檔在編寫完分析函數(shù)analysis后即可編寫自動(dòng)分析的主程序。 首先在Coool Edit中手動(dòng)標(biāo)定音調(diào)交界處的時(shí)間節(jié)點(diǎn),得到了 time向量time=floor(0.096 0.267 1.767 2.234 2.706 3.146 3.606 4.056 4.520 5.030 5.749 5.978

33、7.015 7.709 7.923 8.028 8.490 8.959 9.454 9.852 10.125 10.356. 10.565 10.822 11.292 11.741 12.284 12.741.13.269 13.758 14.315 14.939 15.432/16.384*N);'/16.384*N '中16.384是fmt.wav的總長(zhǎng)度,N為fmt.wav數(shù)據(jù)點(diǎn)的總數(shù),這一項(xiàng) 是為了將時(shí)間轉(zhuǎn)換成對(duì)應(yīng)的數(shù)據(jù)點(diǎn)數(shù),由于點(diǎn)的個(gè)數(shù)必須是整數(shù),因此用 floor 函數(shù)進(jìn)行取整。在得到了對(duì)應(yīng)音調(diào)交接處的點(diǎn)后就可以進(jìn)行編程了,用循環(huán)一個(gè)一個(gè)音調(diào)分析。程序如下: sou

34、nd_2_4.m clear;clc; wave=wavread('fmt.wav');哦入文件N=length(wave);%確定數(shù)據(jù)總數(shù)time=floor(0.096 0.267 1.767 2.234 2.706 3.146 3.606.4.056 4.520 5.030 5.749 5.978 7.015 7.709 7.923.8.028 8.490 8.959 9.454 9.852 10.125 10.356.10.565 10.822 11.292 11.741 12.284 12.741.13.269 13.758 14.315 14.939 15.432/

35、16.384*N);%節(jié)點(diǎn)向量fs=N/16.384;%!定數(shù)據(jù)的抽樣頻率n=length(time); for k=1:n; if k=1 temp=wave(1:time(k)-1); else temp=wave(time(k-1):time(k)-1); %等第k個(gè)音調(diào)數(shù)據(jù)存入temp矩陣 end temp=repmat(temp,1000,1);%等數(shù)據(jù)重復(fù) 1000次F(k,1:7) U(k,1:7)=analysis(temp,fs);%等每個(gè)音調(diào)的處理結(jié)果分別保存,F保存頻率,U保存幅值 end運(yùn)行后的結(jié)果見(jiàn)Excel文件“自動(dòng)分析結(jié)果”第三部分 基于傅里葉級(jí)數(shù)的音樂(lè)合成3.1

36、 用2.3分析由來(lái)的結(jié)果重新加諧波基頻329.1Hz 幅值為0.05401W 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.007326;即可3.2 通過(guò)2.4提取的吉他音調(diào)信息彈奏東方紅根據(jù)2.4分析的結(jié)果可以提取出吉他的音調(diào)信息,在“自動(dòng)分析結(jié)果” Excel 文件中用黃色標(biāo)出了出來(lái),一下所用的音調(diào)信息用最接近的頻率來(lái)

37、近似。 而所給 信息中缺少523.25和587.33的數(shù)據(jù),因此用它們的一般來(lái)近似所293.66349.23392523.25587.33近似頻 率291.97350.65391.942*261.632*295.451111111120.520305440.2757865390.1086165950.3071496930.205838324300.1758122440.06907235600.15708081340000.057298602050.052802710.05603520200.0753863870.08891702260.0959402601000700000.065977510將1.4中的程序改為sound_3_2.mfs=8000;%由樣頻率f=523.25 523.25 587.33 392 349.23 349.23 293.66 392;%各個(gè)樂(lè)音對(duì)應(yīng)的頻率time=fs*1/2,1/4,1/4,1,1/2,1/4,1/4,1;%&個(gè)樂(lè)音的抽樣點(diǎn)數(shù)N=l

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論