[Algoritmo de optimización] Algoritmo LMS mejorado [incluido el código fuente de Matlab, período 630]

1. Introducción

Mínimos cuadrados medios (LMS, mínimos cuadrados medios) es el algoritmo de filtrado adaptativo más básico.
El algoritmo LMS es un algoritmo de uso común en filtros adaptativos La diferencia con el algoritmo Wiener es que los coeficientes del sistema cambian con la secuencia de entrada. En el algoritmo de Wiener, se intercepta una sección de la función de autocorrelación de la secuencia de entrada para construir el coeficiente óptimo del sistema. El algoritmo LMS se implementa corrigiendo continuamente los coeficientes de filtro inicializados de acuerdo con el criterio de error cuadrático medio mínimo. Por tanto, teóricamente hablando, el rendimiento del algoritmo LMS es mejor que el de Wiener en las mismas condiciones. Sin embargo, el LMS se ajusta gradualmente por debajo del valor inicial, por lo que antes de que el sistema se estabilice, habrá un período de tiempo de ajuste. El tiempo de ajuste está controlado por el factor de tamaño de paso. Dentro de un cierto rango, mayor es el factor de tamaño de paso. , cuanto menor sea el tiempo de ajuste y el factor de tamaño de paso El valor máximo de es la traza de R. LMS adopta el principio de error cuadrático mínimo en lugar del principio de error cuadrático medio mínimo, y la relación de señal básica es la siguiente:
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

En segundo lugar, el código fuente

 %一种变步长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

Tres, resultados en ejecución

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Cuatro, comentarios

Código completo o escritura agregue QQ 1564658423 revisión anterior
>>>>>>
[Programación del taller] Programación del taller basado en enjambres de partículas de Matlab [incluido el código fuente de Matlab 013]
[Programación del taller] basado en el algoritmo genético de matlab para resolver el modelo de programación del taller con GUI [Incluir el código fuente 049 de Matlab]
[Programación del taller] Basado en el algoritmo genético de Matlab para resolver la programación del taller [Incluir el código fuente 070 de Matlab]
[Programación del taller] Basado en matlab nsgaII para resolver la programación del taller [Contiene el período del código fuente 071 de Matlab]
[Programación del taller ] Salto mejorado basado en el algoritmo matlab para resolver problemas de programación de talleres [incluido el código fuente 073 de Matlab]
[Programación de talleres] Basado en matlab para resolver el problema de programación del taller de flujo de reemplazo [incluido el código fuente 176 de Matlab]
[Programación del taller] Basado en matlab PSO para resolver problemas de programación de talleres 6X6 [incluido el código fuente de Matlab 411】
[Programación de talleres] Programación de producción basada en enjambres de partículas de Matlab [incluido el código fuente 412 de Matlab]
[Programación de talleres] Programación de talleres de flujo multiobjetivo basado en algoritmos genéticos de Matlab [incluido el código fuente 443 de Matlab ]
[Optimización] basada en microrred de enjambre de partículas de Matlab Optimización multiobjetivo [Incluir el código fuente 444 de Matlab]
[Optimización] Basado en el algoritmo libélula de Matlab para resolver problemas de optimización multiobjetivo [Incluir el código fuente 477 de Matlab]
[Algoritmo de optimización] Algoritmo de depredadores marinos (MPA) [Incluir el código fuente 478 de Matlab]
[Algoritmo de optimización] Algoritmo de simulación de agujero negro (MVO) [Incluido el código fuente 479 de Matlab]
[Algoritmo de optimización] Algoritmo de polinización de flores mejorado basado en la estrategia de mutación [Incluido el código fuente 480 de Matlab]
[Solución de optimización] basada en el algoritmo de enjambre de partículas de Matlab para resolver el despacho económico de la energía hidro-térmica [incluido el código fuente de Matlab período 500]
[solución de optimización] basada en el algoritmo de búsqueda de gorriones Optimización de la cobertura de la red de sensores inalámbricos 3D (WSN) [incluido el código fuente de Matlab 599 período]
[solución de optimización] basada en el algoritmo genético para resolver el modelo de reconstrucción de la red de distribución multiobjetivo [incluido el código fuente de Matlab 622]
[algoritmo de optimización] Algoritmo LMS de paso fijo y tamaño de paso variable mejorado [incluido el código fuente de Matlab 629]

Supongo que te gusta

Origin blog.csdn.net/TIQCmatlab/article/details/115221222
Recomendado
Clasificación