Matlab Toolbox - 4G/LTE

 

 

 

 

RMC Dlownlink - Port0, NLayer = 1, NTxAnts = 1

 

< Generating RMC Downlink Signal >

    rc = 'R.0';

     

    rmc = lteRMCDL(rc)

    pdsch = rmc.PDSCH

     

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

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

    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 = [5];

    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

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

           pdsch_sym_ind = pdsch_sym_ind + indexOffset;

        end   

        

        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;

        

        if ismember(i,noPdschSubframe) == false

            txGridChMap(pdsch_sym_ind) = 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])

     

     

rc = 'R.0';

36.101 v14.4 - Table A.3.3.1-4: Fixed Reference Channel Single PRB (Channel Edge)

rmc =

 

  struct with fields:

 

                 RC: 'R.0'

              NDLRB: 15

           CellRefP: 1

            NCellID: 0

       CyclicPrefix: 'Normal'

                CFI: 3

        PCFICHPower: 0

                 Ng: 'Sixth'

      PHICHDuration: 'Normal'

              HISet: [112×3 double]

         PHICHPower: 0

             NFrame: 0

          NSubframe: 0

       TotSubframes: 10

          Windowing: 0

         DuplexMode: 'FDD'

              PDSCH: [1×1 struct]

    OCNGPDCCHEnable: 'Off'

     OCNGPDCCHPower: 0

    OCNGPDSCHEnable: 'Off'

     OCNGPDSCHPower: 0

          OCNGPDSCH: [1×1 struct]

 

 

pdsch =

 

  struct with fields:

 

           TxScheme: 'Port0'

         Modulation: {'16QAM'}

            NLayers: 1

                Rho: 0

               RNTI: 1

              RVSeq: [0 1 2 3]

                 RV: 0

     NHARQProcesses: 8

       NTurboDecIts: 5

             PRBSet: 0

     TargetCodeRate: 0.5000

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

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

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

          DCIFormat: 'Format1'

        PDCCHFormat: 2

         PDCCHPower: 0

            CSIMode: 'PUCCH 1-1'

            PMIMode: 'Wideband'

 

 

rc = 'R.1';

36.101 v14.4 - Table A.3.3.1-4: Fixed Reference Channel Single PRB (Channel Edge)

rmc =

 

  struct with fields:

 

                 RC: 'R.1'

              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: 'FDD'

              PDSCH: [1×1 struct]

    OCNGPDCCHEnable: 'Off'

     OCNGPDCCHPower: 0

    OCNGPDSCHEnable: 'Off'

     OCNGPDSCHPower: 0

          OCNGPDSCH: [1×1 struct]

 

 

pdsch =

 

  struct with fields:

 

           TxScheme: 'Port0'

         Modulation: {'16QAM'}

            NLayers: 1

                Rho: 0

               RNTI: 1

              RVSeq: [0 1 2 3]

                 RV: 0

     NHARQProcesses: 8

       NTurboDecIts: 5

             PRBSet: 0

     TargetCodeRate: 0.5000

     ActualCodeRate: [0.5072 0.5072 0.5072 0.5072 0.5072 0 0.5072 0.5072 0.5072 0.5072]

         TrBlkSizes: [256 256 256 256 256 0 256 256 256 256]

    CodedTrBlkSizes: [552 552 552 552 552 0 552 552 552 552]

          DCIFormat: 'Format1'

        PDCCHFormat: 2

         PDCCHPower: 0

            CSIMode: 'PUCCH 1-1'

            PMIMode: 'Wideband'

 

 

rc = 'R.2';

36.101 v14.4 - Table A.3.3.1-1: Fixed Reference Channel QPSK R=1/3

rmc =

 

  struct with fields:

 

                 RC: 'R.2'

              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: 'FDD'

              PDSCH: [1×1 struct]

    OCNGPDCCHEnable: 'Off'

     OCNGPDCCHPower: 0

    OCNGPDSCHEnable: 'Off'

     OCNGPDSCHPower: 0

          OCNGPDSCH: [1×1 struct]

 

 

pdsch =

 

  struct with fields:

 

           TxScheme: 'Port0'

         Modulation: {'QPSK'}

            NLayers: 1

                Rho: 0

               RNTI: 1

              RVSeq: [0 1 2 3]

                 RV: 0

     NHARQProcesses: 8

       NTurboDecIts: 5

             PRBSet: [50×1 double]

     TargetCodeRate: 0.3333

     ActualCodeRate: [0.3407 0.3200 0.3200 0.3200 0.3200 0 0.3200 0.3200 0.3200 0.3200]

         TrBlkSizes: [4392 4392 4392 4392 4392 0 4392 4392 4392 4392]

    CodedTrBlkSizes: [12960 13800 13800 13800 13800 0 13800 13800 13800 13800]

          DCIFormat: 'Format1'

        PDCCHFormat: 2

         PDCCHPower: 0

            CSIMode: 'PUCCH 1-1'

            PMIMode: 'Wideband'

 

 

rc = 'R.4';

