相关文章推荐
胆小的排球  ·  为 DBA 提供的最重要特性·  3 周前    · 
聪明的电影票  ·  (windows+xrdp+ubuntu16 ...·  2 月前    · 
千杯不醉的绿茶  ·  CMakeSettings.json ...·  1 年前    · 

一、NLMS自适应滤波器

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

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

2、原理推导

在LMS滤波器的权向量更新公式中, 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 ) + 2 1 λ X ( n ) ] H X ( n ) = W H ( n ) X ( n ) + 2 1 λ X H ( n ) X ( n ) = W H ( n ) X ( n ) + 2 1 λ ∣∣ X ( n ) 2
又因为 W ( n + 1 ) = W ( n ) + α + ∣∣ X ( n ) 2 μ X ( n ) e ( n )
如果理解NLMS是一种变步长的LMS算法

W ( n + 1 ) = W ( n ) + α + ∣∣ X ( n ) 2 μ X ( n ) e ( n ) ------------------------------- (3)

1、滤波效果

当滤波器阶数 μ = 0.05 时,LMS滤波器与NLMS滤波器对信噪比为15dB的输入信号的滤波效果无明显区别。
若增大步长为0.06以上,LMS滤波器的收敛速度明显变快,但稳态误差会急剧上升,滤波器的性能变差;而NLMS滤波器仍然保持较好的滤波性能。
图1 两种滤波器的滤波效果对比
图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';
    if m>1 && n>1
        fprintf('输入信号有误!请检查输入信号是否为一行序列');
    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'
    % 求输出序列  
    yn = inf * ones(size(xn));      % 初值设置为无穷大,画图的时候yn的前M个值不会绘图
    for k = M:n
        x = xn(k:-1:k-M+1);  
        yn(k) = x*W(:,end);  % 最终输出结果

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

(1)步长 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.

