Tag Archives: MIMO

Massive MIMO Fundamentals and Code


Just like different frequency bands and time slots can be used to multiplex users, spatial domain can also be exploited to achieve the same result. It is well known that if there are 4 transmit antennas and 4 receive antennas then four simultaneous data streams can be transmitted over the air. This can be scaled up to 8 x 8 or in the extreme case to 128 x 128. When the number of transmit or receive antennas is greater than 100 we typically call it a Massive MIMO scenario and we need specialized signal processing techniques to handle this case. Computationally complex techniques like Maximum Likelihood (ML) become quite difficult to implement in real-time and we have to resort to some simplified linear array processing techniques. This is the topic of this blog post.

Description of the Scenario

To understand the scenario that we will discuss here, please look at our previous post. Also note that when we talk about nT x nR case we do not necessarily mean nT transmit antennas and nR receive antennas, it could also mean nT users with 1 antenna each and co-located nR receive antennas, such as at a base station. We typically assume that the number of receive antennas is greater than the number of users. When the number of users is greater than the number of receive antennas we call it overloaded case and this is not discussed here. Here the number of users is fixed at 16 (randomly distributed between 0 and 360 degrees within the cell) and the number of receive antennas is varied from 20 to 100.

Plane Wave Impinging Upon a ULA
Plane Wave Impinging Upon a ULA from a Particular User/Direction
Beamforming Using a Uniform Linear Array
Beamforming Using a Uniform Linear Array
Linear Signal Processing Techniques for Massive MIMO

The four signal processing techniques that are applied at the receive array are:

  1. Matched Filtering (MF)
  2. Moore Penrose Pseudo-Inverse without controlling the threshold (PINV)
  3. Moore Penrose Pseudo-Inverse with a specified threshold (PINV with tol)
  4. Minimum Mean Squared Error (MMSE)
Simulation Results

There are some other techniques that we experimented with but are omitted here for the sake of brevity. The MATLAB code and simulation results showing bit error rate as a function of receive array size (nR) are given below. It is seen that simple Matched Filter works quite well when the receive array size is small but with increasing nR the performance improvement is not that great. Least Squares (LS) technique using Moore-Penrose Pseudo Inverse shows improved performance with increasing nR and this can be further improved by controlling the threshold (tol). We found that a threshold of 0.1 gave significantly improved results as compared to no threshold case. Lastly we implemented MMSE and found that it gave us the best results. It must be noted that we also implemented ML for a limited size of receive array and found that its BER performance was far superior than any other technique.

BER as a Function of Receive Array Size
BER of a MU-MIMO Receive Array at the Base Station (LOS)
MATLAB Code for Massive MIMO Scenario

clear all
close all

f=1e9;        %Carrier frequency
c=3e8;        %Speed of light
l=c/f;        %Wavelength
d=l/2;        %Rx array spacing
N=20;         %Receive array size
M=16;         %Transmit array size (users)
theta=2*pi*(rand(1,M));         %Angular separation of users
EbNo=10;                        %Energy per bit to noise PSD
sigma=1/sqrt(2*EbNo);           %Standard deviation of noise

n=1:N;                          %Rx array number
n=transpose(n);                 %Row vector to column vector

s=2*(round(rand(M,1))-0.5);           %BPSK signal of length M
H=exp(-i*(n-1)*2*pi*d*cos(theta)/l);  %Channel matrix of size NxM
wn=sigma*(randn(N,1)+i*randn(N,1));   %AWGN noise of length N
x=H*s+wn;                             %Receive vector of length N


% 2-PINV without tol
% y=pinv(H)*x;

% 3-PINV with tol
% y=pinv(H,0.1)*x;

% 4-Minimum Mean Square Error (MMMSE)
% y=(H'*H+(2*sigma^2)*eye([M,M]))^(-1)*(H')*x;

s_est=sign(real(y));          %Demodulation
ber=sum(s!=s_est)/length(s);  %BER calculation

