語音特徵引數MFCC計算的詳細過程

2021-07-04 00:06:43 字數 3004 閱讀 3126

注:老早之前就在看語音頻號處理方面的知識,每當過了很久都會忘記,由於之前對語音特徵mfcc提取的流程還是非常清楚的,但是對於一些細節以及一些原理一些的東西還是不是很明白,通過這次的總結,我終於明白的其中的技術細節以及設計方法,包括濾波器的設計,以及引數的具體意義,希望這個總結能給自己增加更多的印象,課本上好像對各個三角濾波器的設計沒有過多的講解,也沒講流程,希望這裡的總結能有所幫助。

一、mfcc計算總體流程

1.訊號的預處理,包括預加重(preemphasis),分幀(frame blocking),加窗(windowing)。假設語音頻號的取樣頻率fs=8khz.由於語音頻號在10-30ms認為是穩定的,則可設定幀長為80~240點。幀移可以設定為幀長的1/2.

2.對每一幀進行fft變換,求頻譜,進而求得幅度譜。

3.對幅度譜加mel濾波器組(mel

濾波器組設計問題)。

4.對所有的濾波器輸出做對數運算(logarlithm),再進一步做離散余弦變換dct可得mfcc。

流程圖如下所示:

二、實際頻率與mel頻率的轉換

mel頻率與實際頻率的具體關係如下:

人耳的聽覺特性與mel頻率的增長一致。與實際頻率在1000hz以下呈現線性分布,1000hz以上呈現對數增長。

在mel

頻率軸上配置

k個通道的三角形濾波器組,

k的個數由訊號的截止頻率決定。

設計的過程如下:

假設語音頻號的取樣頻率,幀長n=256,濾波器個數k=22

由此可得語音頻號的最大頻率為:

根據下面的公式:

可以求得出最大的mel頻率為:

由於在mel刻度範圍內,各個三角濾波器的中心頻率是相等間隔的線性分布。由此,可以計算兩個相鄰三角濾波器的中心頻率的間距為:

因此,各三角形濾波器在mel刻度上的中心頻率可以表示為:

由上面的中心頻率可以計算出對應的線性刻度上的頻率。如下圖所示:

下面採用matlab設計mel三角形濾波器如下:

//獲取mel三角濾波器的引數

fs為取樣頻率,filternum為三角濾波器的個數

maxmelfreq = freq2mel(fs/2); %將線性頻率轉化為mel頻率,得到最大的mel頻率

sidewidth=maxmelfreq/(filternum+1);%求頻帶寬頻,即mel濾波器寬度

index=0:filternum-1;%濾波器的中心

filterbankprm=floor(mel2freq([index;index+1;index+2]*sidewidth)/fs*framesize)+1;

filterbankprm(end, end)= framesize/2;

得到如下的三角形濾波器,橫座標對應於fft中的點的下標:

注:這裡選擇的幀長為256點,然後fft的點數也為256,由於是對稱的,所以只取前面一半的點計算頻譜。然後加入到三角濾波器中。

每乙個三角形濾波器的中心頻率c(l) 在mel頻率軸上等間隔分布。設o(l),c(l),h(l) 分別是第l 個三角形濾波器的下限,中心,和上限頻率,則相鄰三角形濾波器之間的下限,中心,上限頻率的關係如下:c(l)=h(l-1)=o(l+1)

根據語音頻號幅度譜

對所有的濾波器輸出做對數運算,再進一步做離散余弦變換(dct)即可得到mfcc。

由上公式可知,mfcc特徵引數的長度與濾波器的個數無關。只與dct有關。

% === 對幅度譜進行三角濾波過程

function tbfcoef = tribandfilter(fftmag, p, filterbankparam)

fstart=filterbankparam(1,:);                %fftmag一幀資料的幅度譜

fcenter=filterbankparam(2,:);%濾波器的中心點,每列代表乙個濾波器的中心頻率

fstop=filterbankparam(3,:);

% triangular bandpass filter.

for i=1:p %濾波器個數

for j = fstart(i):fcenter(i), %第i個濾波器起始頻譜點和中心頻譜點的輸出

filtmag(j) = (j-fstart(i))/(fcenter(i)-fstart(i));

endfor j = fcenter(i)+1:fstop(i),

filtmag(j) = 1-(j-fcenter(i))/(fstop(i)-fcenter(i));

endtbfcoef(i) = sum(fftmag(fstart(i):fstop(i)).*filtmag(fstart(i):fstop(i))'); %第i個濾波器的輸出

endtbfcoef=log(eps+tbfcoef.^2); %求得每個濾波器的對數輸出,有多少個濾波器就有多少個輸出,對應為每一幀

語音特徵引數MFCC計算的詳細過程

注 老早之前就在看語音頻號處理方面的知識,每當過了很久都會忘記,由於之前對語音特徵mfcc提取的流程還是非常清楚的,但是對於一些細節以及一些原理一些的東西還是不是很明白,通過這次的總結,我終於明白的其中的技術細節以及設計方法,包括濾波器的設計,以及引數的具體意義,希望這個總結能給自己增加更多的印象,...

語音特徵引數MFCC計算的詳細過程

語音特徵引數mfcc計算的詳細過程 注 本文 xiaoding133 的部落格,感謝博主的分享。一 mfcc計算總體流程 1.訊號的預處理,包括預加重 preemphasis 分幀 frame blocking 加窗 windowing 假設語音頻號的取樣頻率fs 8khz.由於語音頻號在10 30...

MFCC(語音特徵引數)

一 mfcc計算總體流程 1.訊號的預處理,包括預加重 preemphasis 分幀 frame blocking 加窗 windowing 假設語音頻號的取樣頻率fs 8khz.由於語音頻號在10 30ms認為是穩定的,則可設定幀長為80 240點。幀移可以設定為幀長的1 2.2.對每一幀進行ff...