WebRTC VAD 中所用滤波器之分析
WebRTC VAD用了一些滤波器,这些滤波器的设置还是非常巧妙的,这篇文章分析他们所用滤波器之原理。
下面分析的滤波器都是在文件vad_filterbank.c里面
在提取特征的时候,用的是滤波器组用来提取的log域上的能量,其中分band的频带是:(对于8khz采样的音频文件来说)
3k-4k feature[5] , 2k-3k feature[4] , 1k-2k feature[3] , 500-1k featur[2], 250-500 feature[1] ,0-80 feature[0]
整体框架如下:1、高通滤波器
上图中右下角,用红色框框出来的,全部分析过程中也只用了一次高通滤波器
由 kHpZeroCoefs = [ 6631, -13262, 6631 ] 和 kHpPoleCoefs = [ 16384, -7756, 5620 ] 经过Q14的量化,还原滤波器系数为:
H(z) = (0.4047 -0.8094 *z^-1+ 0.4047 *z^-2) / (1.0000 -0.4734*z^-1 + 0.3430*z^-2)
它的单位冲激响应为:
这个高通滤波器的截止频率在0.32(归一化)
频谱图为:
只是极点的单位冲激响应是:
H(z) = (1) / (1.0000 -0.4734*z^-1 + 0.3430*z^-2),它的单位脉冲响应如下
比较接近的一个3阶的butterworth滤波器设计如下:
% N=2;
% Wn = 80/(500/2);
% [B,A] = butter(N,Wn,'high');
% B = 0.4808 -0.9617 0.4808
% A = 1.0000 -0.6710 0.2523
2、QMF和全通滤波器
其他分子带过程是采用了QMF filterbank,函数SplitFilter中有两个 allpassfilter,系数分别是0.64和0.17
再看allpassfilter的具体代码
可以得到 传递函数(all pass)
H(z) = (0.64 + z^-1) / (1 + 0.64*z^-1)
同理得到 另外一个全通滤波器
H(z) = (0.17 + z^-1) / (1 + 0.17*z^-1)
根据QMF IIR filter , allpass filter base design
根据上面的理论,我们还原滤波器
低通为:
高通是:
0.085 0.32 0.5544 0.5544 0.32 0.085 / 1 0 0.81 0 0.1088 0
0.085 - 0.32 0.5544 - 0.5544 0.32 -0.085 / 1 0 0.81 0 0.1088 0
高低band完美的交叠在0.5 -3dB处