【优化算法】改进型的LMS算法【含Matlab源码 630期】

一、简介

最小均方(LMS, Least Mean Squares)是最基本的自适应滤波算法。
LMS算法是自适应滤波器中常用的一种算法与维纳算法不同的是其系统的系数随输入序列而改变。维纳算法中截取输入序列自相关函数的一段构造系统的最佳系数。而LMS算法则是对初始化的滤波器系数依据最小均方误差准则进行不断修正来实现的。因此理论上讲LMS算法的性能在同等条件下要优于维纳。但是LMS是在初始值下逐步调整的,因此在系统稳定前,会有一段调整时间,调整时间受步长因子的控制,一定范围内,步长因子越大,调整时间越小,步长因子的最大取值为R的迹。LMS采用平方误差最小的原则代替均方误差最小的原则,信号基本关系如下:
在这里插入图片描述
在这里插入图片描述

二、源代码

 %一种变步长lms 算法
clear all
close all
hold off    
sysorder = 5 ; %抽头数

t = 0:1/5000:1-0.0001;
s = sin(2*pi*t); %不带噪声的信号
N = size(t);
M = length(t);
% %计算自相关矩阵的最大特征值
% xx=rcorr(length(s),s);
% [V,D]=eig(xx);
% Dmax=max(max(D));

n = randn(N);   %产生高斯白噪声
[b,a] = butter(2,0.25);
Gz = tf(b,a,-1); %逆变换函数
y = lsim(Gz,s);  %加入正弦信号
z = n * std(y)/(10*std(n));  %标准差为0的噪声信号
x = s + z;      %实际输入信号
dd = s; %期望输出信号

%算法的开始
w = zeros(1,sysorder);%权向量初始化
umax=0.45;   %设置步长最大值
umin=0.0003; %设置步长最小值

for i=1:2
          u = umax;
          y(i) = x(i:i+4)* w' ; %系统输出

          e(i) = dd(i) - y(i);%误差
  
          w = w + u * e(i) * x(i); %迭代方程
end

for i = 3:M-4

     if ((u >= umin)&&(u <= umax))

       y(i) = x(i:i+4)* w' ;  %系统输出
 
       e(i) = dd(i) - y(i);  %误差

       w = w + u * e(i) * x(i);  %迭代方程

       u = ((e(i) * e(i-1)/((dd(i))^2)))* umax;  %步长更新公式
    end
   
    if    u > umax
          u = umax;
          
          y(i) = x(i:i+4)* w' ; %系统输出
   
          e(i) = dd(i) - y(i);   %误差

           w = w + u * e(i) * x(i);  %迭代方程
           
           u = ((e(i) * e(i-1)/((dd(i))^2)))* umax;  %步长更新公式
    end
    
   if     u < umin
          u = umin;

          y(i) = x(i:i+4)* w' ;  %系统输出

          e(i) = dd(i) - y(i); %误差

             w = w + u * e(i) * x(i);  %迭代方程

             u = ((e(i) * e(i-1)/((dd(i))^2)))* umax; %步长更新公式
   end

end

 %计算均方误差 
st = 0;
 i = 1;

while i <= M-4       
      a = (e(i))^2;
     st = st+a;
    out = (1/i)*st;
    yy(1,i) = out;
    i = i+1;
  
end

% %作图
hold on;
%不带噪声的信号
subplot(3,1,1)
plot(s)      
title('纯净的输入信号')
 %噪声
subplot(3,1,2)
plot(z,'g')     
title('噪声')
 %带噪声的输入信号  
subplot(3,1,3)
plot(x,'c')      
title('带噪声的输入信号')
figure

三、运行结果

在这里插入图片描述
在这里插入图片描述

四、备注

完整代码或者代写添加QQ 1564658423
往期回顾>>>>>>
【车间调度】基于matlab粒子群的车间调度【含Matlab源码 013期】
【车间调度】基于matlab遗传算法求解车间调度模型含GUI【含Matlab源码 049期】
【车间调度】基于matlab遗传算法求解车间调度【含Matlab源码 070期】
【车间调度】基于matlab nsgaII求解车间调度【含Matlab源码 071期】
【车间调度】基于matlab改进蛙跳算法求解车间调度问题【含Matlab源码 073期】
【车间调度】基于matlab求解置换流水车间调度问题【含Matalb源码 176期】
【车间调度】基于matlab PSO求解6X6的车间调度问题【含Matlab源码 411期】
【车间调度】基于matlab粒子群的生产调度【含Matlab源码 412期】
【车间调度】基于matlab遗传算法多目标流水车间调度【含Matlab源码 443期】
【优化求解】基于matlab粒子群的微电网多目标优化【含Matlab源码 444期】
【优化求解】基于matlab蜻蜓算法求解多目标优化问题【含Matlab源码 477期】
【优化算法】海洋捕食者算法(MPA)【含Matlab源码 478期】
【优化算法】黑洞模拟算法(MVO)【含Matlab源码 479期】
【优化算法】基于变异策略的改进型花朵授粉算法【含Matlab源码 480期】
【优化求解】基于matlab粒子群算法求解水火电经济调度【含Matlab源码 500期】
【优化求解】基于麻雀搜索算法3D无线传感器网络(WSN)覆盖优化【含Matlab源码 599期】
【优化求解】基于遗传算法求解多目标配电网重构模型【含Matlab源码 622期】
【优化算法】改进定步长与变步长LMS算法【含Matlab源码 629期】

猜你喜欢

转载自blog.csdn.net/TIQCmatlab/article/details/115221222