語音特徵引數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));
end
for j = fcenter(i)+1:fstop(i),
filtmag(j) = 1-(j-fcenter(i))/(fstop(i)-fcenter(i));
end
tbfCoef(i) = sum(fftMag(fstart(i):fstop(i)).*filtmag(fstart(i):fstop(i))'); %第i個濾波器的輸出
end
tbfCoef=log(eps+tbfCoef.^2); %求得每個濾波器的對數輸出,有多少個濾波器就有多少個輸出,對應為每一幀
來源: http://blog.csdn.net/xiaoding133/article/details/8106672
相關文章
- 計算機啟動過程詳解計算機
- 泊松過程的詳細理解
- MySQL MHA詳細搭建過程MySql
- MySQL 中 整數型別的儲存和範圍計算過程詳解MySql型別
- 【數學】主成分分析(PCA)的詳細深度推導過程PCA
- nginx配置https詳細過程NginxHTTP
- centos7安裝的詳細過程CentOS
- 原創:oracle 授權的詳細過程Oracle
- 細述程式語言的發展過程
- oracle 的DML命令的詳細處理過程Oracle
- C語言_指標變數的賦值與運算,很詳細C語言指標變數賦值
- linux下cacti的搭建之詳細過程!Linux
- Spark計算過程分析Spark
- [轉]反向代理過程與Nginx特點詳解Nginx
- 算數表示式求值--c語言課程設計C語言
- 超詳細的ArrayList擴容過程(配合原始碼詳解)原始碼
- 詳細說明搜尋引擎優化的過程優化
- MySQL主從複製的詳細過程介紹MySql
- 深入理解Fabric環境搭建的詳細過程
- Spring BeanFactory例項化Bean的詳細過程SpringBean
- 新手搭建雲伺服器詳細過程伺服器
- MySQL MGR單主模式詳細搭建過程MySql模式
- ESXI 6.7 系統安裝詳細過程
- mysql5.7.23安裝詳細過程MySql
- Webpack安裝配置及打包詳細過程Web
- 詳細瞭解 synchronized 鎖升級過程synchronized
- oracle 11G RAC 建立詳細過程Oracle
- Oracle->Mysql dblink 建立詳細過程OracleMySql
- Hadoop2.3.0詳細安裝過程Hadoop
- torch.einsum 的計算過程
- 計算機啟動過程計算機
- 【原創】 一個會計軟體的演算法分析過程(詳細)演算法
- MFCC(梅爾頻率倒譜系數)
- 通過計算機語言自定義保留小數計算機
- 細數動態IP的特點
- mac裝win10雙系統的詳細過程MacWin10
- SQL語句執行過程詳解SQL
- 計算的簇數超過限制