Matlab Toolbox - 4G/LTE

 

 

 

 

Precoding - Downlink

 

Please read Precoding page if you are not familiar with the Precoding concept.

 

< Spatial Multiplex without CDD - Layer 1, 2 Tx Antenna >

 

This example shows on how to come up with precoding matrix a1,a2,a3,a4 described in Codebook selection for Precoding - 2 Antenna Ports

    precode_in = [ 1 ];

    NoOfTxAnt = 2;

    TransmissionMode = 'SpatialMux';

    codebookIndex = 0;

     

    precode_out = lteDLPrecode(precode_in,NoOfTxAnt,TransmissionMode,codebookIndex).'

      Codebook Index/Input

    Result (Precoding Output)

      precode_in = [ 1 ];

      codebookIndex = 0;

       0.7071 + 0.0000i

       0.7071 + 0.0000i

      precode_in = [ 1 ];

      codebookIndex = 1;

       0.7071 + 0.0000i

      -0.7071 + 0.0000i

      precode_in = [ 1 ];

      codebookIndex = 2;

       0.7071 + 0.0000i

       0.0000 + 0.7071i

      precode_in = [ 1 ];

      codebookIndex = 3;

       0.7071 + 0.0000i

       0.0000 - 0.7071i

 

< Spatial Multiplex with/without CDD - Layer 2, 2 Tx Antenna >

 

This example shows on how to come up with all the items in the second column described in Codebook selection for Precoding - 2 Antenna Ports

    precode_in = [ 1 0; 0 1 ];

    NoOfTxAnt = 2;

    TransmissionMode = 'SpatialMux';

    codebookIndex = 0;

     

    precode_out = lteDLPrecode(precode_in,NoOfTxAnt,TransmissionMode,codebookIndex).'

     

      Codebook Index/Input

    Result (Precoding Output)

      precode_in = [ 1 0; 0 1 ]; codebookIndex = 0;

       0.7071 + 0.0000i   0.0000 + 0.0000i

       0.0000 + 0.0000i   0.7071 + 0.0000i

      precode_in = [ 1 0; 0 1 ]; codebookIndex = 1;

       0.5000 + 0.0000i   0.5000 + 0.0000i

       0.5000 + 0.0000i  -0.5000 + 0.0000i

      precode_in = [ 1 0; 0 1 ]; codebookIndex = 2;

       0.5000 + 0.0000i   0.5000 + 0.0000i

       0.0000 + 0.5000i   0.0000 - 0.5000i

 

< Spatial Multiplex without CDD - Layer 2, 4 Tx Antenna >

 

