日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

声音处理之-梅尔频率倒谱系数(MFCC)

發布時間:2025/3/21 80 豆豆
生活随笔 收集整理的這篇文章主要介紹了 声音处理之-梅尔频率倒谱系数(MFCC) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

聲音處理之-梅爾頻率倒譜系數(MFCC)

梅爾(Mel)頻率分析

在語音識別(SpeechRecognition)和話者識別(SpeakerRecognition)方面,最常用到的語音特征就是梅爾倒譜系數(Mel-scaleFrequency Cepstral Coefficients,簡稱MFCC)。根據人耳聽覺機理的研究發現,人耳對不同頻率的聲波有不同的聽覺敏感度。從200Hz到5000Hz的語音信號對語音的清晰度影響對大。兩個響度不等的聲音作用于人耳時,則響度較高的頻率成分的存在會影響到對響度較低的頻率成分的感受,使其變得不易察覺,這種現象稱為掩蔽效應。由于頻率較低的聲音在內耳蝸基底膜上行波傳遞的距離大于頻率較高的聲音,故一般來說,低音容易掩蔽高音,而高音掩蔽低音較困難。在低頻處的聲音掩蔽的臨界帶寬較高頻要小。所以,人們從低頻到高頻這一段頻帶內按臨界帶寬的大小由密到疏安排一組帶通濾波器,對輸入信號進行濾波。將每個帶通濾波器輸出的信號能量作為信號的基本特征,對此特征經過進一步處理后就可以作為語音的輸入特征。由于這種特征不依賴于信號的性質,對輸入信號不做任何的假設和限制,又利用了聽覺模型的研究成果。因此,這種參數比基于聲道模型的LPCC相比具有更好的魯邦性,更符合人耳的聽覺特性,而且當信噪比降低時仍然具有較好的識別性能。

梅爾刻度是一種基于人耳對等距的音高(pitch)變化的感官判斷而定的非線性頻率刻度,和頻率的赫茲的關系如下:

m=2595*log10(1+f/700)

所以當在梅爾刻度上面上是均勻分度的話,對于的赫茲之間的距離將會越來越大。梅爾刻度的濾波器組在低頻部分的分辨率高,跟人耳的聽覺特性是相符的,這也是梅爾刻度的物理意義所在。

倒譜分析

對于一個語音的頻譜圖,峰值就表示語音的主要頻率成分,我們把這些峰值稱為共振峰(formants),而共振峰就是攜帶了聲音的辨識屬性(就是個人身份證一樣)。所以它特別重要。用它就可以識別不同的聲音。

我們要提取的不僅僅是共振峰的位置,還得提取它們轉變的過程。所以我們提取的是頻譜的包絡(Spectral Envelope)。這包絡就是一條連接這些共振峰點的平滑曲線。我們可以這么理解,將原始的頻譜由兩部分組成:包絡和頻譜的細節。這里用到的是對數頻譜,所以單位是dB。那現在我們需要把這兩部分分離開,這樣我們就可以得到包絡了。

這就用到了倒譜分析。倒譜(cepstrum)是一種信號的傅里葉變換經對數運算后再進行傅里葉反變換得到的譜。倒譜分析可用于將信號分解,兩個信號的卷積轉化為兩個信號的相加。

假設上面的頻率譜X(k),時域信號為x(n),那么滿足

X(k)=DFT(x(n))

考慮將頻域X(k)拆分為兩部分的乘積:

X(k)=H(k)E(k)

假設兩部分對應的時域信號分別是h(n)和e(n),那么滿足:

x(n)=h(n)?e(n)

此時我們是無法區分開h(n)和e(n),對頻域兩邊取log:

log(X(k))=log(H(k))+log(E(k))

然后進行反傅里葉變換:

IDFT(log(X(k)))=IDFT(log(H(k)))+IDFT(log(E(k)))

得到的時域信號如下:

X’(n)=h’(n)+e’(n)

