FILTRO ADAPTATIVO-MATLAB

4
Dimel Arturo Contreras Martínez FILTRO ADAPTATIVO Es un dispositivo que intenta modelar la relación entre señales en tiempo real de forma iterativa. Se diferencia de los filtros digitales comunes tipo IIR o FIR, en que éstos tienen coeficientes invariantes en el tiempo, mientras que un adaptativo puede cambiar su forma de comportarse, es decir pueden cambiar sus coeficientes de acuerdo con un algoritmo adaptativo. De hecho no se saben los coeficientes del filtro cuando se diseña, éstos coeficientes son calculados cuando el filtro se implementa y se reajustan automáticamente en cada iteración mientras dura su fase de aprendizaje. El hecho de que estos filtros no sean invariantes temporales y que tampoco sean lineales hace que su estudio sea más complejo que el de un filtro digital, ya que no se pueden aplicar, salvo en un par de excepciones, las transformaciones en frecuencia, dominio Z, etc. CODIGO MATLAB PARA IMPLEMENTAR UN FILTRO ADAPTATIVO clc; clear; close all nm=500 % Iteraciones %x = randn(1,nm); % Entrada del filtro x=cos(2*pi*1*(0:1/1000:3)); %entrada del filtro b = fir1(3,0.5); % Sistema FIR a identificar %n = 0.1*randn(1,nm); % Se?de ruido en la observaci? %d = filter(b,1,x)+n; % Se?deseada d=cos(2*pi*1*(0:1/1000:3)); mu = 0.08; % Paso del algoritmo LMS h = adaptfilt.lms(3,mu);

Transcript of FILTRO ADAPTATIVO-MATLAB

Page 1: FILTRO ADAPTATIVO-MATLAB

Dimel Arturo Contreras Martínez

FILTRO ADAPTATIVO

Es un dispositivo que intenta modelar la relación entre señales en tiempo real de forma iterativa.

Se diferencia de los filtros digitales comunes tipo IIR o FIR, en que éstos tienen coeficientes invariantes en el tiempo, mientras que un adaptativo puede cambiar su forma de comportarse, es decir pueden cambiar sus coeficientes de acuerdo con un algoritmo adaptativo. De hecho no se saben los coeficientes del filtro cuando se diseña, éstos coeficientes son calculados cuando el filtro se implementa y se reajustan automáticamente en cada iteración mientras dura su fase de aprendizaje.

El hecho de que estos filtros no sean invariantes temporales y que tampoco sean lineales hace que su estudio sea más complejo que el de un filtro digital, ya que no se pueden aplicar, salvo en un par de excepciones, las transformaciones en frecuencia, dominio Z, etc.

CODIGO MATLAB PARA IMPLEMENTAR UN FILTRO ADAPTATIVO

clc;clear;close allnm=500 % Iteraciones%x = randn(1,nm); % Entrada del filtrox=cos(2*pi*1*(0:1/1000:3)); %entrada del filtrob = fir1(3,0.5); % Sistema FIR a identificar %n = 0.1*randn(1,nm); % Se?de ruido en la observaci?%d = filter(b,1,x)+n; % Se?deseadad=cos(2*pi*1*(0:1/1000:3));mu = 0.08; % Paso del algoritmo LMS h = adaptfilt.lms(3,mu);[y,e] = filter(h,x,d);subplot(2,1,1);plot(1:length(d),[d;y;e]);title('Identificacion de un sistema FIR');legend('Deseado','Salidat','Error');xlabel('Tiempo'); ylabel('Valor de la se');subplot(2,1,2); stem(h.Coefficients);legend('Actual','Estimado'); xlabel('Coeficiente #'); ylabel('Valor Coeficiente'); grid on; figuresubplot 211

Page 2: FILTRO ADAPTATIVO-MATLAB

Dimel Arturo Contreras Martínez

plot(x);subplot 212plot(d);

0 500 1000 1500 2000 2500 3000 3500-2

-1

0

1

2Identificacion de un sistema FIR

Tiempo

Val

or d

e la

se

Deseado

SalidatError

1 1.2 1.4 1.6 1.8 2 2.2 2.4 2.6 2.8 30

0.2

0.4

0.6

0.8

Coeficiente #

Val

or C

oefic

ient

e

Actual

0 500 1000 1500 2000 2500 3000 3500-1

-0.5

0

0.5

1

0 500 1000 1500 2000 2500 3000 3500-1

-0.5

0

0.5

1

Page 3: FILTRO ADAPTATIVO-MATLAB

Dimel Arturo Contreras Martínez

Filtro de Wiener

En procesamiento de señales, el filtro de Wiener es un filtro propuesto por Norbert Wiener en la década de 1940 y publicado en 1949. Su propósito es, utilizando métodos estadísticos, reducir el ruido presente en la señal de entrada de tal modo que la señal de salida del filtro se aproxime lo más posible (en el sentido cuadrático medio) a una señal deseada (sin ruido). El equivalente en tiempo discreto del trabajo de Wiener fue derivado independientemente por Kolmogorov y publicado en 1941. Por esto, la teoría es a veces referida como teoría de filtrado de Wiener-Kolmogorov.

PROGRAMA PARA IMPLEMENTAR UN FILTRO DE WIENER

function [e,y,h]=ale(d,mu,P,D);%% d ... señal deseada% mu .. paso de adaptación% P ... Orden del filtro de wiener% D ... retardo del ALE%% Salidas%% e ... señal error% y ... estimación señal deseada% h ... filtro de wiener%c=zeros(D+1,1);c(D+1)=1;x=filter(c,1,d);h=zeros(P,1);%LMS x=[zeros(P-1,1);x];M=length(x);N=P;e=zeros(M-N+1,1);y=zeros(M-N+1,1);X=flipud(x(1:P));y(1)=h'*X;e(1) = d(1) - y(1); h= h + mu*conj(e(1))*X;if M>1 for k=2:M-N+1; X=flipud(x(k:k+P-1)); y(k)=h'*X; e(k) = d(k) - y(k); h = h + mu*conj(e(k))*X; end;end;