Reply To: Massive MIMO Simulation -spatialChannelModel

#15487
Bashar Tahir
Participant

Dear Farhan,

Sorry for the late reply. We had to do some slight updates to the current version (1.2). Please redownload the simulator using the same owncloud link you were given. Do not forget to put the line
obj.simulation.antennaConfiguration(:) = {[obj.simulation.nAntennasBaseStation(1), 1]};
in the SimulationParameters file as before.

So first of all, MRT/MRC will only have the same performance as ZF if the spatial channels of the users are orthogonal (or maybe very close to orthogonal; how sensitive it is depends on the CQI). Assuming you have perfect LOS, the channel of the user is given by the array response, which depends on the angles of arrival/departure in 3D (azimuth and elevation; see the manual for the reference axis). Therefore, if you want to see a similar performance between MRT/MRC and ZF, you need to set the angles such that the array responses of the users are orthogonal.

An example configuration is the following; consider two BSs, each having two UEs:

scStr.topology.nodes                        = ['BS1,BS2,UE1,UE2,UE3,UE4']; 
scStr.topology.primaryLinks                 = ['BS1:UE1,' ...
                                               'BS1:UE2,' ...
                                               'BS2:UE3,' ...
                                               'BS2:UE4,' ...
                                               'UE1:BS1,' ...
                                               'UE2:BS1,' ...
                                               'UE3:BS2,' ...
                                               'UE4:BS2' ...
                                               ];  						   

In order to avoid setting orthogonality in 3D, I will set angleMeanZOA to 90 for all links. In this case, the setup becomes more or less 2D. Then, in order to obtain orthogonal array responses, the angles of the users are set to 0 and 90. The configuration of the spatial channel model is given by:

scStr.channel.spatialChannelModel           = true;      
scStr.channel.nSpatialPaths                 = [1];       
scStr.channel.angleMeanAOA                  = [0,90,0,90,0,90,0,90];
scStr.channel.angleMeanZOA                  = [90];
scStr.channel.angleSigmaAOA                 = [0.0001];
scStr.channel.angleSigmaZOA                 = [0.0001]; 
scStr.channel.kFactor                       = [50];         
scStr.channel.antennaSpacing                = [1/2];  

For such a LOS setup, the array responses are orthogonal, and therefore you will get the same performance for both MRT/MRC and ZF.

Now, in the example you have given above, you set the angles for the four users according to 0, 90, 180, and 270. You have to be careful here. 0 and 180 are mirrors of each other; the same is for 90 and 270. So the users at 0 and 180 are fully interfering with each other, same for 90 and 270.

In conclusion, to get the same performance between MRT/MRC and ZF in a LOS scenario, you need to make sure that the resulting array responses are orthogonal (which depends on the 3D angles of the users).

Best regards,
Bashar