【滤波器】归一化LMS自适应滤波器

目录

  • 一、NLMS自适应滤波器
    • 1、简介
    • 2、原理推导
  • 二、MATLAB仿真实验
    • 1、滤波效果
    • 2、 不同参数对滤波器性能的影响
  • 三、参考文献

一、NLMS自适应滤波器

1、简介

在自适应滤波算法中,稳态误差和收敛速度是其中2个最重要的性能指标。对于传统的固定步长自适应滤波器,在满足稳态误差和收敛速度上存在很大的矛盾:较小的步长能获得很小的稳态误差,但是收敛速度比较慢;另一方面,如果步长增大,则滤波器的收敛速度得以提高,但是以较大的稳态误差作为代价。
为此,人们提出了一种变步长的自适应滤波算法,即 归一化最小均方(Normalized Least Mean Square,NLMS)自适应滤波算法。该滤波算法在滤波初始阶段时的步长较大,收敛速度较快;当算法收敛后,通过减小步长,以保证较高的收敛精度。

看到这里大家是不是有一个疑问,NLMS算法只是在LMS算法的基础上做了归一化,它为什么是一种变步长的LMS算法?这个问题会在算法公式推导的最后面解释,请耐心看完。

2、原理推导

在LMS滤波器的权向量更新公式中, X ( n ) X(n) X(n)是含有噪声的信号,当 X ( n ) X(n) X(n)较大时,LMS算法会出现梯度噪声放大的问题,为了解决这个问题,可采用归一化LMS算法。
W ( n ) W(n) W(n) W ( n + 1 ) W(n+1) W(n+1) 分别表示第 n n n 时刻和 n + 1 n+1 n+1 时刻的权向量,则归一化LMS滤波器的设计准则可表述为下面的约束优化问题:
给定输入向量 X ( n ) X(n) X(n) 和期望输出 d ( n ) d(n) d(n),确定更新的权向量为 W ( n + 1 ) W(n+1) W(n+1),以使增量向量 δ W ( n + 1 ) = W ( n + 1 ) − W ( n ) δW(n+1)=W(n+1)-W(n) δW(n+1)=W(n+1)W(n) 的欧式范数最小化,即
m i n ∣ ∣ δ W ( n + 1 ) ∣ ∣ min||δW(n+1)|| min∣∣δW(n+1)∣∣
上式受限于约束条件 W ( n + 1 ) H ⋅ X ( n ) = d ( n ) W(n+1)^H·X(n)=d(n) W(n+1)HX(n)=d(n)
使用拉格朗日乘数法将约束优化问题转换为无约束优化问题,并构建实值二次代价函数:
J ( n ) = ∣ ∣ δ W ( n + 1 ) ∣ ∣ 2 + R e [ λ ∗ ( d ( n ) − W ( n + 1 ) H ⋅ X ( n ) ) ] J(n)=||δW(n+1)||²+Re[λ^*(d(n)-W(n+1)^H·X(n))] J(n)=∣∣δW(n+1)2+Re[λ(d(n)W(n+1)HX(n))]
其中, λ λ λ 为复数拉格朗日乘子, ∗ * 表示复共轭, R e Re Re 表示取实部运算。
进一步,有:
J ( n ) = [ W ( n + 1 ) − W ( n ) ] H ⋅ [ W ( n + 1 ) − W ( n ) ] + λ [ d ( n ) − W ( n + 1 ) H ⋅ X ( n ) ] J(n)=[W(n+1)-W(n)]^H·[W(n+1)-W(n)]+λ[d(n)-W(n+1)^H·X(n)] J(n)=[W(n+1)W(n)]H[W(n+1)W(n)]+λ[d(n)W(n+1)HX(n)]
为使得代价函数 J ( n ) J(n) J(n) 有最小值,其对 W ( n + 1 ) W(n+1) W(n+1)进行求导:
∂ J ( n ) ∂ W ( n + 1 ) = 2 [ W ( n + 1 ) − W ( n ) ] − λ ⋅ X ( n ) \frac{∂J(n)}{∂W(n+1)}=2[W(n+1)-W(n)]-λ·X(n) W(n+1)J(n)=2[W(n+1)W(n)]λX(n)
∂ J ( n ) ∂ W ( n + 1 ) = 0 \frac{∂J(n)}{∂W(n+1)}=0 W(n+1)J(n)=0,则 W ( n + 1 ) = W ( n ) + 1 2 λ ⋅ X ( n ) W(n+1)=W(n)+\frac{1}{2}λ·X(n) W(n+1)=W(n)+21λX(n),将其代入约束条件可得:
d ( n ) = [ W ( n ) + 1 2 λ ⋅ X ( n ) ] H ⋅ X ( n ) = W H ( n ) ⋅ X ( n ) + 1 2 λ ⋅ X H ( n ) ⋅ X ( n ) = W H ( n ) ⋅ X ( n ) + 1 2 λ ⋅ ∣ ∣ X ( n ) ∣ ∣ 2 d(n)=[W(n)+\frac{1}{2}λ·X(n)]^H·X(n)=W^H(n)·X(n)+\frac{1}{2}λ·X^H(n)·X(n)=W^H(n)·X(n)+\frac{1}{2}λ·||X(n)||² d(n)=[W(n)+21λX(n)]HX(n)=WH(n)X(n)+21λXH(n)X(n)=WH(n)X(n)+21λ∣∣X(n)2
又因为 d ( n ) − W H ( n ) ⋅ X ( n ) = e ( n ) d(n)-W^H(n)·X(n)=e(n) d(n)WH(n)X(n)=e(n),将其代入上式可得:
λ = 2 e ( n ) ∣ ∣ X ( n ) ∣ ∣ 2 λ=\frac{2e(n)}{||X(n)||²} λ=∣∣X(n)22e(n)
综合上述的几个式子,可得:
δ W ( n + 1 ) = W ( n + 1 ) − W ( n ) = 1 2 λ ⋅ X ( n ) = X ( n ) ∣ ∣ X ( n ) ∣ ∣ 2 ⋅ e ( n ) δW(n+1)=W(n+1)-W(n)=\frac{1}{2}λ·X(n)=\frac{X(n)}{||X(n)||²}·e(n) δW(n+1)=W(n+1)W(n)=21λX(n)=∣∣X(n)2X(n)e(n)
为了对一次迭代到下一次迭代抽头权向量的增量变化进行控制而不改变向量的方向,引入一个正的实数标量因子 μ μ μ, 可得:
μ ⋅ δ W ( n + 1 ) = μ ⋅ [ W ( n + 1 ) − W ( n ) ] = μ ⋅ 1 2 λ ⋅ X ( n ) = μ ⋅ X ( n ) ∣ ∣ X ( n ) ∣ ∣ 2 ⋅ e ( n ) μ·δW(n+1)=μ·[W(n+1)-W(n)]=μ·\frac{1}{2}λ·X(n)=\frac{μ·X(n)}{||X(n)||²}·e(n) μδW(n+1)=μ[W(n+1)W(n)]=μ21λX(n)=∣∣X(n)2μX(n)e(n)
最终求得代价函数 J ( n ) J(n) J(n) 的最优解为:
W ( n + 1 ) = W ( n ) + μ ∣ ∣ X ( n ) ∣ ∣ 2 X ( n ) ⋅ e ( n ) W(n+1)=W(n)+\frac{μ}{||X(n)||²}X(n)·e(n) W(n+1)=W(n)+∣∣X(n)2μX(n)e(n)
上式就是归一化LMS的权向量更新公式,它表明了乘积向量 X ( n ) ⋅ e ( n ) X(n)·e(n) X(n)e(n) 相对于抽头输入向量 X ( n ) X(n) X(n) 的欧式范数平方进行了归一化。
为了保证 μ ∣ ∣ X ( n ) ∣ ∣ 2 \frac{μ}{||X(n)||²} ∣∣X(n)2μ 的分母不为零,令 ∣ ∣ X ( n ) ∣ ∣ 2 ||X(n)||² ∣∣X(n)2 加上一个常数 α ( 0 < α ≤ 1 ) α(0<α≤1) α(0<α1),从而得到:
W ( n + 1 ) = W ( n ) + μ α + ∣ ∣ X ( n ) ∣ ∣ 2 X ( n ) ⋅ e ( n ) W(n+1)=W(n)+\frac{μ}{α+||X(n)||²}X(n)·e(n) W(n+1)=W(n)+α+∣∣X(n)2μX(n)e(n)
如果理解NLMS是一种变步长的LMS算法

