1 NLMS基本原理
NLMS算法的计算迭代过程与LMS算法基本一致,只是LMS算法中的步长是固定的,
而在NLM算法步长是可变的,根据输入信号动态的调整迭代的步长,已达到较快的和稳定的
收敛过程。
2 迭代过程
1)给定w(0);
2)计算输出值:y(k)=w(k)Tx(k)y(k)=w(k)Tx(k);
3)计算估计误差:e(k)=d(k)−y(k)e(k)=d(k)−y(k);
4)权重系数更新:w(k+1)=w(k)+ *x(k)e∗(k)
3 MATLAB程序
function [W,en]=nlmsFunc(mu,M,xn,dn,a)
% 输入参数:
% mu = 步长大小 一个极小的值
% M = 滤波器阶数
% xn = 输入信号 列向量
% dn = 预期信号 列向量
% a = 极小的常数
%
% 输出参数:
% W = 滤波器系数 列向量
%输入信号长度
itr=length(xn);
%make sure that u and d are colon vectors
w=zeros(M,itr); %This is a vertical column
en = zeros(itr,1);%列向量
W = zeros(M,1);%列向量
%NLMS
for k=M:itr
uvec=xn(k:-1:k-M+1);
y= w(:,k-1).'*uvec;
en(k)=dn(k)-y;
w(:,k)=w(:,k-1)+mu/(a+uvec'*uvec)*uvec*en(k);
end
W = w(:,end);