Mel-Frequency-Warping


好記性,不如爛筆頭!讀源碼,做總結。 http://kaldi-asr.org  http://kaldi-asr.org/doc/classkaldi_1_1MelBanks.html#a28c12e3d92fbb958fadef3b3688ac5be   

本文重點總結一下,MelBanks()    VtlnWarpMelFreq() : 通過改變濾波器頻率密度,實現對某個頻段的信號加強。

本文使用Mel頻率計算公式 : mel_frequency = 1127.0 * ln(1.0 + frequency / 700.0)        (還有一個計算公式為 2595.0 * lg(1.0 + frequency / 700.0), 計算結果只有細微差別)

                                                   圖一

高低通截止頻率:low_freq = 40, high_freq = 7800 ; 濾波器個數: num_mel_bins = 23 ; vtln_low = 1000, vtln_high = 5000,frame_length = 14 (ms), sample_frequency = 16000

=> fft_bin_width = 62.5, mel_freq_delta = 114.6333, window_length_padded = 256

不做彎折(para_warp = 1.0)

生成在梅爾頻域等頻帶寬度的23個濾波器,相當於在在圖一中y軸等距,那么在x軸上(現實頻域)的效果就是越靠后的濾波器現實頻帶越寬,由於濾波器上點是根據現實頻率等距跳動,所以最后效果就是約往后的濾波器上點越多,這些點的取值范圍都是(0,1)

                                                 圖二

 

彎折(para_warp = 2.0 > 1.0)

濾波器越往后,梅爾頻域帶寬越寬,那么現實頻域這種帶寬增長就更猛了,相較於para_warp=1.0,靠前濾波器,頻帶寬度變窄,點變少,靠后濾波器,頻帶寬度變寬,點變多。(應該具體值分的更細一些的。。。。。)

                                               圖三

彎折(para_warp = 0.5 < 1.0)

相較於para_warp=1.0,靠前濾波器,頻帶寬度變寬,點變多,靠后濾波器,頻帶寬度變窄,點變少。(應該具體值分的更細一些的。。。。。)

                                               圖四

VtlnWarpMelFreq()功能

參數列表:vtln_low_cutoff, vtln_high_cutoff, low_freq, high_freq, vtln_warp_factor, freq

vtln_low_cutoff = 3000
vtln_high_cutoff = 6000
low_freq = 1000
high_freq = 7000

注:圖五、圖六,橘色的直線為 y = x
para_warp > 1

 

                                                   圖五

拐點:low_freq、vtln_low(第二段,第三段的斜率有點接近,在這幅圖里看不出區別,尷尬。。)、vtln_high、high_freq

para_warp < 1

                                                 圖六

拐點:low_freq、vtln_low、vtln_high、high_freq(第三段,第四段的斜率有點接近,在這幅圖里也看不出區別,尷尬。。)

 

總結:當warp > 1 , 加強的實際是  vtln_high < freq < high_freq 部分,warp < 1 , 加強的是low_freq < freq < vtln_low 部分

 


免責聲明!

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



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