Programa de filtro adaptativo MATLAB basado en algoritmo RLS y LMS
Algoritmo % RLS
randn('seed', 0) ;
rand('seed', 0) ;
NoOfData = 8000; % Establece el número de puntos de datos utilizados para el entrenamiento
Orden = 32; % Peso de filtrado adaptativo
Lambda = 0,98 % Factor de olvido
Delta = 0,001; % matriz de correlación de inicialización R
x = randn(NoOfData, 1); % secuencia aleatoria gaussiana
h = rand(Order, 1 % muestreo aleatorio sistemático); p>
d = filter(h, 1, x); % salida esperada
% Inicialización del algoritmo RLS
P = Delta * ojo (Orden, Orden %); Matriz de correlación
w = ceros (Orden, 1); % Inicialización del vector de coeficientes de filtro
% Adaptación RLS<
para n = Orden: NoOfData ; /p>
u = x(n:-1:n-Order+1) ;% función de retardo
pi_ = u' * P ;% función de correlación cruzada
k = Lambda + pi_ * u ;
K = pi_'/k ;% vector de ganancia
e(n) = d(n) - w' * u ;% Error función
w = w + K * e(n) ;% fórmula de recurrencia
PPrime = K * pi_ ;
P = ( P - PPrime ) / Lambda; % de error de matriz de correlación
w_err(n) = norm(h - w);% de error estimado verdadero
end;
% de resultados de la gráfica Figura
figura ;
plot(20*log10(abs(e)) ;% | curva de error para e |
título('Curva de aprendizaje') ;
xlabel('Número de iteraciones');
ylabel('Estimación del error de salida');
figura;
semilogía (w_err ) ;% Dibujar el gráfico de error de estimación real
title('Error de estimación de vector') ;
xlabel('Recuento de iteraciones') ;
ylabel( ' Vector de peso de error');
Algoritmo %lms
Borrar todo
Cerrar todo
Mantener % de peso del canal del sistema desactivado
p>sysorder = 5;% número de grifos
N=1000;% número total de muestras
inp = randn(N,1);% Generar aleatorio gaussiano secuencia
n = randn(N,1);
);
subtrama(412)
trama(t,x) ;
subtrama(413)
trama(t,y);
subtrama(4
14)
plot(t,y_ normalizado);
figura(2)
plot(t,error,'r',t,error_normalized,' b'); Cómo escribir un algoritmo de filtrado adaptativo en MATLAB
Encontré este algoritmo en la biblioteca Baidu, algoritmo LMS de eliminación de ruido adaptativo. Simulación de Matlab, espero que te sea de ayuda. Si hay algún problema, podemos discutirlo y resolverlo.
Solicite el programa MATLAB para el sistema de ecualización adaptativo basado en el algoritmo RLS y LMS ```
Hay algunos problemas con el código, puede consultarlo, el código lo escribí yo :!
%Predicción lineal adaptativa basada en el algoritmo RLS
clc;
borrar todo;
N=300;
M=100;% tiempos de cálculo
w1=zeros(N,M);w2=zeros(N,M);I=ojo(2);e1=zeros(N,M) ;
para k=1: M
% genera ruido blanco
Pv=0.008;% define la variación del ruido blanco
a1= - 0.195;a2=0.95;o=0.02;r=0.95;
m=5000;% Genera 5000 números aleatorios
v=randn(1,m);
p>v=v*sqrt(Pv);% genera ruido blanco con media 0 y varianza Pv
%m=1:N;
v=v (1 :N);% Elimina los primeros 1000
%plot(m,v);title('Ruido blanco con media 0 y varianza 0.0965');ylabel('v(n) ');xlabel ('n');
v=v';
%Vector Lema
x=zeros(1,N);
x(1)=v(1);%x(0)=v(0)
x(2)=v(2)-a1*v(1); =v(1)-a1*v(0)
w=zeros(2,N);
w(:1)=[0 0] ';%w( 0)=[0 0]';
X=ceros(2,N);
X(:,2)=[v(1) 0 ]';%X (0)=[0 0 ]';X(1)=[v(0) 0]'
C=ceros(2,2*N);
C( :,1:2)=1/o.*I;%C(0)=1/o*I
e=zeros(1,N)';% error de definición Vector
u=zeros(1,N);
g= zeros(2,N);
%Recursivo según algoritmo RLS
para n =1:N-2
x(n+2)=v(n+2)-a1*x(n+1)-a2*x(n);
X(:,n+2)=[x(n+1) x(n)]';
u(n)=X( :,n+1)'*C (:,2 *n-1:2*n)*X(:,n+1);
g(:,n)=(C(:,2*n-1:2* n)*X (:,n+1))./(r+u(n));
w(:,n+1)=w(:,n)+g(:, n)*( x(n+1)-X(:,n+1)'*w(:,n));
C(:,2*n+1:2*(n +1)) =1/r.*(C(:,2*n-1:2*n)-g(:,n)*X(:,n+1)'* C(:,2*n -1:2 *n));
e(n)=x(n+1)-X(:,n+1)'*w(:,n);
w1( :,k)=w(1,:)';w2(:,k)=w(2,:)';% almacena el valor del vector de peso calculado cada vez
e1 (:,k) =e(:,1); %Almacena el valor de error de cada cálculo
end
end
%
Calcular el vector de peso promedio y el error M veces
wa1=zeros(N,1);wa2=zeros(N,1);en=zeros(N,1);
para k=1:M
wa1( :,1)=wa1(:,1)+w1(:,k);
wa2(:,1)=wa2( :,1)+w2(:,k);
en(:,1)=en(:,1)+e1(:,k);
fin p>
n=1:N;
subtrama(221)
trama(n,w(1,n),n,w(2,n)); % Calcular la curva de cambio del vector de peso una vez
xlabel('n'); ylabel('w(n)');title('curva de cambio único de w1(n) y w2(n) (Predicción lineal, RLS)')
subplot( 222)
plot(n,wa1(n,1)./M,n,wa2(n,1)./ M);% Crea 100 curvas de cambio promedio de los vectores de peso calculados
xlabel('n');ylabel('w(n)');title('100 w1(n) y el cambio promedio curva de w2(n)')
subplot(223)
plot(n,e(n,1).^2);% Calcula e^2 solo una vez cambia la curva
xlabel('n');ylabel('e^2');title('Cálculo único de la curva de cambio para e^2');
subtrama (224)
plot(n,(en(n,1)/M).^2);% Crea una curva de cambio promedio de M cálculos de e^2
xlabel( 'n ');ylabel('e^2');title('La curva de cambio promedio de e^2 calculada 100 veces');