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处




猜你喜欢

转载自blog.csdn.net/book_bbyuan/article/details/80725945
今日推荐