Equalizer - SVD

This slide illustrates a MIMO communication system using Singular Value Decomposition (SVD) for the process of signal transmission and reception. The entire sequence depicted in the diagram elucidates how MIMO systems can effectively employ SVD to simplify a complex channel into manageable streams. This enables individual management of data and facilitates the accurate reconstruction of the transmitted signals at the receiver, minimizing interference and enhancing signal clarity.

  1. Data to be Transmitted: The initial data signals for two distinct layers or streams are depicted as blue and pink dots on a Cartesian plane. These represent the complex symbols that the MIMO system is set to transmit.

  2. SVD of Channel Matrix (H): The matrix H, characterizing the communication channel, is decomposed into three matrices: U, Σ (a diagonal matrix containing singular values), and VH (the conjugate transpose of V), using SVD.

  3. Precoding Using V: The transmission data for each stream is modified by the matrix V, aligning it with the optimal transmission paths through the channel. Precoded Tx(1) and Tx(2) reflect the precoding of the original data from each respective layer.

  4. Transmitted Data (H ⋅ Tx): Once precoded, the data is sent through the channel, resulting in the transmitted data points presented in the central column of the diagram.

  5. Received Data (Rx): The received signals are then shown prior to the equalization process. The diagrams for Rx(1) and Rx(2) depict the received signals for each stream, influenced by the channel's conditions.

  6. Equalization Process: To counter the channel effects, the received data undergoes post-processing:

    • The received data is multiplied by the inverse of the singular values matrix Σ, and then by the conjugate transpose of U, denoted as UH. This step is crucial for scaling the received signals according to the channel strength indicated by the singular values and for realigning them with the intended paths of transmission.
    • The outcome of this equalization is showcased as "Equalized Rx(1)" and "Equalized Rx(2)", where the channel's impact has been mitigated, ideally reconstructing the signal to closely match the precoded transmission.

 

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];             

            

[u s v] = svd(H);            

Tx = [c1; c2];

PrecodedTx = v * Tx;              

 

Rx = H * PrecodedTx;

 

EqRx = inv(s) * u' * 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;