Equalizador DFE (fonte aqui). |
Ao passar por um canal de comunicação, o sinal transmitido pode sofrer várias distorções, interferência entre símbolos (ISI - intersymbol interference), atrasos e ter ruído adicionado, tornando o tarefa do receptor bem complicada. Para compensar (pelo menos parcialmente) os efeitos do canal, podemos usar um equalizador na recepção do sinal. O equalizador é um filtro adaptativo (o canal, em geral, é variante no tempo) que usa algum tipo de algoritmo (ex: LMS - ver aqui) para ajustar os seus coeficientes.
Existem várias possibilidades para construir o equalizador, entre elas: filtro transversal (filtro FIR - equalizador linear) e DFE (Decision Feed Back Equalizer). O primeiro tem a vantagem de ser sempre estável (uma característica muito desejável), o segundo, quando converge, apresenta um melhor desempenho. Nesta postagem, apresentamos uma comparação entre um equalizador linear e um equalizador DFE para o caso de uma transmissão de dados reais sobre um canal real e com a adição de pouco ruído (alta relação sinal-ruído).
- Uma observação: esse tipo de comparação sempre corre o risco de ser injusta.
- Sinal transmitido: 4-PAM, A = {-3, -1, +1, +3}, símbolos igualmente prováveis.
- Resposta ao impulso do canal: h = [-0.25, 0.75, 0.30, -0.20, 0.001]
- Eq. Linear: filtro com 9 coeficientes
- DFE: FF com 5 coeficientes, BF: 4 coeficientes.
- Atraso de equalização de 3 amostras (convolução canal equalizador $\cong \delta(k-3)$).
- Uso do algoritmo LMS com passo fixo $\mu = 0,01$.
Gráficos e parte do código Scilab:
Sinal antes (*) e após o canal (o). |
/////////////////////
clc;
close; close; close; close;
N = 500; // Numero de amostras (treinamento)
tw = 9; // número de coeficientes do filtro linear
tw2 = 5; // número de coeficientes do filtro FF (DFE)
tb = 4; // número de coeficientes do filtro BF (DFE)
mi = 0.01; // passo do alg. LMS
ht = [-0.25, 0.75, 0.30, -0.20, 0.001] + %i*[-0.25 0.35 -0.45 0.25 -0.15]; // canal complexo
///////////////////////////////////////////////////
///// Caso Real: sinal e ruído reais /////////////
///////////////////////////////////////////////////
a = sign(rand(1,N,'n')) + 2*sign(rand(1,N,'n'));
h = real(ht); //canal
x = filter(h,1,a) + 0.01*rand(1,N,'n');
d = [0, 0, 0, a];
w = zeros(1,tw);
figure;
subplot(2,1,1); plot(real(x),imag(x),'.',real(a),imag(a),'*');
legend('Após o canal','Antes do canal');
title('Constelação antes e após o canal');
subplot(2,1,2); plot(1:N,x,'.',1:N,a,'*'); xgrid;
title('Sinal antes e após o canal');
// LMS - filtro transversal
w = zeros(1,tw);
e = 0*a;
y = 0*a;
vx = w;
for k=1:N
for p=0:(tw-1)
if (k-p)>0 then vx(p+1) = x(k-p);
end
end
y(k)=sum(w.*vx);
e(k) = d(k) - y(k);
w = w + mi*e(k)*vx;
end
disp(convol(h,w));
figure; subplot(2,2,1); plot(y,'.');
title('Sequência de dados após o equalizador (linear)');
subplot(2,2,2); plot(abs(e));
title(['Valor médio do erro: ',string(mean(abs(e(\$-200:\$))))]);
disp([tw,mean(abs(e(\$-200:\$)))]);
// LMS - DFE
w = zeros(1,tw2);
b = zeros(1,tb);
d = [0, 0, 0, a];
e = 0*a;
y = 0*a;
vx = w;
vb=b;
for k=1:N
for p=0:(tw2-1)
if (k-p)>0 then vx(p+1) = x(k-p);
end
end
for p=0:(tb-1)
if (k-p)>0 then vb(p+1) = d(k-p);
end
end
y(k)=sum(w.*vx)+sum(b.*vb);
e(k) = d(k) - y(k);
w = w + mi*e(k)*vx;
b = b + mi*e(k)*vb;
end
disp(convol(h,w)-[0,0,0,b,0,0]);
subplot(2,2,3); plot(y,'.');
title('Sequência de dados equalizados (DFE)');
subplot(2,2,4); plot(abs(e));
title(['Valor médio do erro: ',string(mean(abs(e(\$-200:\$))))]);
disp([tw,tb,mean(abs(e(\$-200:\$)))]);
Nenhum comentário:
Postar um comentário