本文对 MAURO DENTINO 等人于 1978 年在 PROCEEDINGS OF THE IEEE 上发表的论文进行简单地翻译。如有表述不当之处欢迎批评指正。欢迎任何形式的转载,但请务必注明出处。
论文链接:https://ieeexplore.ieee.org/abstract/document/1455446
1. 论文目的
在频域实现自适应滤波算法。
2. 摘要
频域的自适应滤波可以通过输入信号的傅里叶变换和每个频点的独立加权来实现。频域滤波器与传统的自适应横向滤波器表现相似,但当滤波器长度大于 16 的时候,前者能明显降低计算量。
3. 介绍
自适应滤波器已被广泛应用在了各种应用中,包括统计预测,干扰消除,array phasing 以及通信系统中的通道均衡等。在通常的实现中,抽头延迟线的输出在递归算法的控制下,被加权并求和以生成滤波器的输出。当前,最常用的算法是 Widrow-Hoff least-mean-square(LMS) 算法。论文的目的是介绍一种新的自适应滤波方法,其基于 LMS 算法的复数形式,并且运算在频域而不是时域上。当自适应滤波器很长时,这种方法有望大大提高计算效率。
4. LMS 算法
图1 展示了传统时域自适应滤波器。
x
j
x_{j}
xj 表示离散输入信号,
y
j
y_{j}
yj 表示输出信号,
d
j
d_{j}
dj 表示期望响应。LMS 算法可以表示为:
W
j
+
1
=
W
j
+
2
μ
ϵ
j
X
j
(1)
W_{j+1}=W_{j}+2\mu \epsilon_{j} X_{j} \tag{1}
Wj+1=Wj+2μϵjXj(1)
其中,
W
j
W_{j}
Wj 和
X
j
X_{j}
Xj 分别是滤波器权值和抽头延迟线输出在
j
j
j 时刻的向量表示。
W
j
T
=
[
w
1
j
,
w
2
j
,
⋯
,
w
n
j
]
(2)
W_{j}^{T}=[w_{1j},w_{2j},\cdots,w_{nj}] \tag{2}
WjT=[w1j,w2j,⋯,wnj](2)
X
j
T
=
[
x
j
,
x
j
−
1
,
⋯
,
x
j
−
n
+
1
]
(3)
X_{j}^{T}=[x_{j},x_{j-1},\cdots,x_{j-n+1}] \tag{3}
XjT=[xj,xj−1,⋯,xj−n+1](3)
ϵ
j
\epsilon_{j}
ϵj 是期望响应和滤波器输出之差:
ϵ
j
=
d
j
−
y
j
(4)
\epsilon_{j}=d_{j}-y_{j} \tag{4}
ϵj=dj−yj(4)
其中,滤波器的输出为:
y
j
=
X
j
T
W
j
(5)
y_{j}=X_{j}^{T}W_{j} \tag{5}
yj=XjTWj(5)
( 1 ) (1) (1) 中的 μ \mu μ 是一个控制收敛率的常量,其正确选择可控制自适应过程的稳定性。权值以输入的采样率来更新。
5. 频域 LMS 自适应滤波器
图2 展示了频域 LMS 自适应滤波器。
它在常规配置上与传统的时域滤波器类似。首先,输入信号
x
j
x_{j}
xj 和期望响应
d
j
d_{j}
dj 在缓存 buffer 中累积以形成
n
n
n 点的数据块(未在图2 中展示出);然后,对其应用
n
n
n 点的 FFT 变换,每个 FFT 输出由
n
n
n 个复数构成的集合;接着,在相应的频点上,用期望响应的 FFT 变换减去输入(笔者注:此处应该是加权之后的输入)的 FFT 变换得到
n
n
n 点复数误差信号。
n
n
n 点复数权值,每个对应一个频点,且每个权值逐块单独更新。将加权的输出直接进行 iFFT 变换以生成延迟了
n
n
n 个采样点的输出信号
y
j
−
n
y_{j-n}
yj−n。
文献(可参考 论文笔记之 CLMS)中给出的复数 LMS 算法表示为:
W
j
+
1
=
W
j
+
2
μ
ϵ
j
X
‾
j
(6)
W_{j+1}=W_{j}+2\mu \epsilon_{j} \overline{X}_{j} \tag{6}
Wj+1=Wj+2μϵjXj(6)
其中,横线表示复数共轭。该算法起初被设计用于时域复数信号的滤波,但通过给每个复数权值提供单独的误差信号,其可被用于频域。第
l
l
l 个频点的复数权值可以用下式更新:
w
l
(
k
+
1
)
=
w
l
(
k
)
+
2
μ
ϵ
l
(
k
)
x
l
‾
(
k
)
(7)
w_{l}(k+1)=w_{l}(k)+2\mu \epsilon_{l}(k) \overline{x_{l}}(k) \tag{7}
wl(k+1)=wl(k)+2μϵl(k)xl(k)(7)
其中, w l ( k + 1 ) w_{l}(k+1) wl(k+1) 是用第 k k k 个 n n n 点的输入数据块自适应更新后得到的第 l l l 个复数权值。因为,每个权值针对 n n n 点的数据块只更新一次,这种方法的自适应次数比传统时域滤波器降低了 n n n 倍。自适应常量 μ \mu μ 的值可相应地增加 n n n 倍,增大后的 μ \mu μ 值(相应的自适应次数越不频繁)将频域滤波器的权值分辨率降低了 n n n 倍。so that the number of bits required to store each weight can be reduced by l o g 2 n {\rm log}_{2}n log2n, simplifying the weight update arithmetic.(笔者注:这句话没太懂,为什么会减少存储量?)
传统和频域 LMS 自适应滤波器的计算需求之间的差异可以根据产生相同输出所用的乘法次数来说明。传统滤波器产生
n
n
n 点的输出需要
n
2
n^{2}
n2 次自适应和
2
n
2
2n^{2}
2n2 次实数乘法。频域滤波器产生相同的输出需要
(
3
n
/
2
)
l
o
g
2
n
(3n/2) \; {\rm log}_{2}n
(3n/2)log2n 次复数乘法来计算三个
n
n
n 点 FFT,以及
2
n
2n
2n 次复数乘法来计算复数加权和权值更新。频域滤波器复数乘法次数与传统时域滤波器实数乘法次数的比率为:
c
o
m
p
l
e
x
m
u
l
t
i
p
l
i
e
s
r
e
a
l
m
u
l
t
i
p
l
i
e
s
=
(
3
n
/
2
)
l
o
g
2
n
+
2
n
2
n
2
=
3
l
o
g
2
n
+
4
4
n
(8)
\frac{\rm {complex \; multiplies}}{\rm {real \; multiplies}}=\frac{(3n/2){\rm log}_{2}n+2n}{2n^{2}}=\frac{3 {\rm log}_{2}n+4}{4n} \tag{8}
realmultipliescomplexmultiplies=2n2(3n/2)log2n+2n=4n3log2n+4(8)
当 n = 4 n=4 n=4 时,比率是 0.833 0.833 0.833; n = 16 n=16 n=16 时,比率是 0.250 0.250 0.250; n = 128 n=128 n=128 时,比率是 0.0469 0.0469 0.0469; n = 1024 n=1024 n=1024 时,比率是 0.0083 0.0083 0.0083;
很明显,在许多实际情况下,使用频域技术所带来的计算量的减少是很可观的。以至于即使考虑到每个数据块需要三个 FFT 的额外计算,使用这种技术并从其变换中恢复滤波后的信号也是值得的。使用传统的数字技术,可以将输出累积在 buffer 中并将其“拼接在一起”,从而创建连续但延迟的输出数据流。通过这种方式,任何大型自适应数字滤波器都可以通过复数 LMS 和 FFT 算法的组合来实现。 如果只需要输出信号的 FFT 变换或其功率谱,那么可以不用计算第三个 FFT。
6. 后记
该论文是笔者所知最早实现频域 LMS 自适应滤波器的文章,但论文中所提出的方法与传统的时域 LMS 自适应滤波器在效果上不是等价的。传统的时域 LMS 自适应滤波器使用的是线性卷积,但论文中所提出的方法其实使用的是圆周(或称为循环)卷积,实际商用的产品使用的也不是这种频域方法。不过该论文为实现 LMS 自适应滤波器提供了一个新的思路,笔者翻译这篇文章只是想(也是想让读者)更多地了解频域自适应滤波器的发展历程。论文笔记之 FLMS 介绍了常用的频域自适应滤波器,感兴趣的读者可以继续阅读。