segunda-feira, 29 de junho de 2015

Equalização: comparando DFE com filtro linear

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.
Parâmetros da simulação:
  • 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$.
Conclusão (após rodar o código e ver os gráficos):o desempenho do equalizador DFE é bem superior ao equalizador linear para este cenário.

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