1. 程式人生 > >Mel倒譜系數到底是什麼

Mel倒譜系數到底是什麼

Mel倒譜系數(MFCC)是啥?跟頻譜包絡啥關係?跟語音的頻譜有什麼區別?
這裡我們好好講一講。

在任意一個自動語音識別系統中,語音識別的第一步就是提取特徵。換句話說,我們需要把音訊訊號中具有辨識性的成分提取出來,然後把其他的亂七八糟的資訊扔掉,例如背景噪聲啊,情緒啊等等。搞清語音是怎麼產生的,對於我們理解語音有很大幫助。人通過聲道產生聲音,聲道的形狀決定了發出怎樣的聲音。如果我們可以準確的知道這個形狀,那麼我們就可以對產生的音素進行準確的描述。聲道的形狀在語音短時功率譜的包絡中顯示出來。而MFCCs就是一種準確描述這個包絡的一種特徵。換句話說,Mel倒譜系數其實是來自於頻譜包絡的。

好,到這裡,我們提到了一個很重要的關鍵詞:聲道的形狀,然後知道它很重要,還知道它可以在語音短時功率譜的包絡中顯示出來。哎,那什麼是功率譜?什麼是包絡?什麼是MFCCs?它為什麼有效?如何得到?下面咱們慢慢道來。

一、頻譜圖(Spectrogram)

         我們處理的是語音訊號,那麼如何去描述它很重要。因為不同的描述方式放映它不同的資訊。那怎樣的描述方式才利於我們觀測,利於我們理解呢?這裡我們先來了解一個叫頻譜圖的東西。


這個圖上面是時域的音訊波形,下面是頻域的音訊頻譜,也就是頻譜圖。在這裡,這段語音被分為很多幀,每幀語音都對應於一個頻譜(通過短時FFT計算),頻譜表示頻率與能量的關係。在實際使用中,頻譜圖有三種,即線性振幅譜、對數振幅譜、自功率譜(對數振幅譜中各譜線的振幅都作了對數計算,所以其縱座標的單位是dB(分貝)。這個變換的目的是使那些振幅較低的成分相對高振幅成分得以拉高,以便觀察掩蓋在低幅噪聲中的週期訊號)。

我們先將其中一幀語音的頻譜通過座標表示出來,如上圖左。現在我們將左邊的頻譜旋轉90度。得到中間的圖。然後把這些幅度對映到一個灰度級表示(也可以理解為將連續的幅度量化為256個量化值?),0表示黑,255表示白色。幅度值越大,相應的區域越黑。這樣就得到了最右邊的圖。那為什麼要這樣呢?為的是增加時間這個維度,因為現在你的頻譜用一個灰度向量表示出來了,這一秒的頻譜是一個灰度向量,下一秒的頻譜也是一個灰度向量,那麼是不是可以用數字顯示一段語音的頻譜?而且可以直觀的看到靜態和動態的資訊。優點稍後呈上。

這樣我們會得到一個隨著時間變化的頻譜圖,這個就是描述語音訊號的頻譜圖。

下圖是一段語音的頻譜圖,很黑的地方就是頻譜圖中的峰值(共振峰formants)。

哦!這就是語譜圖啊!原來語譜圖是這麼來的啊!

二、倒譜分析(Cepstrum Analysis)

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

這個圖其實就是上面說的一整段語音分幀之後某一幀的頻譜,是還沒有旋轉然後轉換成語譜圖的頻譜圖,可以看到座標軸是頻率和幅度(對數化後的)。既然共振峰那麼重要,那我們就是需要把它提取出來!我們要提取的不僅僅是共振峰的位置,還得提取共振峰的轉變過程。所以我們提取的是頻譜的包絡(Spectral Envelope)。這包絡就是一條連線這些共振峰點的平滑曲線。

我們可以這麼理解,將原始的頻譜由兩部分組成:包絡和頻譜的細節。這裡用到的是對數頻譜,所以單位是dB。那現在我們需要把這兩部分分離開,這樣我們就可以得到包絡了。

 那怎麼把他們分離開呢?也就是,怎麼在給定log X[k]的基礎上,求得log H[k] 和 log E[k]以滿足log X[k] = log H[k] + log E[k]呢?為了達到這個目標,我們需要採用一個數學層面的Trick。這個Trick是什麼呢?就是對頻譜做FFT

由上面這個圖我們可以看到,包絡是主要是低頻成分(這時候需要轉變思維,這時候的橫軸就不要看成是頻率了,咱們可以看成時間),我們把它看成是一個每秒4個週期的正弦訊號。這樣我們在偽座標軸上面的4Hz的地方給它一個峰值。而頻譜的細節部分主要是高頻。我們把它看成是一個每秒100個週期的正弦訊號。這樣我們在偽座標軸上面的100Hz的地方給它一個峰值。
把它倆疊加起來就是原來的頻譜訊號了。

在實際中咱們已經知道log X[k],所以我們可以得到了x[k]。那麼由圖可以知道,h[k]是x[k]的低頻部分,那麼我們將x[k]通過一個低通濾波器就可以得到h[k]了!沒錯,到這裡咱們就可以將它們分離開了,得到了我們想要的h[k],也就是頻譜的包絡。