%Note: Please select the array processing technique
%you want to implement (1-MF, 2-LS1, 3-LS2, 4-MMSE)


  1. In the code above, N=nR and M=nT
  2. What is labelled here as Matched Filter (MF) is strictly speaking Maximal Ratio Combining (MRC)
  3. The case we discuss above is categorized as Multiuser MIMO (MU-MIMO) for the uplink
  4. MU-MIMO for the downlink is not that straight forward and will be the subject of some future post
  5. We have considered a deterministic channel model as opposed to a probabilistic channel model
  6. Probabilistic channel model can be easily implemented by assuming that channel coefficients are independent and identically distributed (IID) complex Gaussian random variables with mean zero and variance of 0.5 per dimension
  7. The initial results we have obtained using this probabilistic channel model are much better than the results shown above, but the question remains which is the more accurate representation of a real channel
Update: Simulation Using a Probabilistic Channel

Since most of the literature in Massive MIMO uses a probabilistic channel instead of a deterministic channel, we decided to investigate this further. To implement such a channel model we simply need to change one line of the MATLAB code shown above. Instead of defining H as:


We define H as:


The results are shown below. It is seen that the BER performance is orders of magnitude better. We would next investigate the performance degradation if the channel coefficients are not independent and identically distributed (IID) but have some correlation. This is closely tied to inter-element separation of the antenna array.

BER as a Function of Receive Array Size
BER of a MU-MIMO Receive Array at the Base Station (NLOS)
Concluding Remarks

The fundamental question that needs to be asked is why the performance in the NLOS scenario (probabilistic) is better than LOS scenario (deterministic). This has to do with the Signal to Noise Ratio [1]. In the above we have assumed the Signal to Noise Ratio (SNR) for the two scenarios to be the same. But realistically speaking this is never the case. Although the NLOS case assumes a rich scattering environment providing a high multiplexing gain (dependent on the rank of the channel matrix H) its SNR would always be lower due to reflection, diffraction and scattering loss. So a fair comparison between the LOS and NLOS case is only possible if we downward adjust the SNR for the NLOS case. Simulation results have shown that the SNR for the NLOS case needs to be downgraded by about 25 dB to have similar BER performance as the LOS case. Lastly it must be noted that the BER performance of the NLOS case would deteriorate once the channel coefficients are not IID and there is some correlation between them.

[1] Zimu Cheng, Binghao Chen, and Zhangdui Zhong “A Tradeoff between Rich Multipath and High Receive Power in MIMO Capacity”, International Journal of Antennas and Propagation, Volume 2013.

MIMO Capacity in a Fading Environment

The Shannon Capacity of a channel is the data rate that can be achieved over a given bandwidth (BW) and at a particular signal to noise ratio (SNR) with diminishing bit error rate (BER). This has been discussed in an earlier post for the case of SISO channel and additive white Gaussian noise (AWGN). For a MIMO fading channel the capacity with channel not known to the transmitter is given as (both sides have been normalized by the bandwidth [1]):

Shannon Capacity of a MIMO Channel
Shannon Capacity of a MIMO Channel

where NT is the number of transmit antennas, NR is the number of receive antennas, γ is the signal to interference plus noise ratio (SINR), INR is the NRxNR identity matrix and H is the NRxNT channel matrix. Furthermore, hij, an element of the matrix H defines the complex channel coefficient between the ith receive antenna and jth transmit antenna. It is quite obvious that the channel capacity (in bits/sec/Hz) is highly dependent on the structure of matrix H. Let us explore the effect of H on the channel capacity.

Let us first consider a 4×4 case (NT=4, NR=4) where the channel is a simple AWGN channel and there is no fading. For this case hij=1 for all values of i and j. It is found that channel capacity of this simple channel for an SINR of 10 dB is 5.36bits/sec/Hz. It is further observed that the channel capacity does not change with number of transmit antennas and increases logarithmically with increase in number of receive antennas. Thus it can be concluded that in an AWGN channel no multiplexing gain is obtained by increasing the number of transmit antennas.

We next consider a more realistic scenario where the channel coefficients hij are complex with real and imaginary parts having a Gaussian distribution with zero mean and variance 0.5. Since the channel H is random the capacity is also a random variable with a certain distribution. An important metric to quantify the capacity of such a channel is the Complimentary Cumulative Distribution Function (CCDF). This curve basically gives the probability that the MIMO capacity is above a certain threshold.

