These days, multi-antenna transmission and reception systems are practically universal. MIMO is one of the popular types of multi-antenna systems. By enabling numerous orthogonal data streams between the transmitter and receiver (or receivers) , such antennas have the primary advantage of increasing spectral efficiency.
A matrix can be transformed linearly with the aid of SVD. We are aware that when determining an eigenvalue, the formula Av - λv = 0, is used, where v is an eigenvector with a corresponding eigenvalue of. For calculating SVD of a matrix A, firstly we compute A*AT ,then we compute A*AT - λv = 0. To minimize the linear operations in a matrix, eigen vectors are used to simplify the matrix equations.
However, eigenvectors need not always be linearly independent (or orthogonal). However, orthogonal data streams are necessary to boost overall throughput and decrease interference between them in order to permit multiple data streams between multi-antenna communication.
In singular value decomposition, you'll get three matrices, U, S, and V. Where U and V are orthonormal eigenvectors of A*AT
and S is a diagonal matrix. U*UT = V*VT = I (identity matrix).
The SVD of matrix A is given by the formula:
A = USVT
Keep in mind that the singular values for matrix A will be the squareroots of the obtained eigen values as we compute the eigen values of A*AT.
The aforementioned equations make it evident that the entire received signal will appear as follows if we employ precoding matrix V at the transmitter side and post-precoding matrix UT at the receiver side.
y = UT (USVT) Vx = Sx
Where, S is a diagonal matrix, y is the signal being received, and x is the signal being sent. The multiple data streams between the transmitter and receivers are currently independent and interference-free (theoretically).
MATLAB Code for Singular Value Decomposition
clc;clear;
close all;
% Define the matrix A
A = [1 2; 3 4];
% Compute the Singular Value Decomposition
[U, S, V] = svd(A);
% Display the results
disp('Matrix A:');
disp(A);
disp('Matrix U:');
disp(U);
disp('Matrix S:');
disp(S);
disp('Matrix V:');
disp(V);
% Verify the decomposition
A_reconstructed = U * S * V';
disp('Reconstructed Matrix A:');
disp(A_reconstructed);
% Compute A^T A
ATA = A' * A;
disp('Matrix A^T A:');
disp(ATA);
% Compute eigenvalues and eigenvectors of A^T A
[eigV, eigD] = eig(ATA);
disp('Eigenvalues of A^T A:');
disp(diag(eigD));
disp('Eigenvectors of A^T A:');
disp(eigV);
% Compute A A^T
AAT = A * A';
disp('Matrix A A^T:');
disp(AAT);
% Compute eigenvalues and eigenvectors of A A^T
[eigU, eigD2] = eig(AAT);
disp('Eigenvalues of A A^T:');
disp(diag(eigD2));
disp('Eigenvectors of A A^T:');
disp(eigU);
Output
Matrix A:
1 2
3 4
Matrix U:
-0.4046 -0.9145
-0.9145 0.4046
Matrix S:
5.4650 0
0 0.3660
Matrix V:
-0.5760 0.8174
-0.8174 -0.5760
Reconstructed Matrix A:
1.0000 2.0000
3.0000 4.0000
Matrix A^T A:
10 14
14 20
Eigenvalues of A^T A:
0.1339
29.8661
Eigenvectors of A^T A:
-0.8174 0.5760
0.5760 0.8174
Matrix A A^T:
5 11
11 25
Eigenvalues of A A^T:
0.1339
29.8661
Eigenvectors of A A^T:
-0.9145 0.4046
0.4046 0.9145