x[k]實際上就是倒譜Cepstrum(這個是一個新造出來的詞,把頻譜的單詞spectrum的前面四個字母順序倒過來就是倒譜的單詞了)。而我們所關心的h[k]就是倒譜的低頻部分。h[k]描述了頻譜的包絡,它在語音識別中被廣泛用於描述特徵。

那現在總結下倒譜分析,它實際上是這樣一個過程:

總結下,倒譜(cepstrum)就是一種訊號的傅立葉變換經對數運算後再進行傅立葉反變換得到的譜。它的計算過程如下:

三、Mel頻率分析(Mel-Frequency Analysis) 

         好了,到這裡,我們先看看我們剛才做了什麼?給我們一段語音,我們可以得到了它的頻譜包絡(連線所有共振峰值點的平滑曲線)了。但是,對於人類聽覺感知的實驗表明,人類聽覺的感知只聚焦在某些特定的區域,而不是整個頻譜包絡。
         而Mel頻率分析就是基於人類聽覺感知實驗的。實驗觀測發現人耳就像一個濾波器組一樣,它只關注某些特定的頻率分量(人的聽覺對頻率是有選擇性的)。也就說,它只讓某些頻率的訊號通過,而壓根就直接無視它不想感知的某些頻率訊號。但是這些濾波器在頻率座標軸上卻不是統一分佈的,在低頻區域有很多的濾波器,他們分佈比較密集,但在高頻區域,濾波器的數目就變得比較少,分佈很稀疏。

         人的聽覺系統是一個特殊的非線性系統,它響應不同頻率訊號的靈敏度是不同的。在語音特徵的提取上,人類聽覺系統做得非常好,它不僅能提取出語義資訊, 而且能提取出說話人的個人特徵,這些都是現有的語音識別系統所望塵莫及的。如果在語音識別系統中能模擬人類聽覺感知處理特點,就有可能提高語音的識別率。

         梅爾頻率倒譜系數(Mel Frequency Cepstrum Coefficient, MFCC)考慮到了人類的聽覺特徵,先將線性頻譜對映到基於聽覺感知的Mel非線性頻譜中,然後轉換到倒譜上。

         將普通頻率轉化到Mel頻率的公式是:


 

四、Mel頻率倒譜系數(Mel-Frequency Cepstral Coefficients) 

       我們將頻譜通過一組Mel濾波器就得到Mel頻譜。公式表述就是:log X[k] = log (Mel-Spectrum)。這時候我們在log X[k]上進行倒譜分析:

1)取對數:log X[k] = log H[k] + log E[k]。

2)進行逆變換:x[k] = h[k] + e[k]。

      在Mel頻譜上面獲得的倒譜系數h[k]就稱為Mel頻率倒譜系數,簡稱MFCC

 

現在咱們來總結下提取MFCC特徵的過程:

1)先對語音進行預加重、分幀和加窗;(加強語音訊號效能(信噪比,處理精度等)的一些預處理)

2)對每一個短時分析窗,通過FFT得到對應的頻譜;(獲得分佈在時間軸上不同時間窗內的頻譜)

3)將上面的頻譜通過Mel濾波器組得到Mel頻譜;(通過Mel頻譜,將線形的自然頻譜轉換為體現人類聽覺特性的Mel頻譜)

4)在Mel頻譜上面進行倒譜分析(取對數,做逆變換,實際逆變換一般是通過DCT離散餘弦變換來實現,取DCT後的第2個到第13個係數作為MFCC係數),獲得Mel頻率倒譜系數MFCC,這個MFCC就是這幀語音的特徵;(倒譜分析,獲得MFCC作為語音特徵)

這時候,語音就可以通過一系列的倒譜向量來描述了,每個向量就是每幀的MFCC特徵向量。

相關推薦

Mel譜系到底是什麼

Mel倒譜系數(MFCC)是啥?跟頻譜包絡啥關係?跟語音的頻譜有什麼區別? 這裡我們好好講一講。 在任意一個自動語音識別系統中,

MFCC(Mel頻率譜系)的 優化方向。

胡峰鬆,王磊.一種基於小波包分析的說話人識別演算法[J].小型微型計算機系統,2014,35(7):1610-1614 上述文獻中為了提高在噪音環境下說話人識別系統的識別率,對MFCC(Mel頻率倒譜系數)引數提取過程進行了改進。 用小波包變換代替快速傅立葉變換和Mel濾波器組,獲得了新引數new

語音訊號的同態處理、譜分析和Mel頻率譜系

1 同態處理 訊號的同態處理也稱同態濾波。大概步驟為: f(x,y)→ln→DFT→H(u,v)→(DFT)-1→exp→g(x,y) 雖然,一般用於影象處理。但是,博主將同態濾波用於語音訊號的濾波。

利用梅爾譜系(MFCC)及空間聚類演算法實現音色識別