Complimentary Cumulative Distribution Function of Capacity
Complimentary Cumulative Distribution Function of Capacity

It is obvious (see figure above) that there is a very high probability that the capacity obtained for the MIMO channel is significantly higher than that obtained for an AWGN channel e.g. for an SINR of 9 dB there is 90% probability that the capacity is greater than 8 bps/Hz. Similarly for an SINR of 12 dB there is a 90% probability that the capacity is greater than 11 bps/Hz. For a stricter threshold of 99% the above capacities are reduced to 7.2 bps/Hz and 9.6 bps/Hz.

In a practical system the channel coefficients hij would have some correlation which would depend upon the antenna spacing. Lower the antenna spacing higher would be the antenna correlation and lower would be the MIMO system capacity. This would be discussed in a future post.

The MATLAB code for calculating the CCDF of channel capacity of a MIMO channel is given below.

clear all
close all


for n=1:10000

xlabel('Capacity (bps/Hz)')
ylabel('Probability (Capacity > Abcissa)')
grid on

[1] G. J. Foschini and M. J. Gans,”On limits of Wireless Communications in a Fading Environment when Using Multiple Antennas”, Wireless Personal Communications 6, pp 311-335, 1998.

A Rayleigh Fading Simulator with Temporal and Spatial Correlation

Just to recap, building an LTE fading simulator with the desired temporal and spatial correlation is a three step procedure.

1. Generate Rayleigh fading sequences using Smith’s method which is based on Clarke and Gan’s fading model.

2. Introduce spatial correlation based upon the spatial correlation matrices defined in 3GPP 36.101.

3. Use these spatially and temporally correlated sequences as the filter taps for the LTE channel models.

We have already discussed step 1 and 3 in our previous posts. We now focus on step 2, generating spatially correlated channels coefficients.

3GPP has defined spatial correlation matrices for the Node-B and the UE. These are defined for 1,2 and 4 transmit and receive antennas. These are reproduced below.

Spatial Correlation Matrix
Spatial Correlation Matrix

The parameters ‘alpha’ and ‘beta’ are defined as:

Low Correlation
alpha=0, beta=0

Medium Correlation
alpha=0.3, beta=0.9

High Correlation
alpha=0.9, beta=0.9

The combined effect of antenna correlation at the transmitter and receiver is obtained by taking the Kronecker product of individual correlation matrices e.g. for a 2×2 case the correlation matrix is given as:

Correlation Matrix for 2x2 MIMO
Correlation Matrix for 2×2 MIMO

Multiplying the square root of the correlation matrix with the vector of channel coefficients is equivalent to taking a weighted average e.g. for the channel between transmit antenna 1 and receive antenna 1 the correlated channel coefficient h11corr is given as:


where w1=1 and w2, w3 and w4 are less than one and greater than zero. For the high correlation case described above the channel coefficient is calculated as:


From a practical point of antenna correlation is dependent on the antenna separation. Greater the antenna spacing lower is the antenna correlation and better the system performance. However, a base station requires much higher antenna spacing than a UE to achieve the same level of antenna correlation. This is due to the fact the base station antennas are placed much higher than a UE. Therefore the signals arriving at the base station are usually confined to smaller angles and experience similar fading. A UE on the other hand has a lot of obstacles in the surrounding areas which results in higher angle spread and uncorrelated fading between the different paths.

Simulating a MIMO Ring Model

A Ring Model is a well known spatial channel model. It models the propagation channel as an unobstructed transmitter and a receiver surrounded by a ring of reflectors. The distance between the transmitter and receiver is usually much larger than the radius of the ring. The reflectors are distributed uniformly around the ring. This model is useful for modeling a scenario where a base station is located at sufficient altitude and is unobstructed whereas the mobile station is at ground level and is surrounded by a bunch of reflectors.
Ring Model

Given below is the MATLAB code that calculates the composite signal (from nth Tx element to mth Rx element) at the receiver for a MIMO channel composed of eight reflectors.

function [Et]=ring_mod2(d,r,psi,l,B,alpha,a)
for phi=0:pi/4:(2*pi)-(pi/4);