基于matlab的自适应NLMS算法实现

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)+ \frac{\mu }{\alpha +\left | X(k) \right | ^{2}}  *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);


 

  • 2
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值