Interleaving update
This commit is contained in:
@@ -183,7 +183,7 @@ uint8_t nr_pbch_payload_interleaving_pattern[32] = {16, 23, 18, 17, 8, 30, 10, 6
|
|||||||
uint8_t nr_pbch_payload_interleaver(uint8_t i) {
|
uint8_t nr_pbch_payload_interleaver(uint8_t i) {
|
||||||
uint8_t j_sfn=0, j_hrf=10, j_ssb=11, j_other=14;
|
uint8_t j_sfn=0, j_hrf=10, j_ssb=11, j_other=14;
|
||||||
|
|
||||||
if (24<=i && i<=27) //Sfn bits
|
if (18<=i && i<=27) //Sfn bits
|
||||||
return nr_pbch_payload_interleaving_pattern[j_sfn + i -24];
|
return nr_pbch_payload_interleaving_pattern[j_sfn + i -24];
|
||||||
else if (i==28) // Hrf bit
|
else if (i==28) // Hrf bit
|
||||||
return nr_pbch_payload_interleaving_pattern[j_hrf];
|
return nr_pbch_payload_interleaving_pattern[j_hrf];
|
||||||
@@ -206,7 +206,7 @@ int nr_generate_pbch(NR_gNB_PBCH *pbch,
|
|||||||
NR_DL_FRAME_PARMS *frame_parms)
|
NR_DL_FRAME_PARMS *frame_parms)
|
||||||
{
|
{
|
||||||
|
|
||||||
int k,l,m;
|
int j,k,l,m;
|
||||||
int16_t a;
|
int16_t a;
|
||||||
int16_t mod_pbch_e[NR_POLAR_PBCH_E];
|
int16_t mod_pbch_e[NR_POLAR_PBCH_E];
|
||||||
uint8_t idx=0;
|
uint8_t idx=0;
|
||||||
@@ -225,7 +225,7 @@ int nr_generate_pbch(NR_gNB_PBCH *pbch,
|
|||||||
#ifdef DEBUG_PBCH_ENCODING
|
#ifdef DEBUG_PBCH_ENCODING
|
||||||
printf("Byte endian fix:\n");
|
printf("Byte endian fix:\n");
|
||||||
for (int i=0; i<4; i++)
|
for (int i=0; i<4; i++)
|
||||||
printf("pbch_a[%d]: 0x%04x\n", i, pbch->pbch_a[i]);
|
printf("pbch_a[%d]: 0x%02x\n", i, pbch->pbch_a[i]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Extra byte generation
|
// Extra byte generation
|
||||||
@@ -242,18 +242,24 @@ int nr_generate_pbch(NR_gNB_PBCH *pbch,
|
|||||||
#ifdef DEBUG_PBCH_ENCODING
|
#ifdef DEBUG_PBCH_ENCODING
|
||||||
printf("Extra byte:\n");
|
printf("Extra byte:\n");
|
||||||
for (int i=0; i<4; i++)
|
for (int i=0; i<4; i++)
|
||||||
printf("pbch_a[%d]: 0x%04x\n", i, pbch->pbch_a[i]);
|
printf("pbch_a[%d]: 0x%02x\n", i, pbch->pbch_a[i]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Payload interleaving
|
// Payload interleaving
|
||||||
uint32_t* input = (uint32_t*)pbch->pbch_a;
|
uint8_t *in = &pbch->pbch_a[3];
|
||||||
uint32_t* output = (uint32_t*)pbch->pbch_a_interleaved;
|
uint8_t *out = &pbch->pbch_a_interleaved[3];
|
||||||
for (int i=0; i<32; i++)
|
for (int i=0; i<32; i++) {
|
||||||
(*output) |= (((*input)>>i)&1)<<(nr_pbch_payload_interleaver(i));
|
j = i&7;
|
||||||
|
if (!j) {
|
||||||
|
in--;
|
||||||
|
out--;
|
||||||
|
}
|
||||||
|
(*out) |= (((*in)>>j)&1)<<((nr_pbch_payload_interleaver(i))&7);
|
||||||
|
}
|
||||||
#ifdef DEBUG_PBCH_ENCODING
|
#ifdef DEBUG_PBCH_ENCODING
|
||||||
printf("Interleaving:\n");
|
printf("Interleaving:\n");
|
||||||
for (int i=0; i<4; i++)
|
for (int i=0; i<4; i++)
|
||||||
printf("pbch_a_interleaved[%d]: 0x%04x\n", i, pbch->pbch_a_interleaved[i]);
|
printf("pbch_a_interleaved[%d]: 0x%02x\n", i, pbch->pbch_a_interleaved[i]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Scrambling
|
// Scrambling
|
||||||
@@ -263,7 +269,7 @@ int nr_generate_pbch(NR_gNB_PBCH *pbch,
|
|||||||
#ifdef DEBUG_PBCH_ENCODING
|
#ifdef DEBUG_PBCH_ENCODING
|
||||||
printf("Payload scrambling:\n");
|
printf("Payload scrambling:\n");
|
||||||
for (int i=0; i<4; i++)
|
for (int i=0; i<4; i++)
|
||||||
printf("pbch_a_prime[%d]: 0x%04x\n", i, pbch->pbch_a_prime[i]);
|
printf("pbch_a_prime[%d]: 0x%02x\n", i, pbch->pbch_a_prime[i]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@@ -272,7 +278,7 @@ int nr_generate_pbch(NR_gNB_PBCH *pbch,
|
|||||||
#ifdef DEBUG_PBCH_ENCODING
|
#ifdef DEBUG_PBCH_ENCODING
|
||||||
printf("Channel coding:\n");
|
printf("Channel coding:\n");
|
||||||
for (int i=0; i<NR_POLAR_PBCH_E>>3; i++)
|
for (int i=0; i<NR_POLAR_PBCH_E>>3; i++)
|
||||||
printf("pbch_e[%d]: 0x%04x\t", i, pbch->pbch_e[i]);
|
printf("pbch_e[%d]: 0x%02x\t", i, pbch->pbch_e[i]);
|
||||||
printf("\n");
|
printf("\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -283,7 +289,7 @@ int nr_generate_pbch(NR_gNB_PBCH *pbch,
|
|||||||
#ifdef DEBUG_PBCH_ENCODING
|
#ifdef DEBUG_PBCH_ENCODING
|
||||||
printf("Scrambling:\n");
|
printf("Scrambling:\n");
|
||||||
for (int i=0; i<NR_POLAR_PBCH_E>>3; i++)
|
for (int i=0; i<NR_POLAR_PBCH_E>>3; i++)
|
||||||
printf("pbch_e[%d]: 0x%04x\t", i, pbch->pbch_e[i]);
|
printf("pbch_e[%d]: 0x%02x\t", i, pbch->pbch_e[i]);
|
||||||
printf("\n");
|
printf("\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user