Matlab Toolbox - 4G/LTE

 

 

 

RMC Dlownlink - Port5, NLayer = 1, NTxAnts = N

 

These RMCs test transmission mode 7, where the PDSCH goes out on antenna port 5 with a UE-specific reference signal, also called the DRS. The eNB beamforms one layer over several antennas, and the UE demodulates it with the DRS rather than the CRS. This page generates R.25 to R.28 from 36.101 Table A.3.4.3.1-1 and compares the grids of two antennas.

Followings are the topics to be covered in this page.

Generating RMC Downlink Signal

The code is the same as on the single antenna RMC page, with two changes. It selects one antenna of the generated grid with TxAntIndex, and it skips the PDSCH in the uplink subframes of TDD configuration 1 as well as in subframe 5.

    rc = 'R.25';

     

    rmc = lteRMCDL(rc)

    pdsch = rmc.PDSCH

     

    txData = [0;0;0;0];

    [txWaveform, txGrid, rmcCfgOut] = lteRMCDLTool(rmc, txData);

     

    SF_RE_NUM = rmc.NDLRB*12*14;

    TxAntIndex = 1;

    TxAnt = TxAntIndex + 1;

     

    txGrid = txGrid(:,:,TxAnt);

    txGridChMap = txGrid(:,:,1);

     

    crs_scale = 0.2;

    pss_scale = 0.3;

    sss_scale = 0.3;

    phich_scale = 0.7;

    pcfich_scale = 0.8;

    pbch_scale = 0.7;

    pdcch_scale = 0.5;

    pdsch_scale = 0.4;

     

    noPdschSubframe = [2 3 5 7 8];

     

    for i=0:9

        rmc.NSubframe = i;

        pdsch = rmc.PDSCH;

        indexOffset = (rmc.NDLRB * 12 * 14) * rmc.NSubframe;

        crs_sym_ind = lteCellRSIndices(rmc)+indexOffset;

        

        if (i == 0) || (i == 5)

            pss_sym_ind = ltePSSIndices(rmc)+indexOffset;

            sss_sym_ind = lteSSSIndices(rmc)+indexOffset;

        end

        

        pcfich_sym_ind = ltePCFICHIndices(rmc)+indexOffset;

        phich_sym_ind = ltePHICHIndices(rmc)+indexOffset;

     

        if i == 0

            pbch_sym_ind = ltePBCHIndices(rmc)+indexOffset;

        end

        

        dci.NDLRB = rmc.NDLRB;

        dci.DCIFormat = pdsch.DCIFormat;

        dci.AllocationType = 0;

        dci.Allocation.RIV = 18;

        dci.ModCoding = 10;

        dci.HARQNo = 0;

        dci.NewData = 0;

        dci.TPCPUCCH = 0;

        dci.DuplexMode = 'FDD';

        dci.NTxAnts = 1;

        [dciMessage,dciMessageBits] = lteDCI(rmc,dci);

        

        pdcchConfig.RNTI = pdsch.RNTI;

        pdcchConfig.PDCCHFormat = pdsch.PDCCHFormat;

        

        codedDciBits = lteDCIEncode(pdcchConfig, dciMessageBits);

        pdcchDims = ltePDCCHInfo(rmc);

        pdcchBits = -1*ones(pdcchDims.MTot, 1);

        candidates = ltePDCCHSpace(rmc, pdcchConfig);

        pdcchBits ( candidates(1, 1) : candidates(1, 2) ) = codedDciBits;

        pdcch_sym = ltePDCCH(rmc, pdcchBits);

        

        pdcch_sym_ind = ltePDCCHIndices(rmc)+indexOffset;

            

        if ismember(i,noPdschSubframe) == false

           if iscell(pdsch.PRBSet) == true

              [pdsch_sym_ind,pdschIndInfo]=ltePDSCHIndices(rmc,pdsch,cell2mat(pdsch.PRBSet(i+1)));

           else   

              [pdsch_sym_ind,pdschIndInfo]=ltePDSCHIndices(rmc,pdsch,pdsch.PRBSet);

           end   

           pdsch_sym_ind = pdsch_sym_ind + indexOffset;

        end     

        

        if TxAntIndex == 0

            txGridChMap(crs_sym_ind) = crs_scale;

            txGridChMap(pss_sym_ind) = pss_scale;

            txGridChMap(sss_sym_ind) = sss_scale;

            txGridChMap(pcfich_sym_ind) = pcfich_scale;

            txGridChMap(phich_sym_ind) = phich_scale;

            txGridChMap(pbch_sym_ind) = pbch_scale;

        

            txGridChMap(pdcch_sym_ind) = pdcch_scale .* pdcch_sym;

        end

        

        if ismember(i,noPdschSubframe) == false

            txGridChMap(pdsch_sym_ind(:,TxAnt)-SF_RE_NUM*TxAntIndex) = pdsch_scale;

        end

    end

     

    ylabelText = {'0','1','2','3','4','5','6','7','8','9', ...

              '10','11','12','13','14','15','16','17','18','19', ...

              '20','21','22','23','24','25','26','27','28','29', ...

              '30','31','32','33','34','35','36','37','38','39', ...

              '40','41','42','43','44','45','46','47','48','49', ...

              '50','51','52','53','54','55','56','57','58','59', ...

              '60','61','62','63','64','65','66','67','68','69', ...

              '70','71','72','73','74','75','76','77','78','79', ...

              '80','81','82','83','84','85','86','87','88','89', ...

              '90','91','92','93','94','95','96','97','98','99'};

    ytick = 7:12:(rmc.NDLRB*12);

     

    subplot(2,2,1);

    imagesc(abs(txGrid));

    axis xy;

    xlabel('Subframe');

    ylabel('RB');

    set(gca,'xtick',8:14:140);

    set(gca,'xticklabel',{'0','1','2','3','4','5','6','7','8','9','10'});

    set(gca,'ytick',ytick);

    set(gca,'yticklabel',ylabelText);

     

     

    subplot(2,2,3);

    imagesc(abs(txGridChMap));

    axis xy;

    xlabel('Subframe');

    ylabel('RB');

    set(gca,'xtick',8:14:140);

    set(gca,'xticklabel',{'0','1','2','3','4','5','6','7','8','9','10'});

    set(gca,'ytick',ytick);

    set(gca,'yticklabel',ylabelText);

     

    subplot(2,2,[2 4]);

    imagesc(abs(txGridChMap));

    axis xy;

    xlabel('Symbol');

    ylabel('RB');

    xlim([0.5 14.5]);

    ylim([0.5 12*rmc.NDLRB]);

    set(gca,'xtick',1:14);

    set(gca,'xticklabel',{'0','1','2','3','4','5','6','7','8','9','10','11','12','13'});

    set(gca,'ytick',ytick);

    set(gca,'yticklabel',ylabelText);

     

    mymap = [0.0 0.0 0.0

             1.0 1.0 0.0

             1.0 0.0 0.0

             0.5 0.0 0.0

             0.0 1.0 0.0

             0.0 0.5 0.0

             0.0 0.0 1.0

             0.0 0.0 0.5

             0.0 1.0 1.0

             1.0 0.0 1.0

             1.0 1.0 1.0];

    colormap(mymap);

     

    set(gcf, 'Position', [200, 200, 800, 700])

     

