From 95762833810d3d5bd4f50ab8e899e1d2b55cb71c Mon Sep 17 00:00:00 2001
From: lukashov <elena.lukashova@eurecom.fr>
Date: Wed, 25 Nov 2015 20:38:52 +0100
Subject: [PATCH] feature-59-tm4: fixing merge bugs in lte_phy_scope

---
 openair1/PHY/TOOLS/lte_phy_scope.c  | 225 +++++++++++++++-------------
 openair1/PHY/TOOLS/lte_phy_scope.h  |   3 -
 openair1/SIMULATION/LTE_PHY/dlsim.c |   2 +-
 3 files changed, 119 insertions(+), 111 deletions(-)

diff --git a/openair1/PHY/TOOLS/lte_phy_scope.c b/openair1/PHY/TOOLS/lte_phy_scope.c
index b32477873fb..f40377c85b6 100644
--- a/openair1/PHY/TOOLS/lte_phy_scope.c
+++ b/openair1/PHY/TOOLS/lte_phy_scope.c
@@ -521,16 +521,17 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form,
     float freq[nsymb_ce*nb_antennas_rx*nb_antennas_tx];
     int frame = phy_vars_ue->frame_rx;
     uint32_t total_dlsch_bitrate = phy_vars_ue->bitrate[eNB_id];
-    int coded_bits_per_codeword=0,coded_bits_per_codeword1=1;
-    int mod,mod1;
-    int mcs = 0;
+    int coded_bits_per_codeword0=0,coded_bits_per_codeword1=1;
+    int mod0,mod1;
+    int mcs0 = 0;
+    int mcs1=0;
     unsigned char harq_pid = 0;
     if (phy_vars_ue->dlsch_ue[eNB_id][0]!=NULL) {
         harq_pid = phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid;
 	if (harq_pid>=8)
 	  return;
 	
-    mcs = phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->mcs;
+    mcs0 = phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->mcs;
 
         // Button 0
 	/*
@@ -539,7 +540,16 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form,
             fl_show_object(form->button_0);
         } 
 	*/
-    }        
+    }   
+    
+    
+       if (phy_vars_ue->dlsch_ue[eNB_id][1]!=NULL) {
+        harq_pid = phy_vars_ue->dlsch_ue[eNB_id][1]->current_harq_pid;
+	if (harq_pid>=8)
+	  return;
+	
+    mcs1 = phy_vars_ue->dlsch_ue[eNB_id][1]->harq_processes[harq_pid]->mcs;
+    }
     
     if (phy_vars_ue->lte_ue_pdcch_vars[eNB_id]!=NULL) {
         num_pdcch_symbols = phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols;
@@ -547,25 +557,25 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form,
 
     //    coded_bits_per_codeword = frame_parms->N_RB_DL*12*get_Qm(mcs)*(frame_parms->symbols_per_tti);
     if (phy_vars_ue->dlsch_ue[eNB_id][0]!=NULL) {
-      mod = get_Qm(phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->mcs);
-      coded_bits_per_codeword = get_G(frame_parms,
+      mod0 = get_Qm(mcs0);
+      coded_bits_per_codeword0 = get_G(frame_parms,
 				      phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->nb_rb,
-				      phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->rb_alloc,
-				      get_Qm(phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->mcs),
+				      phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->rb_alloc_even,
+				      get_Qm(mcs0),
 				      phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->Nl,
 				      num_pdcch_symbols,
 				      frame,
 				      subframe);
     } else {
-      coded_bits_per_codeword = 0; //frame_parms->N_RB_DL*12*get_Qm(mcs)*(frame_parms->symbols_per_tti);
-      mod=0;
+      coded_bits_per_codeword0 = 0; //frame_parms->N_RB_DL*12*get_Qm(mcs)*(frame_parms->symbols_per_tti);
+      mod0=0;
     }
     if (phy_vars_ue->dlsch_ue[eNB_id][1]!=NULL) {
-      mod1 = get_Qm(phy_vars_ue->dlsch_ue[eNB_id][1]->harq_processes[harq_pid]->mcs);
+      mod1 = get_Qm(mcs1);
       coded_bits_per_codeword1 = get_G(frame_parms,
 				       phy_vars_ue->dlsch_ue[eNB_id][1]->harq_processes[harq_pid]->nb_rb,
-				       phy_vars_ue->dlsch_ue[eNB_id][1]->harq_processes[harq_pid]->rb_alloc,
-				       get_Qm(phy_vars_ue->dlsch_ue[eNB_id][1]->harq_processes[harq_pid]->mcs),
+				       phy_vars_ue->dlsch_ue[eNB_id][1]->harq_processes[harq_pid]->rb_alloc_even,
+				       get_Qm(mcs1),
 				       phy_vars_ue->dlsch_ue[eNB_id][1]->harq_processes[harq_pid]->Nl,
 				       num_pdcch_symbols,
 				       frame,
@@ -582,8 +592,8 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form,
         chest_t_abs[arx] = (float*) calloc(frame_parms->ofdm_symbol_size,sizeof(float));
     }
     chest_f_abs = (float*) calloc(nsymb_ce*nb_antennas_rx*nb_antennas_tx,sizeof(float));
-    llr = (float*) calloc(coded_bits_per_codeword,sizeof(float)); // init to zero
-    bit = malloc(coded_bits_per_codeword*sizeof(float));
+    llr = (float*) calloc(coded_bits_per_codeword0,sizeof(float)); // init to zero
+    bit = malloc(coded_bits_per_codeword0*sizeof(float));
     llr_pdcch = (float*) calloc(12*frame_parms->N_RB_DL*num_pdcch_symbols*2,sizeof(float)); // init to zero
     bit_pdcch = (float*) calloc(12*frame_parms->N_RB_DL*num_pdcch_symbols*2,sizeof(float));
     
@@ -626,11 +636,7 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form,
                 fl_add_xyplot_overlay(form->rxsig_t,arx,time,rxsig_t_dB[arx],FRAME_LENGTH_COMPLEX_SAMPLES,rx_antenna_colors[arx]);
             }
         }
-
-        fl_add_xyplot_overlay(form->rxsig_t,arx,time,rxsig_t_dB[arx],FRAME_LENGTH_COMPLEX_SAMPLES,rx_antenna_colors[arx]);
-      }
     }
