Você está na página 1de 6

Universidade Federal de Juiz de Fora

Pós-Graduação em Engenharia Elétrica

LISTA FILTRO ADAPTATIVOS – LMS


Paulo Pires e Rodrigo Pacheco

1) Usar o algoritmo LMS para identificar o sistema descrito pela função de transferência:
1−𝑧 −10
𝐻(𝑧) = 1−𝑧 −1
O sinal de entrada é um ruído branco uniformemente distribuído com variância  x2  1 .
Considere o ruído de medida n[k] zero. O filtro adaptativo tem 10 coeficientes.

Figura 1 – Identificação de sistema

(a) Calcule o limite superior para  (  max ) para garantir a estabilidade do algoritmo.
O tamanho de passo deve satisfazer a seguinte condição:
2
0<𝜇<
𝜆𝑚𝑎𝑥
Sabe-se que o ruído branco Gaussiano está uniformemente distribuído com variância
igual à 1, ou seja,
R = 𝜎2 I = I
Então,
𝜆𝑚𝑎𝑥 = 1 → 𝜇𝑚𝑎𝑥 = 2
(b) Execute o algoritmo para max / 2, max /10 e max / 50 . Comente o comportamento
da convergência em cada caso. Calcule a média do ensemble de 100 experimento.

Seque-se o código MATLAB e o comportamento da convergência:


clc;
close all;
clear all;

M=8;
N = 1000
w=zeros(1,M);
e=[];
varx = 1;
mumax=2/varx;
mu = mumax*0.25
e_m =zeros(1,N)
y=zeros(N,1);
wi=zeros(1,M);
num = [1 0 0 0 0 0 0 0 0 0 -1];
den = [1 -1];

for K = 1:100
x = sqrt(varx)*rand(N,1);
d=filter(num,den,x);

for i=M:N
e(i) = d(i)-wi*x(i:-1:i-M+1);
wi = wi+2*(mu/50)*e(i)*x(i:-1:i-M+1)';
end

for i=M:N
j=x(i:-1:i-M+1);
y(i)=((wi)*(j));
end

e_m = e_m + e.^2;


e_100(:,K) = e_m ;
end

figure(1)
freqz(y,1)
hold on

MSE = mean(e_100,2);
figure
plot(1:length(MSE),10*log10(MSE))
xlabel('Resposta em Frequência')
ylabel('Magnitude (dB)')
title('Resposta em frequência para mu/50 10 coeficientes' )

[H,fr] = freqz(num,den);
[H1,fr1] = freqz(-wi,1);
[H2,fr2] = freqz(-wi(1:8),1);

figure
plot(fr,20*log10(abs(H)),fr1,20*log10(abs(H1)),fr2,20*log10(abs(H2)))
legend('Sistema','Filtro 10 coefs','Filtro 8 coefs')
xlabel('Normalized Frequency')
ylabel('Magnitude (dB)')

-2-
Resposta em frequência para mu/2 10 coeficientes
40

30

20

10
Magnitude (dB)
0

-10

-20

-30

-40

-50
0 100 200 300 400 500 600 700 800 900 1000
Resposta em Frequência

Resposta em frequência para mu/10 10 coeficientes


20

-20
Magnitude (dB)

-40

-60

-80

-100

-120

-140
0 100 200 300 400 500 600 700 800 900 1000
Resposta em Frequência

Resposta em frequência para mu/50 10 coeficientes


20

10

-10
Magnitude (dB)

-20

-30

-40

-50

-60

-70
0 100 200 300 400 500 600 700 800 900 1000
Resposta em Frequência

-3-
(c) Plotar a resposta em freqüência do filtro adaptativo FIR obtido, em qualquer
iteração depois de alcançada a convergência e comparar com o sistema
desconhecido.

20
Sistema
Filtro 10 coefs
10
Filtro 8 coefs

0
Magnitude (dB)

-10

-20

-30

-40

-50
0 0.5 1 1.5 2 2.5 3 3.5
Normalized Frequency

d) Repita o problema anterior usando um filtro adaptativo com 8 coeficientes e interprete


os resultados.

O algoritmo com apenas 8 coeficientes não é capaz de gerar um filtro adaptativo com
coeficientes condizentes com o sistema, já o filtro obtido a partir de 10 coeficientes
consegue estimar com perfeição o sistema desejado.

2) Um modelo de canal digital pode ser representado pela seguinte resposta ao impulso:
[0.001  0.002 0.002 0.2 0.6 0.76 0.9 0.78 0.67
0.58 0.45 0.3 0.2 0.12 0.06 0  0.2  1  2  1 0 0.1]
O canal é corrompido por ruído branco gaussiano com espectro de potência dado por

-4-
2
S (e j )   ' 
3/ 2

onde  '  101.5 . O sinal de treinamento consiste de amostras binárias independentes


 1,1 .
Projete um equalizador FIR para este problema e use o algoritmo LMS. Use um filtro de
ordem 50 e plote a curva de aprendizagem.

Considere o equalizador abaixo e o erro aditivo no canal nulo (n[k]=0 )

Figura – Equalizador

Segue-se o código MATLAB:

clear all
close all
numPoints = 50;
numTaps = 1000;
Mu = 0.0002; % iteration step size

% choose channel to be random uniform


h = [0.001 0.002 0.002 0.2 0.6 0.76 0.9 0.78 0.67 0.58 0.45 0.3 0.2
0.12 0.006 0 -0.2 -1 -2 -1 0 0.1]
h = h/max(h); %normalize channel
noise=wgn(numTaps,1,0)
noise=abs(fft(noise))/numTaps
wnoise =10^(-1.5).*noise.^3/2

for k = 1:100
d = randi([0 1],numTaps,1);
for i = 1:length(d)
if d(i) == 0
d(i) = -1;
end
end

x1 = d + wnoise;
x = filter (h,1,x1);

% convolve channel with the input


d_d = filter([zeros(1,numPoints) 1],1,d);
% initialize variables
wi=zeros(1,numPoints);
e_m =zeros(1,numTaps);% error, final result to be computed

-5-
y=zeros(numTaps,1);
w = zeros(numTaps+1,1)

for i=numPoints:numTaps
e(i) = d_d(i)-wi*x(i:-1:i-numPoints+1);
wi = wi+2*Mu*e(i)*x(i:-1:i-numPoints+1)';
end
for i=numPoints:numTaps
j=x(i:-1:i-numPoints+1);
y(i)=((wi)*(j));
end
e_m = e_m + e.^2;
e_100(:,k) = e_m ;
end

MSE = mean(e_100,2);
figure
plot(1:length(MSE),10*log10(MSE))

Segue-se a curva de aprendizagem do algoritmo LMS:

-6-

Você também pode gostar