优化算法改进定步长与变步长LMS算法含Matlab源码 629期

Posted 紫极神光

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了优化算法改进定步长与变步长LMS算法含Matlab源码 629期相关的知识,希望对你有一定的参考价值。

一、简介

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

二、源代码

clear all
clc              
t=0:1/1000:100-1/1000;
s=15*sin(0.15*pi*t);
snr=10;
s_power=var(s);              %var函数: 返回方差值
linear_snr=10^(snr/10);
factor=sqrt(s_power/linear_snr);
noise=randn(1,length(s))*factor;
%noise=wgn(1,length(s),factor);
x=s+noise;                   %由SNR计算随机噪声
x1=noise;                    %噪声源输入
x2=noise;
%x3=noise;
w1=0;                       %权系数初值
w2=0;
%w3=0;
e=zeros(1,length(x));
error=zeros(1,length(x));
y=0;
%mu=0;
mu=0.000009;                 
for i=1:100000                 %定步长LMS算法
    y=w1*x1(i)+w2*x2(i);%+w3*x3(i);
    e(i)=x(i)-y;
    error(i)=s(i)-e(i);
 %   ee=error^2;
 %   mu=xuanze(mu,ee);
    w1=w1+mu*e(i)*x1(i);
    w2=w2+mu*e(i)*x2(i);
  %  w3=w3+mu*e(i)*x3(i);
end
figure(1)
subplot(4,1,1)
plot(t,s);
title(\'纯正弦信号\')
subplot(4,1,2)
plot(t,x);
title(\'带噪声正弦信号\')
axis([0 100 -30 30]);
subplot(4,1,3)
plot(t,noise);
title(\'噪声信号\')
axis([0 100 -30 30]);
subplot(4,1,4)
plot(t,e);
title(\'定步长LMS算法自适应噪声对消器\')
axis([0 100 -30 30]);
wu=error;
figure(2)
subplot(3,1,1);
plot(wu);
title(\'定步长LMS算法收敛过程\')







%自适应噪声对消器
clear all
clc              
t=0:1/1000:100-1/1000;
s=15*sin(0.15*pi*t);
snr=10;
s_power=var(s);              %var函数: 返回方差值
linear_snr=10^(snr/10);
factor=sqrt(s_power/linear_snr);
noise=randn(1,length(s))*factor;
x=s+noise;                   %由SNR计算随机噪声
x1=noise;                    %噪声源输入
x2=noise;
w1=0;                       %权系数初值
w2=0;
e=zeros(1,length(x));
error=zeros(1,length(x));
y=0;
mu=0;
%mu=0.05;                 
for i=1:100000                 %变步长LMS算法
    y=w1*x1(i)+w2*x2(i);
    e(i)=x(i)-y;
     error(i)=s(i)-e(i);
    ee=error(i)^2;
    if ee>0.0005;
        ee=0.0005;
    end
    mu=xuanze(mu,ee);
    w1=w1+mu*e(i)*x1(i);
    w2=w2+mu*e(i)*x2(i);   
end
figure(3)
subplot(4,1,1)
plot(t,s);
title(\'纯正弦信号\')
subplot(4,1,2)
plot(t,x);
title(\'带噪声正弦信号\')
axis([0 100 -30 30]);
subplot(4,1,3)
plot(t,noise);
title(\'噪声信号\')
axis([0 100 -30 30]);
subplot(4,1,4)
plot(t,e);
title(\'变步长LMS算法自适应噪声对消器\')
axis([0 100 -30 30]);
wu=error;
figure(2)
subplot(3,1,2);
plot(wu);
title(\'变步长LMS算法收敛过程\')





%自适应噪声对消器
clear all
clc              
t=0:1/1000:100-1/1000;
s=15*sin(0.15*pi*t);
snr=10;
s_power=var(s);              %var函数: 返回方差值
linear_snr=10^(snr/10);
factor=sqrt(s_power/linear_snr);
noise=randn(1,length(s))*factor;
x=s+noise;                   %由SNR计算随机噪声
x1=noise;                    %噪声源输入
x2=noise;
w1=0;                       %权系数初值
w2=0;
e=zeros(1,length(x));
error=zeros(1,length(x));
y=0;
mu=0;
%mu=0.05;                 
for i=1:100000                 %改进变步长LMS算法
    y=w1*x1(i)+w2*x2(i);
    e(i)=x(i)-y;
    
   ee=exp(abs(error(i))^3)-1;
 %  ee=error^4; 
   
      
   end    
    mu=xuanze(mu,ee);
    w1=w1+mu*e(i)*x1(i);
    w2=w2+mu*e(i)*x2(i);   
end
figure(4)
subplot(4,1,1)
plot(t,s);
title(\'纯正弦信号\')
subplot(4,1,2)
plot(t,x);
title(\'带噪声正弦信号\')
axis([0 100 -30 30]);
subplot(4,1,3)
plot(t,noise);
title(\'噪声信号\')
axis([0 100 -30 30]);
subplot(4,1,4)
plot(t,e);
title(\'改进变步长LMS算法自适应噪声对消器\')
axis([0 100 -30 30]);

三、运行结果

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

四、备注

版本:2014a
完整代码或代写加1564658423

以上是关于优化算法改进定步长与变步长LMS算法含Matlab源码 629期的主要内容,如果未能解决你的问题,请参考以下文章

图像重建基于matlab迭代步长自适应图像超分辨重建含Matlab源码 048期

用Matlab软件实现变长NLMS自适应滤波器算法

LSTM回归预测基于matlab布谷鸟算法优化LSTM回归预测含Matlab源码 2037期

LSTM回归预测基于matlab布谷鸟算法优化LSTM回归预测含Matlab源码 2037期

优化算法最小均值 (LMF) 和最小均方 (LMS) 算法含Matlab源码 2134期

优化算法最小均值 (LMF) 和最小均方 (LMS) 算法含Matlab源码 2134期