diff --git a/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c
index e5b28ff2e3caebafc87d0003ab1cebf3cc8cc28c..a8d73cfdea4efd724d8c54a0e0923380e8a16379 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c
@@ -91,7 +91,7 @@ int32_t temp_in_ifft_0[2048*2] __attribute__((aligned(32)));
                   eNB->ulsch[UE_id]->harq_processes[harq_pid]->n_DMRS2 +
                   frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.nPRS[(subframe<<1)+Ns]) % 12;
 
-  Msc_idx_ptr = (uint16_t*) bsearch(&Msc_RS, dftsizes, 33, sizeof(uint16_t), compareints);
+  Msc_idx_ptr = (uint16_t*) bsearch(&Msc_RS, dftsizes, 34, sizeof(uint16_t), compareints);
 
   if (Msc_idx_ptr)
     Msc_RS_idx = Msc_idx_ptr - dftsizes;
diff --git a/openair1/PHY/LTE_REFSIG/lte_ul_ref.c b/openair1/PHY/LTE_REFSIG/lte_ul_ref.c
index 01b27205c21b619bc273b8ef43309073de21a7e1..ee7619c23c2bf9479b81a9d8e7b221a2e052e9a2 100644
--- a/openair1/PHY/LTE_REFSIG/lte_ul_ref.c
+++ b/openair1/PHY/LTE_REFSIG/lte_ul_ref.c
@@ -27,13 +27,13 @@
 #include "lte_refsig.h"
 #include "PHY/defs_eNB.h"
 
-uint16_t dftsizes[33] = {12,24,36,48,60,72,96,108,120,144,180,192,216,240,288,300,324,360,384,432,480,540,576,600,648,720,864,900,960,972,1080,1152,1200};
+uint16_t dftsizes[34] = {12,24,36,48,60,72,96,108,120,144,180,192,216,240,288,300,324,360,384,432,480,540,576,600,648,720,768,864,900,960,972,1080,1152,1200};
 
-uint16_t ref_primes[33] = {11,23,31,47,59,71,89,107,113,139,179,191,211,239,283,293,317,359,383,431,479,523,571,599,647,719,863,887,953,971,1069,1151,1193};
+uint16_t ref_primes[34] = {11,23,31,47,59,71,89,107,113,139,179,191,211,239,283,293,317,359,383,431,479,523,571,599,647,719,761,863,887,953,971,1069,1151,1193};
 
 
-int16_t *ul_ref_sigs[30][2][33];
-int16_t *ul_ref_sigs_rx[30][2][33]; //these contain the sequences in repeated format and quantized to QPSK ifdef IFFT_FPGA
+int16_t *ul_ref_sigs[30][2][34];
+int16_t *ul_ref_sigs_rx[30][2][34]; //these contain the sequences in repeated format and quantized to QPSK ifdef IFFT_FPGA
 
 /* 36.211 table 5.5.1.2-1 */
 char ref12[360] = {-1,1,3,-3,3,3,1,1,3,1,-3,3,1,1,3,3,3,-1,1,-3,-3,1,-3,3,1,1,-3,-3,-3,-1,-3,-3,1,-3,1,-1,-1,1,1,1,1,-1,-3,-3,1,-3,3,-1,-1,3,1,-1,1,-1,-3,-1,1,-1,1,3,1,-3,3,-1,-1,1,1,-1,-1,3,-3,1,-1,3,-3,-3,-3,3,1,-1,3,3,-3,1,-3,-1,-1,-1,1,-3,3,-1,1,-3,3,1,1,-3,3,1,-1,-1,-1,1,1,3,-1,1,1,-3,-1,3,3,-1,-3,1,1,1,1,1,-1,3,-1,1,1,-3,-3,-1,-3,-3,3,-1,3,1,-1,-1,3,3,-3,1,3,1,3,3,1,-3,1,1,-3,1,1,1,-3,-3,-3,1,3,3,-3,3,-3,1,1,3,-1,-3,3,3,-3,1,-1,-3,-1,3,1,3,3,3,-1,1,3,-1,1,-3,-1,-1,1,1,3,1,-1,-3,1,3,1,-1,1,3,3,3,-1,-1,3,-1,-3,1,1,3,-3,3,-3,-3,3,1,3,-1,-3,3,1,1,-3,1,-3,-3,-1,-1,1,-3,-1,3,1,3,1,-1,-1,3,-3,-1,-3,-1,-1,-3,1,1,1,1,3,1,-1,1,-3,-1,-1,3,-1,1,-3,-3,-3,-3,-3,1,-1,-3,1,1,-3,-3,-3,-3,-1,3,-3,1,-3,3,1,1,-1,-3,-1,-3,1,-1,1,3,-1,1,1,1,3,1,3,3,-1,1,-1,-3,-3,1,1,-3,3,3,1,3,3,1,-3,-1,-1,3,1,3,-3,-3,3,-3,1,-1,-1,3,-1,-3,-3,-1,-3,-1,-3,3,1,-1,1,3,-3,-3,-1,3,-3,3,-1,3,3,-3,3,3,-1,-1,3,-3,-3,-1,-1,-3,-1,3,-3,3,1,-1};