These RMCs are TDD with uplink-downlink configuration 1, which has downlink subframes 0, 4, 5 and 9, special subframes 1 and 6, and uplink subframes 2, 3, 7 and 8. So noPdschSubframe = [2 3 5 7 8]: the four uplink subframes and subframe 5, which 36.101 leaves without PDSCH. The PDSCH allocation changes from subframe to subframe, so PRBSet is a cell array with one entry per subframe.

The common channels are marked only when TxAntIndex is 0. CellRefP = 1, so the CRS, PSS, SSS, PBCH, PCFICH, PHICH and PDCCH exist only on antenna 0. The PDSCH and the DRS are beamformed with W = [0.7071 0.7071] and appear on both antennas.

  • TDD configuration 1 : PDSCH in subframes 0, 1, 4, 6 and 9.
  • TxAntIndex selects the antenna : 0 shows all channels, 1 shows only the beamformed ones.
  • W = [0.7071 0.7071] : one layer spread equally over two antennas.

Full bandwidth RMCs R.25, R.26 and R.27

R.25, R.26 and R.27 allocate the whole 50 RB carrier with QPSK, 16QAM and 64QAM. Each example shows antenna 0 and antenna 1, and the difference between the two is the point of port 5: everything except the PDSCH and the DRS disappears from antenna 1.

