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.





