Equalizr - Zero Forcing

 

Equalization, at a high level, is the process used in communication systems to compensate for the distortion a signal undergoes as it travels through a channel. The purpose is to make the received signal as close as possible to the original transmitted signal.

The Zero Forcing (ZF) equalization method is one approach to tackle this issue. The Zero Forcing equalizer essentially inverts the channel matrix to force the channel distortions to zero, assuming there is no noise. However, if noise is present, Zero Forcing can sometimes amplify it, leading to poor performance in noisy conditions.

The Zero Forcing method directly inverts the channel effects, aiming to set the inter-symbol interference (caused by signal distortion in the channel) to zero. However, as mentioned earlier, this method can significantly increase the noise if it is present, which can reduce the overall signal quality. This method assumes a perfect channel inversion is possible and does not account for any noise that might have been introduced into the system, which is often not the case in real-world scenarios.

In the context of your image, here's what each part represents:

  • Layer(1) and Layer(2): These are two data streams that are to be transmitted, possibly representing different user data or multiple streams in a MIMO system.
  • Tx(1) and Tx(2): The transmitters for each data stream. They encode and modulate the data, preparing it for transmission.
  • Channel (H): This represents the medium (like air, space, cable) through which the signals are transmitted. The matrix H describes how the signal is affected by the channel.
  • Rx(1) and Rx(2): These are the receivers that capture the transmitted signals, which have been altered by their journey through the channel.
  • Equalizer ((HH H)-1 HH): The formula represents the Zero Forcing equalization technique. It uses the pseudo-inverse of the channel matrix to recover the transmitted signal. The expression ((HH H)-1 HH) is the calculation of the Moore-Penrose pseudo-inverse of the channel matrix H. Here, HH denotes the conjugate transpose (or Hermitian transpose) of H.
  • Equalized Rx(1) and Rx(2): These are the outputs after the Zero Forcing equalizer has been applied. Ideally, this process would remove the effects of the channel, leaving a signal that closely resembles the original transmitted signals for each layer.

 

 

Followings are the code that I wrote in Octave to creates all the plots shown in this page. You may copy these code and play with these codes. Change variables and try yourself until you get your own intuitive understanding.

 

< Code 1 >

 

 

N = 500;

rand ("seed", 100);

 

n1 = 0.05*(randn(1,N) + j*randn(1,N));

n2 = 0.05*(randn(1,N) + j*randn(1,N));

c1 = (2*randi([0 1],1,N)-1) + j*(2*randi([0 1],1,N)-1);

c2 = (2*randi([0 1],1,N)-1) + j*(2*randi([0 1],1,N)-1);

 

c1 = c1 + n1;

c2 = c2 + n2;

 

n = 1;

%H = (1/2) .* [1 1; ...

%              j exp(-j*n*2*pi/20)];

%H = (1/2) .* [1 1; ...

%              j -j];               

H = [0.9+j*0.1 0.2-j*0.3; ...

     -0.3+j*0.5 -0.7-j*0.1];              

              

Tx = [c1; c2];              

 

Rx = H * Tx;

 

EqRx = inv(H' * H) * H' * Rx;

 

 

     

hFig = figure(1,'Position',[300 300 700 350]);    

subplot(2,11,[1 3]);

plot(real(Tx(1,:)),imag(Tx(1,:)),'bo','MarkerFaceColor',[0 0 1],'MarkerSize',4);

axis([-2 2 -2 2]);

title('Layer(1)-Tx(1)');

grid on;

box on;

 

subplot(2,11,[12 14]);

plot(real(Tx(2,:)),imag(Tx(2,:)),'mo','MarkerFaceColor',[1 0 1],'MarkerSize',4);

axis([-2 2 -2 2]);

title('Layer(2)-Tx(2)');

grid on;

box on;

 

subplot(2,11,[5 7]);     

hold on;

plot(real(Rx(1,:)),imag(Rx(1,:)),'ro','MarkerFaceColor',[1 0 0],'MarkerSize',4);

axis([-2 2 -2 2]);

title('Rx(1)');

hold off;

grid on;

box on;

 

subplot(2,11,[16 18]);     

hold on;

plot(real(Rx(2,:)),imag(Rx(2,:)),'ko','MarkerFaceColor',[0 0 0],'MarkerSize',4);

axis([-2 2 -2 2]);

title('Rx(2)');

hold off;

grid on;

box on;

 

subplot(2,11,[9 11]);     

hold on;

plot(real(EqRx(1,:)),imag(EqRx(1,:)),'ro','MarkerFaceColor',[1 0 0],'MarkerSize',4);

axis([-2 2 -2 2]);

title('Equalized Rx(1)');

hold off;

grid on;

box on;

 

subplot(2,11,[20 22]);     

hold on;

plot(real(EqRx(2,:)),imag(EqRx(2,:)),'ko','MarkerFaceColor',[0 0 0],'MarkerSize',4);

axis([-2 2 -2 2]);

title('Equalized Rx(2)');

hold off;

grid on;

box on;