@@ -49,7 +49,7 @@ void generate_ul_ref_sigs(void)
   unsigned int u,v,Msc_RS,q,m,n;
 
   // These are the Zadoff-Chu sequences (for RB 3-100)
-  for (Msc_RS=2; Msc_RS<33; Msc_RS++) {
+  for (Msc_RS=2; Msc_RS<34; Msc_RS++) {
     for (u=0; u<30; u++) {
       for (v=0; v<2; v++) {
         qbar = ref_primes[Msc_RS] * (u+1)/(double)31;
@@ -119,7 +119,7 @@ void generate_ul_ref_sigs_rx(void)
   unsigned int u,v,Msc_RS,q,m,n;
 
   // These are the complex conjugated Zadoff-Chu sequences quantized to QPSK stored in repeated format (for RB 3-100)
-  for (Msc_RS=2; Msc_RS<33; Msc_RS++) {
+  for (Msc_RS=2; Msc_RS<34; Msc_RS++) {
     for (u=0; u<30; u++) {
       for (v=0; v<2; v++) {
         qbar = ref_primes[Msc_RS] * (u+1)/(double)31;
@@ -186,7 +186,7 @@ void free_ul_ref_sigs(void)
 
   unsigned int u,v,Msc_RS;
 
-  for (Msc_RS=0; Msc_RS<33; Msc_RS++) {
+  for (Msc_RS=0; Msc_RS<34; Msc_RS++) {
     for (u=0; u<30; u++) {
       for (v=0; v<2; v++) {
         if (ul_ref_sigs[u][v][Msc_RS]) {
diff --git a/openair1/PHY/LTE_TRANSPORT/transport_extern.h b/openair1/PHY/LTE_TRANSPORT/transport_extern.h
index 04b69d9402440e3f0f64b88ccc0d96e367fa7d56..357d31ca1076099d14ac7cc7795192ba63420ce8 100644
--- a/openair1/PHY/LTE_TRANSPORT/transport_extern.h
+++ b/openair1/PHY/LTE_TRANSPORT/transport_extern.h
@@ -25,10 +25,10 @@ extern char lte_cqi_snr_dB[15];
 extern short conjugate[8],conjugate2[8];
 extern short minus_one[8];
 extern short minus_one[8];
-extern short *ul_ref_sigs[30][2][33];
-extern short *ul_ref_sigs_rx[30][2][33];
-extern unsigned short dftsizes[33];
-extern unsigned short ref_primes[33];
+extern short *ul_ref_sigs[30][2][34];
+extern short *ul_ref_sigs_rx[30][2][34];
+extern unsigned short dftsizes[34];
+extern unsigned short ref_primes[34];
 
 extern int qam64_table[8],qam16_table[4],qpsk_table[2];
 
diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c b/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
index adb0d1576f31322448cdf6a4a5c53f7486e4a00b..61076f2aae48fdfd6af03fafcda9d5c9b0bfdb06 100644
--- a/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
+++ b/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
@@ -335,6 +335,12 @@ void lte_idft(LTE_DL_FRAME_PARMS *frame_parms,uint32_t *z, uint16_t Msc_PUSCH)
     dft720((int16_t*)idft_in2,(int16_t*)idft_out2,1);
     break;
 
+  case 768:
+    dft768((int16_t*)idft_in0,(int16_t*)idft_out0,1);
+    dft768((int16_t*)idft_in1,(int16_t*)idft_out1,1);
+    dft768((int16_t*)idft_in2,(int16_t*)idft_out2,1);
+    break;
+
   case 864:
     dft864((int16_t*)idft_in0,(int16_t*)idft_out0,1);
     dft864((int16_t*)idft_in1,(int16_t*)idft_out1,1);
diff --git a/openair1/PHY/LTE_UE_TRANSPORT/drs_modulation.c b/openair1/PHY/LTE_UE_TRANSPORT/drs_modulation.c
index 96ff82ba162d2cd6278c54a77a4129a65f7c186a..1c49cde394623bb7e26438e7ffdc7dba5ffc01ba 100644
--- a/openair1/PHY/LTE_UE_TRANSPORT/drs_modulation.c
+++ b/openair1/PHY/LTE_UE_TRANSPORT/drs_modulation.c
@@ -83,7 +83,7 @@ int generate_drs_pusch(PHY_VARS_UE *ue,
   //        cyclic_shift1 = 0;
   Msc_RS = 12*nb_rb;
 
-  Msc_idx_ptr = (uint16_t*) bsearch(&Msc_RS, dftsizes, 33, sizeof(uint16_t), compareints);
+  Msc_idx_ptr = (uint16_t*) bsearch(&Msc_RS, dftsizes, 34, sizeof(uint16_t), compareints);
 
   if (Msc_idx_ptr)
     Msc_RS_idx = Msc_idx_ptr - dftsizes;
diff --git a/openair1/PHY/LTE_UE_TRANSPORT/srs_modulation.c b/openair1/PHY/LTE_UE_TRANSPORT/srs_modulation.c
index 8bb2299b7cc82569b5af4e2d429356316c1a527b..e6960273c7300a707c44437f14bf4b146c2725fd 100644
--- a/openair1/PHY/LTE_UE_TRANSPORT/srs_modulation.c
+++ b/openair1/PHY/LTE_UE_TRANSPORT/srs_modulation.c
@@ -181,7 +181,7 @@ int32_t generate_srs(LTE_DL_FRAME_PARMS *frame_parms,
     return(-1);
   }
 
-  Msc_idx_ptr = (uint16_t*) bsearch((uint16_t*) &Msc_RS, (uint16_t*) dftsizes, 33, sizeof(uint16_t), compareints);
+  Msc_idx_ptr = (uint16_t*) bsearch((uint16_t*) &Msc_RS, (uint16_t*) dftsizes, 34, sizeof(uint16_t), compareints);
 
   if (Msc_idx_ptr)
     Msc_RS_idx = Msc_idx_ptr - dftsizes;
diff --git a/openair1/PHY/LTE_UE_TRANSPORT/ulsch_modulation.c b/openair1/PHY/LTE_UE_TRANSPORT/ulsch_modulation.c
index 1281f815f854043279c767ac41bdadab620cb3f3..a9878b4eae49019a7a4d17063d60561f4bc16a3f 100644
--- a/openair1/PHY/LTE_UE_TRANSPORT/ulsch_modulation.c
+++ b/openair1/PHY/LTE_UE_TRANSPORT/ulsch_modulation.c
@@ -287,6 +287,12 @@ void dft_lte(int32_t *z,int32_t *d, int32_t Msc_PUSCH, uint8_t Nsymb)
     dft720((int16_t*)dft_in2,(int16_t*)dft_out2,1);
     break;
 
+  case 768:
+    dft768((int16_t*)dft_in0,(int16_t*)dft_out0,1);
+    dft768((int16_t*)dft_in1,(int16_t*)dft_out1,1);
+    dft768((int16_t*)dft_in2,(int16_t*)dft_out2,1);
+    break;
+
   case 864:
     dft864((int16_t*)dft_in0,(int16_t*)dft_out0,1);
     dft864((int16_t*)dft_in1,(int16_t*)dft_out1,1);
diff --git a/openair1/PHY/TOOLS/tools_defs.h b/openair1/PHY/TOOLS/tools_defs.h
index a5e8d49eb7d95eeeca4120fe5705eeb80fc3df61..6b7e0f559589453a60dfb5ea64117f485c9edc00 100644
--- a/openair1/PHY/TOOLS/tools_defs.h
+++ b/openair1/PHY/TOOLS/tools_defs.h
@@ -375,6 +375,7 @@ void dft576(int16_t *x,int16_t *y,uint8_t scale_flag);
 void dft600(int16_t *x,int16_t *y,uint8_t scale_flag);
 void dft648(int16_t *x,int16_t *y,uint8_t scale_flag);
 void dft720(int16_t *x,int16_t *y,uint8_t scale_flag);
+void dft768(int16_t *x,int16_t *y,uint8_t scale_flag);
 void dft864(int16_t *x,int16_t *y,uint8_t scale_flag);
 void dft900(int16_t *x,int16_t *y,uint8_t scale_flag);
 void dft960(int16_t *x,int16_t *y,uint8_t scale_flag);
diff --git a/openair1/SIMULATION/LTE_PHY/unitary_defs.h b/openair1/SIMULATION/LTE_PHY/unitary_defs.h
index eea8e89fbe6a02842e4058c074711da6ff590954..1f91df1306e0f71e0165bec462c482b9130703c3 100644
--- a/openair1/SIMULATION/LTE_PHY/unitary_defs.h
+++ b/openair1/SIMULATION/LTE_PHY/unitary_defs.h
@@ -31,5 +31,5 @@ void exit_function(const char* file, const char* function, const int line,const
 extern unsigned int dlsch_tbs25[27][25],TBStable[27][110];
 extern unsigned char offset_mumimo_llr_drange_fix;
 
-extern unsigned short dftsizes[33];
-extern short *ul_ref_sigs[30][2][33];
+extern unsigned short dftsizes[34];
+extern short *ul_ref_sigs[30][2][34];