rc = 'R.25'; TxAntIndex = 0

36.101 v14.4 - Table A.3.4.3.1-1: Fixed Reference Channel for DRS   

Resource grid of RMC R.25 on antenna 0 over one frame and in subframe 0

rc = 'R.25'; TxAntIndex = 1

 
Resource grid of RMC R.25 on antenna 1 over one frame and in subframe 0

rmc =

 

  struct with fields:

 

                 RC: 'R.25'

              NDLRB: 50

           CellRefP: 1

            NCellID: 0

       CyclicPrefix: 'Normal'

                CFI: 2

        PCFICHPower: 0

                 Ng: 'Sixth'

      PHICHDuration: 'Normal'

              HISet: [112×3 double]

         PHICHPower: 0

             NFrame: 0

          NSubframe: 0

       TotSubframes: 10

          Windowing: 0

         DuplexMode: 'TDD'

              PDSCH: [1×1 struct]

    OCNGPDCCHEnable: 'Off'

     OCNGPDCCHPower: 0

    OCNGPDSCHEnable: 'Off'

     OCNGPDSCHPower: 0

          OCNGPDSCH: [1×1 struct]

                SSC: 4

          TDDConfig: 1

 

 

pdsch =

 

  struct with fields:

 

           TxScheme: 'Port5'

         Modulation: {'QPSK'}

            NLayers: 1

                Rho: 0

               RNTI: 1

              RVSeq: [0 1 2 3]

                 RV: 0

     NHARQProcesses: 7

       NTurboDecIts: 5

             PRBSet: {1×10 cell}

     TargetCodeRate: 0.3333

     ActualCodeRate: [0.2911 0.3152 0 0 0.3505 0 0.3152 0 0 0.3505]

         TrBlkSizes: [2984 3240 0 0 4392 0 3240 0 0 4392]

    CodedTrBlkSizes: [10332 10356 0 0 12600 0 10356 0 0 12600]

          DCIFormat: 'Format1'

        PDCCHFormat: 2

         PDCCHPower: 0

            CSIMode: 'PUCCH 1-1'

            PMIMode: 'Wideband'

                  W: [0.7071 + 0.0000i 0.7071 + 0.0000i]

            NTxAnts: 2

R.25, QPSK. On antenna 0, subframe 0 shows the CRS, the PBCH in symbols 7 to 10 and the SSS in symbol 13 of the central RBs. On antenna 1, only the PDSCH and the DRS remain, with the DRS in symbols 3, 6, 9 and 12.

rc = 'R.26'; TxAntIndex = 0

36.101 v14.4 - Table A.3.4.3.1-1: Fixed Reference Channel for DRS   

Resource grid of RMC R.26 on antenna 0 over one frame and in subframe 0

rc = 'R.26'; TxAntIndex = 1

 
Resource grid of RMC R.26 on antenna 1 over one frame and in subframe 0

rmc =

 

  struct with fields:

 

                 RC: 'R.26'

              NDLRB: 50

           CellRefP: 1

            NCellID: 0

       CyclicPrefix: 'Normal'

                CFI: 2

        PCFICHPower: 0

                 Ng: 'Sixth'

      PHICHDuration: 'Normal'

              HISet: [112×3 double]

         PHICHPower: 0

             NFrame: 0

          NSubframe: 0

       TotSubframes: 10

          Windowing: 0

         DuplexMode: 'TDD'

              PDSCH: [1×1 struct]

    OCNGPDCCHEnable: 'Off'

     OCNGPDCCHPower: 0

    OCNGPDSCHEnable: 'Off'

     OCNGPDSCHPower: 0

          OCNGPDSCH: [1×1 struct]

                SSC: 4

          TDDConfig: 1

 

 

pdsch =

 

  struct with fields:

 

           TxScheme: 'Port5'

         Modulation: {'16QAM'}

            NLayers: 1

                Rho: 0

               RNTI: 1

              RVSeq: [0 1 2 3]

                 RV: 0

     NHARQProcesses: 7

       NTurboDecIts: 5

             PRBSet: {1×10 cell}

     TargetCodeRate: 0.5000

     ActualCodeRate: [0.4646 0.4635 0 0 0.5181 0 0.4635 0 0 0.5181]

         TrBlkSizes: [9528 9528 0 0 12960 0 9528 0 0 12960]

    CodedTrBlkSizes: [20664 20712 0 0 25200 0 20712 0 0 25200]

          DCIFormat: 'Format1'

        PDCCHFormat: 2

         PDCCHPower: 0

            CSIMode: 'PUCCH 1-1'

            PMIMode: 'Wideband'

                  W: [0.7071 + 0.0000i 0.7071 + 0.0000i]

            NTxAnts: 2