μ α + ∣ ∣ X ( n ) ∣ ∣ 2 \frac{μ}{α+||X(n)||²} α+∣∣X(n)2μ 看做一个整体,即步长 μ ′ = μ α + ∣ ∣ X ( n ) ∣ ∣ 2 μ'= \frac{μ}{α+||X(n)||²} μ=α+∣∣X(n)2μ,当权向量在迭代更新的过程中,由于 X ( n ) X(n) X(n) 在变化,因此步长 μ ′ μ' μ 也会更新,即认为NLMS滤波器在工作的过程中,其步长会随输入信号 X ( n ) X(n) X(n) 而变化。

总结NLMS自适应滤波器的计算步骤如下:
y ( n ) = W T ( n ) X ( n ) y(n)=W^{T}(n)X(n) y(n)=WT(n)X(n) --------------------------------------------------------------- (1)

e ( n ) = d ( n ) − y ( n ) e(n)=d(n)-y(n) e(n)=d(n)y(n) ----------------------------------------------------------------- (2)

W ( n + 1 ) = W ( n ) + μ α + ∣ ∣ X ( n ) ∣ ∣ 2 X ( n ) ⋅ e ( n ) W(n+1)=W(n)+\frac{μ}{α+||X(n)||²}X(n)·e(n) W(n+1)=W(n)+α+∣∣X(n)2μX(n)e(n) ------------------------------- (3)

二、MATLAB仿真实验

1、滤波效果