36.101 v14.4 - Table A.3.3.1-1: Fixed Reference Channel QPSK R=1/3

rmc =

 

  struct with fields:

 

                 RC: 'R.4'

              NDLRB: 6

           CellRefP: 1

            NCellID: 0

       CyclicPrefix: 'Normal'

                CFI: 3

        PCFICHPower: 0

                 Ng: 'Sixth'

      PHICHDuration: 'Normal'

              HISet: [112×3 double]

         PHICHPower: 0

             NFrame: 0

          NSubframe: 0

       TotSubframes: 10

          Windowing: 0

         DuplexMode: 'FDD'

              PDSCH: [1×1 struct]

    OCNGPDCCHEnable: 'Off'

     OCNGPDCCHPower: 0

    OCNGPDSCHEnable: 'Off'

     OCNGPDSCHPower: 0

          OCNGPDSCH: [1×1 struct]

 

 

pdsch =

 

  struct with fields:

 

           TxScheme: 'Port0'

         Modulation: {'QPSK'}

            NLayers: 1

                Rho: 0

               RNTI: 1

              RVSeq: [0 1 2 3]

                 RV: 0

     NHARQProcesses: 8

       NTurboDecIts: 5

             PRBSet: [6×1 double]

     TargetCodeRate: 0.3333

     ActualCodeRate: [0.3333 0.3158 0.3158 0.3158 0.3158 0 0.3158 0.3158 0.3158 0.3158]

         TrBlkSizes: [152 408 408 408 408 0 408 408 408 408]

    CodedTrBlkSizes: [528 1368 1368 1368 1368 0 1368 1368 1368 1368]

          DCIFormat: 'Format1'

        PDCCHFormat: 2

         PDCCHPower: 0

            CSIMode: 'PUCCH 1-1'

            PMIMode: 'Wideband'

 

 

rc = 'R.3';

36.101 v14.4 - Table A.3.3.1-2: Fixed Reference Channel 16QAM R=1/2  

rmc =

 

  struct with fields:

 

                 RC: 'R.3'

              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: 'FDD'

              PDSCH: [1×1 struct]

    OCNGPDCCHEnable: 'Off'

     OCNGPDCCHPower: 0

    OCNGPDSCHEnable: 'Off'

     OCNGPDSCHPower: 0

          OCNGPDSCH: [1×1 struct]

 

 

pdsch =

 

  struct with fields:

 

           TxScheme: 'Port0'

         Modulation: {'16QAM'}

            NLayers: 1

                Rho: 0

               RNTI: 1

              RVSeq: [0 1 2 3]

                 RV: 0

     NHARQProcesses: 8

       NTurboDecIts: 5

             PRBSet: [50×1 double]

     TargetCodeRate: 0.5000

     ActualCodeRate: [0.5037 0.5148 0.5148 0.5148 0.5148 0 0.5148 0.5148 0.5148 0.5148]

         TrBlkSizes: [12960 14112 14112 14112 14112 0 14112 14112 14112 14112]

    CodedTrBlkSizes: [25920 27600 27600 27600 27600 0 27600 27600 27600 27600]

          DCIFormat: 'Format1'

        PDCCHFormat: 2

         PDCCHPower: 0

            CSIMode: 'PUCCH 1-1'

            PMIMode: 'Wideband'

 

 

rc = 'R.5';

36.101 v14.4 - Table A.3.3.1-3: Fixed Reference Channel 64QAM R=3/4    

rmc =

 

  struct with fields:

 

                 RC: 'R.5'

              NDLRB: 15

           CellRefP: 1

            NCellID: 0

       CyclicPrefix: 'Normal'

                CFI: 3

        PCFICHPower: 0

                 Ng: 'Sixth'

      PHICHDuration: 'Normal'

              HISet: [112×3 double]

         PHICHPower: 0

             NFrame: 0

          NSubframe: 0

       TotSubframes: 10

          Windowing: 0

         DuplexMode: 'FDD'

              PDSCH: [1×1 struct]

    OCNGPDCCHEnable: 'Off'

     OCNGPDCCHPower: 0

    OCNGPDSCHEnable: 'Off'

     OCNGPDSCHPower: 0

          OCNGPDSCH: [1×1 struct]

 

 

pdsch =

 

  struct with fields:

 

           TxScheme: 'Port0'

         Modulation: {'64QAM'}

            NLayers: 1

                Rho: 0

               RNTI: 1

              RVSeq: [0 0 1 2]

                 RV: 0

     NHARQProcesses: 8

       NTurboDecIts: 5

             PRBSet: [15×1 double]

     TargetCodeRate: 0.7500

     ActualCodeRate: [0.7401 0.7563 0.7563 0.7563 0.7563 0 0.7563 0.7563 0.7563 0.7563]

         TrBlkSizes: [6456 8504 8504 8504 8504 0 8504 8504 8504 8504]

    CodedTrBlkSizes: [8820 11340 11340 11340 11340 0 11340 11340 11340 11340]

          DCIFormat: 'Format1'

        PDCCHFormat: 2

         PDCCHPower: 0

            CSIMode: 'PUCCH 1-1'

            PMIMode: 'Wideband'

 

 

