[Algoritmo de optimización] Algoritmo LMS mejorado: algoritmo SVSLMS [Contiene el código fuente de Matlab, período 632]

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 de 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

%%------------------- 定义变量:----------------------%%
% N - # of elements in array                                  %
% d - 阵元间距                          %
% ang - theta in deg                                          %
% thetaS - 期望用户波达角                             %
% thetaI - 干扰波达角                              %
% T - 期望信号的周期                               %
% t - 期望信号的时间轴                            %
% S - 期望信号                                        %
% I - 干扰信号                                    %
% vS,vI - 期望用户和干扰用户的转移矢量   %
% X - 总阵列因子                                     %
% Rxx - 总接收信号相关矩阵             %
% mu - 收敛参数                                  %
% w - 用LMS算法确定的均匀线阵权值          %
% x - 总接收信号                                   %
% y - 阵列输出                                            %
% e - 阵列输出和期望信号的误差           %
% theta - range of AOA's (rad)                                %
% AF - 加权阵列输出                                  %
%%-----------------------------------------------------------%%

%%----- 赋值-----%%

N = 8; d =0.5; 

thetaS = 30*pi/180; thetaI = -60*pi/180;%期望信号方向30. 干扰-60.%

%%----- 期望和干扰信号-----%%

T = 1E-3; t = (1:100)*T/100; it = 1:100;%1E-3表示1ms%

S = cos(2*pi*t/T); %,此时,S已经是一个矩阵!1100列


I = randn(1,100);%生成1100列的正态分布随机矩阵%
  
%%----- 为每个用户的线性阵列信号创建的阵列因子 -----%%

vS = []; vI = [];
i = 1:N;
vS = exp(1j*(i-1)*2*pi*d*sin(thetaS)).';%’表示厄米特转置,产生N行1列的阵列向量,然后后面在此基础上乘以信号就得到天线每个阵元接收到的信号
vI = exp(1j*(i-1)*2*pi*d*sin(thetaI)).';

%%----- 用LMS解决权值 -----%%

w = zeros(N,1);%初始天线阵权值全为0%
X = vS + vI;
Rxx = X*X';%X'为X的厄米特转置%
mu = 1/(4*abs(trace(Rxx)));%trace,迹%

wi = zeros(N,max(it));%初始权值都为0%
for n = 1:length(S)%n是迭代次数?%
    x = S(n)*vS + I(n)*vI;
    y(n) = w'*x;
    e = conj(S(n)) - y(n);     esave(n) = abs(e)^2;%conj,求复数的共轭%
    nu=mu*(1-exp(-(abs(e))^2));
    w = w + nu*conj(e)*x;
    wi(:,n) = w;
end               %没有判断收敛,要判断是从误差收敛曲线来看
w = w/w(1);    % 第一权值的规范解%

%%----- 显示权值 -----%%

disp(' ')
disp('%------------------------------------------------------------------------%')
disp(' ')
disp(['    N = ',num2str(N),' 的权值是:'])
disp(' ')
for m = 1:length(w)
    disp(['   w',num2str(m),' = ',num2str(w(m),3)])
end
disp(' ')

%%----- 输出结果 -----%%

% 1.) Plot 权重与迭代次数

wi = wi.';
figure(1), plot(it,abs(wi(:,1)),'kx',it,abs(wi(:,2))...
    ,'ko',it,abs(wi(:,3)),'ks',it,abs(wi(:,4)),'k+',...
    it,abs(wi(:,5)),'kd','markersize',2)
xlabel('Iteration no.'), ylabel('|weights|')
title('\bf  阵列权值')

% 2.) Plot 信号采集和跟踪

figure(2)
plot(it,S,'k',it,real(y),'k--')
xlabel('迭代次数'), ylabel('Signals')
title('\bf  期望信号采集与跟踪')
legend('期望信号','阵列输出')

% 3.) Plot 最小均方误差

figure(3), plot(it,esave,'k')
xlabel('Iteration no.'), ylabel('|e|^2')
title('\bf 均方误差与迭代次数.')

% 4.) Plot 阵列因子

theta = -pi/2:.01:pi/2;
AF = 0;
for i = 1:N
    AF = AF + w(i)'.*exp(j*(i-1)*2*pi*d*sin(theta));
end

Tres, resultados en ejecución

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
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 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 period 599]
[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 622 de Matlab]
[Algoritmo de optimización] Algoritmo LMS de paso fijo y tamaño de paso variable mejorado [incluido el código fuente 629 de Matlab]
[Optimización algoritmo] Algoritmo LMS mejorado [incluido el código fuente Matlab período 630]
[Algoritmo de optimización] algoritmo LMS mejorado-algoritmo NLMS [incluido código fuente Matlab período 631]

Supongo que te gusta

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