【论文笔记之 FLMS】Fast Implementation of LMS Adaptive Filters
本文对 EARL R. FERRARA 于 1980 年在 IEEE Transactions on Acoustics, Speech, and Signal Processing 上发表的论文进行简单地翻译。如有表述不当之处欢迎批评指正。欢迎任何形式的转载,但请务必注明出处。
论文链接:https://ieeexplore.ieee.org/abstract/document/1163432。
目录
- 1. 论文目的
- 2. 摘要
- 3. 介绍
- 4. LMS 算法
- 5. 频域实现
- 6. 后记
1. 论文目的
2. 摘要
论文提出了 LMS 自适应横向滤波器的一种频域实现方法。相比于传统的 LMS 自适应滤波器,当滤波器长度等于或大于 64 点的时候,快速 LMS(FLMS)自适应滤波器计算量更小。
3. 介绍
LMS 自适应滤波器已被广泛使用在了各种应用中,包括系统建模,通道均衡,干扰消除,自适应天线和谱线增强。在通常的实现中,抽头延迟线的输出被加权并求和以产生滤波器的输出。横向滤波器的权重决定了它的冲激响应, 其值由 LMS 算法自适应地更新。有研究人员已于 1978 年提出了自适应滤波器的一种频域实现(相比于其时域版本需要更少的计算量,该频域实现可参考 论文笔记之 AFiFD)。然而,该频域实现使用了滤波器输入和冲激响应的循环卷积,而传统时域 LMS 自适应滤波器使用的是线性卷积。这阻止了该滤波器收敛到传统自适应滤波器所能达到的最佳横向滤波器的解。
论文的目的是,在频域提出一种传统 LMS 自适应滤波器的实现,该实现确实能收敛到最佳横向滤波器的解。所提出的方法旨在直接替代 LMS 自适应滤波器,而且相比于时域的实现,该方法对长滤波器的计算量更少。所提出的方法类似于另一篇文献中所描述的方法,但是它和时域 LMS 滤波器以相同的速率收敛。以这种速率收敛并不总是有利的,比如,当滤波器抽头处信号的相关矩阵具有高度不同的特征值时。尽管如此,LMS 自适应滤波器已被广泛使用,并且能被很好地理解,因此,其快速实现是让人感兴趣的。
4. LMS 算法
如果 LMS 自适应滤波器的输入是实离散信号 x j x_{j} xj,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_{1,j},w_{2,j} \cdots w_{n,j}] \tag{2} WjT=[w1,j,w2,j⋯wn,j](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 是期望响应 d j d_{j} dj 和滤波器输出之间的差:
ϵ 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)
为了实现传统 n n n 点自适应滤波器的频域等效版本,将输入信号划分为 n n n 点的数据块将会使实现更加方便。在处理块中的每个输入点时,权值是固定不变的。只有当块中的每个输入点全部处理完,才对权值进行更新。这通常不会限制其性能,因为为了防止权值变得 too noisy,权值向量的更新时间常数应该是 n n n 的倍数。第 k k k 个数据块,滤波器的输出为:
y k n + i = X k n + i T W k , 0 ≤ i ≤ n − 1 (6)y_{kn+i}=X_{kn+i}^{T}W_{k}, \quad 0\leq i \leq n-1 \tag{6} ykn+i=Xkn+iTWk,0≤i≤n−1(6)
其中, W k W_{k} Wk 是第 k k k 个数据块所使用的时域权值向量。在处理完第 k k k 个数据块的全部数据之后,权值向量的更新方程可通过在 n n n 点数据上迭代 ( 1 ) (1) (1) 来得到:
Wk+1 =Wk + 2 μ∑ i = 0n − 1 ϵ k n + i X k n + i =Wk + 2 μ▽k (7) \begin{aligned} W_{k+1}&=W_{k}+2\mu \sum_{i=0}^{n-1}\epsilon_{kn+i}X_{kn+i} \\ &=W_{k}+2\mu \bigtriangledown_{k} \end{aligned} \tag{7} Wk+1=Wk+2μi=0∑n−1ϵkn+iXkn+i=Wk+2μ▽k(7)
5. 频域实现
现在,将展示如何在频域实现 ( 6 ) (6) (6) 和 ( 7 ) (7) (7),以达到节省计算量的目的。式 ( 6 ) (6) (6) 能被显示地改写为权值和滤波器输入的线性卷积:
y k n + j = ∑ i = 0 n − 1 w i , k x k n + j − i (8)y_{kn+j}=\sum_{i=0}^{n-1}w_{i,k}x_{kn+j-i}\tag{8} ykn+j=i=0∑n−1wi,kxkn+j−i(8)
为了使用 FFT 通过重叠保留法实现 ( 8 ) (8) (8),必须给权值补 n n n 点零,且使用 2 n 2n 2n 点 FFT。令 ω k \omega_{k} ωk 为 2 n 2n 2n 点的向量,其元素为时域权值向量补了 n n n 点零之后的 FFT 系数:
ω k T = F F T [ W k T , 0 ⋯ 0 ] (9)\omega_{k}^{T}={\rm FFT}[W_{k}^{T}, 0 \cdots 0] \tag{9} ωkT=FFT[WkT,0⋯0](9)
ω k \omega_{k} ωk 是频域的权值向量。令 χ k \chi_{k} χk 为第 k − 1 k-1 k−1 和第 k k k 个输入块的 2 n 2n 2n 点的 FFT 变换:
χ k T = F F T [ x(k−1)n ⋯ xkn−1 ⏟ ( k − 1 ) t h b l o c k xkn ⋯ xkn+n−1 ] ⏟ k t h b l o c k (10)\chi_{k}^{T}={\rm FFT}[ \underbrace{x_{(k-1)n} \cdots x_{kn-1}}_{(k-1){\rm th \; block}} \quad \underbrace{x_{kn} \cdots x_{kn+n-1}]}_{k{\rm th \; block}} \tag{10} χkT=FFT[(k−1)thblock x(k−1)n⋯xkn−1kthblock xkn⋯xkn+n−1](10)
( 8 ) (8) (8) 所表示的卷积可以通过以下方式实现:
[ y k n ⋯ y k n + n − 1 ] T = l a s t n t e r m s o f F F T − 1 { ω k ⊗ χ k } (11)[y_{kn} \cdots y_{kn+n-1}]^{T}={\rm last} \; n \; {\rm terms \; of \; FFT}^{-1}\{\omega_{k} \otimes \chi_{k}\} \tag{11} [ykn⋯ykn+n−1]T=lastntermsofFFT−1{ωk⊗χk}(11)
其中 ⊗ \otimes ⊗ 表示两个向量逐元素相乘。 ( 11 ) (11) (11) 给出了第 k k k 个输入块所对应的输出值。因此,时域上 n n n 点的横向滤波器对应于频域上 2 n 2n 2n 点的滤波器。
为了在频域上实现权值更新方程 ( 7 ) (7) (7), ( 7 ) (7) (7) 中 ▽ k \bigtriangledown_{k} ▽k 的第 j j j 个元素可以被重写为:
▽ j , k = ∑ i = 0 n − 1 ϵ k n + i x k n + i − ( j − 1 ) , 1 ≤ j ≤ n (12)\bigtriangledown_{j, k}=\sum_{i=0}^{n-1}\epsilon_{kn+i}x_{kn+i-(j-1)}, \quad 1 \leq j \leq n\tag{12} ▽j,k=i=0∑n−1ϵkn+ixkn+i−(j−1),1≤j≤n(12)
因此, ▽ k \bigtriangledown_{k} ▽k 的元素由误差序列和滤波器输入序列的互相关给出。可以使用 FFT 来计算 ▽ k \bigtriangledown_{k} ▽k,不过首先需要计算 E k E_{k} Ek:
E k = F F T [ 0 ⋯ 0 ⏟ n z e r o s dkn − ykn ⋯ dkn+n−1 − ykn+n−1 ⏟ k t h e r r o r b l o c k ] T (13)E_{k}={\rm FFT} [\underbrace{0 \cdots 0}_{n \; {\rm zeros}} \quad \underbrace{d_{kn}-y_{kn} \cdots d_{kn+n-1}-y_{kn+n-1}}_{k{\rm th \; error \; block}}]^{T}\tag{13} Ek=FFT[nzeros 0⋯0ktherrorblock dkn−ykn⋯dkn+n−1−ykn+n−1]T(13)
然后计算:
▽ k = f i r s t n t e r m s o f F F T − 1 E k ⊗ χ ‾ k (14)\bigtriangledown_{k}={\rm first} \; n \; {\rm terms \; of \; FFT}^{-1}{E_{k} \otimes \overline {\chi}_{k}} \tag{14} ▽k=firstntermsofFFT−1Ek⊗χk(14)
其中, χ k \chi_{k} χk 上的横线表示复数共轭。最后,频域的权值更新方程为:
ω ( k + 1 ) = ω ( k ) + 2 μ F F T [ ▽ k 0⋮0 ] } n z e r o s (15) \omega(k+1)=\omega(k)+2\mu {\rm FFT} \left[ \begin{array}{cc} \bigtriangledown_{k} \\ 0 \\ \vdots \\ 0 \end{array} \right] \begin{array}{cc} {}\\ \left. \begin{array}{cc} {}\\ {}\\ {} \end{array} \right\}n \; {\rm zeros} \end{array} \tag{15} ω(k+1)=ω(k)+2μFFT⎣⎢⎢⎢⎡▽k0⋮0⎦⎥⎥⎥⎤⎭⎬⎫nzeros(15)
如果将初始权值向量 ω 0 \omega_{0} ω0 的逆变换的最后 n n n 个值强制置为 0 0 0,那么 ( 15 ) (15) (15) 就是 ( 7 ) (7) (7) 在频域上的精确实现。
( 10 ) , ( 11 ) , ( 13 ) , ( 14 ) (10),(11),(13),(14) (10),(11),(13),(14) 和 ( 15 ) (15) (15) 一起定义了快速 LMS(FLMS) 自适应滤波器。处理完每个块的数据之后,FLMS 自适应滤波器的冲激响应和传统的 LMS 滤波器的冲激响应是相等的。即使 FLMS 的权值向量是逐块更新的,但这两个滤波器的收敛率是一样的。因为根据 ( 7 ) (7) (7),整个数据块的梯度估计值之和被用来更新 FLMS 的权值向量。
对于每个包含了 n n n 点的数据块来说, F L M S {\rm FLMS} FLMS 滤波器需要 5 5 5 个 2 n 2n 2n 点的 F F T {\rm FFT} FFT,以及 2 2 2 个 2 n 2n 2n 点的复数乘法。对于实输入数据,所有的 F F T {\rm FFT} FFT 变化都是对称的,并且只需要计算前 n + 1 n+1 n+1 个项。此外,对于实数据而言,一个 2 n 2n 2n 点的 F F T {\rm FFT} FFT 可以通过一个 n n n 点的 F F T {\rm FFT} FFT 和 n n n 点的复数乘法来实现。每个 n n n 点的 F F T {\rm FFT} FFT 需要 n / 2 l o g n / 2 n/2 \, {\rm log} \, n/2 n/2logn/2 的复数乘法。因此,每个块中 5 5 5 个 F F T {\rm FFT} FFT 需要的复数乘法为 5 ( n / 2 l o g n / 2 + n ) 5(n/2 \, {\rm log}\, n/2 \, + \, n) 5(n/2logn/2+n),复数加权和更新需要的复数乘法约为 2 n 2n 2n。传统的自适应滤波器输出 n n n 点,需要 2 n 2 2n^2 2n2 个实数乘法。一个复数乘法相当于四个实数乘法,可得到:
F L M S r e a l m u l t i p l i e s L M S r e a l m u l t i p l i e s = 5 ( l o g n 2 ) + 14 n (16)\frac{\rm FLMS \; real \; multiplies}{\rm LMS \; real \; multiplies}=\frac{5({\rm log} \; \frac{n}{2})+14}{n} \tag{16} LMSrealmultipliesFLMSrealmultiplies=n5(log2n)+14(16)
下表给出了一些具体的比例值:
当 n ≥ 64 n \geq 64 n≥64 时,在频域实现的 LMS 能节省计算量,即使是需要 5 5 5 个 FFT。对于长滤波器,节省的计算量是相当可观的。
6. 后记
论文发表于 1980 年,像现在商用中大规模使用的分块频域算法(可参考 论文笔记之 MDF)都是在 FLMS 的基础上改进来的。 FLMS 算法在频域使用 FFT 计算线性卷积和线性相关,大大降低了传统时域 LMS 算法的计算量。作者在论文中用 F 指 Fast,不过也可以将其理解为 Frequency。
论文中的 FLMS 与传统的 LMS 算法在收敛率和计算效果方面都是一样,并没有涉及步长方面的研究,后续笔者将根据《自适应滤波器原理》一书中的内容,对 FLMS 算法做进一步介绍。