Matlab Toolbox - 4G/LTE

 

 

 

 

PRACH

 

Description/explanation will come later !

 

< PRACH Configuration Setting and Retrieving PRACH Info >

 

    ue.DuplexMode = 'FDD';

    ue.NULRB = 6;

    prach_config.Format = 0;

    prach_config.HighSpeed = 0;

    prach_config.CyclicShiftIdx = 0;

    prach_config.FreqOffset = 0;

    prach_config.SeqIdx = 0;

    prach_config.PreambleIdx = [ 0 ];

     

    [prach_sym,prachInfo] = ltePRACH(ue,prach_config)

     

     

    DuplexMode='FDD';

    NULRB = 6;

    Format = 0;

    HighSpeed = 0;

    CyclicShiftIdx = 0;

    FreqOffset = 0;

    SeqIdx = 0;

    PreambleIdx = [0];

    DuplexMode='FDD';

    NULRB = 6;

    Format = 1;

    HighSpeed = 0;

    CyclicShiftIdx = 0;

    FreqOffset = 0;

    SeqIdx = 0;

    PreambleIdx = [0];

    DuplexMode='FDD';

    NULRB = 6;

    Format = 2;

    HighSpeed = 0;

    CyclicShiftIdx = 0;

    FreqOffset = 0;

    SeqIdx = 0;

    PreambleIdx = [0];

    DuplexMode='FDD';

    NULRB = 6;

    Format = 3;

    HighSpeed = 0;

    CyclicShiftIdx = 0;

    FreqOffset = 0;

    SeqIdx = 0;

    PreambleIdx = [0];

                      NZC:

        SubcarrierSpacing:

                      Phi:

                        K:

             TotSubframes:

                   Fields:

                   PRBSet:

                      NCS:

              CyclicShift:

                  RootSeq:

             SamplingRate:

               BaseOffset:

    839

    1250

    7

    12

    1

    [0 3168 24576 2976]

    [0;1;2;3;4;5]

    0

    0

    129

    1920000

    0

    839

    1250

    7

    12

    2

    [0 21024 24576 15840]

    [0;1;2;3;4;5]

    0

    0

    129

    1920000

    0

    839

    1250

    7

    12

    2

    [0 6240 49152 6048]

    [0;1;2;3;4;5]

    0

    0

    129

    1920000

    0

    839

    1250

    7

    12

    3

    [0 21024 49152 21984]

    [0;1;2;3;4;5]

    0

    0

    129

    1920000

    0

     

     

    DuplexMode='FDD';

    NULRB = 25;

    Format = 0;

    HighSpeed = 0;

    CyclicShiftIdx = 0;

    FreqOffset = 0;

    SeqIdx = 0;

    PreambleIdx = [0];

    DuplexMode='FDD';

    NULRB = 25;

    Format = 1;

    HighSpeed = 0;

    CyclicShiftIdx = 0;

    FreqOffset = 0;

    SeqIdx = 0;

    PreambleIdx = [0];

    DuplexMode='FDD';

    NULRB = 25;

    Format = 2;

    HighSpeed = 0;

    CyclicShiftIdx = 0;

    FreqOffset = 0;

    SeqIdx = 0;

    PreambleIdx = [0];

    DuplexMode='FDD';

    NULRB = 25;

    Format = 3;

    HighSpeed = 0;

    CyclicShiftIdx = 0;

    FreqOffset = 0;

    SeqIdx = 0;

    PreambleIdx = [0];

                      NZC:

        SubcarrierSpacing:

                      Phi:

                        K:

             TotSubframes:

                   Fields:

                   PRBSet:

                      NCS:

              CyclicShift:

                  RootSeq:

             SamplingRate:

               BaseOffset:

    839

    1250

    7

    12

    1

    [0 3168 24576 2976]

    [0;1;2;3;4;5]

    0

    0

    129

    7680000

    0

    839

    1250

    7

    12

    2

    [0 21024 24576 15840]

    [0;1;2;3;4;5]

    0

    0

    129

    7680000

    0

    839

    1250

    7

    12

    2

    [0 6240 49152 6048]

    [0;1;2;3;4;5]

    0

    0

    129

    7680000

    0

    839

    1250

    7

    12

    3

    [0 21024 49152 21984]

    [0;1;2;3;4;5]

    0

    0

    129

    7680000

    0

     

     

    DuplexMode='FDD';

    NULRB = 25;

    Format = 0;

    HighSpeed = 0;

    CyclicShiftIdx = 0;

    FreqOffset = 1;

    SeqIdx = 0;

    PreambleIdx = [0];

    DuplexMode='FDD';

    NULRB = 25;

    Format = 1;

    HighSpeed = 0;

    CyclicShiftIdx = 0;

    FreqOffset = 3;

    SeqIdx = 0;

    PreambleIdx = [0];

    DuplexMode='FDD';

    NULRB = 25;

    Format = 2;

    HighSpeed = 0;

    CyclicShiftIdx = 0;

    FreqOffset = 10;

    SeqIdx = 0;

    PreambleIdx = [0];

    DuplexMode='FDD';

    NULRB = 25;

    Format = 3;

    HighSpeed = 0;

    CyclicShiftIdx = 0;

    FreqOffset = 21;

    SeqIdx = 0;

    PreambleIdx = [0];

                      NZC:

        SubcarrierSpacing:

                      Phi:

                        K:

             TotSubframes:

                   Fields:

                   PRBSet:

                      NCS:

              CyclicShift:

                  RootSeq:

             SamplingRate:

               BaseOffset:

    839

    1250

    7

    12

    1

    [0 3168 24576 2976]

    [1;2;3;4;5;6]

    0

    0

    129

    7680000

    0

    839

    1250

    7

    12

    1

    [0 3168 24576 2976]

    [3;4;5;6;7;8]

    0

    0

    129

    7680000

    0

    839

    1250

    7

    12

    1

    [0 3168 24576 2976]

    [10;11;12;13;14;15]

    0

    0

    129

    7680000

    0

    Error : Because FreqOffset is set too large and not enough space for 6 RB for PRACH

     

     

    DuplexMode='FDD';

    NULRB = 25;

    Format = 0;

    HighSpeed = 0;

    CyclicShiftIdx = 0;

    FreqOffset = 0;

    SeqIdx = 0;

    PreambleIdx = [0];

    DuplexMode='FDD';

    NULRB = 25;

    Format = 1;

    HighSpeed = 0;

    CyclicShiftIdx = 0;

    FreqOffset = 0;

    SeqIdx = 0;

    PreambleIdx = [1];

    DuplexMode='FDD';

    NULRB = 25;

    Format = 2;

    HighSpeed = 0;

    CyclicShiftIdx = 0;

    FreqOffset = 0;

    SeqIdx = 0;

    PreambleIdx = [24];

    DuplexMode='FDD';

    NULRB = 25;

    Format = 3;

    HighSpeed = 0;

    CyclicShiftIdx = 0;

    FreqOffset = 0;

    SeqIdx = 0;

    PreambleIdx = [52];

                      NZC:

        SubcarrierSpacing:

                      Phi:

                        K:

             TotSubframes:

                   Fields:

                   PRBSet:

                      NCS:

              CyclicShift:

                  RootSeq:

             SamplingRate:

               BaseOffset:

    839

    1250

    7

    12

    1

    [0 3168 24576 2976]

    [0;1;2;3;4;5]

    0

    0

    129

    7680000

    0

    839

    1250

    7

    12

    1

    [0 3168 24576 2976]

    [0;1;2;3;4;5]

    0

    0

    710

    7680000

    0

    839

    1250

    7

    12

    1

    [0 3168 24576 2976]

    [0;1;2;3;4;5]

    0

    0

    56

    7680000

    0

    839

    1250

    7

    12

    1

    [0 3168 24576 2976]

    [0;1;2;3;4;5]

    0

    0

    24

    7680000

    0

 

 

