Kaldi特徵提取之-預處理

Kaldi特徵提取之-預處理

背景

  • 本質上語音信號是一維的時間信號,隨時間上下波動。現實中,人們再說話時會受到各種音素的干擾,爲了進一步進行處理,我們必須進行必要的預處理以便之後的特徵提取。諸如FBank,MFCC,PLP等都需要經過預處理步驟。本章將假設語音的格式爲wav

預處理

  1. 整個預處理過程如下圖所示:

    預處理

  2. 分幀
    從圖中可以看出我們需要將不定長的音頻切分成固定長度的小段,這一步稱爲分幀。分幀的原因在於語音的長度通常不同,而我們無法對不同長度的序列進行建模(或者建模難度太大),但對長度固定的小段音頻建模相對容易的多。

    參數 kaldi參數 常用值 意義
    WINDOWSIZE frame_length_ms 25ms(毫秒) 每一幀的時間長度
    TARGETRATE frame_shift_ms 10ms(毫秒) 幀之間移動過的時間長度

    注意:段與段之間會有一些重疊的部分。

    根據這些參數以及wav的一些屬性,我們可以計算每段wav分幀之後有多少段以及每幀有多少個數。假設wav長度爲1s,採樣率 爲16kHz,則這段wav可以切分爲 (1*1000) / 10 = 100幀,每幀有(25 / 1000) * 16kHz = 400個數。

  3. 均值歸一
    在模擬信號到數字信號的轉換過程中可能會增加一個DC偏移,表現爲語音波形整體向上或者向下移動。通常,移除DC偏移是以幀爲單位進行的,而非整段wav進行。

  4. 預增強
    預增強以幀爲單位進行,目的在於加強高頻。數學公式如下:

    s(n)=s(n)ks(n1),nN
    k是預增強係數,範圍爲[0, 1),常用0.97,N是每一幀的長度,從公式可以看出每一幀的第一個數需要特殊處理。
  5. 加窗
    加窗的目的在於減小幀與幀之間的過度更加平滑,本質上使用一個類似於sin、cos的對稱函數與幀做卷積,Hamming窗公式如下圖:

    這裏寫圖片描述

    注意:同時使用預增強加窗同時使用時,要首先進行預增強

  6. 添加隨機噪聲
    有時候我們需要進行數據增強,會手動合成一些音頻。某些人工合成(使用軟件)的音頻可能會造成一些數字錯誤,諸如underflow或者overflow。 這種情況下,通過添加隨機噪聲可以解決這一類問題。公式如下:

    s(n)=s(n)+qrand()
    q用於控制添加噪聲的強度,rand() 產生[-1.0, 1.0)的隨機數。
    注意:Kaldi中是在分幀之後的下一步添加隨機噪聲。
  7. 配套matlab代碼
    matlab代碼
    用到的wav

  8. 術語彙總
    採樣率:每秒鐘採集的數據的個數
    幀:音頻切分後的一小段稱爲一幀
    幀長:每一幀的時間長度
    幀移:幀與幀之間移動的時間長度

參考

  1. wav
  2. 採樣率
  3. Window function
  4. htkbook 3.4.1, Speech Input/Output, Speech Signal Processing

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章