-  }
 
   // Channel Impulse Response (still repeated format)
   if (chest_t != NULL) {
@@ -660,83 +666,118 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form,
         fl_set_xyplot_overlay_type(form->chest_t,arx,FL_DASHED_XYPLOT);
       }
     }
-
-
-    /*
+     // Avoid flickering effect
+        //        fl_get_xyplot_ybounds(form->chest_t,&ymin,&ymax);
+        fl_set_xyplot_ybounds(form->chest_t,0,ymax);
+    }
+    
+   // Channel Frequency Response (includes 5 complex sample for filter)
+    if (chest_f != NULL) {
+        ind = 0;
+        for (atx=0;atx<nb_antennas_tx;atx++) {
+            for (arx=0;arx<nb_antennas_rx;arx++) {
+                if (chest_f[(atx<<1)+arx] != NULL) {
+                    for (k=0; k<nsymb_ce; k++) {                     
+                        freq[ind] = (float)ind;
+                        Re = (float)(chest_f[(atx<<1)+arx][(2*k)]);
+                        Im = (float)(chest_f[(atx<<1)+arx][(2*k)+1]);
+                        
+                        chest_f_abs[ind] = (short)10*log10(1.0+((double)Re*Re + (double)Im*Im));
+                        ind++;
+                    }
+                }
+            }
+        }
+        
+        // tx antenna 0
+        fl_set_xyplot_xbounds(form->chest_f,0,nb_antennas_rx*nb_antennas_tx*nsymb_ce);
+        //fl_set_xyplot_xtics(form->chest_f,nb_antennas_rx*nb_antennas_tx*frame_parms->symbols_per_tti,2);
+        //        fl_set_xyplot_xtics(form->chest_f,nb_antennas_rx*nb_antennas_tx*2,2);
+        fl_set_xyplot_xgrid(form->chest_f,FL_GRID_MAJOR);
+        fl_set_xyplot_data(form->chest_f,freq,chest_f_abs,nsymb_ce,"","","");
+        
+        for (arx=1;arx<nb_antennas_rx;arx++) {
+            fl_add_xyplot_overlay(form->chest_f,1,&freq[arx*nsymb_ce],&chest_f_abs[arx*nsymb_ce],nsymb_ce,rx_antenna_colors[arx]);
+        }
+        // other tx antennas
+        if (nb_antennas_tx > 1) {
+            if (nb_antennas_rx > 1) {
+                for (atx=1;atx<nb_antennas_tx;atx++) {
+                    for (arx=0;arx<nb_antennas_rx;arx++) {
+                        fl_add_xyplot_overlay(form->chest_f,(atx<<1)+arx,&freq[((atx<<1)+arx)*nsymb_ce],&chest_f_abs[((atx<<1)+arx)*nsymb_ce],nsymb_ce,rx_antenna_colors[arx]);
+                    }
+                }
+            } else { // 1 rx antenna
+                atx=1; arx=0;
+                fl_add_xyplot_overlay(form->chest_f,atx,&freq[atx*nsymb_ce],&chest_f_abs[atx*nsymb_ce],nsymb_ce,rx_antenna_colors[arx]);
+            }
+        }
+    }
+ /*
     // PBCH LLRs
     if (pbch_llr != NULL) {
         for (i=0; i<1920;i++) {
             llr_pbch[i] = (float) pbch_llr[i];
             bit_pbch[i] = (float) i;
         }
-      }
+        
+        fl_set_xyplot_data(form->pbch_llr,bit_pbch,llr_pbch,1920,"","","");
     }
 
-    // tx antenna 0
-    fl_set_xyplot_xbounds(form->chest_f,0,nb_antennas_rx*nb_antennas_tx*nsymb_ce);
-    //fl_set_xyplot_xtics(form->chest_f,nb_antennas_rx*nb_antennas_tx*frame_parms->symbols_per_tti,2);
-    //        fl_set_xyplot_xtics(form->chest_f,nb_antennas_rx*nb_antennas_tx*2,2);
-    fl_set_xyplot_xgrid(form->chest_f,FL_GRID_MAJOR);
-    fl_set_xyplot_data(form->chest_f,freq,chest_f_abs,nsymb_ce,"","","");
-
-    for (arx=1; arx<nb_antennas_rx; arx++) {
-      fl_add_xyplot_overlay(form->chest_f,1,&freq[arx*nsymb_ce],&chest_f_abs[arx*nsymb_ce],nsymb_ce,rx_antenna_colors[arx]);
+    // PBCH I/Q of MF Output
+    if (pbch_comp!=NULL) {
+        for (i=0; i<72*2; i++) {
+            I[i] = pbch_comp[2*i];
+            Q[i] = pbch_comp[2*i+1];
+        }
+        
+        fl_set_xyplot_data(form->pbch_comp,I,Q,72*2,"","","");
     }
 
-    // other tx antennas
-    if (nb_antennas_tx > 1) {
-      if (nb_antennas_rx > 1) {
-        for (atx=1; atx<nb_antennas_tx; atx++) {
-          for (arx=0; arx<nb_antennas_rx; arx++) {
-            fl_add_xyplot_overlay(form->chest_f,(atx<<1)+arx,&freq[((atx<<1)+arx)*nsymb_ce],&chest_f_abs[((atx<<1)+arx)*nsymb_ce],nsymb_ce,rx_antenna_colors[arx]);
-          }
+    // PDCCH LLRs
+    if (pdcch_llr != NULL) {
+        for (i=0; i<12*frame_parms->N_RB_DL*2*num_pdcch_symbols;i++) {
+            llr_pdcch[i] = (float) pdcch_llr[i];
+            bit_pdcch[i] = (float) i;
         }
-      } else { // 1 rx antenna
-        atx=1;
-        arx=0;
-        fl_add_xyplot_overlay(form->chest_f,atx,&freq[atx*nsymb_ce],&chest_f_abs[atx*nsymb_ce],nsymb_ce,rx_antenna_colors[arx]);
-      }
-    }
-  }
 
-  // PBCH LLRs
-  if (pbch_llr != NULL) {
-    for (i=0; i<1920; i++) {
-      llr_pbch[i] = (float) pbch_llr[i];
-      bit_pbch[i] = (float) i;
+        fl_set_xyplot_xbounds(form->pdcch_llr,0,12*frame_parms->N_RB_DL*2*3);
+        fl_set_xyplot_data(form->pdcch_llr,bit_pdcch,llr_pdcch,12*frame_parms->N_RB_DL*2*num_pdcch_symbols,"","","");
     }
 
-    fl_set_xyplot_data(form->pbch_llr,bit_pbch,llr_pbch,1920,"","","");
-  }
-
-  // PBCH I/Q of MF Output
-  if (pbch_comp!=NULL) {
-    for (i=0; i<72*2; i++) {
-      I[i] = pbch_comp[2*i];
-      Q[i] = pbch_comp[2*i+1];
+    // PDCCH I/Q of MF Output
+    if (pdcch_comp!=NULL) {
+        for (i=0; i<12*frame_parms->N_RB_DL*num_pdcch_symbols; i++) {
+            I[i] = pdcch_comp[2*i];
+            Q[i] = pdcch_comp[2*i+1];
+        }
+        
+        fl_set_xyplot_data(form->pdcch_comp,I,Q,12*frame_parms->N_RB_DL*num_pdcch_symbols,"","","");
     }
     */
 