寫在前面 2016年4月參加了哈爾濱工業大學深圳研究生院舉辦的創新創業比賽,司職演算法組長,切入點定在了音色識別和相似明星音才藝展示推薦演算法上,不才,拿到了一等獎,趁佳節未散與大家分享。 專案進度安排 2016年1月~2016年3月:前期工作中瞭解學習了語音訊號處理的基本

梅爾頻率譜系(MFCC) 學習筆記

最近學習音樂自動標註的過程中,看到了有關使用MFCC提取音訊特徵的內容,特地在網上找到資料,學習了一下相關內容。此筆記大部分內容摘自博文 http://blog.csdn.net/zouxy09/article/details/9156785 有小部分標註和批改時我自己加上的

梅爾頻率譜系(MFCC)的提取過程與C++程式碼實現

MFCC引數提取步驟 ——>預加重 ——>分幀 ——>對每一幀加窗 ——>對每一幀補零 ——>各幀訊號的FFT變換及其功率譜 ——>梅爾濾波(通過40個濾波器) ——>取對數 ——>DCT變換 ——>歸一化 1.預加重

語音訊號的梅爾頻率譜系(MFCC)的原理講解及python實現

梅爾倒譜系數(MFCC)   梅爾倒譜系數(Mel-scale FrequencyCepstral Coefficients,簡稱MFCC)。依據人的聽覺實驗結果來分析語音的頻譜, MFCC分析依據的聽覺機理有兩個 第一Mel scale:人耳感知的聲音訊率和聲音的實際頻率並不是線性的,有下面公式 $

【Codeforces Round 331 (Div 2)D】【DP 記憶化搜尋 期望DP區間性質 好題】Wilbur and Trees 砍樹隨機從右從左概率左的期望面覆蓋長度

Wilbur and Trees time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard ou

頁面觸自動加載

區間 這不 fse 分別是 offset 距離 加載數據 scrolltop eight 首先理解三個dom元素,分別是:clientHeight、offsetHeight、scrollTop。 clientHeight:這個元素的高度,占用整個空間的高度,所以,如果一個d

在i.jsp 中,url地址欄輸入一個參,值是整型,要求著輸出

lang 輸出 spa span url request parameter out getpara <% String k = request.getParameter("k"); int tt = Integer.parseInt(k); out.println(

比特幣頂級“莊家聯盟”:迅速集結百億 操縱比特幣

在眾人的眼中,幣圈如同鏡花水月,始終琢磨不透。 但在這裡,真正決定幣價漲跌的,其實不到100人。 Clipboard Image.png Clipboard Image.png Clipboard Image.png Clipboard Image.png 作者:賈白 在眾人的眼

STFT和聲譜圖,梅爾頻譜(Mel Bank Features)與梅爾譜(MFCCs)

最近小編在做ASC(Acoustic Scene Classification)問題,不管是用傳統的GMM模型,還是用機器學習中的SVM或神經網路模型,提取聲音特徵都是第一步。梅爾頻譜和梅爾倒譜就是使用非常廣泛的聲音特徵形式,小編與它們鬥爭已有一段時間了,在此總結一下使用它們的經驗。 STFT和

輸入一個整數字串,敘輸出

import java.util.Scanner;public class test3 {public static void main(String[] args){System.out.println("請輸入一個整數!");Scanner in=new Scanner(

序 排列方式 詳解!

初始化 system stat 設置 last out 換行 string str public class 數組逆序排列 {//不建議這樣命名!我是英文比較菜 ,無奈之舉!建議規範命名! public static void main(String[] args) {

codevs 1039:的劃分

esp 初始化 芒果 for 數據 例如 數的劃分 strong rip http://codevs.cn/problem/1039/ 題目描述 Description將整數n分成k份,且每份不能為空,任意兩種劃分方案不能相同(不考慮順序)。例如:n=7,k=3,下面三種劃

內置函

true 方法 ble all .com bool 過濾 布爾類型 字符 1.all-----0返回false; any-------任意真返回true 2.bool 布爾類型判斷 3.bytearray---將字符串對應ascii碼修改 4.callable -----可

mysql常用函

row 間隔 變為大寫 員工 hex eat amp sig rom 一、數學函數abs(x) 返回x的絕對值bin(x) 返回x的二進制(oct返回八進制,hex返回十六進制)ceiling(x) 返回大於x的最小整數值exp(x) 返回值e(自然對數的底

node.js對象據類型

js對象 arr 基本 strong doc 九九乘法 oca 自定義 number 在這裏復習下前端JS的數據類型:前端JS中的數據類型: 1.基本/原生/值類型 string、number、boolean、null、undefined 2.引用/對象

DataTable查詢出DataRow

返回 primary string pri str lec [] typeof ima 代碼如下: DataTable dt = new DataTable(); DataColumn dc1 = new DataColum

據結構--Avl樹的創建,插入的遞歸版本和非遞歸版本,刪除等操作

pop end eem static cout 遞歸 sta div else AVL樹本質上還是一棵二叉搜索樹,它的特點是: 1.本身首先是一棵二叉搜索樹。 2.帶有平衡條件:每個結點的左右子樹的高度之差的絕對值最多為1(空樹的高度為-1)。 也就是說,AV