diff --git a/openair1/PHY/INIT/nr_init.c b/openair1/PHY/INIT/nr_init.c index e736f356dbc528b02793691d543c0431e98e90d1..8c2b4ec8bda2ac645e8d435ac3e3e6f1000fdf75 100644 --- a/openair1/PHY/INIT/nr_init.c +++ b/openair1/PHY/INIT/nr_init.c @@ -139,6 +139,21 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB, nr_init_pdcch_dmrs(gNB, cfg->sch_config.physical_cell_id.value); + + //PDSCH DMRS init + gNB->nr_gold_pdsch_dmrs = (uint32_t ***)malloc16(fp->slots_per_frame*sizeof(uint32_t**)); + uint32_t ***pdsch_dmrs = gNB->nr_gold_pdsch_dmrs; + for (int slot=0; slot<fp->slots_per_frame; slot++) { + pdsch_dmrs[slot] = (uint32_t **)malloc16(fp->symbols_per_slot*sizeof(uint32_t*)); + AssertFatal(pdsch_dmrs[slot]!=NULL, "NR init: pdsch_dmrs for slot %d - malloc failed\n", slot); + for (int symb=0; symb<fp->symbols_per_slot; symb++){ + pdsch_dmrs[slot][symb] = (uint32_t *)malloc16(NR_MAX_PDSCH_DMRS_INIT_LENGTH_DWORD*sizeof(uint32_t)); + AssertFatal(pdsch_dmrs[slot][symb]!=NULL, "NR init: pdsch_dmrs for slot %d symbol %d - malloc failed\n", slot, symb); + } + } + + nr_init_pdsch_dmrs(gNB, cfg->sch_config.physical_cell_id.value); + /* lte_gold(fp,gNB->lte_gold_table,fp->Nid_cell); generate_pcfich_reg_mapping(fp); diff --git a/openair1/PHY/NR_REFSIG/nr_gen_mod_table.m b/openair1/PHY/NR_REFSIG/nr_gen_mod_table.m index a081ad1baa1331cb94dd48b9dd96a3342dda4453..60cf6d34e867381f344cbb37a0952654e8ae4323 100644 --- a/openair1/PHY/NR_REFSIG/nr_gen_mod_table.m +++ b/openair1/PHY/NR_REFSIG/nr_gen_mod_table.m @@ -9,6 +9,30 @@ BPSK = 23170; % Amplitude for QPSK (\f$ 2^15 \times 1/\sqrt{2}\f$) QPSK = 23170; + +% First Amplitude for QAM16 (\f$ 2^15 \times 2/\sqrt{10}\f$) +QAM16_n1 = 20724; +% Second Amplitude for QAM16 (\f$ 2^15 \times 1/\sqrt{10}\f$) +QAM16_n2 = 10362; + +% First Amplitude for QAM64 (\f$ 2^15 \times 4/\sqrt{42}\f$) +QAM64_n1 = 20225; +% Second Amplitude for QAM64 (\f$ 2^15 \times 2/\sqrt{42}\f$) +QAM64_n2 = 10112; +% Third Amplitude for QAM64 (\f$ 2^15 \times 1/\sqrt{42}\f$) +QAM64_n3 = 5056; + + +% First Amplitude for QAM256 (\f$ 2^15 \times 8/\sqrt{170}\f$) +QAM256_n1 = 20105; +% Second Amplitude for QAM256 (\f$ 2^15 \times 4/\sqrt{170}\f$) +QAM256_n2 = 10052; +% Third Amplitude for QAM256 (\f$ 2^15 \times 2/\sqrt{170}\f$) +QAM256_n3 = 5026; +% Third Amplitude for QAM256 (\f$ 2^15 \times 1/\sqrt{170}\f$) +QAM256_n4 = 2513; + + % BPSK for b = 0:1 bpsk_table(b+1) = (1 - 2*b)*BPSK + 1j*(1-2*b)*BPSK; @@ -17,12 +41,91 @@ end %% QPSK for r=0:1 %0 -- 1 LS for j=0:1 %0 -- 1 MS + %% Formula is dispalayed + qpsk_table(2*r+j+1) = ((1-r*2)*QPSK + 1j*(1-2*j)*QPSK); end end -table = [ 0; bpsk_table(:); qpsk_table(:) ]; +%% QAM16 + for a=-1:2:1 + for b=-1:2:1 + index = (1+a) + (1+b)/2; + qam16_table(index+1) = -a*(QAM16_n1 + (b*QAM16_n2)); + end + end + +for b0=0:1 +for b1=0:1 +for b2=0:1 +for b3=0:1 +qam16_table2(b0*8+b1*4+b2*2+b3*1+1) = qam16_table(b0*2+b2*1+1) + 1j*qam16_table(b1*2+b3*1+1); +end +end +end +end + + +%% QAM64 + for a=-1:2:1 + for b=-1:2:1 + for c=-1:2:1 + index = (1+a)*2 + (1+b) + (1+c)/2; + qam64_table(index+1) = -a*(QAM64_n1 + b*(QAM64_n2 + (c*QAM64_n3))); + end + end + end + +for b0=0:1 +for b1=0:1 +for b2=0:1 +for b3=0:1 +for b4=0:1 +for b5=0:1 +qam64_table2(b0*32+b1*16+b2*8+b3*4+b4*2+b5*1+1) = qam64_table(b0*4+b2*2+b4*1+1) + 1j*qam64_table(b1*4+b3*2+b5*1+1); +end +end +end +end +end +end + + +%%256QAM +%% QAM256 ******************************************************************************************* + for a=-1:2:1 + for b=-1:2:1 + for c=-1:2:1 + for d = -1:2:1 + + index = (1+a)*4 + (1+b)*2 + (1+c)+(1+d)/2; + qam256_table(index+1) = -a*(QAM256_n1 + b*(QAM256_n2 + (c*(QAM256_n3+d*QAM256_n4)))); + end + end + end +end +for b0=0:1 +for b1=0:1 +for b2=0:1 +for b3=0:1 +for b4=0:1 +for b5=0:1 +for b6=0:1 +for b7=0:1 + +%%qam64_table2(b0*32+b1*16+b2*8+b3*4+b4*2+b5*1+1) = qam64_table(b0*4+b2*2+b4*1+1) + 1j*qam64_table(b1*4+b3*2+b5*1+1); +qam256_table2(b0*128+b1*64+b2*32+b3*16+b4*8+b5*4+b6*2+b7*1+1) = qam256_table(b0*8+b2*4+b4*2+b6*1+1) + 1j*qam256_table(b1*8+b3*4+b5*2+b7*1+1); +end +end +end +end +end +end +end +end +table = [ 0; bpsk_table(:); qpsk_table(:);qam16_table2(:); qam64_table2(:);qam256_table2(:) ]; +scatter (real(qam256_table2), imag(qam256_table2), 'x'); save mod_table.mat table table2 = zeros(1,length(table)*2); @@ -33,7 +136,10 @@ fd = fopen("nr_mod_table.h","w"); fprintf(fd,"#define NR_MOD_TABLE_SIZE_SHORT %d\n", length(table)*2); fprintf(fd,"#define NR_MOD_TABLE_BPSK_OFFSET %d\n", 1); fprintf(fd,"#define NR_MOD_TABLE_QPSK_OFFSET %d\n", 3); +fprintf(fd,"#define NR_MOD_TABLE_QAM16_OFFSET %d\n", 7); +fprintf(fd,"#define NR_MOD_TABLE_QAM64_OFFSET %d\n", 23); +fprintf(fd,"#define NR_MOD_TABLE_QAM256_OFFSET %d\n", 87); fprintf(fd,"short nr_mod_table[MOD_TABLE_SIZE_SHORT] = {"); fprintf(fd,"%d,",table2(1:end-1)); fprintf(fd,"%d};\n",table2(end)); -fclose(fd); +fclose(fd); \ No newline at end of file diff --git a/openair1/PHY/NR_REFSIG/nr_gold.c b/openair1/PHY/NR_REFSIG/nr_gold.c index b8197744ec0b5ad4cd8086d8f358a74d3340d614..c49d11d7476886f3b6344b699a18582a4c6f4df0 100644 --- a/openair1/PHY/NR_REFSIG/nr_gold.c +++ b/openair1/PHY/NR_REFSIG/nr_gold.c @@ -75,3 +75,31 @@ void nr_init_pdcch_dmrs(PHY_VARS_gNB* gNB, uint32_t Nid) } } + + +void nr_init_pdsch_dmrs(PHY_VARS_gNB* gNB, uint32_t Nid) +{ + + uint32_t x1, x2; + uint8_t reset; + int Nscid; + NR_DL_FRAME_PARMS *fp = &gNB->frame_parms; + uint32_t ***pdsch_dmrs = gNB->nr_gold_pdsch_dmrs; + //x2 compute by 38.211 7.4.1.1.1 + Nscid = 0; + for (uint8_t slot=0; slot<fp->slots_per_frame; slot++) { + for (uint8_t symb=0; symb<fp->symbols_per_slot; symb++) { + + reset = 1; + x2 = ((1<<17) * (slot*symb*slot+symb+1) * (Nid+1) *((Nid<<1)+Nscid))&(((uint32_t)1<<31)-1); + printf("x2 = %d\n",x2); + for (uint32_t n=0; n<NR_MAX_PDSCH_DMRS_INIT_LENGTH_DWORD; n++) { + pdsch_dmrs[slot][symb][n] = lte_gold_generic(&x1, &x2, reset); + printf("slot = %d*** symb = %d*** n = %d*** \n",slot,symb,n); + + reset = 0; + } + } + } + +} \ No newline at end of file diff --git a/openair1/PHY/NR_REFSIG/nr_mod_table.h b/openair1/PHY/NR_REFSIG/nr_mod_table.h index 3c0c808d1dffd5dc328ae54d1be5e9e0901e10d7..ccffc7028e1b9c3fb78b9ae52afaa31597551ccd 100644 --- a/openair1/PHY/NR_REFSIG/nr_mod_table.h +++ b/openair1/PHY/NR_REFSIG/nr_mod_table.h @@ -1,4 +1,7 @@ -#define NR_MOD_TABLE_SIZE_SHORT 14 +#define NR_MOD_TABLE_SIZE_SHORT 686 #define NR_MOD_TABLE_BPSK_OFFSET 1 #define NR_MOD_TABLE_QPSK_OFFSET 3 -short nr_mod_table[NR_MOD_TABLE_SIZE_SHORT] = {0,0,23170,23170,-23170,-23170,23170,23170,23170,-23170,-23170,23170,-23170,-23170}; +#define NR_MOD_TABLE_QAM16_OFFSET 7 +#define NR_MOD_TABLE_QAM64_OFFSET 23 +#define NR_MOD_TABLE_QAM256_OFFSET 87 +short nr_mod_table[MOD_TABLE_SIZE_SHORT] = {0,0,23170,23170,-23170,-23170,23170,23170,23170,-23170,-23170,23170,-23170,-23170,10362,10362,10362,31086,31086,10362,31086,31086,10362,-10362,10362,-31086,31086,-10362,31086,-31086,-10362,10362,-10362,31086,-31086,10362,-31086,31086,-10362,-10362,-10362,-31086,-31086,-10362,-31086,-31086,15169,15169,15169,5057,5057,15169,5057,5057,15169,25281,15169,35393,5057,25281,5057,35393,25281,15169,25281,5057,35393,15169,35393,5057,25281,25281,25281,35393,35393,25281,35393,35393,15169,-15169,15169,-5057,5057,-15169,5057,-5057,15169,-25281,15169,-35393,5057,-25281,5057,-35393,25281,-15169,25281,-5057,35393,-15169,35393,-5057,25281,-25281,25281,-35393,35393,-25281,35393,-35393,-15169,15169,-15169,5057,-5057,15169,-5057,5057,-15169,25281,-15169,35393,-5057,25281,-5057,35393,-25281,15169,-25281,5057,-35393,15169,-35393,5057,-25281,25281,-25281,35393,-35393,25281,-35393,35393,-15169,-15169,-15169,-5057,-5057,-15169,-5057,-5057,-15169,-25281,-15169,-35393,-5057,-25281,-5057,-35393,-25281,-15169,-25281,-5057,-35393,-15169,-35393,-5057,-25281,-25281,-25281,-35393,-35393,-25281,-35393,-35393,12566,12566,12566,17592,17592,12566,17592,17592,12566,7540,12566,2514,17592,7540,17592,2514,7540,12566,7540,17592,2514,12566,2514,17592,7540,7540,7540,2514,2514,7540,2514,2514,12566,27644,12566,22618,17592,27644,17592,22618,12566,32670,12566,37696,17592,32670,17592,37696,7540,27644,7540,22618,2514,27644,2514,22618,7540,32670,7540,37696,2514,32670,2514,37696,27644,12566,27644,17592,22618,12566,22618,17592,27644,7540,27644,2514,22618,7540,22618,2514,32670,12566,32670,17592,37696,12566,37696,17592,32670,7540,32670,2514,37696,7540,37696,2514,27644,27644,27644,22618,22618,27644,22618,22618,27644,32670,27644,37696,22618,32670,22618,37696,32670,27644,32670,22618,37696,27644,37696,22618,32670,32670,32670,37696,37696,32670,37696,37696,12566,-12566,12566,-17592,17592,-12566,17592,-17592,12566,-7540,12566,-2514,17592,-7540,17592,-2514,7540,-12566,7540,-17592,2514,-12566,2514,-17592,7540,-7540,7540,-2514,2514,-7540,2514,-2514,12566,-27644,12566,-22618,17592,-27644,17592,-22618,12566,-32670,12566,-37696,17592,-32670,17592,-37696,7540,-27644,7540,-22618,2514,-27644,2514,-22618,7540,-32670,7540,-37696,2514,-32670,2514,-37696,27644,-12566,27644,-17592,22618,-12566,22618,-17592,27644,-7540,27644,-2514,22618,-7540,22618,-2514,32670,-12566,32670,-17592,37696,-12566,37696,-17592,32670,-7540,32670,-2514,37696,-7540,37696,-2514,27644,-27644,27644,-22618,22618,-27644,22618,-22618,27644,-32670,27644,-37696,22618,-32670,22618,-37696,32670,-27644,32670,-22618,37696,-27644,37696,-22618,32670,-32670,32670,-37696,37696,-32670,37696,-37696,-12566,12566,-12566,17592,-17592,12566,-17592,17592,-12566,7540,-12566,2514,-17592,7540,-17592,2514,-7540,12566,-7540,17592,-2514,12566,-2514,17592,-7540,7540,-7540,2514,-2514,7540,-2514,2514,-12566,27644,-12566,22618,-17592,27644,-17592,22618,-12566,32670,-12566,37696,-17592,32670,-17592,37696,-7540,27644,-7540,22618,-2514,27644,-2514,22618,-7540,32670,-7540,37696,-2514,32670,-2514,37696,-27644,12566,-27644,17592,-22618,12566,-22618,17592,-27644,7540,-27644,2514,-22618,7540,-22618,2514,-32670,12566,-32670,17592,-37696,12566,-37696,17592,-32670,7540,-32670,2514,-37696,7540,-37696,2514,-27644,27644,-27644,22618,-22618,27644,-22618,22618,-27644,32670,-27644,37696,-22618,32670,-22618,37696,-32670,27644,-32670,22618,-37696,27644,-37696,22618,-32670,32670,-32670,37696,-37696,32670,-37696,37696,-12566,-12566,-12566,-17592,-17592,-12566,-17592,-17592,-12566,-7540,-12566,-2514,-17592,-7540,-17592,-2514,-7540,-12566,-7540,-17592,-2514,-12566,-2514,-17592,-7540,-7540,-7540,-2514,-2514,-7540,-2514,-2514,-12566,-27644,-12566,-22618,-17592,-27644,-17592,-22618,-12566,-32670,-12566,-37696,-17592,-32670,-17592,-37696,-7540,-27644,-7540,-22618,-2514,-27644,-2514,-22618,-7540,-32670,-7540,-37696,-2514,-32670,-2514,-37696,-27644,-12566,-27644,-17592,-22618,-12566,-22618,-17592,-27644,-7540,-27644,-2514,-22618,-7540,-22618,-2514,-32670,-12566,-32670,-17592,-37696,-12566,-37696,-17592,-32670,-7540,-32670,-2514,-37696,-7540,-37696,-2514,-27644,-27644,-27644,-22618,-22618,-27644,-22618,-22618,-27644,-32670,-27644,-37696,-22618,-32670,-22618,-37696,-32670,-27644,-32670,-22618,-37696,-27644,-37696,-22618,-32670,-32670,-32670,-37696,-37696,-32670,-37696,-37696}; \ No newline at end of file diff --git a/openair1/PHY/NR_REFSIG/nr_refsig.h b/openair1/PHY/NR_REFSIG/nr_refsig.h index f6a8b5683b6a170482bb26f9605ae4b879b2ad53..cb165eed5e3f10a9a8745cb7a8a3f7f9e78e6958 100644 --- a/openair1/PHY/NR_REFSIG/nr_refsig.h +++ b/openair1/PHY/NR_REFSIG/nr_refsig.h @@ -37,6 +37,6 @@ void nr_init_pbch_dmrs(PHY_VARS_gNB* gNB); @param Nid is used for the initialization of x2, Physical cell Id by default or upper layer configured pdcch_scrambling_ID */ void nr_init_pdcch_dmrs(PHY_VARS_gNB* gNB, uint32_t Nid); - +void nr_init_pdsch_dmrs(PHY_VARS_gNB* gNB, uint32_t Nid); #endif diff --git a/openair1/PHY/defs_gNB.h b/openair1/PHY/defs_gNB.h index 9c36535a940c3098ae41e85fee0d8c209c7dbef5..eaf9a2456e5b3480bc05eb67aaa94273928914ed 100644 --- a/openair1/PHY/defs_gNB.h +++ b/openair1/PHY/defs_gNB.h @@ -454,6 +454,9 @@ typedef struct PHY_VARS_gNB_s { /// PDCCH DMRS sequence uint32_t ***nr_gold_pdcch_dmrs; + /// PDSCH DMRS sequence + uint32_t ***nr_gold_pdsch_dmrs; + /// Indicator set to 0 after first SR uint8_t first_sr[NUMBER_OF_UE_MAX]; diff --git a/openair1/PHY/defs_nr_common.h b/openair1/PHY/defs_nr_common.h index e31da351eafa186cc53b6039971f64ce3c3ad81e..c517e22312a4f033ad9a39c7007f3bf3a6d40a46 100644 --- a/openair1/PHY/defs_nr_common.h +++ b/openair1/PHY/defs_nr_common.h @@ -69,6 +69,9 @@ /*used for the resource mapping*/ #define NR_MAX_PDCCH_DMRS_LENGTH 576 // 16(L)*2(QPSK)*3(3 DMRS symbs per REG)*6(REG per CCE) +#define NR_MAX_PDSCH_DMRS_LENGTH 1100 //275*2(k)*2(QPSK) +#define NR_MAX_PDSCH_DMRS_INIT_LENGTH_DWORD 35 // ceil(NR_MAX_PDSCH_DMRS_LENGTH/32) + #define NR_MAX_DCI_PAYLOAD_SIZE 64 #define NR_MAX_DCI_SIZE 1728 //16(L)*2(QPSK)*9(12 RE per REG - 3(DMRS))*6(REG per CCE) #define NR_MAX_DCI_SIZE_DWORD 54 // ceil(NR_MAX_DCI_SIZE/32)