此時獲得時域信號x’(n)即為倒譜,已經和原始的時域信號x(n)不一樣,但是可以把時域信號的卷積關系轉化為了線性加關系。倒譜分析已經將兩部分對應的時域信號的卷積關系轉化為了線性加關系,所以只需要將倒譜通過一個低通濾波器即可獲得包絡部分對應的時域信號h’(t)。

梅爾頻率倒譜系數MFCC

通常,計算MFCC之前,還會通過預加重、分幀和加窗、短時FFT等手段將原始原始聲音信號的spectrogram聲譜圖,MFCC對聲譜信號進行分析。

提取MFCC特征的過程:

1)先對語音進行預加重、分幀和加窗;

2)對每一個短時分析窗,通過FFT得到對應的頻譜;

3)將上面的頻譜通過Mel濾波器組得到Mel頻譜;

4)在Mel頻譜上面進行倒譜分析(取對數,做逆變換,實際逆變換一般是通過DCT離散余弦變換來代替上文的IDFT,取DCT后的第2個到第13個系數作為MFCC系數),獲得Mel頻率倒譜系數MFCC。

[x fs]= audioread ('test.wav');bank=melbankm(24,256,fs,0,0.4,'t');%Mel濾波器的階數為24,fft變換的長度為256,采樣頻率為16000Hz%歸一化mel濾波器組系數bank=full(bank);bank=bank/max(bank(:));for k=1:12 %歸一化mel濾波器組系數 n=0:23; dctcoef(k,:)=cos((2*n+1)*k*pi/(2*24));endw=1+6*sin(pi*[1:12]./12);%歸一化倒譜提升窗口w=w/max(w);%預加重濾波器xx=double(x);xx=filter([1-0.9375],1,xx);%語音信號分幀xx=enframe(xx,256,80);%對x 256點分為一幀%計算每幀的MFCC參數for i=1:size(xx,1) y=xx(i,:); s=y'.*hamming(256); t=abs(fft(s));%fft快速傅立葉變換 t=t.^2; c1=dctcoef*log(bank*t(1:129)); c2=c1.*w'; m(i,:)=c2';end%求取一階差分系數dtm=zeros(size(m));for i=3:size(m,1)-2 dtm(i,:)=-2*m(i-2,:)-m(i-1,:)+m(i+1,:)+2*m(i+2,:);enddtm=dtm/3;%求取二階差分系數dtmm=zeros(size(dtm));for i=3:size(dtm,1)-2 dtmm(i,:)=-2*dtm(i-2,:)-dtm(i-1,:)+dtm(i+1,:)+2*dtm(i+2,:);enddtmm=dtmm/3;%合并mfcc參數和一階差分mfcc參數ccc=[m dtm dtmm];%去除首尾兩幀,因為這兩幀的一階差分參數為0ccc=ccc(3:size(m,1)-2,:);subplot(2,1,1)ccc_1=ccc(:,1);plot(ccc_1);title('MFCC');ylabel('幅值');[h,w]=size(ccc);A=size(ccc);subplot(212) plot([1,w],A);xlabel('維數');ylabel('幅值');title('維數與幅值的關系')

運行上段代碼需要用到matlab的語音處理工具箱,voicebox是一個MATLAB中的語音處理工具箱,支持MATLAB6.5以上的版本。其中包含了對語音的分幀處理,濾波,加窗,參數提取等等函數,是語音識別幾乎不可缺少的一個工具箱。

官方下載:http://www.ee.ic.ac.uk/hp/staff/dmb/voicebox/voicebox.zip

voicebox的添加

解壓下載的voicebox,把解壓包放在某一個路徑下d:/…/voicebox

打開MATLAB,在命令行設置MATLAB的搜索路徑

addpath(genpath('d:/…/voicebox'))

或者

path(' d:/…/voicebox',path)

檢驗是否設置成功,在命令行上輸入 which activlev.m,看一下是否顯示正確的路徑。這樣MATLAB就可以使用voicebox的函數了,

?

總結

以上是生活随笔為你收集整理的声音处理之-梅尔频率倒谱系数(MFCC)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。