当滤波器阶数 L = 20 L=20 L=20,步长因子 μ = 0.05 μ=0.05 μ=0.05 时,LMS滤波器与NLMS滤波器对信噪比为15dB的输入信号的滤波效果无明显区别。
若增大步长为0.06以上,LMS滤波器的收敛速度明显变快,但稳态误差会急剧上升,滤波器的性能变差;而NLMS滤波器仍然保持较好的滤波性能。
【滤波器】归一化LMS自适应滤波器_第1张图片
【滤波器】归一化LMS自适应滤波器_第2张图片

clc;
clear;
close all;

%% 产生仿真信号
fs = 1000;                  % 采样频率
t = (0:1/fs:1-1/fs);        % 时间
f = 10;                     % 信号频率
x = sin(2*pi*f*t+pi/3);     % 原始信号
y = awgn(x,15,'measured');  % 添加高斯白噪声后的信号

%% NLMS自适应滤波器
L = 20;     % 滤波器阶数
Mu = 0.005;   % μ的范围为01
xn = y;     % 输入信号
dn = x;     % 期望信号
Alpha = 0.2;

[yn1, W1, en1] = LMS(xn,dn,L,Mu);
[yn2, W2, en2] = NLMS(xn, dn, L, Mu, Alpha);

%% 画图
figure;
subplot(3,1,1);plot(t,xn);xlabel('时间/s');ylabel('幅值');title('滤波器的输入信号');
subplot(3,1,2);plot(t,yn1);xlabel('时间/s');ylabel('幅值');title('LMS滤波器的输出信号');
subplot(3,1,3);plot(t,yn2);xlabel('时间/s');ylabel('幅值');title('NLMS滤波器的输出信号');
figure;
subplot(2,1,1);plot(en1);title('LMS滤波器的误差信号收敛情况');
subplot(2,1,2);plot(en2);title('NLMS滤波器的误差信号收敛情况');
function [yn, W, en] = NLMS(xn, dn, M, mu, alpha)

% input:
%       xn: 输入信号,大小为 1 x n
%       dn: 期望信号
%       M:  滤波器的阶数
%       mu: 收敛因子(步长)
%       alpha: 矫正值
%  output:
%         yn:   输出信号
%         W:    输出权系数
%         en:   输出误差信号

    [m,n] = size(xn);
    if m>1  % 如果输入信号为一列,则进行转置
        xn = xn';
    end
    if m>1 && n>1
        fprintf('输入信号有误!请检查输入信号是否为一行序列');
    end
    
    itr = n;    % 迭代次数等于输入信号的长度
    en = zeros(1,itr);
    W  = zeros(M,itr);    % 初始化权值矩阵,每一列代表一次迭代

    % 求最优权系数
    for i = M:itr                   % 第i次迭代
        x = xn(i:-1:i-M+1);         % 滤波器M个抽头的输入
        y = x*W(:,i-1);             % 滤波器的输出
        en(i) = dn(i) - y;          % 第i次迭代的误差
        W(:,i) = W(:,i-1) + (mu * x' * en(i)) / (alpha + norm(x)^2); % 滤波器权值计算的迭代式
        % norm(x)^2等效为x*x'
    end
    
    % 求输出序列  
    yn = inf * ones(size(xn));      % 初值设置为无穷大,画图的时候yn的前M个值不会绘图
    for k = M:n
        x = xn(k:-1:k-M+1);  
        yn(k) = x*W(:,end);  % 最终输出结果
    end
end

2、 不同参数对滤波器性能的影响

(1)步长 μ μ μ
NLMS滤波器的步长分别取0.01,0.1,1,1.5时,得到误差信号的收敛情况如下图所示。由图可以看出,步长 μ μ μ 影响着收敛速度和滤波精度,随着 μ μ μ 的增大,收敛速度变快,但收敛后在最优解附近波动幅值变大,稳态精度相应降低;将 μ μ μ 值减小则可以保证滤波精度,但算法的收敛时间大大增加,对于实时性有较高要求的系统并不合适。因而需要根据具体情况在收敛速度和滤波精度之间折中,合适的参数也与具体处理的信号特点有关,需要多次尝试取最优值。

(2)滤波器阶数 L L L
在 NLMS 滤波器的步长 μ = 0.1 μ=0.1 μ=0.1的条件下, 滤波器阶数 L L L取10,20,50时对应的误差信号收敛情况如下图所示。由图可见,随着滤波器的阶数增大,对信号的滤波精度有明显的提高,但是滤波器的输出信号中,缺失的数据量也随之增长。

三、参考文献

[1] 杜建邦, 何金阳, 卓超. 基于最小均方自适应算法的光纤陀螺信号实时滤波方法[J]. 中国惯性技术学报, 2020, 28(06): 814-818+828.
[2] 张红梅, 韩万刚. 一种新的变步长LMS自适应滤波算法研究及其应用[J]. 仪器仪表学报, 2015, 36(08): 1822-1830.
[3] 何子述, 夏威等. 现代数字信号处理及其应用[M]. 北京: 清华大学出版社, 2009: 156-157.

你可能感兴趣的:(MATLAB信号处理,NLMS滤波器,信号去噪,matlab)