首先,介绍了LMS滤波器的不足,并说明了NLMS滤波器的特点;其次,对NLMS算法的原理进行推导;最后,对比LMS和NLMS滤波器的滤波效果,并研究了不同参数是如何影响这两种滤波器的性能。 模拟滤波器: 由R、L、C构成的模拟电路。 数字滤波器: 由数字加法器、乘法器、延时器构成,基于数字信号运算实现。 自适应滤波器: 一种能够根据输入信号自动调整自身参数的数字滤波器。 非自适应滤波器: 具有静态滤波器系数的数字滤波器,这些静态系数构成滤波器的传递函数。 自适应滤波器的应用 对于一些应用(如系统辨识、预测、噪声消除等),我们无法事先知道需要进行操作的参数,必须使用自适应的系数进行处理,这种情况下通常使用自适应滤波器自适应滤波器处理语音 西蒙.赫金的《自适应滤波器原理》第四版第五、六章:最小均方自适应滤波器LMS,Least Mean Square)以及归一化最小均方自适应滤波器NLMS,Normalized Least Mean Square)。全文包括:   1)LMS与维纳滤波器(Wiener F
自适应滤波是近30年以来发展起来的一种最佳滤波方法。它是在维纳滤波,kalman滤波等线性滤波基础上发展起来的一种最佳滤波方法。由于它具有更强的适应性和更优的滤波性能。从而在工程实际中,尤其在信息处理技术中得到广泛的应用。自适应滤波的研究对象是具有不确定的系统或信息过程。“不确定”是指所研究的处理信息过程及其环境的数学模型不是完全确定的。其中包含一些未知因数和随机因数。任何一个实际的信息过程都具有不同程度的不确定性,这些不确定性有时表现在过程内部,有时表现在过程外部。从过程内部来讲,描述研究对象即信息动态过程的数学模型的结构和参数是我们事先不知道的。作为外部环境对信息过程的影响,可以等效地用扰动来表示,这些扰动通常是不可测的,它们可能是确定的,也可能是随机的。此外一些测量噪音也是以不同的途径影响信息过程。这些扰动和噪声的统计特性常常是未知的。面对这些客观存在的各种不确定性,如何综合处理信息过程,并使某一些指定的性能指标达到最优或近似最优,这就是自适应滤波所要解决的问题。
    LMS算法全称最小均方算法(least mean square),是一种线性自适应滤波算法。它不需要计算相关函数,也不需要矩阵求逆计算。由于其简单性,LMS算法成为其它线性自适应滤波算法的参照标准。   LMS一般包含两个基本过程: 滤波过程:a. 计算线性滤波器输出对输入信号的响应;b. 通过比较输出结果与期望响应产生估计误差 自适应过程:根据估计误差自动调整滤波器参数 1.LMS自...
### 回答1: 归一化LMS(最小均方)算法是一种自适应滤波算法,用于信号处理和系统辨识。它通过调整滤波器的系数以使滤波器的输出尽可能地逼近期望输出,从而达到信号降噪或系统模型辨识的目的。 在Matlab中实现归一化LMS算法,可以按照以下步骤进行: 1. 初始化:定义输入信号x,期望输出信号d,滤波器的初始权重w和步长μ。 2. 进行迭代:对于每个时间步t,执行以下操作: - 根据当前权重w和输入信号x的乘积,计算滤波器的输出y(t)。 - 计算误差e(t) = d(t) - y(t)。 - 更新滤波器的权重w(t+1) = w(t) + μ * x(t) * e(t) / (||x(t)||^2 + ε),其中ε是一个小的正数,用于防止除以零。 3. 重复步骤2直到达到收敛条件,例如当滤波器的权重变化较小时或经过一定的迭代次数。 以下是一个简单的Matlab代码示例,演示如何实现归一化LMS算法: ```matlab % 初始化 x = ... % 输入信号 d = ... % 期望输出信号 w = zeros(size(x)); % 滤波器的权重 mu = ... % 步长 epsilon = ... % 防除零的小正数 for t = 1:length(x) % 计算输出 y = w'*x(t); % 计算误差 e = d(t) - y; % 更新权重 w = w + (mu * x(t) * e) / (norm(x(t))^2 + epsilon); 上述代码可以根据具体的信号处理或系统辨识问题进行修改和扩展。根据问题的复杂性,可能需要设置更多的参数和增加额外的收敛条件。 ### 回答2: 归一化LMS算法是一种基于最小均方误差的自适应滤波算法,常用于消除信号中的噪声。下面是使用MATLAB实现归一化LMS算法的代码: ```matlab % 设置输入信号 N = 1000; % 信号长度 x = randn(N, 1); % 原始信号 d = x + 0.1 * randn(N, 1); % 加入噪声 % 初始化参数 M = 10; % 滤波器系数个数 mu = 0.01; % 步长 w = zeros(M, 1); % 初始化权值 % 归一化LMS算法 for n = M:N xn = x(n:-1:n-M+1); % 选取输入向量 en = d(n) - w.' * xn; % 误差信号 w = w + mu * xn * (1 / (xn' * xn + eps)) * conj(en); % 更新权值 % 绘制结果 figure; subplot(3,1,1); plot(1:N, x); title('原始信号'); xlabel('样本'); ylabel('幅值'); grid on; subplot(3,1,2); plot(1:N, d); title('加噪信号'); xlabel('样本'); ylabel('幅值'); grid on; subplot(3,1,3); plot(1:N-M+1, filter(w.' , 1, x(M:end))); title('滤波后信号'); xlabel('样本'); ylabel('幅值'); grid on; 以上代码首先生成了一个长度为1000的随机信号x,并在其基础上加入高斯噪声,得到观测信号d。然后,通过使用归一化LMS算法对观测信号进行滤波,得到滤波后的信号。最后,将原始信号、加噪信号和滤波后信号在图形上分别绘制出来,便于观察滤波效果。 ### 回答3: 归一化LMS算法是一种常用的自适应滤波算法,适用于信号处理领域。在MATLAB中,可以通过以下步骤实现归一化LMS算法: 1. 初始化参数:首先,需要初始化系数矩阵W和滤波器的阶数L。 W = zeros(L, 1); mu = 0.1; % 自适应步长系数 2. 读取输入信号和期望输出信号:从文件或者生成数据输入到MATLAB中,并读取用于训练的输入信号x和期望输出信号d。 3. 归一化LMS算法主体:采取以下步骤实施归一化LMS算法: - 生成当前输入信号的预测输出y:y = W' * x; - 计算当前预测输出与期望输出之间的误差e:e = d - y; - 更新系数矩阵W:W = W + mu * e * x; - 对W进行归一化处理,即使其模长等于1:W = W / norm(W); 4. 重复步骤3直到满足算法停止条件,例如达到预设的迭代次数或误差阈值。 5. 输出结果:最终得到归一化LMS算法收敛后的滤波器系数W。 以上是MATLAB实现归一化LMS算法的基本步骤。在实际应用中,可以根据具体需求调整参数和算法的停止条件,以及对结果进行合理的评估和处理。

二、MATLAB仿真实验