rename and take out gold generic function from lte files to specific file to avoid cross-compilation

This commit is contained in:
francescomani
2026-03-31 16:45:25 +02:00
parent a71cd36248
commit f94dad6893
24 changed files with 99 additions and 106 deletions
-4
View File
@@ -41,10 +41,6 @@ int lte_dl_cell_spec_NB_IoT(PHY_VARS_eNB_NB_IoT *phy_vars_eNB,
unsigned char p, unsigned char p,
unsigned short RB_IoT_ID); unsigned short RB_IoT_ID);
unsigned int lte_gold_generic_NB_IoT(unsigned int *x1,
unsigned int *x2,
unsigned char reset);
void generate_ul_ref_sigs_rx_NB_IoT(void); void generate_ul_ref_sigs_rx_NB_IoT(void);
+1 -1
View File
@@ -10,7 +10,7 @@
#define __LTE_REFSIG_DEFS__H__ #define __LTE_REFSIG_DEFS__H__
#include "PHY/defs_eNB.h" #include "PHY/defs_eNB.h"
#include "PHY/defs_UE.h" #include "PHY/defs_UE.h"
#include "PHY/gold.h"
/** @ingroup _PHY_REF_SIG /** @ingroup _PHY_REF_SIG
* @{ * @{
*/ */
+2 -2
View File
@@ -184,12 +184,12 @@ void pdcch_scrambling(LTE_DL_FRAME_PARMS *frame_parms,
uint32_t x1 = 0, x2 = 0, s = 0; uint32_t x1 = 0, x2 = 0, s = 0;
//LOG_D(PHY, "%s(fp, subframe:%d, e, length:%d)\n", __FUNCTION__, subframe, length); //LOG_D(PHY, "%s(fp, subframe:%d, e, length:%d)\n", __FUNCTION__, subframe, length);
reset = 1; reset = 1;
// x1 is set in lte_gold_generic // x1 is set in gold_generic
x2 = (subframe<<9) + frame_parms->Nid_cell; //this is c_init in 36.211 Sec 6.8.2 x2 = (subframe<<9) + frame_parms->Nid_cell; //this is c_init in 36.211 Sec 6.8.2
for (i=0; i<length; i++) { for (i=0; i<length; i++) {
if ((i&0x1f)==0) { if ((i&0x1f)==0) {
s = lte_gold_generic(&x1, &x2, reset); s = gold_generic(&x1, &x2, reset);
//printf("lte_gold[%d]=%x\n",i,s); //printf("lte_gold[%d]=%x\n",i,s);
reset = 0; reset = 0;
} }
@@ -70,7 +70,7 @@ void dlsch_scrambling(LTE_DL_FRAME_PARMS *frame_parms,
j = (i - i0)/Nacc; j = (i - i0)/Nacc;
// reset = 1; // reset = 1;
// x1 is set in lte_gold_generic // x1 is set in gold_generic
if (mbsfn_flag == 0) { if (mbsfn_flag == 0) {
#ifdef PHY_TX_THREAD #ifdef PHY_TX_THREAD
@@ -89,7 +89,7 @@ void dlsch_scrambling(LTE_DL_FRAME_PARMS *frame_parms,
x2 = ((Ns>>1)<<9) + frame_parms->Nid_cell_mbsfn; //this is c_init in 36.211 Sec 6.3.1 for PMCH x2 = ((Ns>>1)<<9) + frame_parms->Nid_cell_mbsfn; //this is c_init in 36.211 Sec 6.3.1 for PMCH
} }
s = lte_gold_generic(&x1, &x2, 1); s = gold_generic(&x1, &x2, 1);
for (n=0; n<(1+(G>>5)); n++) { for (n=0; n<(1+(G>>5)); n++) {
#ifdef DEBUG_SCRAMBLING #ifdef DEBUG_SCRAMBLING
@@ -132,7 +132,7 @@ void dlsch_scrambling(LTE_DL_FRAME_PARMS *frame_parms,
// This is not faster for some unknown reason // This is not faster for some unknown reason
// ((simde__m128i *)e)[0] = simde_mm_xor_si128(((simde__m128i *)e)[0],((simde__m128i *)scrambling_lut)[s&65535]); // ((simde__m128i *)e)[0] = simde_mm_xor_si128(((simde__m128i *)e)[0],((simde__m128i *)scrambling_lut)[s&65535]);
// ((simde__m128i *)e)[1] = simde_mm_xor_si128(((simde__m128i *)e)[1],((simde__m128i *)scrambling_lut)[s>>16]); // ((simde__m128i *)e)[1] = simde_mm_xor_si128(((simde__m128i *)e)[1],((simde__m128i *)scrambling_lut)[s>>16]);
s = lte_gold_generic(&x1, &x2, 0); s = gold_generic(&x1, &x2, 0);
e += 32; e += 32;
} }
@@ -163,7 +163,7 @@ void dlsch_unscrambling(LTE_DL_FRAME_PARMS *frame_parms,
uint32_t x1, x2, s=0; uint32_t x1, x2, s=0;
// reset = 1; // reset = 1;
// x1 is set in first call to lte_gold_generic // x1 is set in first call to gold_generic
if (mbsfn_flag == 0) if (mbsfn_flag == 0)
x2 = (dlsch->rnti<<14) + (q<<13) + ((Ns>>1)<<9) + frame_parms->Nid_cell; //this is c_init in 36.211 Sec 6.3.1 x2 = (dlsch->rnti<<14) + (q<<13) + ((Ns>>1)<<9) + frame_parms->Nid_cell; //this is c_init in 36.211 Sec 6.3.1
@@ -173,7 +173,7 @@ void dlsch_unscrambling(LTE_DL_FRAME_PARMS *frame_parms,
#ifdef DEBUG_SCRAMBLING #ifdef DEBUG_SCRAMBLING
printf("unscrambling: rnti %x, q %d, Ns %d, Nid_cell %d G %d, x2 %x\n",dlsch->rnti,q,Ns,frame_parms->Nid_cell,G,x2); printf("unscrambling: rnti %x, q %d, Ns %d, Nid_cell %d G %d, x2 %x\n",dlsch->rnti,q,Ns,frame_parms->Nid_cell,G,x2);
#endif #endif
s = lte_gold_generic(&x1, &x2, 1); s = gold_generic(&x1, &x2, 1);
for (i=0; i<(1+(G>>5)); i++) { for (i=0; i<(1+(G>>5)); i++) {
for (j=0; j<32; j++,k++) { for (j=0; j<32; j++,k++) {
@@ -186,7 +186,7 @@ void dlsch_unscrambling(LTE_DL_FRAME_PARMS *frame_parms,
#endif #endif
} }
s = lte_gold_generic(&x1, &x2, 0); s = gold_generic(&x1, &x2, 0);
} }
} }
+4 -4
View File
@@ -38,7 +38,7 @@ void mpdcch_scrambling(LTE_DL_FRAME_PARMS *frame_parms, mDCI_ALLOC_t *mdci, uint
uint16_t i0 = mdci->i0; uint16_t i0 = mdci->i0;
// Note: we could actually not do anything if i-i0 < Nacc, save it for later // Note: we could actually not do anything if i-i0 < Nacc, save it for later
reset = 1; reset = 1;
// x1 is set in lte_gold_generic // x1 is set in gold_generic
if ((mdci->rnti == 0xFFFE) || (mdci->ce_mode == 2)) // CEModeB Note: also for mdci->rnti==SC_RNTI if ((mdci->rnti == 0xFFFE) || (mdci->ce_mode == 2)) // CEModeB Note: also for mdci->rnti==SC_RNTI
Nacc = frame_parms->frame_type == FDD ? 4 : 10; Nacc = frame_parms->frame_type == FDD ? 4 : 10;
@@ -59,7 +59,7 @@ void mpdcch_scrambling(LTE_DL_FRAME_PARMS *frame_parms, mDCI_ALLOC_t *mdci, uint
for (n = 0; n < length; n++) { for (n = 0; n < length; n++) {
if ((n & 0x1f) == 0) { if ((n & 0x1f) == 0) {
s = lte_gold_generic(&x1, &x2, reset); s = gold_generic(&x1, &x2, reset);
//printf("lte_gold[%d]=%x\n",i,s); //printf("lte_gold[%d]=%x\n",i,s);
reset = 0; reset = 0;
} }
@@ -354,7 +354,7 @@ void generate_mdci_top(PHY_VARS_eNB *eNB, int frame, int subframe, int16_t amp,
// pilot scrambling initiatlization (note: this is for a single repetition) // pilot scrambling initiatlization (note: this is for a single repetition)
// x1 is set in lte_gold_generic // x1 is set in gold_generic
// rule for BL/CE UEs from Section 6.10.3A.1 in 36.211 // rule for BL/CE UEs from Section 6.10.3A.1 in 36.211
@@ -394,7 +394,7 @@ void generate_mdci_top(PHY_VARS_eNB *eNB, int frame, int subframe, int16_t amp,
for (int mprime=0; mprime<3; mprime++,ii+=2) { for (int mprime=0; mprime<3; mprime++,ii+=2) {
if ((ii & 0x1f) == 0) { if ((ii & 0x1f) == 0) {
s = lte_gold_generic(&x1, &x2, reset); s = gold_generic(&x1, &x2, reset);
reset = 0; reset = 0;
} }
+3 -3
View File
@@ -34,7 +34,7 @@ void generate_grouphop(LTE_DL_FRAME_PARMS *frame_parms)
} }
else { else {
if ((ns&3) == 0) { if ((ns&3) == 0) {
s = lte_gold_generic(&x1,&x2,reset); s = gold_generic(&x1,&x2,reset);
reset = 0; reset = 0;
} }
@@ -62,7 +62,7 @@ void generate_seqhop(LTE_DL_FRAME_PARMS *frame_parms)
x2 = (32*(frame_parms->Nid_cell/30) + fss_pusch)%30; x2 = (32*(frame_parms->Nid_cell/30) + fss_pusch)%30;
s = lte_gold_generic(&x1,&x2,reset); s = gold_generic(&x1,&x2,reset);
#ifdef DEBUG_GROUPHOP #ifdef DEBUG_GROUPHOP
printf("[PHY] SeqHop:"); printf("[PHY] SeqHop:");
#endif #endif
@@ -105,7 +105,7 @@ void generate_nPRS(LTE_DL_FRAME_PARMS *frame_parms)
for (n=0; n<(20*Nsymb_UL); n++) { //loop over total number of bytes to generate for (n=0; n<(20*Nsymb_UL); n++) { //loop over total number of bytes to generate
if ((n&3) == 0) { if ((n&3) == 0) {
s = lte_gold_generic(&x1,&x2,reset); s = gold_generic(&x1,&x2,reset);
reset = 0; reset = 0;
// printf("n %d : s (%d,%d,%d,%d)\n",n,((uint8_t*)&s)[0],((uint8_t*)&s)[1],((uint8_t*)&s)[2],((uint8_t*)&s)[3]); // printf("n %d : s (%d,%d,%d,%d)\n",n,((uint8_t*)&s)[0],((uint8_t*)&s)[1],((uint8_t*)&s)[2],((uint8_t*)&s)[3]);
} }
+4 -4
View File
@@ -125,13 +125,13 @@ void pbch_scrambling_fembms(LTE_DL_FRAME_PARMS *frame_parms,
uint32_t x1 = 0, x2 = 0, s = 0; uint32_t x1 = 0, x2 = 0, s = 0;
reset = 1; reset = 1;
// x1 is set in lte_gold_generic // x1 is set in gold_generic
x2 = frame_parms->Nid_cell + (1<<9); //this is c_init for FeMBMS in 36.211 Sec 6.6.1 x2 = frame_parms->Nid_cell + (1<<9); //this is c_init for FeMBMS in 36.211 Sec 6.6.1
// msg("pbch_scrambling: Nid_cell = %d\n",x2); // msg("pbch_scrambling: Nid_cell = %d\n",x2);
for (i=0; i<length; i++) { for (i=0; i<length; i++) {
if ((i&0x1f)==0) { if ((i&0x1f)==0) {
s = lte_gold_generic(&x1, &x2, reset); s = gold_generic(&x1, &x2, reset);
// printf("lte_gold[%d]=%x\n",i,s); // printf("lte_gold[%d]=%x\n",i,s);
reset = 0; reset = 0;
} }
@@ -404,13 +404,13 @@ void pbch_scrambling(LTE_DL_FRAME_PARMS *frame_parms,
uint32_t x1 = 0, x2 = 0, s = 0; uint32_t x1 = 0, x2 = 0, s = 0;
reset = 1; reset = 1;
// x1 is set in lte_gold_generic // x1 is set in gold_generic
x2 = frame_parms->Nid_cell; //this is c_init in 36.211 Sec 6.6.1 x2 = frame_parms->Nid_cell; //this is c_init in 36.211 Sec 6.6.1
// msg("pbch_scrambling: Nid_cell = %d\n",x2); // msg("pbch_scrambling: Nid_cell = %d\n",x2);
for (i=0; i<length; i++) { for (i=0; i<length; i++) {
if ((i&0x1f)==0) { if ((i&0x1f)==0) {
s = lte_gold_generic(&x1, &x2, reset); s = gold_generic(&x1, &x2, reset);
// printf("lte_gold[%d]=%x\n",i,s); // printf("lte_gold[%d]=%x\n",i,s);
reset = 0; reset = 0;
} }
+2 -2
View File
@@ -18,12 +18,12 @@ void pcfich_scrambling(LTE_DL_FRAME_PARMS *frame_parms, uint8_t subframe, const
uint32_t x1=0, x2, s=0; uint32_t x1=0, x2, s=0;
reset = 1; reset = 1;
// x1 is set in lte_gold_generic // x1 is set in gold_generic
x2 = ((((2*frame_parms->Nid_cell)+1)*(1+subframe))<<9) + frame_parms->Nid_cell; //this is c_init in 36.211 Sec 6.7.1 x2 = ((((2*frame_parms->Nid_cell)+1)*(1+subframe))<<9) + frame_parms->Nid_cell; //this is c_init in 36.211 Sec 6.7.1
for (i=0; i<32; i++) { for (i=0; i<32; i++) {
if ((i&0x1f)==0) { if ((i&0x1f)==0) {
s = lte_gold_generic(&x1, &x2, reset); s = gold_generic(&x1, &x2, reset);
//printf("lte_gold[%d]=%x\n",i,s); //printf("lte_gold[%d]=%x\n",i,s);
reset = 0; reset = 0;
} }
+2 -2
View File
@@ -60,10 +60,10 @@ void generate_phich(LTE_DL_FRAME_PARMS *frame_parms,
// c = (1-(2*HI))*SSS_AMP; // c = (1-(2*HI))*SSS_AMP;
// x1 is set in lte_gold_generic // x1 is set in gold_generic
x2 = (((subframe+1)*((frame_parms->Nid_cell<<1)+1))<<9) + frame_parms->Nid_cell; x2 = (((subframe+1)*((frame_parms->Nid_cell<<1)+1))<<9) + frame_parms->Nid_cell;
s = lte_gold_generic(&x1, &x2, reset); s = gold_generic(&x1, &x2, reset);
// compute scrambling sequence // compute scrambling sequence
for (i=0; i<12; i++) { for (i=0; i<12; i++) {
+2 -2
View File
@@ -645,8 +645,8 @@ uint16_t pucchfmt3_Descramble( int16_t IFFTOutData_Fmt3[2][12][2],
uint32_t x1; uint32_t x1;
uint32_t s,s0,s1; uint32_t s,s0,s1;
cinit = (subframe + 1) * ((2 * Nid_cell + 1)<<16) + rnti; cinit = (subframe + 1) * ((2 * Nid_cell + 1)<<16) + rnti;
s0 = lte_gold_generic(&x1,&cinit,1); s0 = gold_generic(&x1,&cinit,1);
s1 = lte_gold_generic(&x1,&cinit,0); s1 = gold_generic(&x1,&cinit,0);
i=0; i=0;
for (m=0; m<D_NSLT1SF; m++) { for (m=0; m<D_NSLT1SF; m++) {
+1 -1
View File
@@ -30,7 +30,7 @@ void init_ncs_cell(LTE_DL_FRAME_PARMS *frame_parms,uint8_t ncs_cell[20][7])
for (i=0; i<8; i++) { for (i=0; i<8; i++) {
if ((j%32) == 0) { if ((j%32) == 0) {
s = lte_gold_generic(&x1,&x2,reset); s = gold_generic(&x1,&x2,reset);
// printf("s %x\n",s); // printf("s %x\n",s);
reset=0; reset=0;
} }
@@ -607,53 +607,5 @@ int find_dlsch(uint16_t rnti, PHY_VARS_eNB *eNB,find_type_t type);
int find_ulsch(uint16_t rnti, PHY_VARS_eNB *eNB,find_type_t type); int find_ulsch(uint16_t rnti, PHY_VARS_eNB *eNB,find_type_t type);
int find_uci(uint16_t rnti, int frame, int subframe, PHY_VARS_eNB *eNB,find_type_t type); int find_uci(uint16_t rnti, int frame, int subframe, PHY_VARS_eNB *eNB,find_type_t type);
static inline uint32_t lte_gold_generic(uint32_t *x1, uint32_t *x2, uint8_t reset)
{
int32_t n;
// 3GPP 3x.211
// Nc = 1600
// c(n) = [x1(n+Nc) + x2(n+Nc)]mod2
// x1(n+31) = [x1(n+3) + x1(n)]mod2
// x2(n+31) = [x2(n+3) + x2(n+2) + x2(n+1) + x2(n)]mod2
if (reset)
{
// Init value for x1: x1(0) = 1, x1(n) = 0, n=1,2,...,30
// x1(31) = [x1(3) + x1(0)]mod2 = 1
*x1 = 1 + (1U<<31);
// Init value for x2: cinit = sum_{i=0}^30 x2*2^i
// x2(31) = [x2(3) + x2(2) + x2(1) + x2(0)]mod2
// = (*x2>>3) ^ (*x2>>2) + (*x2>>1) + *x2
*x2 = *x2 ^ ((*x2 ^ (*x2>>1) ^ (*x2>>2) ^ (*x2>>3))<<31);
// x1 and x2 contain bits n = 0,1,...,31
// Nc = 1600 bits are skipped at the beginning
// i.e., 1600 / 32 = 50 32bit words
for (n = 1; n < 50; n++)
{
// Compute x1(0),...,x1(27)
*x1 = (*x1>>1) ^ (*x1>>4);
// Compute x1(28),..,x1(31) and xor
*x1 = *x1 ^ (*x1<<31) ^ (*x1<<28);
// Compute x2(0),...,x2(27)
*x2 = (*x2>>1) ^ (*x2>>2) ^ (*x2>>3) ^ (*x2>>4);
// Compute x2(28),..,x2(31) and xor
*x2 = *x2 ^ (*x2<<31) ^ (*x2<<30) ^ (*x2<<29) ^ (*x2<<28);
}
}
*x1 = (*x1>>1) ^ (*x1>>4);
*x1 = *x1 ^ (*x1<<31) ^ (*x1<<28);
*x2 = (*x2>>1) ^ (*x2>>2) ^ (*x2>>3) ^ (*x2>>4);
*x2 = *x2 ^ (*x2<<31) ^ (*x2<<30) ^ (*x2<<29) ^ (*x2<<28);
// c(n) = [x1(n+Nc) + x2(n+Nc)]mod2
return(*x1^*x2);
}
/**@}*/ /**@}*/
#endif #endif
+1 -1
View File
@@ -405,7 +405,7 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *eNB,
else else
harq_pid = subframe2harq_pid(frame_parms,proc->frame_rx,subframe); harq_pid = subframe2harq_pid(frame_parms,proc->frame_rx,subframe);
// x1 is set in lte_gold_generic // x1 is set in gold_generic
uint32_t x2 = uint32_t x2 =
((uint32_t)ulsch->rnti << 14) + ((uint32_t)subframe << 9) + frame_parms->Nid_cell; // this is c_init in 36.211 Sec 6.3.1 ((uint32_t)ulsch->rnti << 14) + ((uint32_t)subframe << 9) + frame_parms->Nid_cell; // this is c_init in 36.211 Sec 6.3.1
LTE_UL_eNB_HARQ_t *ulsch_harq = ulsch->harq_processes[harq_pid]; LTE_UL_eNB_HARQ_t *ulsch_harq = ulsch->harq_processes[harq_pid];
+2 -2
View File
@@ -1199,13 +1199,13 @@ void pdcch_unscrambling(LTE_DL_FRAME_PARMS *frame_parms,
uint32_t x1 = 0, x2 = 0, s = 0; uint32_t x1 = 0, x2 = 0, s = 0;
reset = 1; reset = 1;
// x1 is set in first call to lte_gold_generic // x1 is set in first call to gold_generic
x2 = (subframe<<9) + frame_parms->Nid_cell; //this is c_init in 36.211 Sec 6.8.2 x2 = (subframe<<9) + frame_parms->Nid_cell; //this is c_init in 36.211 Sec 6.8.2
for (i=0; i<length; i++) { for (i=0; i<length; i++) {
if ((i&0x1f)==0) { if ((i&0x1f)==0) {
s = lte_gold_generic(&x1, &x2, reset); s = gold_generic(&x1, &x2, reset);
// printf("lte_gold[%d]=%x\n",i,s); // printf("lte_gold[%d]=%x\n",i,s);
reset = 0; reset = 0;
} }
+4 -4
View File
@@ -221,13 +221,13 @@ void pbch_unscrambling(LTE_DL_FRAME_PARMS *frame_parms,
uint8_t reset; uint8_t reset;
uint32_t x1 = 0, x2 = 0, s = 0; uint32_t x1 = 0, x2 = 0, s = 0;
reset = 1; reset = 1;
// x1 is set in first call to lte_gold_generic // x1 is set in first call to gold_generic
x2 = frame_parms->Nid_cell; //this is c_init in 36.211 Sec 6.6.1 x2 = frame_parms->Nid_cell; //this is c_init in 36.211 Sec 6.6.1
// msg("pbch_unscrambling: Nid_cell = %d\n",x2); // msg("pbch_unscrambling: Nid_cell = %d\n",x2);
for (i=0; i<length; i++) { for (i=0; i<length; i++) {
if (i%32==0) { if (i%32==0) {
s = lte_gold_generic(&x1, &x2, reset); s = gold_generic(&x1, &x2, reset);
// printf("lte_gold[%d]=%x\n",i,s); // printf("lte_gold[%d]=%x\n",i,s);
reset = 0; reset = 0;
} }
@@ -425,13 +425,13 @@ void pbch_unscrambling_fembms(LTE_DL_FRAME_PARMS *frame_parms,
uint8_t reset; uint8_t reset;
uint32_t x1 = 0, x2 = 0, s = 0; uint32_t x1 = 0, x2 = 0, s = 0;
reset = 1; reset = 1;
// x1 is set in first call to lte_gold_generic // x1 is set in first call to gold_generic
x2 = frame_parms->Nid_cell+(1<<9); //this is c_init for FeMBMS in 36.211 Sec 6.6.1 x2 = frame_parms->Nid_cell+(1<<9); //this is c_init for FeMBMS in 36.211 Sec 6.6.1
//msg("pbch_unscrambling: Nid_cell = %d, x2 = %d, frame_mod4 %d length %d\n",frame_parms->Nid_cell,x2,frame_mod4,length); //msg("pbch_unscrambling: Nid_cell = %d, x2 = %d, frame_mod4 %d length %d\n",frame_parms->Nid_cell,x2,frame_mod4,length);
for (i=0; i<length; i++) { for (i=0; i<length; i++) {
if (i%32==0) { if (i%32==0) {
s = lte_gold_generic(&x1, &x2, reset); s = gold_generic(&x1, &x2, reset);
// printf("lte_gold[%d]=%x\n",i,s); // printf("lte_gold[%d]=%x\n",i,s);
reset = 0; reset = 0;
} }
+2 -2
View File
@@ -17,14 +17,14 @@ void pcfich_unscrambling(LTE_DL_FRAME_PARMS *frame_parms,
{ {
uint8_t reset = 1; uint8_t reset = 1;
uint32_t x1 = 0; // x1 is set in lte_gold_generic uint32_t x1 = 0; // x1 is set in gold_generic
uint32_t s = 0; uint32_t s = 0;
uint32_t x2 = ((((2*frame_parms->Nid_cell)+1)*(1+subframe))<<9) + frame_parms->Nid_cell; //this is c_init in 36.211 Sec 6.7.1 uint32_t x2 = ((((2*frame_parms->Nid_cell)+1)*(1+subframe))<<9) + frame_parms->Nid_cell; //this is c_init in 36.211 Sec 6.7.1
for (uint32_t i=0; i<32; i++) { for (uint32_t i=0; i<32; i++) {
if ((i&0x1f)==0) { if ((i&0x1f)==0) {
s = lte_gold_generic(&x1, &x2, reset); s = gold_generic(&x1, &x2, reset);
//printf("lte_gold[%d]=%x\n",i,s); //printf("lte_gold[%d]=%x\n",i,s);
reset = 0; reset = 0;
} }
+2 -2
View File
@@ -111,10 +111,10 @@ void rx_phich(PHY_VARS_UE *ue,
memset(d,0,24*sizeof(int8_t)); memset(d,0,24*sizeof(int8_t));
phich_d_ptr = phich_d; phich_d_ptr = phich_d;
// x1 is set in lte_gold_generic // x1 is set in gold_generic
x2 = (((subframe+1)*((frame_parms->Nid_cell<<1)+1))<<9) + frame_parms->Nid_cell; x2 = (((subframe+1)*((frame_parms->Nid_cell<<1)+1))<<9) + frame_parms->Nid_cell;
s = lte_gold_generic(&x1, &x2, reset); s = gold_generic(&x1, &x2, reset);
// compute scrambling sequence // compute scrambling sequence
for (i=0; i<12; i++) { for (i=0; i<12; i++) {
+3 -3
View File
@@ -321,7 +321,7 @@ static inline void pucch2x_scrambling(LTE_DL_FRAME_PARMS *fp,int subframe,uint16
uint8_t c; uint8_t c;
x2 = (rnti) + ((uint32_t)(1+subframe)<<16)*(1+(fp->Nid_cell<<1)); //this is c_init in 36.211 Sec 6.3.1 x2 = (rnti) + ((uint32_t)(1+subframe)<<16)*(1+(fp->Nid_cell<<1)); //this is c_init in 36.211 Sec 6.3.1
s = lte_gold_generic(&x1, &x2, 1); s = gold_generic(&x1, &x2, 1);
for (i=0;i<19;i++) { for (i=0;i<19;i++) {
c = (uint8_t)((s>>i)&1); c = (uint8_t)((s>>i)&1);
btilde[i] = (((B>>i)&1) ^ c); btilde[i] = (((B>>i)&1) ^ c);
@@ -632,8 +632,8 @@ void generate_pucch3x(int32_t **txdataF,
// Scrambling // Scrambling
cinit = (subframe + 1) * ((2 * frame_parms->Nid_cell + 1)<<16) + rnti; cinit = (subframe + 1) * ((2 * frame_parms->Nid_cell + 1)<<16) + rnti;
s0 = lte_gold_generic(&x1,&cinit,1); s0 = gold_generic(&x1,&cinit,1);
s1 = lte_gold_generic(&x1,&cinit,0); s1 = gold_generic(&x1,&cinit,0);
for (i=0; i<48; i++) { for (i=0; i<48; i++) {
s = (i<32)? s0:s1; s = (i<32)? s0:s1;
@@ -164,7 +164,7 @@ void ulsch_modulation(int32_t **txdataF,
return; return;
} }
// x1 is set in lte_gold_generic // x1 is set in gold_generic
x2 = (ulsch->rnti<<14) + (subframe<<9) + frame_parms->Nid_cell; //this is c_init in 36.211 Sec 6.3.1 x2 = (ulsch->rnti<<14) + (subframe<<9) + frame_parms->Nid_cell; //this is c_init in 36.211 Sec 6.3.1
if (harq_pid>=8) { if (harq_pid>=8) {
@@ -203,7 +203,7 @@ void ulsch_modulation(int32_t **txdataF,
// scrambling (Note the placeholding bits are handled in ulsch_coding.c directly!) // scrambling (Note the placeholding bits are handled in ulsch_coding.c directly!)
//printf("ulsch bits: "); //printf("ulsch bits: ");
s = lte_gold_generic(&x1, &x2, 1); s = gold_generic(&x1, &x2, 1);
k=0; k=0;
//printf("G %d\n",G); //printf("G %d\n",G);
@@ -224,7 +224,7 @@ void ulsch_modulation(int32_t **txdataF,
} }
s = lte_gold_generic(&x1, &x2, 0); s = gold_generic(&x1, &x2, 0);
} }
//printf("\n"); //printf("\n");
+2 -2
View File
@@ -3,7 +3,7 @@
*/ */
#include "sl_refsig_defs.h" #include "sl_refsig_defs.h"
#include "openair1/PHY/LTE_TRANSPORT/transport_proto.h" // for lte_gold_generic() #include "openair1/PHY/gold.h"
void sl_init_psbch_dmrs_gold_sequences(PHY_VARS_NR_UE *UE) void sl_init_psbch_dmrs_gold_sequences(PHY_VARS_NR_UE *UE)
{ {
@@ -20,7 +20,7 @@ void sl_init_psbch_dmrs_gold_sequences(PHY_VARS_NR_UE *UE)
#endif #endif
for (uint8_t n = 0; n < SL_NR_NUM_PSBCH_DMRS_RE_DWORD; n++) { for (uint8_t n = 0; n < SL_NR_NUM_PSBCH_DMRS_RE_DWORD; n++) {
UE->SL_UE_PHY_PARAMS.init_params.psbch_dmrs_gold_sequences[slss_id][n] = lte_gold_generic(&x1, &x2, reset); UE->SL_UE_PHY_PARAMS.init_params.psbch_dmrs_gold_sequences[slss_id][n] = gold_generic(&x1, &x2, reset);
reset = 0; reset = 0;
#ifdef SL_DEBUG_INIT_DATA #ifdef SL_DEBUG_INIT_DATA
+3 -3
View File
@@ -3,7 +3,7 @@
*/ */
#include "nr_refsig.h" #include "nr_refsig.h"
#include "openair1/PHY/LTE_TRANSPORT/transport_proto.h" // for lte_gold_generic() #include "openair1/PHY/gold.h"
#define REFRESH_RATE (1000 * 100) #define REFRESH_RATE (1000 * 100)
@@ -141,9 +141,9 @@ uint32_t *gold_cache(uint32_t key, int length)
*new = (gold_cache_t){.key = key, .length = length, .usage = 1}; *new = (gold_cache_t){.key = key, .length = length, .usage = 1};
unsigned int x1 = 0, x2 = key; unsigned int x1 = 0, x2 = key;
uint32_t *sequence = firstFree + roundedHeaderSz; uint32_t *sequence = firstFree + roundedHeaderSz;
*sequence++ = lte_gold_generic(&x1, &x2, 1); *sequence++ = gold_generic(&x1, &x2, 1);
for (int n = 1; n < length; n++) for (int n = 1; n < length; n++)
*sequence++ = lte_gold_generic(&x1, &x2, 0); *sequence++ = gold_generic(&x1, &x2, 0);
LOG_D(PHY, "created a gold sequence, start %d; len %d\n", key, length); LOG_D(PHY, "created a gold sequence, start %d; len %d\n", key, length);
return firstFree + roundedHeaderSz; return firstFree + roundedHeaderSz;
} }
+4 -3
View File
@@ -7,6 +7,7 @@
#include "PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h" #include "PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h"
#include "PHY/CODING/nrPolar_tools/nr_polar_psbch_defs.h" #include "PHY/CODING/nrPolar_tools/nr_polar_psbch_defs.h"
#include "PHY/MODULATION/nr_modulation.h" #include "PHY/MODULATION/nr_modulation.h"
#include "PHY/gold.h"
// #define SL_DEBUG // #define SL_DEBUG
@@ -19,7 +20,7 @@
void sl_psbch_scrambling(uint32_t *output, uint32_t id, uint16_t length) void sl_psbch_scrambling(uint32_t *output, uint32_t id, uint16_t length)
{ {
uint32_t x1, x2, s = 0; uint32_t x1, x2, s = 0;
// x1 is set in lte_gold_generic // x1 is set in gold_generic
x2 = id; // C_INIT x2 = id; // C_INIT
#ifdef SL_DEBUG #ifdef SL_DEBUG
@@ -29,7 +30,7 @@ void sl_psbch_scrambling(uint32_t *output, uint32_t id, uint16_t length)
#endif #endif
// get initial 32 scrambing bits // get initial 32 scrambing bits
s = lte_gold_generic(&x1, &x2, 1); s = gold_generic(&x1, &x2, 1);
#ifdef SL_DEBUG #ifdef SL_DEBUG
printf("s: %04x\t", s); printf("s: %04x\t", s);
#endif #endif
@@ -40,7 +41,7 @@ void sl_psbch_scrambling(uint32_t *output, uint32_t id, uint16_t length)
output[i >> 5] ^= s; output[i >> 5] ^= s;
i += 32; i += 32;
s = lte_gold_generic(&x1, &x2, 0); s = gold_generic(&x1, &x2, 0);
#ifdef SL_DEBUG #ifdef SL_DEBUG
printf("s: %04x\t", s); printf("s: %04x\t", s);
#endif #endif
@@ -11,8 +11,6 @@
#include "SCHED_NR_UE/defs.h" #include "SCHED_NR_UE/defs.h"
#include "PHY/NR_TRANSPORT/nr_transport_common_proto.h" #include "PHY/NR_TRANSPORT/nr_transport_common_proto.h"
#include <math.h> #include <math.h>
#include "nfapi_interface.h"
#include <openair1/PHY/LTE_TRANSPORT/transport_proto.h>
#define NR_PUSCH_x 2 // UCI placeholder bit TS 38.212 V15.4.0 subclause 5.3.3.1 #define NR_PUSCH_x 2 // UCI placeholder bit TS 38.212 V15.4.0 subclause 5.3.3.1
#define NR_PUSCH_y 3 // UCI placeholder bit #define NR_PUSCH_y 3 // UCI placeholder bit
+46
View File
@@ -0,0 +1,46 @@
/*
* SPDX-License-Identifier: LicenseRef-CSSL-1.0
*/
#ifndef __openair_GOLD_H__
#define __openair_GOLD_H__
static inline uint32_t gold_generic(uint32_t *x1, uint32_t *x2, uint8_t reset)
{
int32_t n;
// 3GPP 3x.211
// Nc = 1600
// c(n) = [x1(n+Nc) + x2(n+Nc)]mod2
// x1(n+31) = [x1(n+3) + x1(n)]mod2
// x2(n+31) = [x2(n+3) + x2(n+2) + x2(n+1) + x2(n)]mod2
if (reset) {
// Init value for x1: x1(0) = 1, x1(n) = 0, n=1,2,...,30
// x1(31) = [x1(3) + x1(0)]mod2 = 1
*x1 = 1 + (1U << 31);
// Init value for x2: cinit = sum_{i=0}^30 x2*2^i
// x2(31) = [x2(3) + x2(2) + x2(1) + x2(0)]mod2
// = (*x2>>3) ^ (*x2>>2) + (*x2>>1) + *x2
*x2 = *x2 ^ ((*x2 ^ (*x2 >> 1) ^ (*x2 >> 2) ^ (*x2 >> 3)) << 31);
// x1 and x2 contain bits n = 0,1,...,31
// Nc = 1600 bits are skipped at the beginning
// i.e., 1600 / 32 = 50 32bit words
for (n = 1; n < 50; n++) {
// Compute x1(0),...,x1(27)
*x1 = (*x1 >> 1) ^ (*x1 >> 4);
// Compute x1(28),..,x1(31) and xor
*x1 = *x1 ^ (*x1 << 31) ^ (*x1 << 28);
// Compute x2(0),...,x2(27)
*x2 = (*x2 >> 1) ^ (*x2 >> 2) ^ (*x2 >> 3) ^ (*x2 >> 4);
// Compute x2(28),..,x2(31) and xor
*x2 = *x2 ^ (*x2 << 31) ^ (*x2 << 30) ^ (*x2 << 29) ^ (*x2 << 28);
}
}
*x1 = (*x1 >> 1) ^ (*x1 >> 4);
*x1 = *x1 ^ (*x1 << 31) ^ (*x1 << 28);
*x2 = (*x2 >> 1) ^ (*x2 >> 2) ^ (*x2 >> 3) ^ (*x2 >> 4);
*x2 = *x2 ^ (*x2 << 31) ^ (*x2 << 30) ^ (*x2 << 29) ^ (*x2 << 28);
// c(n) = [x1(n+Nc) + x2(n+Nc)]mod2
return(*x1 ^ *x2);
}
#endif