自适应滤波器之 NLMS 算法

本文对 NLMS 作以介绍,如有表述不当之处欢迎批评指正。欢迎任何形式的转载,但请务必注明出处。

1. 引言

NLMS 即归一化 LMSNormalized LMS)算法,是 LMS 算法(可参考 自适应滤波器之 LMS 算法)的改进版。在 LMS 算法中,抽头权值的调整量与抽头输入向量成正比。当抽头输入向量比较大的时候,LMS 会遇到梯度噪声放大的问题。为了克服这个问题,可以使用 NLMS 算法,之所以称为 “Normalized”,是因为它使用抽头输入向量的平方欧式范数对抽头权值调整量进行了归一化。

2. 传统的 NLMS 算法

NLMS 算法描述为以下公式:
h ⃗ ( n + 1 ) = h ⃗ ( n ) + μ ( n ) e ( n ) x ⃗ ( n ) (1) \vec{h}(n+1) = \vec{h}(n) + \mu(n) e(n) \vec{x}(n) \tag{1} h (n+1)=h (n)+μ(n)e(n)x (n)(1)

可以看出 NLMSLMS 算法的不同之处在于步长:LMS 算法中的步长为一个给定的常数,NLMS 算法中的步长为一个随时间变化的量,且定义为:
μ ( n ) = α x ⃗ T ( n ) x ⃗ ( n ) = α ∥ x ⃗ ( n ) ∥ 2 (2) \mu(n) = \frac{\alpha}{\vec{x}^T(n)\vec{x}(n)} = \frac{\alpha}{{\Vert \vec{x}(n)\Vert}^{2}} \tag{2} μ(n)=x T(n)x (n)α=x (n)2α(2)

为了使算法收敛, α \alpha α 应该满足:
0 < α < 2 (3) 0<\alpha<2\tag{3} 0<α<2(3)

实际中,为了避免当 ∥ x ⃗ ( n ) ∥ 2 {\Vert \vec{x}(n)\Vert}^{2} x (n)2 过小时产生大的步长 μ ( n ) \mu(n) μ(n),可进一步进行修改:
μ ( n ) = α ∥ x ⃗ ( n ) ∥ 2 + c (4) \mu(n) = \frac{\alpha}{{\Vert \vec{x}(n)\Vert}^{2} + c}\tag{4} μ(n)=x (n)2+cα(4)

其中 c c c 是一个很小的常数。

3. 推导

上一小节直接给出了 NLMS 算法的公式,可以认为它是 LMS 算法的一个很自然的改进版本。当然,它也可以被单独推导出来,这一小节将对推导过程作以介绍(如果读者不感兴趣,可以跳过本小节)。

NLMS 算法是最小扰动原理(the principle of minimal disturbance)的一种表现形式。该原理可以表述如下:

从一次自适应循环到下一次自适应循环中,自适应滤波器的权重向量应该以最小的方式改变,而且受到更新的滤波器的输出所施加的约束。

NLMS 算法的设计准则可以表述为带约束的优化问题:给定抽头输入向量 x ⃗ ( n ) \vec{x}(n) x (n) 和期望响应 d ( n ) d(n) d(n),确定更新后的权重向量 h ⃗ ( n + 1 ) \vec{h}(n+1) h (n+1),以使下式的平方欧式范数最小:
δ h ⃗ ( n + 1 ) = h ⃗ ( n + 1 ) − h ⃗ ( n ) (5) \delta \vec{h}(n+1) = \vec{h}(n+1) - \vec{h}(n)\tag{5} δh (n+1)=h (n+1)h (n)(5)

并受制于以下约束条件:
h ⃗ T ( n + 1 ) x ⃗ ( n ) = d ( n ) (6) \vec{h}^{T}(n+1) \vec{x}(n) = d(n) \tag{6} h T(n+1)x (n)=d(n)(6)

可以使用拉格朗日乘子法(the method of Lagrange multipliers)解决该带约束的优化问题。根据这个方法,目前这个问题的代价函数可以描述为:
J ( n ) = ∥ δ h ⃗ ( n + 1 ) ∥ 2 + λ ( d ( n ) − h ⃗ T ( n + 1 ) x ⃗ ( n ) ) (7) J(n) = \Vert \delta \vec{h}(n+1) \Vert^{2} + \lambda (d(n) - \vec{h}^{T}(n+1) \vec{x}(n)) \tag{7} J(n)=δh (n+1)2+λ(d(n)h T(n+1)x (n))(7)

其中, λ \lambda λ 为拉格朗日乘子。 ( 7 ) (7) (7) 可改写为:
J ( n ) = ( h ⃗ ( n + 1 ) − h ⃗ ( n ) ) T ( h ⃗ ( n + 1 ) − h ⃗ ( n ) ) + λ ( d ( n ) − h ⃗ T ( n + 1 ) x ⃗ ( n ) ) (8) J(n) = (\vec{h}(n+1) - \vec{h}(n))^{T} (\vec{h}(n+1) - \vec{h}(n)) + \lambda (d(n) - \vec{h}^{T}(n+1) \vec{x}(n)) \tag{8} J(n)=(h (n+1)h (n))T(h (n+1)h (n))+λ(d(n)h T(n+1)x (n))(8)

