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 部分

原文地址:https://www.cnblogs.com/bingdongwuchi/p/7084151.html