語音頻譜語音信號處理之(四)梅爾頻率倒譜系數(MFCC)


今天一直在查找語音頻譜之類的問題,今天正好有機會和大家共享一下.

    語音信號處置之(四)梅爾頻率倒譜系數(MFCC)

    zouxy09@qq.com

    http://blog.csdn.net/zouxy09

     

           這學期有《語音信號處置》這門課,快考試了,所以也要了解了解相干的知識點。呵呵,平常沒怎么聽課,現在只能抱佛腳了。順便也總結總結,好讓自己的知識架構清晰點,也和大家分享下。上面總結的是第四個知識點:MFCC。因為花的時間不多,所以可能會有不少說的不妥的地方,還望大家指正。謝謝。

     

          在任意一個Automatic speech recognition 系統中,第一步就是提取特征。換句話說,我們需要把音頻信號中擁有辨識性的成份提掏出來,然后把其他的亂七八糟的信息扔掉,例如背景噪聲啊,情感啊等等。

    語音和頻譜

          搞清語音是怎么發生的對於我們理解語音有很大幫助。人通過聲道發生聲音,聲道的shape(形狀?)決議了收回怎樣的聲音。聲道的shape包括舌頭,牙齒等。如果我們可以准確的知道這個形狀,那么我們就能夠對發生的音素phoneme進行准確的描述。聲道的形狀在語音短時功率譜的包絡中顯示出來。而MFCCs就是一種准確描述這個包絡的一種特征。

           MFCCs(Mel Frequency Cepstral Coefficents)是一種在主動語音和談話人識別中廣泛使用的特征。它是在1980年由Davis和Mermelstein搞出來的。從那時起。在語音識別領域,MFCCs在人工特征方面可謂是出類拔萃,桂林一枝,從未被超越啊(至於說Deep Learning的特征學習那是后話了)。

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

     

    一、聲譜圖(Spectrogram

             我們處置的是語音信號,那么如何去描述它很重要。因為不同的描述方式放映它不同的信息。那怎樣的描述方式才利於我們視察,利於我們理解呢?這里我們先來了解一個叫聲譜圖的東西。

    語音和頻譜

           這里,這段語音被分為很多幀,每幀語音都對應於一個頻譜(通過短時FFT盤算),頻譜表現頻率與能量的關系。在現實使用中,頻譜圖有三種,即線性振幅譜、對數振幅譜、自功率譜(對數振幅譜中各譜線的振幅都作了對數盤算,所以其縱坐標的單位是dB(分貝)。這個變換的目的是使那些振幅較低的成份相對高振幅成份得以拉高,以便視察掩飾在低幅噪聲中的周期信號)。

      語音和頻譜

           我們先將其中一幀語音的頻譜通過坐標表現出來,如上圖左。現在我們將左邊的頻譜旋轉90度。失掉中間的圖。然后把這些幅度映射到一個灰度級表現(也可以理解為將連續的幅度量化為256個量化值?),0表現黑,255表現白色。幅度值越大,相應的區域越黑。這樣就失掉了最右側的圖。那為什么要這樣呢?為的是增加時間這個維度,這樣就能夠顯示一段語音而不是一幀語音的頻譜,而且可以直觀的看到靜態和動態的信息。長處稍后呈上。

             這樣我們會失掉一個隨着時間變化的頻譜圖,這個就是描述語音信號的spectrogram聲譜圖。

    語音和頻譜

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

    語音和頻譜

          那我們為什么要在聲譜圖中表現語音呢?

          首先,音素(Phones)的屬性可以更好的在這里頭視察出來。另外,通過視察共振峰和它們的改變可以更好的識別聲音。隱馬爾科夫模型(Hidden Markov Models)就是隱含地對聲譜圖進行建模以達到好的識別性能。還有一個作用就是它可以直觀的評估TTS系統(text to speech)的好壞,直接比較合成的語音和自然的語音聲譜圖的匹配度便可。

     

    二、倒譜分析(Cepstrum Analysis

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

    語音和頻譜

            既然它那么重要,那我們就是需要把它提掏出來!我們要提取的不僅僅是共振峰的位置,還得提取它們改變的進程。所以我們提取的是頻譜的包絡(Spectral Envelope)。這包絡就是一條連接這些共振峰點的平滑曲線。

    語音和頻譜

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

    語音和頻譜

          那怎么把他們分離開呢?也就是,怎么在給定log X[k]的基礎上,求得log H[k] log E[k]以滿意log X[k] = log H[k] + log E[k]呢?

          為了達到這個目標,我們需要Play a Mathematical Trick。這個Trick是什么呢?就是對頻譜做FFT。在頻譜上做傅里葉變換就相當於逆傅里葉變換Inverse FFT (IFFT)。需要注意的一點是,我們是在頻譜的對數域上面處置的,這也屬於Trick的一部分。這時候,在對數頻譜上面做IFFT就相當於在一個偽頻率(pseudo-frequency)坐標軸上面描述信號。

    語音和頻譜

             由上面這個圖我們可以看到,包絡是主要是低頻成份(這時候需要改變思維,這時候的橫軸就不要看成是頻率了,咱們可以看成時間),我們把它看成是一個每秒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]描述了頻譜的包絡,它在語音識別中被廣泛用於描述特征。

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

    1)將原語音信號經過傅里葉變換失掉頻譜:X[k]=H[k]E[k]

    只斟酌幅度就是:|X[k] |=|H[k]||E[k] |

    2)我們在雙方取對數:log||X[k] ||= log ||H[k] ||+ log ||E[k] ||

    3)再在雙方取逆傅里葉變換失掉:x[k]=h[k]+e[k]

           這現實上有個專業的名字叫做同態信號處置。它的目的是將非線性問題轉化為線性問題的處置方法。對應上面,原來的語音信號現實上是一個卷性信號(聲道相當於一個線性時不變系統,聲音的發生可以理解為一個激勵通過這個系統),第一步通過卷積將其變成了乘性信號(時域的卷積相當於頻域的乘積)。第二步通過取對數將乘性信號轉化為加性信號,第三步進行逆變換,使其恢復為卷性信號。這時候,雖然前后均是時域序列,但它們所處的離散時域明顯不同,所以后者稱為倒譜頻域。

          總結下,倒譜(cepstrum)就是一種信號的傅里葉變換經對數運算后再進行傅里葉反變換失掉的譜。它的盤算進程如下:

    語音和頻譜

     

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

             好了,到這里,我們先看看我們剛才做了什么?給我們一段語音,我們可以失掉了它的頻譜包絡(連接所有共振峰值點的平滑曲線)了。但是,對於人類聽覺感知的試驗表明,人類聽覺的感知只聚焦在某些特定的區域,而不是全部頻譜包絡。

             Mel頻率分析就是基於人類聽覺感知試驗的。試驗視察發明人耳就像一個濾波器組一樣,它只存眷某些特定的頻率分量(人的聽覺對頻率是有選擇性的)。也就說,它只讓某些頻率的信號通過,而壓根就直接疏忽它不想感知的某些頻率信號。但是這些濾波器在頻率坐標軸上卻不是同一分布的,在低頻區域有很多的濾波器,他們分布比較麋集,但在高頻區域,濾波器的數目就變得比較少,分布很稀少。

    語音和頻譜

           人的聽覺系統是一個特別的非線性系統,它響應不同頻率信號的靈敏度是不同的。在語音特征的提取上,人類聽覺系統做得非常好,它不僅能提掏出語義信息, 而且能提掏出談話人的個人特征,這些都是現有的語音識別系統所望塵莫及的。如果在語音識別系統中能模擬人類聽覺感知處置特色,就有可能進步語音的識別率。

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

            將一般頻率轉化到Mel頻率的公式是:
 語音和頻譜
      由下圖可以看到,它可以將不同一的頻率轉化為同一的頻率,也就是同一的濾波器組。

    語音和頻譜

          在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頻譜;

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

    語音和頻譜

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

    語音和頻譜

         這樣就能夠通過這些倒譜向量對語音分類器進行訓練和識別了。

     

    五、參考文獻

    [1]這里頭還有一個比較好的教程:

    http://practicalcryptography.com/miscellaneous/machine-learning/guide-mel-frequency-cepstral-coefficients-mfccs/

    [2]本文主要參考:cmu的教程:

     http://www.speech.cs.cmu.edu/15-492/slides/03_mfcc.pdf

    [3] C library for computing Mel Frequency Cepstral Coefficients (MFCC)

    http://code.google.com/p/libmfcc/

文章結束給大家分享下程序員的一些笑話語錄: 自行車
一個程序員騎着一個很漂亮的自行車到了公司,另一個程序員看到了他,問 到,“你是從哪搞到的這么漂亮的車的?”
騎車的那個程序員說, “我剛從那邊過來, 有一個漂亮的姑娘騎着這個車過來, 並停在我跟前,把衣服全脫了,然后對我說,‘你想要什么都可以’”。
另一個程序員馬上說到, “你絕對做了一個正確的選擇, 因為那姑娘的衣服你 並不一定穿得了”。

--------------------------------- 原創文章 By
語音和頻譜
---------------------------------


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM