【论文笔记之FLMS】Fast Implementation of LMS Adaptive Filters

本文对EARL R. FERRARA1980年在IEEE Transactions on Acoustics, Speech, and Signal Processing上发表的论文进行简单地翻译。如有表述不当之处欢迎批评指正。欢迎任何形式的转载,但请务必注明出处。

1. 论文目的

  在频域快速实现LMS自适应滤波器。

2. 摘要

  论文提出了LMS自适应横向滤波器的一种频域实现方法。相比于传统的LMS自适应滤波器,当滤波器长度等于或大于64点的时候,快速LMS(FLMS)自适应滤波器计算量更小。

3. 介绍

  LMS自适应滤波器已被广泛使用在了各种应用中,包括系统建模,通道均衡,干扰消除,自适应天线和谱线增强。在通常的实现中,抽头延迟线的输出被加权并求和以产生滤波器的输出。横向滤波器的权重决定了它的冲激响应, 其值由LMS算法自适应地更新。有研究人员已于1978年提出了自适应滤波器的一种频域实现(相比于其时域版本需要更少的计算量,该频域实现可参考论文笔记之AFiFD)。然而,该频域实现使用了滤波器输入和冲激响应的循环卷积,而传统时域LMS自适应滤波器使用的是线性卷积。这阻止了该滤波器收敛到传统自适应滤波器所能达到的最佳横向滤波器的解。

  论文的目的是,在频域提出一种传统LMS自适应滤波器的实现,该实现确实能收敛到最佳横向滤波器的解。所提出的方法旨在直接替代LMS自适应滤波器,而且相比于时域的实现,该方法对长滤波器的计算量更少。所提出的方法类似于另一篇文献中所描述的方法,但是它和时域LMS滤波器以相同的速率收敛。以这种速率收敛并不总是有利的,比如,当滤波器抽头处信号的相关矩阵具有高度不同的特征值时。尽管如此,LMS自适应滤波器已被广泛使用,并且能被很好地理解,因此,其快速实现是让人感兴趣的。

4. LMS算法

  如果LMS自适应滤波器的输入是实离散信号 x j x_{j} xjLMS自适应算法可以描述为:
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,jwn,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,xj1xjn+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=djyj(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,0in1(6)
其中, W k W_{k} Wk是第 k k k个数据块所使用的时域权值向量。在处理完第 k k k个数据块的全部数据之后,权值向量的更新方程可通过在 n n n点数据上迭代 ( 1 ) (1) (1)来得到:
W k + 1 = W k + 2 μ ∑ i = 0 n − 1 ϵ k n + i X k n + i = W k + 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=0n1ϵ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=0n1wi,kxkn+ji(8)
为了使用FFT通过重叠保留法实现 ( 8 ) (8) (8),必须给权值补 n n n点零,且使用 2 n 2n 2nFFT。令 ω 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,00](9)
ω k \omega_{k} ωk是频域的权值向量。令 χ k \chi_{k} χk为第 k − 1 k-1 k1和第 k k k个输入块的 2 n 2n 2n点的FFT变换:
χ k T = F F T [ x ( k − 1 ) n ⋯ x k n − 1 ⏟ ( k − 1 ) t h    b l o c k x k n ⋯ x k n + 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[(k1)thblock x(k1)nxkn1kthblock xknxkn+n1](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} [yknykn+n1]T=lastntermsofFFT1{ ω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=0n1ϵkn+ixkn+i(j1),1jn(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 d k n − y k n ⋯ d k n + n − 1 − y k n + 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 00ktherrorblock dknykndkn+n1ykn+n1]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=firstntermsofFFT1Ekχ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μFFTk00nzeros(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)
下表给出了一些具体的比例值:
表1
n ≥ 64 n \geq 64 n64时,在频域实现的LMS能节省计算量,即使是需要 5 5 5FFT。对于长滤波器,节省的计算量是相当可观的。

6. 后记

  论文发表于1980年,像现在商用中大规模使用的分块频域算法都是在FLMS的基础上改进来的。FLMS算法在频域使用FFT计算线性卷积和线性相关,大大降低了传统时域LMS算法的计算量。作者在论文中用FFast, 不过也可以将其理解为Frequency

  论文中的FLMS与传统的LMS算法在收敛率和计算效果方面都是一样,并没有涉及步长方面的研究,后续笔者将根据《自适应滤波器原理》一书中的内容,对FLMS算法做进一步介绍。

猜你喜欢

转载自blog.csdn.net/wjrenxinlei/article/details/124410526