This example shows how to come up with the precoding matrix described in Codebook for 4 x 2 MIMO.

    precode_in = [ 1 0; 0 1 ];

    NoOfTxAnt = 4;

    TransmissionMode = 'SpatialMux';

    codebookIndex = 0;

     

    precode_out = lteDLPrecode(precode_in,NoOfTxAnt,TransmissionMode,codebookIndex).'

     

      Codebook Index/Input

    Result (Precoding Output)

      precode_in = [ 1 0; 0 1 ]; codebookIndex = 0;

       0.3536 + 0.0000i   0.3536 + 0.0000i

       0.3536 + 0.0000i  -0.3536 + 0.0000i

       0.3536 + 0.0000i  -0.3536 + 0.0000i

       0.3536 + 0.0000i   0.3536 + 0.0000i

      precode_in = [ 1 0; 0 1 ]; codebookIndex = 1;

       0.3536 + 0.0000i   0.0000 - 0.3536i

       0.0000 + 0.3536i   0.3536 + 0.0000i

      -0.3536 + 0.0000i   0.0000 - 0.3536i

       0.0000 - 0.3536i   0.3536 + 0.0000i

      precode_in = [ 1 0; 0 1 ]; codebookIndex = 2;

       0.3536 + 0.0000i  -0.3536 + 0.0000i

      -0.3536 + 0.0000i   0.3536 + 0.0000i

       0.3536 + 0.0000i   0.3536 + 0.0000i

      -0.3536 + 0.0000i  -0.3536 + 0.0000i

      precode_in = [ 1 0; 0 1 ]; codebookIndex = 3;

       0.3536 + 0.0000i   0.0000 + 0.3536i

       0.0000 - 0.3536i   0.3536 + 0.0000i

      -0.3536 + 0.0000i   0.0000 + 0.3536i

       0.0000 + 0.3536i   0.3536 + 0.0000i

      precode_in = [ 1 0; 0 1 ]; codebookIndex = 4;

       0.3536 + 0.0000i  -0.2500 - 0.2500i

       0.2500 + 0.2500i   0.0000 + 0.3536i

       0.0000 + 0.3536i  -0.2500 + 0.2500i

      -0.2500 + 0.2500i   0.3536 + 0.0000i

      precode_in = [ 1 0; 0 1 ]; codebookIndex = 5;

       0.3536 + 0.0000i   0.2500 - 0.2500i

      -0.2500 + 0.2500i   0.0000 - 0.3536i

       0.0000 - 0.3536i   0.2500 + 0.2500i

       0.2500 + 0.2500i   0.3536 + 0.0000i

      precode_in = [ 1 0; 0 1 ]; codebookIndex = 6;

       0.3536 + 0.0000i   0.0000 - 0.3536i

      -0.2500 - 0.2500i   0.2500 - 0.2500i

       0.0000 + 0.3536i   0.3536 + 0.0000i

       0.2500 - 0.2500i   0.2500 + 0.2500i

      precode_in = [ 1 0; 0 1 ]; codebookIndex = 7;

       0.3536 + 0.0000i   0.0000 + 0.3536i

       0.2500 - 0.2500i  -0.2500 - 0.2500i

       0.0000 - 0.3536i   0.3536 + 0.0000i

      -0.2500 - 0.2500i  -0.2500 + 0.2500i

      precode_in = [ 1 0; 0 1 ]; codebookIndex = 8;

       0.3536 + 0.0000i   0.3536 + 0.0000i

       0.3536 + 0.0000i   0.3536 + 0.0000i

      -0.3536 + 0.0000i   0.3536 + 0.0000i

      -0.3536 + 0.0000i   0.3536 + 0.0000i

      precode_in = [ 1 0; 0 1 ]; codebookIndex = 9;

       0.3536 + 0.0000i   0.0000 - 0.3536i

       0.0000 + 0.3536i  -0.3536 + 0.0000i

       0.3536 + 0.0000i   0.0000 + 0.3536i

       0.0000 + 0.3536i   0.3536 + 0.0000i

      precode_in = [ 1 0; 0 1 ]; codebookIndex = 10;

       0.3536 + 0.0000i  -0.3536 + 0.0000i

      -0.3536 + 0.0000i  -0.3536 + 0.0000i

      -0.3536 + 0.0000i   0.3536 + 0.0000i

       0.3536 + 0.0000i   0.3536 + 0.0000i

      precode_in = [ 1 0; 0 1 ]; codebookIndex = 11;

       0.3536 + 0.0000i   0.3536 + 0.0000i

       0.0000 - 0.3536i   0.0000 + 0.3536i

       0.3536 + 0.0000i   0.3536 + 0.0000i

       0.0000 - 0.3536i   0.0000 + 0.3536i

      precode_in = [ 1 0; 0 1 ]; codebookIndex = 12;

       0.3536 + 0.0000i   0.3536 + 0.0000i

       0.3536 + 0.0000i   0.3536 + 0.0000i

       0.3536 + 0.0000i  -0.3536 + 0.0000i

      -0.3536 + 0.0000i   0.3536 + 0.0000i

      precode_in = [ 1 0; 0 1 ]; codebookIndex = 13;

       0.3536 + 0.0000i  -0.3536 + 0.0000i

       0.3536 + 0.0000i   0.3536 + 0.0000i

      -0.3536 + 0.0000i   0.3536 + 0.0000i

       0.3536 + 0.0000i   0.3536 + 0.0000i

      precode_in = [ 1 0; 0 1 ]; codebookIndex = 14;

       0.3536 + 0.0000i   0.3536 + 0.0000i

      -0.3536 + 0.0000i   0.3536 + 0.0000i

       0.3536 + 0.0000i   0.3536 + 0.0000i

       0.3536 + 0.0000i  -0.3536 + 0.0000i

      precode_in = [ 1 0; 0 1 ]; codebookIndex = 15;

       0.3536 + 0.0000i  -0.3536 + 0.0000i

      -0.3536 + 0.0000i   0.3536 + 0.0000i

      -0.3536 + 0.0000i  -0.3536 + 0.0000i

      -0.3536 + 0.0000i  -0.3536 + 0.0000i

 

 

Disclaimer ! :

 

This page is only to show you the overall logics and visualization for various LTE physical layer channels. I haven't investigated much about verifying about the accuracy.

If you think the code is not so efficient, it is 100% my fault. I haven't made any effort for effiecient code. I just tried to create code as simple as possible for the readers. As you know, easy-to-read code is not always efficient for a specific chipset.

If you find any mistake in terms of accuracy, it is also very highly likely be my fault. Not the problem of Matlab tool box itself.

Any comment and corrections if you find any mistake will be welcome and appreciated.