From 7133633997f39d048121d4104794e53158c3f813 Mon Sep 17 00:00:00 2001
From: Florian Kaltenberger <florian.kaltenberger@eurecom.fr>
Date: Wed, 23 Nov 2016 15:17:01 +0100
Subject: [PATCH] bugfixes in precoder

---
 openair1/PHY/INIT/lte_init.c          | 13 +++++++------
 openair1/PHY/MODULATION/beamforming.c | 14 ++++++++------
 2 files changed, 15 insertions(+), 12 deletions(-)

diff --git a/openair1/PHY/INIT/lte_init.c b/openair1/PHY/INIT/lte_init.c
index 0009dbfefe..1c0ed16e0f 100644
--- a/openair1/PHY/INIT/lte_init.c
+++ b/openair1/PHY/INIT/lte_init.c
@@ -1251,12 +1251,13 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB,
         common_vars->beam_weights[eNB_id][i] = (int32_t **)malloc16_clear(fp->nb_antennas_tx*sizeof(int32_t*));
         for (j=0; j<fp->nb_antennas_tx; j++) {
           common_vars->beam_weights[eNB_id][i][j] = (int32_t *)malloc16_clear(fp->ofdm_symbol_size*sizeof(int32_t));
-          for (re=0; re<fp->ofdm_symbol_size; re++) 
-            common_vars->beam_weights[eNB_id][i][j][re] = 0x00007fff; 
-#ifdef DEBUG_PUY
-          msg("[openair][LTE_PHY][INIT] lte_common_vars->beam_weights[%d][%d][%d] = %p (%d bytes)\n",
-              eNB_id,i,j,common_vars->beam_weights[eNB_id][i][j],
-              OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(int32_t));
+	  if (i==j) 
+	    for (re=0; re<fp->ofdm_symbol_size; re++) 
+	      common_vars->beam_weights[eNB_id][i][j][re] = 0x00007fff; 
+#ifdef DEBUG_PHY
+	  msg("[openair][LTE_PHY][INIT] lte_common_vars->beam_weights[%d][%d][%d] = %p (%d bytes)\n",
+	      eNB_id,i,j,common_vars->beam_weights[eNB_id][i][j],
+	      OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(int32_t));
 #endif
         }
       }
diff --git a/openair1/PHY/MODULATION/beamforming.c b/openair1/PHY/MODULATION/beamforming.c
index 3aa7810aec..5e4660f034 100644
--- a/openair1/PHY/MODULATION/beamforming.c
+++ b/openair1/PHY/MODULATION/beamforming.c
@@ -61,18 +61,19 @@ int beam_precoding(int32_t **txdataF,
 
   // clear txdata_BF[aa][re] for each call of ue_spec_beamforming
   for(aa=0;aa<frame_parms->nb_antennas_tx;aa++)
-    memset(txdataF_BF[aa],0,4*(frame_parms->ofdm_symbol_size));
+    memset(txdataF_BF[aa],0,sizeof(int32_t)*(frame_parms->ofdm_symbol_size));
 
   for (re=0;re<frame_parms->ofdm_symbol_size;re++) {
     for (p=0; p<2; p++) {
       if (txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re]!=0) {
         for (aa=0;aa<frame_parms->nb_antennas_tx;aa++) {
-          ((int16_t*)&txdataF_BF[aa][re])[0] = (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0]*((int16_t*)&beam_weights[p][aa][re])[0])>>15);
+          ((int16_t*)&txdataF_BF[aa][re])[0] += (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0]*((int16_t*)&beam_weights[p][aa][re])[0])>>15);
           ((int16_t*)&txdataF_BF[aa][re])[0] -= (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1]*((int16_t*)&beam_weights[p][aa][re])[1])>>15);
-          ((int16_t*)&txdataF_BF[aa][re])[1] = (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0]*((int16_t*)&beam_weights[p][aa][re])[1])>>15);
-          ((int16_t*)&txdataF_BF[aa][re])[1] += (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1]*((int16_t*)&beam_weights[0][aa][re])[0])>>15);
+          ((int16_t*)&txdataF_BF[aa][re])[1] += (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0]*((int16_t*)&beam_weights[p][aa][re])[1])>>15);
+          ((int16_t*)&txdataF_BF[aa][re])[1] += (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1]*((int16_t*)&beam_weights[p][aa][re])[0])>>15);
 
-          /*printf("beamforming.c:txdata[%d][%d]=%d+j%d, beam_weights[%d][%d][%d]=%d+j%d,txdata_BF[%d][%d]=%d+j%d\n",
+	  /*
+          printf("beamforming.c:txdataF[%d][%d]=%d+j%d, beam_weights[%d][%d][%d]=%d+j%d,txdata_BF[%d][%d]=%d+j%d\n",
                  p,slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re,
                  ((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0],
                  ((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1],
@@ -80,7 +81,8 @@ int beam_precoding(int32_t **txdataF,
                  ((int16_t*)&beam_weights[p][aa][re])[0],((int16_t*)&beam_weights[p][aa][re])[1],
                  aa,re,
                  ((int16_t*)&txdataF_BF[aa][re])[0],
-                 ((int16_t*)&txdataF_BF[aa][re])[1]); */
+                 ((int16_t*)&txdataF_BF[aa][re])[1]); 
+	  */
         }
       
       } 
-- 
GitLab