-    // PDSCH LLRs
+    // PDSCH LLRs CW0
     if (pdsch_llr != NULL) {
-        for (i=0; i<coded_bits_per_codeword/mod; i++) {
-            llr[i] = (float) pdsch_llr[mod*i];
+        for (i=0; i<coded_bits_per_codeword0/mod0; i++) {
+            llr[i] = (float) pdsch_llr[mod0*i];
             bit[i] = (float) i;
         }
 
-        fl_set_xyplot_xbounds(form->pdsch_llr,0,coded_bits_per_codeword/mod);        
-        fl_set_xyplot_data(form->pdsch_llr,bit,llr,coded_bits_per_codeword/mod,"","","");
+        fl_set_xyplot_xbounds(form->pdsch_llr,0,coded_bits_per_codeword0/mod0);        
+        fl_set_xyplot_data(form->pdsch_llr,bit,llr,coded_bits_per_codeword0/mod0,"","","");
     }
 
-    fl_set_xyplot_xbounds(form->pdcch_llr,0,12*frame_parms->N_RB_DL*2*3);
-    fl_set_xyplot_data(form->pdcch_llr,bit_pdcch,llr_pdcch,12*frame_parms->N_RB_DL*2*num_pdcch_symbols,"","","");
-  }
-
-  // PDCCH I/Q of MF Output
-  if (pdcch_comp!=NULL) {
-    for (i=0; i<12*frame_parms->N_RB_DL*num_pdcch_symbols; i++) {
-      I[i] = pdcch_comp[2*i];
-      Q[i] = pdcch_comp[2*i+1];
+  // PDSCH I/Q of MF Output
+    if (pdsch_comp!=NULL) {
+        ind=0;
+        for (k=0; k<frame_parms->symbols_per_tti; k++) {
+            for (i=0; i<12*frame_parms->N_RB_DL/2; i++) {
+                I[ind] = pdsch_comp[(2*frame_parms->N_RB_DL*12*k)+4*i];
+                Q[ind] = pdsch_comp[(2*frame_parms->N_RB_DL*12*k)+4*i+1];
+                ind++;
+            }
+        }
+        fl_set_xyplot_data(form->pdsch_comp,I,Q,ind,"","","");
     }
 
 
@@ -751,6 +792,8 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form,
         }
         fl_add_xyplot_overlay(form->pdsch_comp,1,I,Q,ind,FL_GREEN);
     }
