Equalizr -SVD

This slide represents the application of Singular Value Decomposition (SVD) in a MIMO communication system to simplify the channel and improve data transmission. In essence, using SVD for MIMO systems is a method of pre-processing (precoding) and post-processing (equalization) the transmitted and received signals to maximize the capacity and reliability of the communication link. The singular values in S give direct information about the channel's condition, and the precoding and equalization operations help in aligning the transmitted data with the "best" directions of the channel, as determined by the matrices U and V. This is particularly useful in spatially multiplexed systems where multiple data streams are transmitted and received simultaneously. The concept can be illustrated as follows.

Let's break down the steps shown in the illustration:

  1. Data to be transmitted: This is the original data that needs to be sent across the communication channel. It's shown here as points in a 2-dimensional space for two separate layers, which likely correspond to the spatial streams in a MIMO system.

  2. Channel matrix (H): The communication channel is represented by the matrix H. In practice, this matrix would describe the effect of the channel on the transmitted signal, including factors like scattering, fading, and reflection.

  3. SVD of Channel Matrix: The channel matrix H is decomposed using SVD into three matrices U, S, and VH (where VH is the conjugate transpose of V).

    • U and V are unitary matrices, meaning their inverse is their conjugate transpose.
    • S is a diagonal matrix with singular values that represent the strength of the channel in descending order.
  4. Precoding using V: Before transmission, the data is precoded with the matrix V. Precoding is a technique used in wireless communication to adapt the signals being transmitted to optimize for certain conditions, in this case, to align with the best singular vectors of the channel.

  5. Transmitted Data: The data that is actually transmitted, represented as H ⋅ Tx, is the product of the channel matrix H and the transmitted signal Tx, which is the precoded data.

  6. Received Data: The data that arrives at the receiver is shown before and after equalization:

    • Rx (Received Raw): This is the data as it is received by the receiver's antennas, affected by the channel conditions.
    • UH ⋅ Rx (Equalized Rx): To equalize the signal, the received data is multiplied by UH, which is the conjugate transpose of the matrix U. This operation aims to undo the effects of the channel.
  7. Equalized Rx: The final step in the receiver's processing is to apply equalization to the Rx data, resulting in the equalized received data. The equalization typically involves scaling by the inverse of the singular values in S, effectively compensating for the channel's impact and making it easier to detect the transmitted data.

NOTE : You would notice that 's' matrix is not used in this example. It mean that the scaling part is not equalized. This is based on assumption that the channel does not change the amplitude of the signal(i.e, does not scale up or down) the signal. Of course, in real channel amplitude is almost always change.. but just for simpliticity and for showing the effect of U and V matrix, I assume that the amplitude of the signal (gain) does not change.

 

 

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