为了寻找使 J ( n ) J(n) J(n) 最小化的 h ⃗ ( n + 1 ) \vec{h}(n+1) h (n+1),采用以下步骤:
1). J ( n ) J(n) J(n) h ⃗ T ( n + 1 ) \vec{h}^{T}(n+1) h T(n+1) 求导,并令其值为 0 0 0:
∂ J ( n ) ∂ h ⃗ T ( n + 1 ) = 2 ( h ⃗ ( n + 1 ) − h ⃗ ( n ) ) − λ x ⃗ ( n ) = 0 (9) \begin{aligned} \frac{\partial J(n)}{\partial \vec{h}^{T}(n+1)} &= 2(\vec{h}(n+1) - \vec{h}(n)) - \lambda \vec{x}(n) \\ &= 0 \end{aligned} \tag{9} h T(n+1)J(n)=2(h (n+1)h (n))λx (n)=0(9)

可得:
h ⃗ ( n + 1 ) = h ⃗ ( n ) + 1 2 λ x ⃗ ( n ) (10) \vec{h}(n+1) = \vec{h}(n) + \frac{1}{2} \lambda \vec{x}(n) \tag{10} h (n+1)=h (n)+21λx (n)(10)

2). 将上一步的结果代入 ( 6 ) (6) (6),以求解 λ \lambda λ
d ( n ) = h ⃗ T ( n + 1 ) x ⃗ ( n ) = ( h ⃗ ( n ) + 1 2 λ x ⃗ ( n ) ) T x ⃗ ( n ) = h ⃗ T ( n ) x ⃗ ( n ) + 1 2 λ x ⃗ T ( n ) x ⃗ ( n ) = h ⃗ T ( n ) x ⃗ ( n ) + 1 2 λ ∥ x ⃗ ( n ) ∥ 2 (11) \begin{aligned} d(n) &= \vec{h}^{T}(n+1) \vec{x}(n) \\ &= (\vec{h}(n) + \frac{1}{2} \lambda \vec{x}(n))^{T} \vec{x}(n) \\ &= \vec{h}^{T}(n) \vec{x}(n) + \frac{1}{2} \lambda \vec{x}^{T}(n) \vec{x}(n) \\ &= \vec{h}^{T}(n) \vec{x}(n) + \frac{1}{2} \lambda \Vert \vec{x}(n) \Vert^{2} \end{aligned} \tag{11} d(n)=h T(n+1)x (n)=(h (n)+21λx (n))Tx (n)=h T(n)x (n)+21λx T(n)x (n)=h T(n)x (n)+21λx (n)2(11)

可得:
λ = 2 ( d ( n ) − h ⃗ T ( n ) x ⃗ ( n ) ) ∥ x ⃗ ( n ) ∥ 2 = 2 e ( n ) ∥ x ⃗ ( n ) ∥ 2 (12) \begin{aligned} \lambda &= \frac{2(d(n) - \vec{h}^{T}(n) \vec{x}(n))}{\Vert \vec{x}(n)\Vert^{2}} \\ &= \frac{2e(n)}{\Vert \vec{x}(n)\Vert^{2}} \end{aligned} \tag{12} λ=x (n)22(d(n)h T(n)x (n))=x (n)22e(n)(12)

3). 结合上述两步的结果,以推导出 δ w ⃗ ( n + 1 ) \delta \vec{w}(n+1) δw (n+1) 的最优值。即由 ( 10 ) (10) (10) ( 12 ) (12) (12) 可得:
δ w ⃗ ( n + 1 ) = h ⃗ ( n + 1 ) − h ⃗ ( n ) = 1 ∥ x ⃗ ( n ) ∥ 2 e ( n ) x ⃗ ( n ) (13) \begin{aligned} \delta \vec{w}(n+1) &= \vec{h}(n+1) - \vec{h}(n) \\ &= \frac{1}{\Vert \vec{x}(n)\Vert^{2}} e(n) \vec{x}(n) \end{aligned} \tag{13} δw (n+1)=h (n+1)h (n)=x (n)21e(n)x (n)(13)

为了对抽头权向量的增量幅值进行控制,上式可改写为:
δ w ⃗ ( n + 1 ) = h ⃗ ( n + 1 ) − h ⃗ ( n ) = α ∥ x ⃗ ( n ) ∥ 2 e ( n ) x ⃗ ( n ) (14) \begin{aligned} \delta \vec{w}(n+1) &= \vec{h}(n+1) - \vec{h}(n) \\ &= \frac{\alpha}{\Vert \vec{x}(n)\Vert^{2}} e(n) \vec{x}(n) \end{aligned} \tag{14} δw (n+1)=h (n+1)h (n)=x (n)2αe(n)x (n)(14)

