【优化】超详细的LMS算法的matlab实现

LMS自适应滤波算法是基于维纳滤波算法,在最陡梯度下降法的基础上形成的滤波算法,它用梯度矢量的估计值来代替其精确值,应用广泛。本文是自己在入门学习LMS算法时整理归纳所得,里面包含了自己在编程实现时的疑问及自我思考后的解答,如有不足,虚心请求请指正。

LMS算法的理论基础

  1. LMS算法的损失函数(cost function)为:
    在这里插入图片描述
  2. LMS算法的递推公式为:
    在这里插入图片描述
    注: μ为调整步长的常数,用于控制系统的稳定性和自适应算法的收敛速度,为下面代码示例中的mu.
  3. LMS算法实现步骤
  1. 令起始时刻 i=0自适应滤波器的系数矢量W(0)为任意值;
  2. 根据输入信号矢量X(i) ,利用期望信号d(i) 和滤波器的输出信号 y(i)计算误差信号e(i);
  3. 根据误差信号,利用以下的递推公式 ,进行滤波器系数的更新;
    在这里插入图片描述
  4. 重复步骤2)和3),直到达到平稳状态(系数W几乎保持不变)。
  1. LMS算法的收敛条件:

    通过引入系数误差矢量 ,整理得LMS算法的收敛条件为 :

    注: λmax为输入信号的自相关矩阵 的最大特征值

LMS算法的matlab实现

LMS算法的实现程序分为两个部分,第一部分为LMS算法函数,主要完成LMS的实现过程;第二部分为主函数,用来准备数据和调用第一部分的算法实现滤波。

  1. LMS子程序
function [w,en,yn] = my_LMS(xn,dn,mu)
%LMS实现程序
%   输入:
% xn   输入信号       列向量
% dn   理想信号       列向量
% mu   收敛常数       标量
% itr  迭代次数       标量
% M    滤波器的阶数   标量
%   输出:
% w    滤波器的系数矩阵    大小为M×itr  每一列代表一次迭代后的系数
% en   误差信号           大小为itr×1  每一行代表一次迭代后产生的误差
% yn   滤波器的输出信号    列向量

M = 30; %定义滤波器的阶数为30
itr = length(xn); %使得迭代次数为输入信号xn的长度

w = zeros(M,itr);%将滤波器的初始值设置为0
en = zeros(itr,1)
评论 38
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值