天天看點

倒譜分析與mfcc系數--倒譜計算與顯示_語音合成中的Mel譜和MFCC譜無差別

語音合成目前比較流行的方案是Tacotron(2) + WaveNet(WaveRNN, LPCNet)等神經網絡聲碼器。

這些方案的流程大緻相同,先由文本生成特征譜,再将特征譜重建為音頻。在選擇特征譜的時候,有的使用了Mel譜,有的使用了倒譜。

本文通過梳理計算倒譜的流程,試圖說明使用Mel譜和倒譜并無差別。

下圖是Matlab計算倒譜的過程

倒譜分析與mfcc系數--倒譜計算與顯示_語音合成中的Mel譜和MFCC譜無差別

可以分成以下幾步:

  1. 音頻時域信号分幀
  2. 對每一幀進行傅裡葉變換,并取幅值,得到線性譜
  3. 對線性譜進行Mel刻度的權重求和,得到Mel譜
  4. 取log10,得到Fbank
  5. 取離散餘弦變換,得到倒譜系數

從以上過程可以知道,Mel譜和倒譜系數的差別,在于一個取對數和取離散餘弦變換的過程。

我們知道,離散餘弦變換是一個線性變換。線性變換對于神經網絡來說是小菜一碟。是以Mel譜和倒譜系數的

主要差別是取對數的過程

在幾乎所有的開源代碼中,使用Mel譜特征的時候,

都會對Mel譜特征求db值

,也就是求一個N*log10()的值。其中N與mel譜幅值是否平方有關:如果Mel譜單是傅裡葉變換後的幅值,那麼N一般取10;如果Mel譜是傅裡葉變換後幅值的平方,那麼N一般取20。按照這樣的方法,Mel譜特征和倒譜特征隻差了一個線性變換矩陣,對于神經網絡來說相當于沒差。

是以,

在使用Mel譜特征時,如果計算了db值,那麼和使用Mfcc倒譜特征效果應是相同的