R.26, 16QAM. The same REs as R.25.

rc = 'R.27'; TxAntIndex = 0

36.101 v14.4 - Table A.3.4.3.1-1: Fixed Reference Channel for DRS   

Resource grid of RMC R.27 on antenna 0 over one frame and in subframe 0

rc = 'R.27'; TxAntIndex = 1

 
Resource grid of RMC R.27 on antenna 1 over one frame and in subframe 0

rmc =

 

  struct with fields:

 

                 RC: 'R.27'

              NDLRB: 50

           CellRefP: 1

            NCellID: 0

       CyclicPrefix: 'Normal'

                CFI: 2

        PCFICHPower: 0

                 Ng: 'Sixth'

      PHICHDuration: 'Normal'

              HISet: [112×3 double]

         PHICHPower: 0

             NFrame: 0

          NSubframe: 0

       TotSubframes: 10

          Windowing: 0

         DuplexMode: 'TDD'

              PDSCH: [1×1 struct]

    OCNGPDCCHEnable: 'Off'

     OCNGPDCCHPower: 0

    OCNGPDSCHEnable: 'Off'

     OCNGPDSCHPower: 0

          OCNGPDSCH: [1×1 struct]

                SSC: 4

          TDDConfig: 1

 

 

pdsch =

 

  struct with fields:

 

           TxScheme: 'Port5'

         Modulation: {'64QAM'}

            NLayers: 1

                Rho: 0

               RNTI: 1

              RVSeq: [0 0 1 2]

                 RV: 0

     NHARQProcesses: 7

       NTurboDecIts: 5

             PRBSet: {1×10 cell}

     TargetCodeRate: 0.7500

     ActualCodeRate: [0.7185 0.7416 0 0 0.7534 0 0.7416 0 0 0.7534]

         TrBlkSizes: [22152 22920 0 0 28336 0 22920 0 0 28336]

    CodedTrBlkSizes: [30996 31068 0 0 37800 0 31068 0 0 37800]

          DCIFormat: 'Format1'

        PDCCHFormat: 2

         PDCCHPower: 0

            CSIMode: 'PUCCH 1-1'

            PMIMode: 'Wideband'

                  W: [0.7071 + 0.0000i 0.7071 + 0.0000i]

            NTxAnts: 2

R.27, 64QAM. The same REs again.

The DRS positions follow 36.211 v19.3.0 clause 6.10.3.2. With the normal cyclic prefix, port 5 uses symbols 3 and 6 of the first slot and symbols 2 and 5 of the second slot. Those are symbols 3, 6, 9 and 12 of the subframe. That is 12 REs per PRB pair, and the plots for antenna 1 show them as the white rows.

In subframe 0, the PDSCH leaves out RB 21 to 29, which is 9 RB rather than the 6 central RB of the PBCH and the synchronization signals. The gap matches an allocation in resource block groups of 3 RB, the RBG size for 50 RB in 36.213 clause 7.1.6.1, where the central RBs fall into three whole groups. The coded bits confirm it: 41 RB with 126 REs each, after 6 CRS and 12 DRS REs, give 5166 REs, and QPSK gives the 10332 bits of subframe 0. In subframes 4 and 9, all 50 RB give 12600 bits.

  • DRS in symbols 3, 6, 9 and 12 : 12 REs per PRB pair, on both antennas.
  • Common channels only on antenna 0 : CellRefP = 1.
  • Subframe 0 drops RB 21 to 29 : three RBGs of 3 RB around the PBCH and SSS.
  • 126 REs per PRB pair : 144 minus 6 CRS and 12 DRS with CFI 2.

Single PRB RMC R.28

R.28 is the port 5 counterpart of the single PRB RMCs R.0 and R.1. It allocates RB 0 with 16QAM at a target code rate of 1/2, so the difference between the two antennas is easiest to see.

rc = 'R.28'; TxAntIndex = 0

36.101 v14.4 - Table A.3.4.3.1-1: Fixed Reference Channel for DRS   

