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)