rc = 'R.6';

36.101 v14.4 - Table A.3.3.1-3: Fixed Reference Channel 64QAM R=3/4    

rmc =

 

  struct with fields:

 

                 RC: 'R.6'

              NDLRB: 25

           CellRefP: 1

            NCellID: 0

       CyclicPrefix: 'Normal'

                CFI: 3

        PCFICHPower: 0

                 Ng: 'Sixth'

      PHICHDuration: 'Normal'

              HISet: [112×3 double]

         PHICHPower: 0

             NFrame: 0

          NSubframe: 0

       TotSubframes: 10

          Windowing: 0

         DuplexMode: 'FDD'

              PDSCH: [1×1 struct]

    OCNGPDCCHEnable: 'Off'

     OCNGPDCCHPower: 0

    OCNGPDSCHEnable: 'Off'

     OCNGPDSCHPower: 0

          OCNGPDSCH: [1×1 struct]

 

 

pdsch =

 

  struct with fields:

 

           TxScheme: 'Port0'

         Modulation: {'64QAM'}

            NLayers: 1

                Rho: 0

               RNTI: 1

              RVSeq: [0 0 1 2]

                 RV: 0

     NHARQProcesses: 8

       NTurboDecIts: 5

             PRBSet: [25×1 double]

     TargetCodeRate: 0.7500

     ActualCodeRate: [0.7736 0.7517 0.7517 0.7517 0.7517 0 0.7517 0.7517 0.7517 0.7517]

         TrBlkSizes: [12576 14112 14112 14112 14112 0 14112 14112 14112 14112]

    CodedTrBlkSizes: [16380 18900 18900 18900 18900 0 18900 18900 18900 18900]

          DCIFormat: 'Format1'

        PDCCHFormat: 2

         PDCCHPower: 0

            CSIMode: 'PUCCH 1-1'

            PMIMode: 'Wideband'

 

 

rc = 'R.7';

36.101 v14.4 - Table A.3.3.1-3: Fixed Reference Channel 64QAM R=3/4    

rmc =

 

  struct with fields:

 

                 RC: 'R.7'

              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: 'FDD'

              PDSCH: [1×1 struct]

    OCNGPDCCHEnable: 'Off'

     OCNGPDCCHPower: 0

    OCNGPDSCHEnable: 'Off'

     OCNGPDSCHPower: 0

          OCNGPDSCH: [1×1 struct]

 

 

pdsch =

 

  struct with fields:

 

           TxScheme: 'Port0'

         Modulation: {'64QAM'}

            NLayers: 1

                Rho: 0

               RNTI: 1

              RVSeq: [0 0 1 2]

                 RV: 0

     NHARQProcesses: 8

       NTurboDecIts: 5

             PRBSet: [50×1 double]

     TargetCodeRate: 0.7500

     ActualCodeRate: [0.7325 0.7420 0.7420 0.7420 0.7420 0 0.7420 0.7420 0.7420 0.7420]

         TrBlkSizes: [28336 30576 30576 30576 30576 0 30576 30576 30576 30576]

    CodedTrBlkSizes: [38880 41400 41400 41400 41400 0 41400 41400 41400 41400]

          DCIFormat: 'Format1'

        PDCCHFormat: 2

         PDCCHPower: 0

            CSIMode: 'PUCCH 1-1'

            PMIMode: 'Wideband'

 

 

 

rc = 'R.8';

36.101 v14.4 - Table A.3.3.1-3: Fixed Reference Channel 64QAM R=3/4    

rmc =

 

  struct with fields:

 

                 RC: 'R.8'

              NDLRB: 75

           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: 'FDD'

              PDSCH: [1×1 struct]

    OCNGPDCCHEnable: 'Off'

     OCNGPDCCHPower: 0

    OCNGPDSCHEnable: 'Off'

     OCNGPDSCHPower: 0

          OCNGPDSCH: [1×1 struct]

 

 

pdsch =

 

  struct with fields:

 

           TxScheme: 'Port0'

         Modulation: {'64QAM'}

            NLayers: 1

                Rho: 0

               RNTI: 1

              RVSeq: [0 0 1 2]

                 RV: 0

     NHARQProcesses: 8

       NTurboDecIts: 5

             PRBSet: [75×1 double]

     TargetCodeRate: 0.7500

     ActualCodeRate: [0.7648 0.7585 0.7585 0.7585 0.7585 0 0.7585 0.7585 0.7585 0.7585]

         TrBlkSizes: [45352 46888 46888 46888 46888 0 46888 46888 46888 46888]

    CodedTrBlkSizes: [59580 62100 62100 62100 62100 0 62100 62100 62100 62100]

          DCIFormat: 'Format1'

        PDCCHFormat: 2

         PDCCHPower: 0

            CSIMode: 'PUCCH 1-1'

            PMIMode: 'Wideband'

 

 

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.