Resource grid of RMC R.28 on antenna 0 over one frame and in subframe 0

rc = 'R.28'; TxAntIndex = 1

 
Resource grid of RMC R.28 on antenna 1 over one frame and in subframe 0

rmc =

 

  struct with fields:

 

                 RC: 'R.28'

              NDLRB: 50

           CellRefP: 1

            NCellID: 0

       CyclicPrefix: 'Normal'

                CFI: 2

        PCFICHPower: 0

                 Ng: 'Sixth'

      PHICHDuration: 'Normal'

              HISet: [112×3 double]

         PHICHPower: 0

             NFrame: 0

          NSubframe: 0

       TotSubframes: 10

          Windowing: 0

         DuplexMode: 'TDD'

              PDSCH: [1×1 struct]

    OCNGPDCCHEnable: 'Off'

     OCNGPDCCHPower: 0

    OCNGPDSCHEnable: 'Off'

     OCNGPDSCHPower: 0

          OCNGPDSCH: [1×1 struct]

                SSC: 4

          TDDConfig: 1

 

 

pdsch =

 

  struct with fields:

 

           TxScheme: 'Port5'

         Modulation: {'16QAM'}

            NLayers: 1

                Rho: 0

               RNTI: 1

              RVSeq: [0 1 2 3]

                 RV: 0

     NHARQProcesses: 7

       NTurboDecIts: 5

             PRBSet: 0

     TargetCodeRate: 0.5000

     ActualCodeRate: [0.4921 0.4762 0 0 0.4921 0 0.4762 0 0 0.4921]

         TrBlkSizes: [224 176 0 0 224 0 176 0 0 224]

    CodedTrBlkSizes: [504 420 0 0 504 0 420 0 0 504]

          DCIFormat: 'Format1'

        PDCCHFormat: 2

         PDCCHPower: 0

            CSIMode: 'PUCCH 1-1'

            PMIMode: 'Wideband'

                  W: [0.7071 + 0.0000i 0.7071 + 0.0000i]

            NTxAnts: 2

R.28. On antenna 0, only RB 0 carries PDSCH, next to the CRS and the common channels. On antenna 1, RB 0 is the only part of the grid that is not empty.

RB 0 is far from the central RBs, so subframe 0 and subframes 4 and 9 carry the same 224-bit transport block. It fills 504 coded bits, which is 126 REs with 4 bits each. The special subframes 1 and 6 have a shorter DwPTS and carry 176 bits in 420 coded bits. R.1 carries 256 bits in 552 coded bits on the same RB 0, and the 12 DRS REs account for the difference.

  • RB 0 only : the beam is visible on antenna 1 and nowhere else.
  • 224 bits in 504 coded bits : 12 fewer REs than R.1 because of the DRS.
  • 176 bits in the special subframes : the DwPTS is shorter than a full subframe.

Checking the RMCs against 36.101

Are these values still the ones in the current specification? The page cites 36.101 v14.4, and the table below compares every transport block and coded block size from the toolbox with 36.101 v20.0.0 Table A.3.4.3.1-1.

RMC

Modulation

TBS, subframe 0

TBS, subframes 1 and 6

TBS, subframes 4 and 9

Coded bits, 0 / 1 and 6 / 4 and 9

36.101 v20.0.0

R.25

QPSK

2984

3240

4392

10332 / 10356 / 12600

match

R.26

16QAM

9528

9528

12960

20664 / 20712 / 25200

match

R.27

64QAM

22152

22920

28336

30996 / 31068 / 37800

match

R.28

16QAM

224

176

224

504 / 420 / 504

match

Every value matches, and 36.101 still marks subframe 5 as N/A. The same table in v20.0.0 also lists R.26-1 and R.27-1, which use fewer RB at 5 MHz and are not generated on this page.

  • All four RMCs match 36.101 v20.0.0 : transport blocks and coded bits.
  • R.26-1 and R.27-1 also exist : 5 MHz variants not shown here.

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.

Reference

[1] 3GPP TS 36.101 v20.0.0 - Table A.3.4.3.1-1, Fixed Reference Channel for DRS

[2] 3GPP TS 36.211 v19.3.0 - clause 6.10.3, UE-specific reference signals

[3] 3GPP TS 36.213 v19.4.0 - clause 7.1.6.1, Resource allocation type 0