< PRACH Symbol >

 

    ue.DuplexMode = 'FDD';

    ue.NULRB = 6;

    prach_config.Format = 0;

    prach_config.HighSpeed = 0;

    prach_config.CyclicShiftIdx = 0;

    prach_config.FreqOffset = 0;

    prach_config.SeqIdx = 0;

    prach_config.PreambleIdx = [ 0 ];

     

    [prach_sym,prachInfo] = ltePRACH(ue,prach_config);

    prach_arrayIndex = 0:length(prach_sym)-1;

    prach_clip = 1:62;

     

    subplot(2,3,1);

    plot(real(prach_sym),imag(prach_sym),'ro','MarkerFaceColor',[1 0 0]);axis([-0.2 0.2 -0.2 0.2]);

    title('Constellation');

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

    plot(prach_arrayIndex,real(prach_sym),'ro-',prach_arrayIndex,imag(prach_sym),'bo-');ylim([-0.2 0.2]);

    xlim([0 6000]);

    title('PRACH index vs PRACH value. Red -> real, Blue -> Imaginary');

     

    subplot(2,3,4);

    plot(real(prach_sym(prach_clip)),imag(prach_sym(prach_clip)),'ro','MarkerFaceColor',[1 0 0]);

    axis([-0.2 0.2 -0.2 0.2]);

    title('Constellation');

    subplot(2,3,[5 6]);

    plot(prach_arrayIndex(prach_clip),real(prach_sym(prach_clip)),'ro-',

          prach_arrayIndex(prach_clip),imag(prach_sym(prach_clip)),'bo-');

    xlim([0 max(prach_arrayIndex(prach_clip))]);ylim([-0.2 0.2]);

    title('PRACH index vs PRACH value. Red -> real, Blue -> Imaginary');

     

     

      DuplexMode='FDD';

      NULRB = 6;

      Format = 0;

      HighSpeed = 0;

      CyclicShiftIdx = 0;

      FreqOffset = 0;

      SeqIdx = 0;

      PreambleIdx = [0];

     

     

      DuplexMode='FDD';

      NULRB = 6;

      Format = 1;

      HighSpeed = 0;

      CyclicShiftIdx = 0;

      FreqOffset = 0;

      SeqIdx = 0;

      PreambleIdx = [0];

     

     

      DuplexMode='FDD';

      NULRB = 6;

      Format = 2;

      HighSpeed = 0;

      CyclicShiftIdx = 0;

      FreqOffset = 0;

      SeqIdx = 0;

      PreambleIdx = [0];

     

     

      DuplexMode='FDD';

      NULRB = 6;

      Format = 3;

      HighSpeed = 0;

      CyclicShiftIdx = 0;

      FreqOffset = 0;

      SeqIdx = 0;

      PreambleIdx = [0];

     

     

      DuplexMode='FDD';

      NULRB = 6;

      Format = 0;

      HighSpeed = 0;

      CyclicShiftIdx = 0;

      FreqOffset = 0;

      SeqIdx = 0;

      PreambleIdx = [1];

     

 

    ue.DuplexMode = 'FDD';

    ue.NULRB = 6;

     

    prach_config1.Format = 0;

    prach_config1.HighSpeed = 0;

    prach_config1.CyclicShiftIdx = 0;

    prach_config1.FreqOffset = 0;

    prach_config1.SeqIdx = 0;

    prach_config1.PreambleIdx = [ 22 ];

     

    prach_config2.Format = 0;

    prach_config2.HighSpeed = 0;

    prach_config2.CyclicShiftIdx = 0;

    prach_config2.FreqOffset = 0;

    prach_config2.SeqIdx = 0;

    prach_config2.PreambleIdx = [ 52 ];

     

    prach_config3.Format = 0;

    prach_config3.HighSpeed = 0;

    prach_config3.CyclicShiftIdx = 0;

    prach_config3.FreqOffset = 0;

    prach_config3.SeqIdx = 0;

    prach_config3.PreambleIdx = [ 24 ];

     

    [prach_sym1,prachInfo1] = ltePRACH(ue,prach_config1);

    [prach_sym2,prachInfo2] = ltePRACH(ue,prach_config2);

    [prach_sym3,prachInfo3] = ltePRACH(ue,prach_config3);

    prach_arrayIndex = 0:length(prach_sym1)-1;

    prach_clip = 1:100;

     

    subplot(3,3,1);

    plot(real(prach_sym1(prach_clip)),imag(prach_sym1(prach_clip)),'ro','MarkerFaceColor',[1 0 0]);axis([-0.2 0.2 -0.2 0.2]);

    title('Constellation');

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

    plot(prach_arrayIndex(prach_clip),real(prach_sym1(prach_clip)),'ro-',prach_arrayIndex(prach_clip),imag(prach_sym1(prach_clip)),'bo-');ylim([-0.2 0.2]);

    xlim([0 max(prach_clip)]);

    title('PRACH index vs PRACH value. Red -> real, Blue -> Imaginary');

     

    subplot(3,3,4);

    plot(real(prach_sym2(prach_clip)),imag(prach_sym2(prach_clip)),'ro','MarkerFaceColor',[1 0 0]);axis([-0.2 0.2 -0.2 0.2]);

    title('Constellation');

    subplot(3,3,[5 6]);

    plot(prach_arrayIndex(prach_clip),real(prach_sym2(prach_clip)),'ro-',prach_arrayIndex(prach_clip),imag(prach_sym2(prach_clip)),'bo-');ylim([-0.2 0.2]);

    xlim([0 max(prach_clip)]);

    title('PRACH index vs PRACH value. Red -> real, Blue -> Imaginary');

     

    subplot(3,3,7);

    plot(real(prach_sym3(prach_clip)),imag(prach_sym3(prach_clip)),'ro','MarkerFaceColor',[1 0 0]);axis([-0.2 0.2 -0.2 0.2]);

    title('Constellation');

    subplot(3,3,[8 9]);

    plot(prach_arrayIndex(prach_clip),real(prach_sym3(prach_clip)),'ro-',prach_arrayIndex(prach_clip),imag(prach_sym3(prach_clip)),'bo-');ylim([-0.2 0.2]);

    xlim([0 max(prach_clip)]);

    title('PRACH index vs PRACH value. Red -> real, Blue -> Imaginary');

     

     

      PreambleIdx = [22];

      PreambleIdx = [52];

      PreambleIdx = [24];

    Physical Rool Sequence = 1

    Physical Rool Sequence = 24

    Physical Rool Sequence = 56

     

      PreambleIdx = [0];

      PreambleIdx = [1];

      PreambleIdx = [2];

    Physical Rool Sequence = 129

    Physical Rool Sequence = 710

    Physical Rool Sequence = 140

 

 

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.