+    
+    
     if (pdsch_magb0 != NULL) {
         ind=0;
         for (k=0; k<frame_parms->symbols_per_tti; k++) {
@@ -781,7 +824,7 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form,
     }
  
 
-    // PDSCH LLRs
+    // PDSCH LLRs CW1
     if (pdsch_llr1 != NULL) {
         for (i=0; i<coded_bits_per_codeword1/mod1; i++) {
             llr[i] = (float) pdsch_llr1[mod1*i];
@@ -880,37 +923,5 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form,
         free(chest_t_abs[arx]);
     }
 
-    fl_set_xyplot_data(form->pdsch_comp,I,Q,ind,"","","");
-  }
-
-  // PDSCH Throughput
-  memmove( tput_time_ue[UE_id], &tput_time_ue[UE_id][1], (TPUT_WINDOW_LENGTH-1)*sizeof(float) );
-  memmove( tput_ue[UE_id],      &tput_ue[UE_id][1],      (TPUT_WINDOW_LENGTH-1)*sizeof(float) );
-
-  tput_time_ue[UE_id][TPUT_WINDOW_LENGTH-1]  = (float) frame;
-  tput_ue[UE_id][TPUT_WINDOW_LENGTH-1] = ((float) total_dlsch_bitrate)/1000.0;
-
-  if (tput_ue[UE_id][TPUT_WINDOW_LENGTH-1] > tput_ue_max[UE_id]) {
-    tput_ue_max[UE_id] = tput_ue[UE_id][TPUT_WINDOW_LENGTH-1];
-  }
-
-  fl_set_xyplot_data(form->pdsch_tput,tput_time_ue[UE_id],tput_ue[UE_id],TPUT_WINDOW_LENGTH,"","","");
-
-  fl_set_xyplot_ybounds(form->pdsch_tput,0,tput_ue_max[UE_id]);
-
-  fl_check_forms();
-
-  free(I);
-  free(Q);
-  free(chest_f_abs);
-  free(llr);
-  free(bit);
-  free(bit_pdcch);
-  free(llr_pdcch);
-
-  for (arx=0; arx<nb_antennas_rx; arx++) {
-    free(chest_t_abs[arx]);
   }
 
-  free(chest_t_abs);
-}
diff --git a/openair1/PHY/TOOLS/lte_phy_scope.h b/openair1/PHY/TOOLS/lte_phy_scope.h
index 889c119feb5..daf98d69e0c 100644
--- a/openair1/PHY/TOOLS/lte_phy_scope.h
+++ b/openair1/PHY/TOOLS/lte_phy_scope.h
@@ -87,7 +87,4 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form,
 
 
 
-
-
-
 #endif /* FD_lte_scope_h_ */
diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c
index 3d4c140ce50..2db6cc46f81 100644
--- a/openair1/SIMULATION/LTE_PHY/dlsim.c
+++ b/openair1/SIMULATION/LTE_PHY/dlsim.c
@@ -385,7 +385,7 @@ int main(int argc, char **argv)
   num_layers = 1;
   perfect_ce = 0;
 
-  while ((c = getopt (argc, argv, "ahdpZDe:m:n:o:s:f:t:c:g:r:F:x:y:z:AM:N:I:i:O:R:S:C:T:b:u:v:w:B:PLl:Y")) != -1) {
+  while ((c = getopt (argc, argv, "ahdpZDe:m:n:o:s:f:t:c:g:r:F:x:y:z:AM:N:I:i:O:R:S:C:T:b:u:v:w:B:PLl:Y:X")) != -1) {
     switch (c) {
     case 'a':
       awgn_flag = 1;
-- 
GitLab