griffin-lim算法

G&L(griffin-lim)算法是一種已知幅度譜,未知相位譜,通過迭代生成相位譜,並用已知的幅度譜和計算得出的相位譜,重建語音波形的方法。

griffin-lim是一種聲碼器,常用於語音合成,用於將語音合成系統生成的聲學參數轉換成語音波形,這種聲碼器不需要訓練,不需要預知相位譜,而是通過幀與幀之間的關係估計相位信息,從未重建語音波形。



聲碼器(vocoder)

聲碼器是一種將聲學參數轉換成語音波形的工具。griffin-lim是一種較爲經典的聲碼器,算法簡單,高效。
另外加多使用的vocoder有: WORLD, STRAIGHT及其變種; WaveNet,一種可訓練的基於深度神經網絡的聲碼器,可生成高質量的語音波形,但是爲了擴展其感受野,速度慢且複雜度高;WaveRNN, 另一種可訓練的基於深度神經網絡的聲碼器,可生成高質量高保真的語音波形, 速度相較於WaveNet有提升,在使用摺疊並且硬件較充足的條件下,合成速度較快;LPCNet, 是一種新提出的可使用CPU即可實現重建波形的vocoder,主要思想是,語音是線性信號和非線性信號的有機組合,而DSP(數字信號處理)技術足以勝任其中的線性信號運算,非線性信號的處理可以交給神經網絡學習得到,這種聲碼器速度得到了極大的提升,有望於應用於移動端。



聲學模型

語音合成一般需要進行前端處理,時長模型訓練,聲學模型訓練,最後輸出聲學參數。對於端到端的語音合成系統而言,一般將大部分前端、時長模型和聲學模型整合成了一個模型,直接建立輸入文本與輸出聲學參數之間的映射關係。

聲學參數的提取

語音合成的數據準備第一步,一般都是語音參數的提取。用於語音合成中的語音參數(聲學參數)一般有MEL譜, MFCC, F0(基頻), pitch, voice/unvoice, BAP(一種非週期型特徵?)等等。端到端的語音合成系統較多的使用MEL譜。


MEL 譜爲例

一般的提取過程爲:

  • 語音信號預處理:預加重、分幀、加窗
  • 對語音信號按幀使用短時傅里葉變換STFT, 得到短時幅度譜
  • 生成MEL濾波器組,使用濾波器組對短時幅度譜濾波得到MEL譜

使用MEL譜訓練聲學模型

使用 <text, audio>對訓練聲學模型。對於漢語,text一般指的是帶聲調的拼音文本,audio一般指的是使用上述步驟得到的MEL譜。


聲碼器重建語音

MEL 譜爲例
  • MEL譜轉換成幅度譜
  • 幅度譜使用G&L算法重建波形
  • 去加重


griffin-lim 算法

算法思想:

griffin-lim重建語音信號需要使用到幅度譜和相位譜。而MEL譜當中是不含相位信息的,因此griffin-lim在重建語音博形的 時候只有MEL譜可以利用,但是通過一些運算,我們可以利用幀與幀之間的關係估計出相位信息,從而重建語音波形。
這裏的MEL譜可以看做是實部,而相位信息可以看做是虛部,通過對實部和虛部的運算,得到最終的結果。

算法步驟:

  • 隨機初始化一個相位譜
  • 用這個相位譜與已知的幅度譜(來自MEL譜)經過ISTFT(逆傅里葉變換)合成新的語音波形
  • 用合成語音做STFT, 得到新的幅度譜和新的相位譜
  • 丟棄新的幅度譜,用已知幅度譜與新的相位譜合成新的語音
  • 重複2,3,4多次,直至合成的語音達到滿意的效果或者迭代次數達到設定的上限

算法解釋:

  • 創建一個複數矩陣,將已知的幅度譜作爲實層,用噪聲隨機初始化虛層。(至此, 已有振幅信息, 但是沒有相位信息
  • 對複數矩陣進行ISTFT。(至此,僅依靠幅度譜得到一個初步的時域信號
  • 對上一步得到的時域信號進行STFT,得到一個複數矩陣。(獲取小部分的,不準確的相位信息
  • 上一步得到的複數矩陣,是從一不準確的時域信號,得到了一個振幅與相位。用已知的振幅替換該矩陣的實部。(至此,有了已知振幅和初步準確的相位
  • 重複2,3,4
  • 迭代至一個滿意的效果或者迭代次數到達指定的上限

reference

發佈了18 篇原創文章 · 獲贊 3 · 訪問量 5419
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章