WebRtc AEC核心算法之二:Partitioned block频域自适应滤波
本篇在上一章的基础之上,继续分析滤波器的特点。
回声的延时和滤波器的抽头
我们不妨先想想回声延时的问题。为了简化分析,只考虑个人终端的两种普遍情况,一种是从speaker直接反馈到mic,一种是经过反射物在折返给mic(免提情况会采集到明显的回声)。第一种回声可以忽略路径损耗,只关心设备硬件和软件的群延时,第二种需要在群延时的情况下再加上几十毫秒不等。手机硬件收发大都采用20ms为一帧,因为收发同步等原因,群延时50ms以上。按照16kHz语音采样率来看,抽头>16000*0.05(800)是最低的要求,如果希望覆盖反射回声,那滤波器的抽头就得数以千计了。这是物理原因,抽头量不可避免,如果时域方法,卷积算法会非常可观,所以频域方法在实际应用中会如此受欢迎。不仅如此,各位专家还在不遗余力地寻找更加节省运算量的方法,其中之一就是WebRTC中运用的Partioned block frequeney domain adaPtive filter(PBFDAF)。
分块频域自适应滤波-PBFDAF
尽管前文已经利用FFT实现了频域滤波,令计算量减少,但由于抽头太多,为了进一步的降低预算复杂度,将
h
(
n
)
h(n)
h(n)等分L个相邻的、N等长的而且不交叠的段:
h
(
n
)
=
∑
l
=
0
L
−
1
h
l
(
n
)
h(n)=\sum_{l=0}^{L-1}{h_l(n)}
h(n)=l=0∑L−1hl(n)
对于每个段,都有
h
l
(
n
)
=
h
(
n
)
当
n
=
l
N
,
.
.
.
,
l
N
+
N
−
1
h_l(n)=h(n) 当 n=lN,...,lN+N-1
hl(n)=h(n)当n=lN,...,lN+N−1。相对于众所周知的子带滤波,这种分法可以理解为对输入信号全频谱的
L
L
L个并行的滤波器,由此,完整地信道冲击相应
h
(
n
)
h(n)
h(n)就在时间轴被横截为L分,变成了如下图展示的并行结构。
那么滤波器的输出
y
(
n
)
=
x
(
n
)
∗
h
(
n
)
y(n)=x(n)*h(n)
y(n)=x(n)∗h(n)可以写成如下形式
y
(
n
)
=
x
(
n
)
∗
∑
l
=
0
L
−
1
h
l
(
n
)
=
∑
l
=
0
L
−
1
x
(
n
)
∗
h
l
(
n
)
=
∑
l
=
0
L
−
1
x
(
n
−
l
N
)
∗
h
l
(
n
+
l
N
)
=
∑
l
=
0
L
−
1
y
l
(
n
)
\begin{aligned} y(n)&=x(n)*\sum_{l=0}^{L-1}h_l(n)\\ &=\sum_{l=0}^{L-1}x(n)*h_l(n)\\ &=\sum_{l=0}^{L-1}x(n-lN)*h_l(n+lN)\\ &=\sum_{l=0}^{L-1}y_l(n) \end{aligned}
y(n)=x(n)∗l=0∑L−1hl(n)=l=0∑L−1x(n)∗hl(n)=l=0∑L−1x(n−lN)∗hl(n+lN)=l=0∑L−1yl(n)
这样就把结果变成了输入分别通过L个并行延时的N阶滤波器了。如果利用巧妙的数据分段策略,L个并行滤波器的线性卷积可以分别独立的通过一个N个采样点延时的频域方法计算得出,不再需要NL个采样点了。
S_in和S_out标识已经分段的信号,这些信号按照上一篇的推导,需要进行线性卷积处理,输入信号时当前块和上一块的级联,长度是2N,进入FFT之后,计算得结果存于一个FIFO结构的内存空间,也是按照N个采样点来划分的。对这些段直接进行频域相乘的滤波操作,获得的结果目前仍然是2N个频率分量。处理完的数据在输出队列里相加,然后通过IFFT处理进入输出的分段器。其他的过程按照频域滤波器的结果提取过程。最后的过程等价公式如下:
∑
l
=
0
L
−
1
I
F
F
T
[
X
l
(
j
−
l
)
H
l
]
=
I
F
F
T
[
∑
l
=
0
L
−
1
[
X
l
(
j
−
l
)
H
l
]
\sum_{l=0}^{L-1}IFFT[X^l(j-l)H^l]=IFFT[\sum_{l=0}^{L-1}[X^l(j-l)H^l]
l=0∑L−1IFFT[Xl(j−l)Hl]=IFFT[l=0∑L−1[Xl(j−l)Hl]
上述推导是参考《On the implementation of a partitioned block frequency domain adaptive filter (PBFDAF) for long acoustic echo cancellation》而得来的。该论文还给出了时域和概算法的复杂度比较,
Δ
=
L
N
2
N
(
4
L
+
3
l
o
g
2
2
N
)
=
L
N
4
L
+
3
l
o
g
2
2
N
\Delta=\frac{LN^2}{N(4L+3log_22N)}=\frac{LN}{4L+3log_22N}
Δ=N(4L+3log22N)LN2=4L+3log22NLN
参考文献
[1]:《On the implementation of a partitioned block frequency domain adaptive filter (PBFDAF) for long acoustic echo cancellation》 Jose M. Paez Borrallo.etc
[2]:《Adaptive Filter Theory》Fifth Edition Simon Haykin.