Equalizer - MMSE

This slide illustrates the application of the Minimum Mean Square Error (MMSE) equalization algorithm within a Multiple Input Multiple Output (MIMO) communication system. The MMSE algorithm is leveraged to minimize the mean square error between the data that is transmitted and the data that is received, optimizing the signal's fidelity.

The outcome of MMSE equalization is an adjusted signal that combats the effects of noise and channel distortions, attempting to replicate the original transmitted signal as accurately as possible. This is crucial in communication systems to enhance the precision of received data and diminish the bit error rate.

Following is breakdown of the illustration :

  1. Data to be Transmitted: Two sets of data points, Tx(1) and Tx(2), represent the symbols to be transmitted over the communication channel. These symbols are displayed on a Cartesian plane, representing the in-phase and quadrature phases of complex signals.

  2. Channel Matrix Multiplication (H ⋅ Tx): The data transmitted through the channel is affected by the channel matrix H. The transmitted data Tx is multiplied by H, resulting in the received signal Rx, which now embodies the channel effects.

  3. Received Data (Rx): Raw data received by the system is indicated as Rx(1) and Rx(2) for the respective transmitted streams. These points may deviate from their intended positions due to channel noise and interference, leading to potential errors in signal interpretation.

  4. MMSE Algorithm: To estimate the transmitted signal and minimize the mean square error, the MMSE equalization formula is applied:

    HH(HHH + N0I)−1
    • HH is the conjugate transpose of the channel matrix H.
    • N0 represents the noise power affecting the signal.
    • I denotes the identity matrix.
    • The term HH(HHH + N0I)−1 constitutes the MMSE equalizer, which, when applied to the received data Rx, yields an estimate of the transmitted data that minimizes mean square error.
  5. Equalized Rx: The concluding step involves applying the MMSE equalizer to the received data Rx, producing the equalized data Equalized Rx. This step aims to correct errors induced by the channel and noise, aligning the received data points closer to their initial transmitted locations.

 

 

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 = 20;

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

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

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;

N0 = 0.01;

I = eye(2);

 

G = H' * inv(H*H' + N0*I);

 

EqRx = G * 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('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('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;