在克服传统 LMS 算法引入的梯度噪声放大问题时,NLMS 算法自身也会引入一些问题。即当抽头输入向量 x ⃗ ( n ) \vec{x}(n) x (n) 特别小时, ( 14 ) (14) (14) 中的除法运算可能会出现数值计算困难。为了克服该问题,可将 ( 14 ) (14) (14) 可改写为:
h ⃗ ( n + 1 ) = h ⃗ ( n ) + α ∥ x ⃗ ( n ) ∥ 2 + c e ( n ) x ⃗ ( n ) (15) \vec{h}(n+1) = \vec{h}(n) + \frac{\alpha}{\Vert \vec{x}(n)\Vert^{2} + c} e(n) \vec{x}(n) \tag{15} h (n+1)=h (n)+x (n)2+cαe(n)x (n)(15)

其中 c c c 是一个很小的常数。

4. 功率归一化的 NLMS 算法

对步长的分子和分母均进行 M M M 倍的缩放之后,可进一步将 ( 15 ) (15) (15) 改写为:
h ⃗ ( n + 1 ) = h ⃗ ( n ) + α / M ∥ x ⃗ ( n ) ∥ 2 / M + c / M e ( n ) x ⃗ ( n ) (16) \vec{h}(n+1) = \vec{h}(n) + \frac{\alpha / M}{\Vert \vec{x}(n)\Vert^{2} / M + c / M} e(n) \vec{x}(n) \tag{16} h (n+1)=h (n)+x (n)2/M+c/Mα/Me(n)x (n)(16)

可以使用 p ( i ) p(i) p(i) 近似代替 ∥ x ⃗ ( n ) ∥ 2 / M \Vert \vec{x}(n)\Vert^{2} / M x (n)2/M,其中:
p ( i ) = β p ( i − 1 ) + ( 1 − β ) ∣ x ( n ) ∣ 2 , p ( − 1 ) = 0    a n d    0 < β ≤ 1 (17) p(i) = \beta p(i-1) + (1-\beta) \left| x(n) \right|^{2}, \quad p(-1)=0 \; and \; 0 < \beta \leq 1 \tag{17} p(i)=βp(i1)+(1β)x(n)2,p(1)=0and0<β1(17)

可以被解释为输入序列 { x ( n ) } \{x(n)\} {x(n)} 的功率估计, M M M 表示抽头输入向量 x ⃗ ( n ) \vec{x}(n) x (n) 的长度。 ( 16 ) (16) (16) 可进一步改写为:
h ⃗ ( n + 1 ) = h ⃗ ( n ) + α p ( i ) + c e ( n ) x ⃗ ( n ) (18) \vec{h}(n+1) = \vec{h}(n) + \frac{\alpha}{p(i) + c} e(n) \vec{x}(n) \tag{18} h (n+1)=h (n)+p(i)+cαe(n)x (n)(18)

需要注意的是, ( 18 ) (18) (18) 中的 α \alpha α c c c ( 15 ) (15) (15) 中相应值的 1 / M 1/M 1/M

5. 总结

NLMS 是归一化的 LMS 算法,即乘积向量 e ( n ) x ⃗ ( n ) e(n) \vec{x}(n) e(n)x (n) 相对于抽头输入向量的平方欧式范数(或输入序列的功率)进行了归一化。可把 NLMS 看作时变步长参数的 LMS。无论对于不相关数据还是相关数据,NLMS 要比标准 LMS 可能呈现出更快的收敛速度。

关于 NLMS 算法的论文可参考 论文笔记之 NLMS,该论文从几何角度对 NLMS 算法进行了介绍,提供了一个较新的理解思路,感兴趣的读者可进一步学习。

6. 参考文献

[1]《数字信号处理理论,算法与实现》(第三版) 作者:胡广书
[2]《自适应滤波器原理》(第五版) 原作者:Simon Haykin
[3]《Fundamentals of Adaptive Filtering》 作者:Ali H. Sayed

  • 12
    点赞
  • 117
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
NLMS自适应滤波器的原理如下: 首先,NLMS自适应滤波器是一种迭代算法,用于根据输入信号和期望输出信号来适应地调整滤波器的权重。该算法通过最小化预测误差的平方和来实现。 具体而言,NLMS自适应滤波器的原理是在每个时刻,通过计算输入信号和估计输出信号之间的误差,然后根据该误差来更新滤波器的权重。更新的公式为: w(n+1) = w(n) + μ * e(n) * x(n) / (α + ||x(n)||^2) 其中,w(n) 表示时刻n的滤波器权重向量,μ 是自适应步长参数,e(n) 表示时刻n的预测误差,x(n) 表示时刻n的输入信号向量,α 是一个小正数,用于避免分母接近于零的情况。 该更新公式中的分母 ||x(n)||^2 是用于归一化权重更新的因子,它表示输入信号向量的模的平方。这样可以确保权重的更新与输入信号的能量有关。 通过不断迭代更新权重,NLMS自适应滤波器可以逐渐逼近期望输出信号,从而实现滤波器的自适应调整。 参考文献: 胡广书,《数字信号处理理论,算法与实现》(第三版) Simon Haykin,《自适应滤波器原理》(第五版) Ali H. Sayed,《Fundamentals of Adaptive Filtering》<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【滤波器】归一化LMS自适应滤波器](https://blog.csdn.net/weixin_45317919/article/details/126294494)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [自适应滤波器NLMS 算法](https://blog.csdn.net/wjrenxinlei/article/details/62892008)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值