diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt
index 33867b6723..f52a3c465f 100644
--- a/cmake_targets/CMakeLists.txt
+++ b/cmake_targets/CMakeLists.txt
@@ -844,6 +844,7 @@ set(PHY_SRC
${OPENAIR1_DIR}/PHY/CODING/viterbi_lte.c
${OPENAIR1_DIR}/PHY/INIT/lte_init.c
${OPENAIR1_DIR}/PHY/INIT/lte_parms.c
+ ${OPENAIR1_DIR}/PHY/INIT/lte_param_init.c
${OPENAIR1_DIR}/PHY/TOOLS/file_output.c
${OPENAIR1_DIR}/PHY/TOOLS/lte_dfts.c
${OPENAIR1_DIR}/PHY/TOOLS/log2_approx.c
diff --git a/cmake_targets/autotests/test_case_list.xml b/cmake_targets/autotests/test_case_list.xml
index 2a247bf5e2..f9399b591a 100644
--- a/cmake_targets/autotests/test_case_list.xml
+++ b/cmake_targets/autotests/test_case_list.xml
@@ -886,7 +886,7 @@
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf -W
@@ -970,7 +970,7 @@
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf -W
@@ -1053,7 +1053,7 @@
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf -W
@@ -1136,7 +1136,7 @@
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf -W
@@ -1218,7 +1218,7 @@
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf -W
@@ -1301,7 +1301,7 @@
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf -W
@@ -1385,7 +1385,7 @@
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf -W
@@ -1469,7 +1469,7 @@
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf -W
@@ -1552,7 +1552,7 @@
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf -W
@@ -1635,7 +1635,7 @@
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf -W
@@ -1718,7 +1718,7 @@
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf -W
@@ -1801,7 +1801,7 @@
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf -W
@@ -1880,7 +1880,7 @@
sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf -W
@@ -1959,7 +1959,7 @@
sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf -W
@@ -2037,7 +2037,7 @@
sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf -W
@@ -2115,7 +2115,7 @@
sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf -W
@@ -2192,7 +2192,7 @@
sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail
sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf -W
@@ -2269,7 +2269,7 @@
sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf -W
@@ -2349,7 +2349,7 @@
sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2; dmesg|tail
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf -W
@@ -2428,7 +2428,7 @@
sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 ; dmesg|tail
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf -W
@@ -2506,7 +2506,7 @@
sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 ; dmesg|tail
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf -W
@@ -2584,7 +2584,7 @@
sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 ; dmesg|tail
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf -W
@@ -2661,7 +2661,7 @@
sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 ; dmesg|tail
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf -W
@@ -2738,7 +2738,7 @@
sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 ; dmesg|tail
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf -W
@@ -2810,7 +2810,7 @@
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf -W
iperf -s
@@ -2889,7 +2889,7 @@
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf -W
diff --git a/cmake_targets/lte-simulators/CMakeLists.txt b/cmake_targets/lte-simulators/CMakeLists.txt
index 0b706c8748..7a0e84b425 100644
--- a/cmake_targets/lte-simulators/CMakeLists.txt
+++ b/cmake_targets/lte-simulators/CMakeLists.txt
@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 2.8)
set(PACKAGE_NAME "unitary_tests_simulators")
set(PHYSIM True)
set(RF_BOARD None)
-set(XFORMS True)
+set(XFORMS False)
set(DEBUG_PHY False)
set(MU_RECIEVER False)
diff --git a/openair1/PHY/INIT/lte_param_init.c b/openair1/PHY/INIT/lte_param_init.c
new file mode 100644
index 0000000000..2b827dcb0e
--- /dev/null
+++ b/openair1/PHY/INIT/lte_param_init.c
@@ -0,0 +1,106 @@
+#include
+#include
+#include
+#include
+#include
+
+#include "SIMULATION/TOOLS/defs.h"
+#include "PHY/types.h"
+#include "PHY/defs.h"
+#include "PHY/extern.h"
+
+extern PHY_VARS_eNB *PHY_vars_eNB;
+extern PHY_VARS_UE *PHY_vars_UE;
+
+void lte_param_init(unsigned char N_tx,
+ unsigned char N_rx,
+ unsigned char transmission_mode,
+ uint8_t extended_prefix_flag,
+ frame_t frame_type,
+ uint16_t Nid_cell,
+ uint8_t tdd_config,
+ uint8_t N_RB_DL,
+ uint8_t threequarter_fs,
+ uint8_t osf,
+ uint32_t perfect_ce)
+{
+
+ LTE_DL_FRAME_PARMS *lte_frame_parms;
+ int i;
+
+
+ printf("Start lte_param_init\n");
+ PHY_vars_eNB = malloc(sizeof(PHY_VARS_eNB));
+ PHY_vars_UE = malloc(sizeof(PHY_VARS_UE));
+ //PHY_config = malloc(sizeof(PHY_CONFIG));
+ mac_xface = malloc(sizeof(MAC_xface));
+
+ srand(0);
+ randominit(0);
+ set_taus_seed(0);
+
+ lte_frame_parms = &(PHY_vars_eNB->lte_frame_parms);
+
+ lte_frame_parms->N_RB_DL = N_RB_DL; //50 for 10MHz and 25 for 5 MHz
+ lte_frame_parms->N_RB_UL = N_RB_DL;
+ lte_frame_parms->threequarter_fs = threequarter_fs;
+ lte_frame_parms->Ncp = extended_prefix_flag;
+ lte_frame_parms->Nid_cell = Nid_cell;
+ lte_frame_parms->nushift = Nid_cell%6;
+ lte_frame_parms->nb_antennas_tx = N_tx;
+ lte_frame_parms->nb_antennas_rx = N_rx;
+ lte_frame_parms->nb_antennas_tx_eNB = N_tx;
+ lte_frame_parms->phich_config_common.phich_resource = one;
+ lte_frame_parms->tdd_config = tdd_config;
+ lte_frame_parms->frame_type = frame_type;
+ // lte_frame_parms->Csrs = 2;
+ // lte_frame_parms->Bsrs = 0;
+ // lte_frame_parms->kTC = 0;44
+ // lte_frame_parms->n_RRC = 0;
+ lte_frame_parms->mode1_flag = (transmission_mode == 1)? 1 : 0;
+
+ init_frame_parms(lte_frame_parms,osf);
+
+ //copy_lte_parms_to_phy_framing(lte_frame_parms, &(PHY_config->PHY_framing));
+
+ // phy_init_top(lte_frame_parms); //allocation
+
+ PHY_vars_UE->is_secondary_ue = 0;
+ PHY_vars_UE->lte_frame_parms = *lte_frame_parms;
+ PHY_vars_eNB->lte_frame_parms = *lte_frame_parms;
+
+ phy_init_lte_top(lte_frame_parms);
+ dump_frame_parms(lte_frame_parms);
+
+ PHY_vars_UE->PHY_measurements.n_adj_cells=0;
+ PHY_vars_UE->PHY_measurements.adj_cell_id[0] = Nid_cell+1;
+ PHY_vars_UE->PHY_measurements.adj_cell_id[1] = Nid_cell+2;
+
+ for (i=0; i<3; i++)
+ lte_gold(lte_frame_parms,PHY_vars_UE->lte_gold_table[i],Nid_cell+i);
+
+ phy_init_lte_ue(PHY_vars_UE,1,0);
+ phy_init_lte_eNB(PHY_vars_eNB,0,0,0);
+
+ generate_pcfich_reg_mapping(&PHY_vars_UE->lte_frame_parms);
+ generate_phich_reg_mapping(&PHY_vars_UE->lte_frame_parms);
+
+ // DL power control init
+ if (transmission_mode == 1) {
+ PHY_vars_eNB->pdsch_config_dedicated->p_a = dB0; // 4 = 0dB
+ ((PHY_vars_eNB->lte_frame_parms).pdsch_config_common).p_b = 0;
+ PHY_vars_UE->pdsch_config_dedicated->p_a = dB0; // 4 = 0dB
+ ((PHY_vars_UE->lte_frame_parms).pdsch_config_common).p_b = 0;
+ } else { // rho_a = rhob
+ PHY_vars_eNB->pdsch_config_dedicated->p_a = dB0; // 4 = 0dB
+ ((PHY_vars_eNB->lte_frame_parms).pdsch_config_common).p_b = 1;
+ PHY_vars_UE->pdsch_config_dedicated->p_a = dB0; // 4 = 0dB
+ ((PHY_vars_UE->lte_frame_parms).pdsch_config_common).p_b = 1;
+ }
+
+ PHY_vars_UE->perfect_ce = perfect_ce;
+
+ printf("Done lte_param_init\n");
+
+
+}
diff --git a/openair1/PHY/INIT/lte_parms.c b/openair1/PHY/INIT/lte_parms.c
index 55bd964aa7..fa0e731af9 100644
--- a/openair1/PHY/INIT/lte_parms.c
+++ b/openair1/PHY/INIT/lte_parms.c
@@ -68,33 +68,57 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf)
break;
default:
- msg("Illegal oversampling %d\n",osf);
+ printf("Illegal oversampling %d\n",osf);
return(-1);
}
switch (frame_parms->N_RB_DL) {
+
case 100:
if (osf>1) {
- msg("Illegal oversampling %d for N_RB_DL %d\n",osf,frame_parms->N_RB_DL);
+ printf("Illegal oversampling %d for N_RB_DL %d\n",osf,frame_parms->N_RB_DL);
return(-1);
}
- frame_parms->ofdm_symbol_size = 2048;
- frame_parms->log2_symbol_size = 11;
- frame_parms->samples_per_tti = 30720;
- frame_parms->first_carrier_offset = 2048-600;
+ if (frame_parms->threequarter_fs) {
+ frame_parms->ofdm_symbol_size = 1536;
+ frame_parms->samples_per_tti = 23040;
+ frame_parms->first_carrier_offset = 1536-600;
+ frame_parms->nb_prefix_samples=(frame_parms->nb_prefix_samples*3)>>2;
+ frame_parms->nb_prefix_samples0=(frame_parms->nb_prefix_samples0*3)>>2;
+ }
+ else {
+ frame_parms->ofdm_symbol_size = 2048;
+ frame_parms->samples_per_tti = 30720;
+ frame_parms->first_carrier_offset = 2048-600;
+ }
+ frame_parms->N_RBGS = 4;
+ frame_parms->N_RBG = 25;
+ break;
+
+ case 75:
+ if (osf>1) {
+ printf("Illegal oversampling %d for N_RB_DL %d\n",osf,frame_parms->N_RB_DL);
+ return(-1);
+ }
+
+
+ frame_parms->ofdm_symbol_size = 1536;
+ frame_parms->samples_per_tti = 23040;
+ frame_parms->first_carrier_offset = 1536-450;
+ frame_parms->nb_prefix_samples=(frame_parms->nb_prefix_samples*3)>>2;
+ frame_parms->nb_prefix_samples0=(frame_parms->nb_prefix_samples0*3)>>2;
frame_parms->N_RBGS = 4;
frame_parms->N_RBG = 25;
break;
case 50:
if (osf>1) {
- msg("Illegal oversampling %d for N_RB_DL %d\n",osf,frame_parms->N_RB_DL);
+ printf("Illegal oversampling %d for N_RB_DL %d\n",osf,frame_parms->N_RB_DL);
return(-1);
}
frame_parms->ofdm_symbol_size = 1024*osf;
- frame_parms->log2_symbol_size = 10+log2_osf;
frame_parms->samples_per_tti = 15360*osf;
frame_parms->first_carrier_offset = frame_parms->ofdm_symbol_size - 300;
frame_parms->nb_prefix_samples>>=(1-log2_osf);
@@ -105,13 +129,13 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf)
case 25:
if (osf>2) {
- msg("Illegal oversampling %d for N_RB_DL %d\n",osf,frame_parms->N_RB_DL);
+ printf("Illegal oversampling %d for N_RB_DL %d\n",osf,frame_parms->N_RB_DL);
return(-1);
}
frame_parms->ofdm_symbol_size = 512*osf;
- frame_parms->log2_symbol_size = 9+log2_osf;
+
frame_parms->samples_per_tti = 7680*osf;
frame_parms->first_carrier_offset = frame_parms->ofdm_symbol_size - 150;
frame_parms->nb_prefix_samples>>=(2-log2_osf);
@@ -124,7 +148,6 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf)
case 15:
frame_parms->ofdm_symbol_size = 256*osf;
- frame_parms->log2_symbol_size = 8+log2_osf;
frame_parms->samples_per_tti = 3840*osf;
frame_parms->first_carrier_offset = frame_parms->ofdm_symbol_size - 90;
frame_parms->nb_prefix_samples>>=(3-log2_osf);
@@ -135,7 +158,6 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf)
case 6:
frame_parms->ofdm_symbol_size = 128*osf;
- frame_parms->log2_symbol_size = 7+log2_osf;
frame_parms->samples_per_tti = 1920*osf;
frame_parms->first_carrier_offset = frame_parms->ofdm_symbol_size - 36;
frame_parms->nb_prefix_samples>>=(4-log2_osf);
@@ -145,7 +167,7 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf)
break;
default:
- msg("init_frame_parms: Error: Number of resource blocks (N_RB_DL %d) undefined, frame_parms = %p \n",frame_parms->N_RB_DL, frame_parms);
+ printf("init_frame_parms: Error: Number of resource blocks (N_RB_DL %d) undefined, frame_parms = %p \n",frame_parms->N_RB_DL, frame_parms);
return(-1);
break;
}
@@ -159,23 +181,22 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf)
void dump_frame_parms(LTE_DL_FRAME_PARMS *frame_parms)
{
- msg("frame_parms->N_RB_DL=%d\n",frame_parms->N_RB_DL);
- msg("frame_parms->N_RB_UL=%d\n",frame_parms->N_RB_UL);
- msg("frame_parms->Nid_cell=%d\n",frame_parms->Nid_cell);
- msg("frame_parms->Ncp=%d\n",frame_parms->Ncp);
- msg("frame_parms->Ncp_UL=%d\n",frame_parms->Ncp_UL);
- msg("frame_parms->nushift=%d\n",frame_parms->nushift);
- msg("frame_parms->frame_type=%d\n",frame_parms->frame_type);
- msg("frame_parms->tdd_config=%d\n",frame_parms->tdd_config);
- msg("frame_parms->tdd_config_S=%d\n",frame_parms->tdd_config_S);
- msg("frame_parms->mode1_flag=%d\n",frame_parms->mode1_flag);
- msg("frame_parms->nb_antennas_tx=%d\n",frame_parms->nb_antennas_tx);
- msg("frame_parms->nb_antennas_rx=%d\n",frame_parms->nb_antennas_rx);
- msg("frame_parms->ofdm_symbol_size=%d\n",frame_parms->ofdm_symbol_size);
- msg("frame_parms->log2_symbol_size=%d\n",frame_parms->log2_symbol_size);
- msg("frame_parms->nb_prefix_samples=%d\n",frame_parms->nb_prefix_samples);
- msg("frame_parms->nb_prefix_samples0=%d\n",frame_parms->nb_prefix_samples0);
- msg("frame_parms->first_carrier_offset=%d\n",frame_parms->first_carrier_offset);
- msg("frame_parms->samples_per_tti=%d\n",frame_parms->samples_per_tti);
- msg("frame_parms->symbols_per_tti=%d\n",frame_parms->symbols_per_tti);
+ printf("frame_parms->N_RB_DL=%d\n",frame_parms->N_RB_DL);
+ printf("frame_parms->N_RB_UL=%d\n",frame_parms->N_RB_UL);
+ printf("frame_parms->Nid_cell=%d\n",frame_parms->Nid_cell);
+ printf("frame_parms->Ncp=%d\n",frame_parms->Ncp);
+ printf("frame_parms->Ncp_UL=%d\n",frame_parms->Ncp_UL);
+ printf("frame_parms->nushift=%d\n",frame_parms->nushift);
+ printf("frame_parms->frame_type=%d\n",frame_parms->frame_type);
+ printf("frame_parms->tdd_config=%d\n",frame_parms->tdd_config);
+ printf("frame_parms->tdd_config_S=%d\n",frame_parms->tdd_config_S);
+ printf("frame_parms->mode1_flag=%d\n",frame_parms->mode1_flag);
+ printf("frame_parms->nb_antennas_tx=%d\n",frame_parms->nb_antennas_tx);
+ printf("frame_parms->nb_antennas_rx=%d\n",frame_parms->nb_antennas_rx);
+ printf("frame_parms->ofdm_symbol_size=%d\n",frame_parms->ofdm_symbol_size);
+ printf("frame_parms->nb_prefix_samples=%d\n",frame_parms->nb_prefix_samples);
+ printf("frame_parms->nb_prefix_samples0=%d\n",frame_parms->nb_prefix_samples0);
+ printf("frame_parms->first_carrier_offset=%d\n",frame_parms->first_carrier_offset);
+ printf("frame_parms->samples_per_tti=%d\n",frame_parms->samples_per_tti);
+ printf("frame_parms->symbols_per_tti=%d\n",frame_parms->symbols_per_tti);
}
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c
index 10c0cef42a..cfc2d929f1 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c
@@ -703,24 +703,28 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
void (*idft)(int16_t *,int16_t *, int);
- switch (phy_vars_ue->lte_frame_parms.log2_symbol_size) {
- case 7:
+ switch (phy_vars_ue->lte_frame_parms.ofdm_symbol_size) {
+ case 128:
idft = idft128;
break;
- case 8:
+ case 256:
idft = idft256;
break;
- case 9:
+ case 512:
idft = idft512;
break;
- case 10:
+ case 1024:
idft = idft1024;
break;
- case 11:
+ case 1536:
+ idft = idft1536;
+ break;
+
+ case 2048:
idft = idft2048;
break;
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c b/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c
index 9864a50ee2..6e2311789e 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c
@@ -61,7 +61,6 @@ int lte_sync_time_init(LTE_DL_FRAME_PARMS *frame_parms ) // LTE_UE_COMMON *com
{
int i,k;
- //unsigned short ds = frame_parms->log2_symbol_size - 7;
sync_corr_ue0 = (int *)malloc16(LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*sizeof(int)*frame_parms->samples_per_tti);
sync_corr_ue1 = (int *)malloc16(LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*sizeof(int)*frame_parms->samples_per_tti);
@@ -184,13 +183,6 @@ int lte_sync_time_init(LTE_DL_FRAME_PARMS *frame_parms ) // LTE_UE_COMMON *com
LOG_E(PHY,"Unsupported N_RB_DL %d\n",frame_parms->N_RB_DL);
break;
}
- /*
- frame_parms->twiddle_ifft, /// complex twiddle factors
- frame_parms->rev, /// bit reversed permutation vector
- frame_parms->log2_symbol_size,/// log2(FFT_SIZE)
- (frame_parms->log2_symbol_size/2),
- 0); /// 0 - input is in complex Q1.15 format, 1 - input is in complex redundant Q1.15 format)
- */
for (i=0; iofdm_symbol_size; i++)
((int32_t*)primary_synch0_time)[i] = sync_tmp[i];
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c
index 1d23bdca38..1eb663ec89 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c
@@ -432,7 +432,7 @@ int32_t lte_ul_channel_estimation(PHY_VARS_eNB *phy_vars_eNB,
in_fft_ptr_0 = &temp_in_fft_0[0];
in_fft_ptr_1 = &temp_in_fft_1[0];
- for(j=0; j<(1<<(frame_parms->log2_symbol_size))/12; j++) {
+ for(j=0; j<(frame_parms->ofdm_symbol_size)/12; j++) {
if (j>19) {
((int16_t*)in_fft_ptr_0)[-40+(2*j)] = ((int16_t*)temp_out_ifft_0)[-80+(2*j)]*rx_power_correction;
((int16_t*)in_fft_ptr_0)[-40+(2*j)+1] = ((int16_t*)temp_out_ifft_0)[-80+(2*j+1)]*rx_power_correction;
diff --git a/openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c b/openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c
index 6faf2e1ed0..8e64275b41 100644
--- a/openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c
+++ b/openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c
@@ -72,7 +72,7 @@ int lte_dl_cell_spec_SS(PHY_VARS_eNB *phy_vars_eNB,
else if ((p==1) && (l>0))
nu = 0;
else {
- msg("lte_dl_cell_spec: p %d, l %d -> ERROR\n",p,l);
+ printf("lte_dl_cell_spec: p %d, l %d -> ERROR\n",p,l);
return(-1);
}
@@ -94,9 +94,9 @@ int lte_dl_cell_spec_SS(PHY_VARS_eNB *phy_vars_eNB,
output[k] = qpsk[(phy_vars_eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3];
//output[k] = (lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3;
#ifdef DEBUG_DL_CELL_SPEC
- msg("Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n",
+ printf("Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n",
Ns,l,m,mprime_dword,mprime_qpsk_symb);
- msg("index = %d (k %d)\n",(phy_vars_eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k);
+ printf("index = %d (k %d)\n",(phy_vars_eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k);
#endif
mprime++;
@@ -151,7 +151,7 @@ int lte_dl_cell_spec(PHY_VARS_eNB *phy_vars_eNB,
else if ((p==1) && (l>0))
nu = 0;
else {
- msg("lte_dl_cell_spec: p %d, l %d -> ERROR\n",p,l);
+ printf("lte_dl_cell_spec: p %d, l %d -> ERROR\n",p,l);
return(-1);
}
@@ -177,9 +177,9 @@ int lte_dl_cell_spec(PHY_VARS_eNB *phy_vars_eNB,
output[k] = qpsk[(phy_vars_eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3];
//output[k] = (lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3;
#ifdef DEBUG_DL_CELL_SPEC
- msg("Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n",
+ printf("Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n",
Ns,l,m,mprime_dword,mprime_qpsk_symb);
- msg("index = %d (k %d)\n",(phy_vars_eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k);
+ printf("index = %d (k %d)\n",(phy_vars_eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k);
#endif
mprime++;
diff --git a/openair1/PHY/LTE_TRANSPORT/initial_sync.c b/openair1/PHY/LTE_TRANSPORT/initial_sync.c
index bc2a00d8e6..5c6b479b20 100644
--- a/openair1/PHY/LTE_TRANSPORT/initial_sync.c
+++ b/openair1/PHY/LTE_TRANSPORT/initial_sync.c
@@ -336,7 +336,9 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode)
#else
#ifndef OAI_USRP
+ #ifndef OAI_BLADERF
phy_adjust_gain(phy_vars_ue,0);
+ #endif
#endif
#endif
diff --git a/openair1/PHY/LTE_TRANSPORT/print_stats.c b/openair1/PHY/LTE_TRANSPORT/print_stats.c
index 53ca875953..3459825058 100644
--- a/openair1/PHY/LTE_TRANSPORT/print_stats.c
+++ b/openair1/PHY/LTE_TRANSPORT/print_stats.c
@@ -50,7 +50,7 @@
#endif
extern int mac_get_rrc_status(uint8_t Mod_id,uint8_t eNB_flag,uint8_t index);
-#if defined(OAI_USRP) || defined(EXMIMO)
+#if defined(OAI_USRP) || defined(EXMIMO) || defined(OAI_BLADERF)
#include "common_lib.h"
extern openair0_config_t openair0_cfg[];
#endif
@@ -67,11 +67,12 @@ int dump_ue_stats(PHY_VARS_UE *phy_vars_ue, char* buffer, int length, runmode_t
if ((mode == normal_txrx) || (mode == no_L2_connect)) {
len += sprintf(&buffer[len], "[UE_PROC] UE %d, RNTI %x\n",phy_vars_ue->Mod_id, phy_vars_ue->lte_ue_pdcch_vars[0]->crnti);
- len += sprintf(&buffer[len],"[UE PROC] RSRP[0] %.2f dBm/RE, RSSI %.2f dBm, RSRQ[0] %.2f dB, N0 %d dBm/RE\n",
+ len += sprintf(&buffer[len],"[UE PROC] RSRP[0] %.2f dBm/RE, RSSI %.2f dBm, RSRQ[0] %.2f dB, N0 %d dBm/RE (NF %.1f dB)\n",
10*log10(phy_vars_ue->PHY_measurements.rsrp[0])-phy_vars_ue->rx_total_gain_dB,
10*log10(phy_vars_ue->PHY_measurements.rssi)-phy_vars_ue->rx_total_gain_dB,
10*log10(phy_vars_ue->PHY_measurements.rsrq[0]),
- phy_vars_ue->PHY_measurements.n0_power_tot_dBm);
+ phy_vars_ue->PHY_measurements.n0_power_tot_dBm,
+ (double)phy_vars_ue->PHY_measurements.n0_power_tot_dBm+132.24);
/*
len += sprintf(&buffer[len],
@@ -96,10 +97,10 @@ int dump_ue_stats(PHY_VARS_UE *phy_vars_ue, char* buffer, int length, runmode_t
#ifdef EXMIMO
len += sprintf(&buffer[len], "[UE PROC] RX Gain %d dB (LNA %d, vga %d dB)\n",phy_vars_ue->rx_total_gain_dB, openair0_cfg[0].rxg_mode[0],(int)openair0_cfg[0].rx_gain[0]);
#endif
-#ifdef OAI_USRP
+#if defined(OAI_USRP) || defined(OAI_BLADERF)
len += sprintf(&buffer[len], "[UE PROC] RX Gain %d dB\n",phy_vars_ue->rx_total_gain_dB);
#endif
-#if defined(EXMIMO) || defined(OAI_USRP)
+#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF)
len += sprintf(&buffer[len], "[UE_PROC] Frequency offset %d Hz (%d), estimated carrier frequency %f Hz\n",phy_vars_ue->lte_ue_common_vars.freq_offset,openair_daq_vars.freq_offset,openair0_cfg[0].rx_freq[0]-phy_vars_ue->lte_ue_common_vars.freq_offset);
#endif
len += sprintf(&buffer[len], "[UE PROC] UE mode = %s (%d)\n",mode_string[phy_vars_ue->UE_mode[0]],phy_vars_ue->UE_mode[0]);
diff --git a/openair1/PHY/MODULATION/defs.h b/openair1/PHY/MODULATION/defs.h
index 8d45c15e00..6005d6d49a 100644
--- a/openair1/PHY/MODULATION/defs.h
+++ b/openair1/PHY/MODULATION/defs.h
@@ -34,12 +34,12 @@
*/
/**
-\fn void PHY_ofdm_mod(int *input,int *output,unsigned char log2fftsize,unsigned char nb_symbols,unsigned short nb_prefix_samples,Extension_t etype)
+\fn void PHY_ofdm_mod(int *input,int *output,int fftsize,unsigned char nb_symbols,unsigned short nb_prefix_samples,Extension_t etype)
This function performs OFDM modulation with cyclic extension or zero-padding.
@param input The sequence input samples in the frequency-domain. This is a concatenation of the input symbols in SIMD redundant format
@param output The time-domain output signal
-@param log2fftsize Base-2 logarithm of the OFDM symbol size (\f$N_d\f$)
+@param fftsize size of OFDM symbol size (\f$N_d\f$)
@param nb_symbols The number of OFDM symbols in the block
@param nb_prefix_samples The number of prefix/suffix/zero samples
@param etype Type of extension (CYCLIC_PREFIX,CYCLIC_SUFFIX,ZEROS)
@@ -47,7 +47,7 @@ This function performs OFDM modulation with cyclic extension or zero-padding.
*/
void PHY_ofdm_mod(int *input,
int *output,
- unsigned char log2fftsize,
+ int fftsize,
unsigned char nb_symbols,
unsigned short nb_prefix_samples,
Extension_t etype
diff --git a/openair1/PHY/MODULATION/ofdm_mod.c b/openair1/PHY/MODULATION/ofdm_mod.c
index 61e5f9fb5b..3dd76c0fbb 100755
--- a/openair1/PHY/MODULATION/ofdm_mod.c
+++ b/openair1/PHY/MODULATION/ofdm_mod.c
@@ -61,9 +61,9 @@ void normal_prefix_mod(int32_t *txdataF,int32_t *txdata,uint8_t nsymb,LTE_DL_FRA
txdata+(i*(frame_parms->samples_per_tti>>1)));
#endif
- PHY_ofdm_mod(txdataF+(i*NUMBER_OF_OFDM_CARRIERS*frame_parms->symbols_per_tti>>1), // input
+ PHY_ofdm_mod(txdataF+(i*frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti>>1), // input
txdata+(i*frame_parms->samples_per_tti>>1), // output
- frame_parms->log2_symbol_size, // log2_fft_size
+ frame_parms->ofdm_symbol_size,
1, // number of symbols
frame_parms->nb_prefix_samples0, // number of prefix samples
CYCLIC_PREFIX);
@@ -71,9 +71,9 @@ void normal_prefix_mod(int32_t *txdataF,int32_t *txdata,uint8_t nsymb,LTE_DL_FRA
printf("slot i %d (txdata offset %d)\n",i,OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES0+(i*frame_parms->samples_per_tti>>1));
#endif
- PHY_ofdm_mod(txdataF+NUMBER_OF_OFDM_CARRIERS+(i*NUMBER_OF_OFDM_CARRIERS*(frame_parms->symbols_per_tti>>1)), // input
+ PHY_ofdm_mod(txdataF+frame_parms->ofdm_symbol_size+(i*frame_parms->ofdm_symbol_size*(frame_parms->symbols_per_tti>>1)), // input
txdata+OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES0+(i*(frame_parms->samples_per_tti>>1)), // output
- frame_parms->log2_symbol_size, // log2_fft_size
+ frame_parms->ofdm_symbol_size,
(short_offset==1) ? 1 :(frame_parms->symbols_per_tti>>1)-1,//6, // number of symbols
frame_parms->nb_prefix_samples, // number of prefix samples
CYCLIC_PREFIX);
@@ -84,7 +84,7 @@ void normal_prefix_mod(int32_t *txdataF,int32_t *txdata,uint8_t nsymb,LTE_DL_FRA
void PHY_ofdm_mod(int *input, /// pointer to complex input
int *output, /// pointer to complex output
- unsigned char log2fftsize, /// log2(FFT_SIZE)
+ int fftsize, /// FFT_SIZE
unsigned char nb_symbols, /// number of OFDM symbols
unsigned short nb_prefix_samples, /// cyclic prefix length
Extension_t etype /// type of extension
@@ -100,24 +100,28 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
int *temp_ptr=(int*)0;
void (*idft)(int16_t *,int16_t *, int);
- switch (log2fftsize) {
- case 7:
+ switch (fftsize) {
+ case 128:
idft = idft128;
break;
- case 8:
+ case 256:
idft = idft256;
break;
- case 9:
+ case 512:
idft = idft512;
break;
- case 10:
+ case 1024:
idft = idft1024;
break;
- case 11:
+ case 1536:
+ idft = idft1536;
+ break;
+
+ case 2048:
idft = idft2048;
break;
@@ -127,8 +131,8 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
}
#ifdef DEBUG_OFDM_MOD
- msg("[PHY] OFDM mod (size %d,prefix %d) Symbols %d, input %p, output %p\n",
- 1< %p)\n",i,nb_symbols,input,&input[i< %p)\n",i,nb_symbols,i*fftsize+(i*nb_prefix_samples),input,&input[i*fftsize],&output[(i*fftsize) + ((i)*nb_prefix_samples)]);
#endif
- idft((int16_t *)&input[i<=-nb_prefix_samples; k--) {
output_ptr[k] = output_ptr[--j];
@@ -175,19 +175,19 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
case CYCLIC_SUFFIX:
- output_ptr = &output[(i<>1,slot_offset);
PHY_ofdm_mod(&txdataF[aa][slot_offset_F], // input
&txdata[aa][slot_offset], // output
- frame_parms->log2_symbol_size, // log2_fft_size
+ frame_parms->ofdm_symbol_size,
12, // number of symbols
frame_parms->ofdm_symbol_size>>2, // number of prefix samples
CYCLIC_PREFIX);
@@ -252,7 +245,7 @@ void do_OFDM_mod(mod_sym_t **txdataF, int32_t **txdata, uint32_t frame,uint16_t
if (frame_parms->Ncp == EXTENDED)
PHY_ofdm_mod(&txdataF[aa][slot_offset_F], // input
&txdata[aa][slot_offset], // output
- frame_parms->log2_symbol_size, // log2_fft_size
+ frame_parms->ofdm_symbol_size,
2, // number of symbols
frame_parms->nb_prefix_samples, // number of prefix samples
CYCLIC_PREFIX);
@@ -268,7 +261,7 @@ void do_OFDM_mod(mod_sym_t **txdataF, int32_t **txdata, uint32_t frame,uint16_t
if (frame_parms->Ncp == EXTENDED)
PHY_ofdm_mod(&txdataF[aa][slot_offset_F], // input
&txdata[aa][slot_offset], // output
- frame_parms->log2_symbol_size, // log2_fft_size
+ frame_parms->ofdm_symbol_size,
6, // number of symbols
frame_parms->nb_prefix_samples, // number of prefix samples
CYCLIC_PREFIX);
diff --git a/openair1/PHY/MODULATION/slot_fep.c b/openair1/PHY/MODULATION/slot_fep.c
index feb2d885b2..0d2389c2ae 100644
--- a/openair1/PHY/MODULATION/slot_fep.c
+++ b/openair1/PHY/MODULATION/slot_fep.c
@@ -58,24 +58,28 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
void (*dft)(int16_t *,int16_t *, int);
int tmp_dft_in[256]; // This is for misalignment issues for 6 and 15 PRBs
- switch (frame_parms->log2_symbol_size) {
- case 7:
+ switch (frame_parms->ofdm_symbol_size) {
+ case 128:
dft = dft128;
break;
- case 8:
+ case 256:
dft = dft256;
break;
- case 9:
+ case 512:
dft = dft512;
break;
- case 10:
+ case 1024:
dft = dft1024;
break;
- case 11:
+ case 1536:
+ dft = dft1536;
+ break;
+
+ case 2048:
dft = dft2048;
break;
@@ -96,12 +100,12 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
if (l<0 || l>=7-frame_parms->Ncp) {
- msg("slot_fep: l must be between 0 and %d\n",7-frame_parms->Ncp);
+ printf("slot_fep: l must be between 0 and %d\n",7-frame_parms->Ncp);
return(-1);
}
if (Ns<0 || Ns>=20) {
- msg("slot_fep: Ns must be between 0 and 19\n");
+ printf("slot_fep: Ns must be between 0 and 19\n");
return(-1);
}
@@ -116,7 +120,7 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
#ifdef DEBUG_FEP
// if (phy_vars_ue->frame <100)
- msg("slot_fep: frame %d: slot %d, symbol %d, nb_prefix_samples %d, nb_prefix_samples0 %d, slot_offset %d, subframe_offset %d, sample_offset %d,rx_offset %d\n", phy_vars_ue->frame_rx,Ns, symbol,
+ printf("slot_fep: frame %d: slot %d, symbol %d, nb_prefix_samples %d, nb_prefix_samples0 %d, slot_offset %d, subframe_offset %d, sample_offset %d,rx_offset %d\n", phy_vars_ue->frame_rx,Ns, symbol,
nb_prefix_samples,nb_prefix_samples0,slot_offset,subframe_offset,sample_offset,rx_offset);
#endif
@@ -147,7 +151,7 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
#ifdef DEBUG_FEP
// if (phy_vars_ue->frame <100)
- msg("slot_fep: frame %d: slot %d, symbol %d, nb_prefix_samples %d, nb_prefix_samples0 %d, slot_offset %d, subframe_offset %d, sample_offset %d,rx_offset %d\n", phy_vars_ue->frame_rx,Ns, symbol,
+ printf("slot_fep: frame %d: slot %d, symbol %d, nb_prefix_samples %d, nb_prefix_samples0 %d, slot_offset %d, subframe_offset %d, sample_offset %d,rx_offset %d\n", phy_vars_ue->frame_rx,Ns, symbol,
nb_prefix_samples,nb_prefix_samples0,slot_offset,subframe_offset,sample_offset,rx_offset);
#endif
@@ -182,7 +186,7 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
for (aa=0; aanb_antennas_tx_eNB; aa++) {
#ifdef DEBUG_FEP
- msg("Channel estimation eNB %d, aatx %d, slot %d, symbol %d\n",eNB_id,aa,Ns,l);
+ printf("Channel estimation eNB %d, aatx %d, slot %d, symbol %d\n",eNB_id,aa,Ns,l);
#endif
start_meas(&phy_vars_ue->dlsch_channel_estimation_stats);
lte_dl_channel_estimation(phy_vars_ue,eNB_id,0,
@@ -205,7 +209,7 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
// do frequency offset estimation here!
// use channel estimates from current symbol (=ch_t) and last symbol (ch_{t-1})
#ifdef DEBUG_FEP
- msg("Frequency offset estimation\n");
+ printf("Frequency offset estimation\n");
#endif
if (l==(4-frame_parms->Ncp)) {
@@ -222,7 +226,7 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
}
#ifdef DEBUG_FEP
- msg("slot_fep: done\n");
+ printf("slot_fep: done\n");
#endif
return(0);
}
diff --git a/openair1/PHY/MODULATION/slot_fep_mbsfn.c b/openair1/PHY/MODULATION/slot_fep_mbsfn.c
index 94dc4b3ef1..d71a9d0477 100644
--- a/openair1/PHY/MODULATION/slot_fep_mbsfn.c
+++ b/openair1/PHY/MODULATION/slot_fep_mbsfn.c
@@ -54,25 +54,29 @@ int slot_fep_mbsfn(PHY_VARS_UE *phy_vars_ue,
unsigned int frame_length_samples = frame_parms->samples_per_tti * 10;
void (*dft)(int16_t *,int16_t *, int);
- switch (frame_parms->log2_symbol_size) {
+ switch (frame_parms->ofdm_symbol_size) {
- case 7:
+ case 128:
dft = dft128;
break;
- case 8:
+ case 256:
dft = dft256;
break;
- case 9:
+ case 512:
dft = dft512;
break;
- case 10:
+ case 1024:
dft = dft1024;
break;
- case 11:
+ case 1536:
+ dft = dft1536;
+ break;
+
+ case 2048:
dft = dft2048;
break;
diff --git a/openair1/PHY/MODULATION/slot_fep_ul.c b/openair1/PHY/MODULATION/slot_fep_ul.c
index 32bae2c036..57f4a6f7ab 100644
--- a/openair1/PHY/MODULATION/slot_fep_ul.c
+++ b/openair1/PHY/MODULATION/slot_fep_ul.c
@@ -50,24 +50,28 @@ int slot_fep_ul(LTE_DL_FRAME_PARMS *frame_parms,
void (*dft)(int16_t *,int16_t *, int);
- switch (frame_parms->log2_symbol_size) {
- case 7:
+ switch (frame_parms->ofdm_symbol_size) {
+ case 128:
dft = dft128;
break;
- case 8:
+ case 256:
dft = dft256;
break;
- case 9:
+ case 512:
dft = dft512;
break;
- case 10:
+ case 1024:
dft = dft1024;
break;
- case 11:
+ case 1536:
+ dft = dft1536;
+ break;
+
+ case 2048:
dft = dft2048;
break;
diff --git a/openair1/PHY/TOOLS/lte_dfts.c b/openair1/PHY/TOOLS/lte_dfts.c
index ec4577a67a..b010f93aab 100644
--- a/openair1/PHY/TOOLS/lte_dfts.c
+++ b/openair1/PHY/TOOLS/lte_dfts.c
@@ -45,8 +45,10 @@
#define debug_msg
#define ONE_OVER_SQRT2_Q15 23170
+
#endif
+#define ONE_OVER_SQRT3_Q15 18919
#include "PHY/sse_intrin.h"
@@ -3180,6 +3182,8 @@ void idft1536(int16_t *input, int16_t *output)
int i,i2,j;
uint32_t tmp[3][512 ]__attribute__((aligned(16)));
uint32_t tmpo[3][512] __attribute__((aligned(16)));
+ simd_q15_t *y128p=(simd_q15_t*)output;
+ simd_q15_t ONE_OVER_SQRT3_Q15_128 = set1_int16(ONE_OVER_SQRT3_Q15);
for (i=0,j=0; i<512; i++) {
tmp[0][i] = ((uint32_t *)input)[j++];
@@ -3190,17 +3194,6 @@ void idft1536(int16_t *input, int16_t *output)
idft512((int16_t*)(tmp[0]),(int16_t*)(tmpo[0]),1);
idft512((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),1);
idft512((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),1);
- /*
- for (i=1; i<512; i++) {
- tmpo[0][i] = tmpo[0][i<<1];
- tmpo[1][i] = tmpo[1][i<<1];
- tmpo[2][i] = tmpo[2][i<<1];
- }*/
-
- // write_output("in.m","in",input,6144,1,1);
- // write_output("out0.m","o0",tmpo[0],2048,1,1);
- // write_output("out1.m","o1",tmpo[1],2048,1,1);
- // write_output("out2.m","o2",tmpo[2],2048,1,1);
for (i=0,i2=0; i<1024; i+=8,i2+=4) {
ibfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),((simd_q15_t*)&tmpo[2][i2]),
@@ -3209,6 +3202,26 @@ void idft1536(int16_t *input, int16_t *output)
}
+ for (i=0; i<24; i++) {
+ y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT3_Q15_128);
+ y128p[1] = mulhi_int16(y128p[1],ONE_OVER_SQRT3_Q15_128);
+ y128p[2] = mulhi_int16(y128p[2],ONE_OVER_SQRT3_Q15_128);
+ y128p[3] = mulhi_int16(y128p[3],ONE_OVER_SQRT3_Q15_128);
+ y128p[4] = mulhi_int16(y128p[4],ONE_OVER_SQRT3_Q15_128);
+ y128p[5] = mulhi_int16(y128p[5],ONE_OVER_SQRT3_Q15_128);
+ y128p[6] = mulhi_int16(y128p[6],ONE_OVER_SQRT3_Q15_128);
+ y128p[7] = mulhi_int16(y128p[7],ONE_OVER_SQRT3_Q15_128);
+ y128p[8] = mulhi_int16(y128p[8],ONE_OVER_SQRT3_Q15_128);
+ y128p[9] = mulhi_int16(y128p[9],ONE_OVER_SQRT3_Q15_128);
+ y128p[10] = mulhi_int16(y128p[10],ONE_OVER_SQRT3_Q15_128);
+ y128p[11] = mulhi_int16(y128p[11],ONE_OVER_SQRT3_Q15_128);
+ y128p[12] = mulhi_int16(y128p[12],ONE_OVER_SQRT3_Q15_128);
+ y128p[13] = mulhi_int16(y128p[13],ONE_OVER_SQRT3_Q15_128);
+ y128p[14] = mulhi_int16(y128p[14],ONE_OVER_SQRT3_Q15_128);
+ y128p[15] = mulhi_int16(y128p[15],ONE_OVER_SQRT3_Q15_128);
+ y128p+=16;
+ }
+
_mm_empty();
_m_empty();
diff --git a/openair1/PHY/TOOLS/signal_energy.c b/openair1/PHY/TOOLS/signal_energy.c
index 323a1831dc..373fdc0d90 100755
--- a/openair1/PHY/TOOLS/signal_energy.c
+++ b/openair1/PHY/TOOLS/signal_energy.c
@@ -197,7 +197,7 @@ int32_t signal_energy(int32_t *input,uint32_t length)
for (i=0; i>1; i++) {
tmpE = vqaddq_s32(tmpE,vshrq_n_s32(vmull_s16(*in,*in),shift));
- tmpDC = vaddw_s16(tmpDC,vshr_n_s16(*in++,shift_DC));
+ //tmpDC = vaddw_s16(tmpDC,vshr_n_s16(*in++,shift_DC));
}
diff --git a/openair1/PHY/impl_defs_lte.h b/openair1/PHY/impl_defs_lte.h
index a0ef6c005a..cd6ee4ecce 100644
--- a/openair1/PHY/impl_defs_lte.h
+++ b/openair1/PHY/impl_defs_lte.h
@@ -516,10 +516,10 @@ typedef struct {
uint8_t dual_tx;
/// flag to indicate SISO transmission
uint8_t mode1_flag;
+ /// Indicator that 20 MHz channel uses 3/4 sampling frequency
+ uint8_t threequarter_fs;
/// Size of FFT
uint16_t ofdm_symbol_size;
- /// log2(Size of FFT)
- uint8_t log2_symbol_size;
/// Number of prefix samples in all but first symbol of slot
uint16_t nb_prefix_samples;
/// Number of prefix samples in first symbol of slot
diff --git a/openair1/PHY/impl_defs_top.h b/openair1/PHY/impl_defs_top.h
index c84b7d3ece..67d2fb5b86 100755
--- a/openair1/PHY/impl_defs_top.h
+++ b/openair1/PHY/impl_defs_top.h
@@ -117,7 +117,6 @@
*/
#define NUMBER_OF_OFDM_CARRIERS (frame_parms->ofdm_symbol_size)
#define NUMBER_OF_SYMBOLS_PER_FRAME (frame_parms->symbols_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME)
-#define LOG2_NUMBER_OF_OFDM_CARRIERS (frame_parms->log2_symbol_size)
#define NUMBER_OF_USEFUL_CARRIERS (12*frame_parms->N_RB_DL)
#define NUMBER_OF_ZERO_CARRIERS (NUMBER_OF_OFDM_CARRIERS-NUMBER_OF_USEFUL_CARRIERS)
#define NUMBER_OF_USEFUL_CARRIERS_BYTES (NUMBER_OF_USEFUL_CARRIERS>>2)
diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c
index 7dcd71ce47..42a42e16b3 100755
--- a/openair1/SCHED/phy_procedures_lte_ue.c
+++ b/openair1/SCHED/phy_procedures_lte_ue.c
@@ -1262,7 +1262,7 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
#else
&phy_vars_ue->lte_ue_common_vars.txdata[aa][ulsch_start],
#endif
- frame_parms->log2_symbol_size,
+ frame_parms->ofdm_symbol_size,
nsymb,
frame_parms->nb_prefix_samples,
CYCLIC_PREFIX);
@@ -1553,7 +1553,9 @@ void lte_ue_measurement_procedures(uint16_t l, PHY_VARS_UE *phy_vars_ue,uint8_t
#else
#ifndef OAI_USRP
+ #ifndef OAI_BLADERF
phy_adjust_gain (phy_vars_ue,0);
+ #endif
#endif
#endif
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GAIN_CONTROL, VCD_FUNCTION_OUT);
diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c
index b74de2cb1a..b8dfac96a2 100644
--- a/openair1/SIMULATION/LTE_PHY/dlsim.c
+++ b/openair1/SIMULATION/LTE_PHY/dlsim.c
@@ -107,88 +107,6 @@ void handler(int sig)
exit(1);
}
-void lte_param_init(unsigned char N_tx, unsigned char N_rx,unsigned char transmission_mode,uint8_t extended_prefix_flag,uint8_t fdd_flag, uint16_t Nid_cell,uint8_t tdd_config,uint8_t N_RB_DL,
- uint8_t osf,uint32_t perfect_ce)
-{
-
- LTE_DL_FRAME_PARMS *lte_frame_parms;
- int i;
-
-
- printf("Start lte_param_init\n");
- PHY_vars_eNB = malloc(sizeof(PHY_VARS_eNB));
- PHY_vars_UE = malloc(sizeof(PHY_VARS_UE));
- //PHY_config = malloc(sizeof(PHY_CONFIG));
- mac_xface = malloc(sizeof(MAC_xface));
-
- srand(0);
- randominit(0);
- set_taus_seed(0);
-
- lte_frame_parms = &(PHY_vars_eNB->lte_frame_parms);
-
- lte_frame_parms->N_RB_DL = N_RB_DL; //50 for 10MHz and 25 for 5 MHz
- lte_frame_parms->N_RB_UL = N_RB_DL;
- lte_frame_parms->Ncp = extended_prefix_flag;
- lte_frame_parms->Nid_cell = Nid_cell;
- lte_frame_parms->nushift = Nid_cell%6;
- lte_frame_parms->nb_antennas_tx = N_tx;
- lte_frame_parms->nb_antennas_rx = N_rx;
- lte_frame_parms->nb_antennas_tx_eNB = N_tx;
- lte_frame_parms->phich_config_common.phich_resource = one;
- lte_frame_parms->tdd_config = tdd_config;
- lte_frame_parms->frame_type = (fdd_flag==1)?0 : 1;
- // lte_frame_parms->Csrs = 2;
- // lte_frame_parms->Bsrs = 0;
- // lte_frame_parms->kTC = 0;44
- // lte_frame_parms->n_RRC = 0;
- lte_frame_parms->mode1_flag = (transmission_mode == 1)? 1 : 0;
-
- init_frame_parms(lte_frame_parms,osf);
-
- //copy_lte_parms_to_phy_framing(lte_frame_parms, &(PHY_config->PHY_framing));
-
- // phy_init_top(lte_frame_parms); //allocation
-
- PHY_vars_UE->is_secondary_ue = 0;
- PHY_vars_UE->lte_frame_parms = *lte_frame_parms;
- PHY_vars_eNB->lte_frame_parms = *lte_frame_parms;
-
- phy_init_lte_top(lte_frame_parms);
- dump_frame_parms(lte_frame_parms);
-
- PHY_vars_UE->PHY_measurements.n_adj_cells=0;
- PHY_vars_UE->PHY_measurements.adj_cell_id[0] = Nid_cell+1;
- PHY_vars_UE->PHY_measurements.adj_cell_id[1] = Nid_cell+2;
-
- for (i=0; i<3; i++)
- lte_gold(lte_frame_parms,PHY_vars_UE->lte_gold_table[i],Nid_cell+i);
-
- phy_init_lte_ue(PHY_vars_UE,1,0);
- phy_init_lte_eNB(PHY_vars_eNB,0,0,0);
-
- generate_pcfich_reg_mapping(&PHY_vars_UE->lte_frame_parms);
- generate_phich_reg_mapping(&PHY_vars_UE->lte_frame_parms);
-
- // DL power control init
- if (transmission_mode == 1) {
- PHY_vars_eNB->pdsch_config_dedicated->p_a = dB0; // 4 = 0dB
- ((PHY_vars_eNB->lte_frame_parms).pdsch_config_common).p_b = 0;
- PHY_vars_UE->pdsch_config_dedicated->p_a = dB0; // 4 = 0dB
- ((PHY_vars_UE->lte_frame_parms).pdsch_config_common).p_b = 0;
- } else { // rho_a = rhob
- PHY_vars_eNB->pdsch_config_dedicated->p_a = dB0; // 4 = 0dB
- ((PHY_vars_eNB->lte_frame_parms).pdsch_config_common).p_b = 1;
- PHY_vars_UE->pdsch_config_dedicated->p_a = dB0; // 4 = 0dB
- ((PHY_vars_UE->lte_frame_parms).pdsch_config_common).p_b = 1;
- }
-
- PHY_vars_UE->perfect_ce = perfect_ce;
-
- printf("Done lte_param_init\n");
-
-
-}
//DCI2_5MHz_2A_M10PRB_TDD_t DLSCH_alloc_pdu2_2A[2];
@@ -214,7 +132,7 @@ void do_OFDM_mod_l(mod_sym_t **txdataF, int32_t **txdata, uint16_t next_slot, LT
if (frame_parms->Ncp == 1)
PHY_ofdm_mod(&txdataF[aa][slot_offset_F], // input
&txdata[aa][slot_offset], // output
- frame_parms->log2_symbol_size, // log2_fft_size
+ frame_parms->ofdm_symbol_size,
6, // number of symbols
frame_parms->nb_prefix_samples, // number of prefix samples
CYCLIC_PREFIX);
@@ -318,7 +236,7 @@ int main(int argc, char **argv)
double blerr[4],uncoded_ber,avg_ber;
short *uncoded_ber_bit=NULL;
uint8_t N_RB_DL=25,osf=1;
- uint8_t fdd_flag = 0;
+ frame_t frame_type = FDD;
#ifdef XFORMS
FD_lte_phy_scope_ue *form_ue;
char title[255];
@@ -350,6 +268,8 @@ int main(int argc, char **argv)
FILE *proc_fd = NULL;
char buf[64];
+ int threequarter_fs=0;
+
opp_enabled=1; // to enable the time meas
#if defined(__arm__)
@@ -378,13 +298,17 @@ 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:Em: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) {
switch (c) {
case 'a':
awgn_flag = 1;
channel_model = AWGN;
break;
+ case 'A':
+ abstx = 1;
+ break;
+
case 'b':
tdd_config=atoi(optarg);
break;
@@ -393,10 +317,59 @@ int main(int argc, char **argv)
N_RB_DL=atoi(optarg);
break;
+ case 'c':
+ num_pdcch_symbols=atoi(optarg);
+ break;
+
+ case 'C':
+ Nid_cell = atoi(optarg);
+ break;
+
case 'd':
dci_flag = 1;
break;
+ case 'D':
+ frame_type=TDD;
+ break;
+
+ case 'e':
+ num_rounds=1;
+ common_flag = 1;
+ TPC = atoi(optarg);
+ break;
+
+ case 'E':
+ threequarter_fs=1;
+ break;
+
+ case 'f':
+ input_snr_step= atof(optarg);
+ break;
+
+ case 'F':
+ forgetting_factor = atof(optarg);
+ break;
+
+ case 'i':
+ input_fd = fopen(optarg,"r");
+ input_file=1;
+ dci_flag = 1;
+ break;
+
+ case 'I':
+ input_trch_fd = fopen(optarg,"r");
+ input_trch_file=1;
+ break;
+
+ case 'L':
+ llr8_flag=1;
+ break;
+
+ case 'l':
+ offset_mumimo_llr_drange_fix=atoi(optarg);
+ break;
+
case 'm':
mcs1 = atoi(optarg);
break;
@@ -405,6 +378,11 @@ int main(int argc, char **argv)
mcs2 = atoi(optarg);
break;
+ case 'O':
+ test_perf=atoi(optarg);
+ //print_perf =1;
+ break;
+
case 't':
mcs_i = atoi(optarg);
i_mod = get_Qm(mcs_i);
@@ -414,27 +392,16 @@ int main(int argc, char **argv)
n_frames = atoi(optarg);
break;
- case 'C':
- Nid_cell = atoi(optarg);
- break;
case 'o':
rx_sample_offset = atoi(optarg);
break;
- case 'D':
- fdd_flag = 1;
- break;
-
case 'r':
DLSCH_RB_ALLOC = atoi(optarg);
rballocset = 1;
break;
- case 'F':
- forgetting_factor = atof(optarg);
- break;
-
case 's':
snr0 = atof(optarg);
break;
@@ -443,13 +410,6 @@ int main(int argc, char **argv)
snr_int = atof(optarg);
break;
- case 'f':
- input_snr_step= atof(optarg);
- break;
-
- case 'A':
- abstx = 1;
- break;
case 'N':
n_ch_rlz= atof(optarg);
@@ -459,10 +419,6 @@ int main(int argc, char **argv)
extended_prefix_flag=1;
break;
- case 'c':
- num_pdcch_symbols=atoi(optarg);
- break;
-
case 'g':
memcpy(channel_model_input,optarg,10);
@@ -530,62 +486,6 @@ int main(int argc, char **argv)
break;
- case 'x':
- transmission_mode=atoi(optarg);
-
- if ((transmission_mode!=1) &&
- (transmission_mode!=2) &&
- (transmission_mode!=3) &&
- (transmission_mode!=4) &&
- (transmission_mode!=5) &&
- (transmission_mode!=6)) {
- msg("Unsupported transmission mode %d\n",transmission_mode);
- exit(-1);
- }
-
- if (transmission_mode>1) {
- n_tx = 2;
- }
-
- break;
-
- case 'y':
- n_tx=atoi(optarg);
-
- if ((n_tx==0) || (n_tx>2)) {
- msg("Unsupported number of tx antennas %d\n",n_tx);
- exit(-1);
- }
-
- break;
-
- case 'z':
- n_rx=atoi(optarg);
-
- if ((n_rx==0) || (n_rx>2)) {
- msg("Unsupported number of rx antennas %d\n",n_rx);
- exit(-1);
- }
-
- break;
-
- case 'I':
- input_trch_fd = fopen(optarg,"r");
- input_trch_file=1;
- break;
-
- case 'i':
- input_fd = fopen(optarg,"r");
- input_file=1;
- dci_flag = 1;
- break;
-
- case 'e':
- num_rounds=1;
- common_flag = 1;
- TPC = atoi(optarg);
- break;
-
case 'R':
num_rounds=atoi(optarg);
break;
@@ -623,26 +523,54 @@ int main(int argc, char **argv)
print_perf=1;
break;
- case 'L':
- llr8_flag=1;
+ case 'x':
+ transmission_mode=atoi(optarg);
+
+ if ((transmission_mode!=1) &&
+ (transmission_mode!=2) &&
+ (transmission_mode!=3) &&
+ (transmission_mode!=4) &&
+ (transmission_mode!=5) &&
+ (transmission_mode!=6)) {
+ msg("Unsupported transmission mode %d\n",transmission_mode);
+ exit(-1);
+ }
+
+ if (transmission_mode>1) {
+ n_tx = 2;
+ }
+
break;
- case 'l':
- offset_mumimo_llr_drange_fix=atoi(optarg);
+ case 'y':
+ n_tx=atoi(optarg);
+
+ if ((n_tx==0) || (n_tx>2)) {
+ msg("Unsupported number of tx antennas %d\n",n_tx);
+ exit(-1);
+ }
+
break;
- case 'O':
- test_perf=atoi(optarg);
- //print_perf =1;
+ case 'Y':
+ perfect_ce=1;
+ break;
+
+ case 'z':
+ n_rx=atoi(optarg);
+
+ if ((n_rx==0) || (n_rx>2)) {
+ msg("Unsupported number of rx antennas %d\n",n_rx);
+ exit(-1);
+ }
+
break;
case 'Z':
dump_table=1;
break;
- case 'Y':
- perfect_ce=1;
- break;
+
case 'h':
default:
@@ -723,8 +651,10 @@ int main(int argc, char **argv)
printf("dual_stream_UE=%d\n", dual_stream_UE);
}
- lte_param_init(n_tx,n_rx,transmission_mode,extended_prefix_flag,fdd_flag,Nid_cell,tdd_config,N_RB_DL,osf,perfect_ce);
+ lte_param_init(n_tx,n_rx,transmission_mode,extended_prefix_flag,frame_type,Nid_cell,tdd_config,N_RB_DL,threequarter_fs,osf,perfect_ce);
+
+
eNB_id_i = PHY_vars_UE->n_connected_eNB;
printf("Setting mcs1 = %d\n",mcs1);
@@ -2553,7 +2483,7 @@ PMI_FEEDBACK:
}
}
}
-
+
num_pdcch_symbols_2 = generate_dci_top(num_ue_spec_dci,
num_common_dci,
dci_alloc,
@@ -2562,7 +2492,7 @@ PMI_FEEDBACK:
&PHY_vars_eNB->lte_frame_parms,
PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNB_id],
subframe);
-
+
if (num_pdcch_symbols_2 > num_pdcch_symbols) {
msg("Error: given num_pdcch_symbols not big enough (%d > %d)\n",num_pdcch_symbols_2,num_pdcch_symbols);
exit(-1);
@@ -2667,6 +2597,7 @@ PMI_FEEDBACK:
}
start_meas(&PHY_vars_eNB->dlsch_modulation_stats);
+
re_allocated = dlsch_modulation(PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNB_id],
AMP,
subframe,
@@ -2674,6 +2605,7 @@ PMI_FEEDBACK:
num_pdcch_symbols,
PHY_vars_eNB->dlsch_eNB[k][0],
PHY_vars_eNB->dlsch_eNB[k][1]);
+
stop_meas(&PHY_vars_eNB->dlsch_modulation_stats);
/*
if (trials==0 && round==0)
diff --git a/openair1/SIMULATION/LTE_PHY/mbmssim.c b/openair1/SIMULATION/LTE_PHY/mbmssim.c
index 9bcd4a2cb6..98d1b68a15 100644
--- a/openair1/SIMULATION/LTE_PHY/mbmssim.c
+++ b/openair1/SIMULATION/LTE_PHY/mbmssim.c
@@ -456,7 +456,7 @@ int main(int argc, char **argv)
PHY_ofdm_mod(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0][0], // input,
txdata[0], // output
- frame_parms->log2_symbol_size, // log2_fft_size
+ frame_parms->ofdm_symbol_size,
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*nsymb, // number of symbols
frame_parms->nb_prefix_samples, // number of prefix samples
CYCLIC_PREFIX);
diff --git a/openair1/SIMULATION/LTE_PHY/pbchsim.c b/openair1/SIMULATION/LTE_PHY/pbchsim.c
index b7f9f57b6b..319c2ed008 100644
--- a/openair1/SIMULATION/LTE_PHY/pbchsim.c
+++ b/openair1/SIMULATION/LTE_PHY/pbchsim.c
@@ -53,87 +53,11 @@
#include "OCG_vars.h"
-PHY_VARS_eNB *PHY_vars_eNb,*PHY_vars_eNb1,*PHY_vars_eNb2;
+PHY_VARS_eNB *PHY_vars_eNB,*PHY_vars_eNB1,*PHY_vars_eNB2;
PHY_VARS_UE *PHY_vars_UE;
#define DLSCH_RB_ALLOC 0x1fbf // igore DC component,RB13
-void lte_param_init(unsigned char N_tx, unsigned char N_rx,unsigned char transmission_mode,unsigned char extended_prefix_flag,unsigned char frame_type, uint16_t Nid_cell,uint8_t N_RB_DL,uint8_t osf)
-{
-
- // unsigned int ind;
- LTE_DL_FRAME_PARMS *lte_frame_parms;
- int i;
-
- printf("Start lte_param_init\n");
- PHY_vars_eNb = malloc(sizeof(PHY_VARS_eNB));
- PHY_vars_eNb1 = malloc(sizeof(PHY_VARS_eNB));
- PHY_vars_eNb2 = malloc(sizeof(PHY_VARS_eNB));
-
- PHY_vars_UE = malloc(sizeof(PHY_VARS_UE));
- //PHY_config = malloc(sizeof(PHY_CONFIG));
- mac_xface = malloc(sizeof(MAC_xface));
-
- randominit(0);
- set_taus_seed(0);
-
- lte_frame_parms = &(PHY_vars_eNb->lte_frame_parms);
-
- lte_frame_parms->N_RB_DL = N_RB_DL; //50 for 10MHz and 25 for 5 MHz
- lte_frame_parms->N_RB_UL = N_RB_DL;
- lte_frame_parms->Ncp = extended_prefix_flag;
- lte_frame_parms->Nid_cell = Nid_cell;
- lte_frame_parms->nushift = Nid_cell%6;
- lte_frame_parms->nb_antennas_tx = N_tx;
- lte_frame_parms->nb_antennas_tx_eNB = N_tx;
- lte_frame_parms->nb_antennas_rx = N_rx;
- // lte_frame_parms->Csrs = 2;
- // lte_frame_parms->Bsrs = 0;
- // lte_frame_parms->kTC = 0;
- // lte_frame_parms->n_RRC = 0;
- lte_frame_parms->mode1_flag = (transmission_mode == 1)? 1 : 0;
- lte_frame_parms->tdd_config = 3;
- lte_frame_parms->frame_type = frame_type;
- init_frame_parms(lte_frame_parms,osf);
-
- //copy_lte_parms_to_phy_framing(lte_frame_parms, &(PHY_config->PHY_framing));
-
- PHY_vars_UE->lte_frame_parms = *lte_frame_parms;
-
- phy_init_lte_top(lte_frame_parms);
-
- PHY_vars_UE->PHY_measurements.n_adj_cells=2;
- PHY_vars_UE->PHY_measurements.adj_cell_id[0] = Nid_cell+1;
- PHY_vars_UE->PHY_measurements.adj_cell_id[1] = Nid_cell+2;
-
- for (i=0; i<3; i++)
- lte_gold(lte_frame_parms,PHY_vars_UE->lte_gold_table[i],Nid_cell+i);
-
- phy_init_lte_ue(PHY_vars_UE,1,0);
-
- phy_init_lte_eNB(PHY_vars_eNb,0,0,0);
-
- memcpy((void*)&PHY_vars_eNb1->lte_frame_parms,(void*)&PHY_vars_eNb->lte_frame_parms,sizeof(LTE_DL_FRAME_PARMS));
- PHY_vars_eNb1->lte_frame_parms.Nid_cell=Nid_cell+1;
- PHY_vars_eNb1->lte_frame_parms.nushift=(Nid_cell+1)%6;
- PHY_vars_eNb1->Mod_id=1;
-
- memcpy((void*)&PHY_vars_eNb2->lte_frame_parms,(void*)&PHY_vars_eNb->lte_frame_parms,sizeof(LTE_DL_FRAME_PARMS));
- PHY_vars_eNb2->lte_frame_parms.Nid_cell=Nid_cell+2;
- PHY_vars_eNb2->lte_frame_parms.nushift=(Nid_cell+2)%6;
- PHY_vars_eNb2->Mod_id=2;
-
- phy_init_lte_eNB(PHY_vars_eNb1,0,0,0);
-
- phy_init_lte_eNB(PHY_vars_eNb2,0,0,0);
-
- phy_init_lte_top(lte_frame_parms);
-
- printf("Done lte_param_init\n");
-
-
-}
-
mod_sym_t *dummybuf[4];
mod_sym_t dummy0[2048*14];
mod_sym_t dummy1[2048*14];
@@ -420,6 +344,28 @@ int main(int argc, char **argv)
lte_param_init(n_tx,n_rx,transmission_mode,extended_prefix_flag,frame_type,Nid_cell,N_RB_DL,osf);
+ PHY_vars_eNB1 = malloc(sizeof(PHY_VARS_eNB));
+ PHY_vars_eNB2 = malloc(sizeof(PHY_VARS_eNB));
+ PHY_vars_UE->PHY_measurements.n_adj_cells=2;
+ PHY_vars_UE->PHY_measurements.adj_cell_id[0] = Nid_cell+1;
+ PHY_vars_UE->PHY_measurements.adj_cell_id[1] = Nid_cell+2;
+
+ for (i=0; i<3; i++)
+ lte_gold(&PHY_vars_eNB->lte_frame_parms,PHY_vars_UE->lte_gold_table[i],Nid_cell+i);
+
+ memcpy((void*)&PHY_vars_eNB1->lte_frame_parms,(void*)&PHY_vars_eNB->lte_frame_parms,sizeof(LTE_DL_FRAME_PARMS));
+ PHY_vars_eNB1->lte_frame_parms.Nid_cell=Nid_cell+1;
+ PHY_vars_eNB1->lte_frame_parms.nushift=(Nid_cell+1)%6;
+ PHY_vars_eNB1->Mod_id=1;
+
+ memcpy((void*)&PHY_vars_eNB2->lte_frame_parms,(void*)&PHY_vars_eNB->lte_frame_parms,sizeof(LTE_DL_FRAME_PARMS));
+ PHY_vars_eNB2->lte_frame_parms.Nid_cell=Nid_cell+2;
+ PHY_vars_eNB2->lte_frame_parms.nushift=(Nid_cell+2)%6;
+ PHY_vars_eNB2->Mod_id=2;
+
+ phy_init_lte_eNB(PHY_vars_eNB1,0,0,0);
+ phy_init_lte_eNB(PHY_vars_eNB2,0,0,0);
+
#ifdef XFORMS
fl_initialize (&argc, argv, NULL, 0, 0);
form_ue = create_lte_phy_scope_ue();
@@ -436,13 +382,13 @@ int main(int argc, char **argv)
printf("SNR0 %f, SNR1 %f\n",snr0,snr1);
- frame_parms = &PHY_vars_eNb->lte_frame_parms;
+ frame_parms = &PHY_vars_eNB->lte_frame_parms;
- txdata = PHY_vars_eNb->lte_eNB_common_vars.txdata[0];
- txdata1 = PHY_vars_eNb1->lte_eNB_common_vars.txdata[0];
- txdata2 = PHY_vars_eNb2->lte_eNB_common_vars.txdata[0];
+ txdata = PHY_vars_eNB->lte_eNB_common_vars.txdata[0];
+ txdata1 = PHY_vars_eNB1->lte_eNB_common_vars.txdata[0];
+ txdata2 = PHY_vars_eNB2->lte_eNB_common_vars.txdata[0];
s_re = malloc(2*sizeof(double*));
@@ -463,8 +409,8 @@ int main(int argc, char **argv)
printf("FFT Size %d, Extended Prefix %d, Samples per subframe %d, Symbols per subframe %d, interf (%d,%d)\n",NUMBER_OF_OFDM_CARRIERS,
frame_parms->Ncp,frame_parms->samples_per_tti,nsymb,interf1,interf2);
- printf("PHY_vars_eNb1->lte_eNB_common_vars.txdataF[0][0] = %p\n",
- PHY_vars_eNb1->lte_eNB_common_vars.txdataF[0][0]);
+ printf("PHY_vars_eNB1->lte_eNB_common_vars.txdataF[0][0] = %p\n",
+ PHY_vars_eNB1->lte_eNB_common_vars.txdataF[0][0]);
DLSCH_alloc_pdu2.rah = 0;
@@ -479,31 +425,31 @@ int main(int argc, char **argv)
// Forget second codeword
DLSCH_alloc_pdu2.tpmi = (transmission_mode==6 ? 5 : 0) ; // precoding
- eNB2UE = new_channel_desc_scm(PHY_vars_eNb->lte_frame_parms.nb_antennas_tx,
+ eNB2UE = new_channel_desc_scm(PHY_vars_eNB->lte_frame_parms.nb_antennas_tx,
PHY_vars_UE->lte_frame_parms.nb_antennas_rx,
channel_model,
- N_RB2sampling_rate(PHY_vars_eNb->lte_frame_parms.N_RB_DL),
- N_RB2channel_bandwidth(PHY_vars_eNb->lte_frame_parms.N_RB_DL),
+ N_RB2sampling_rate(PHY_vars_eNB->lte_frame_parms.N_RB_DL),
+ N_RB2channel_bandwidth(PHY_vars_eNB->lte_frame_parms.N_RB_DL),
0,
0,
0);
if (interf1>-20)
- eNB2UE1 = new_channel_desc_scm(PHY_vars_eNb->lte_frame_parms.nb_antennas_tx,
+ eNB2UE1 = new_channel_desc_scm(PHY_vars_eNB->lte_frame_parms.nb_antennas_tx,
PHY_vars_UE->lte_frame_parms.nb_antennas_rx,
channel_model,
- N_RB2sampling_rate(PHY_vars_eNb->lte_frame_parms.N_RB_DL),
- N_RB2channel_bandwidth(PHY_vars_eNb->lte_frame_parms.N_RB_DL),
+ N_RB2sampling_rate(PHY_vars_eNB->lte_frame_parms.N_RB_DL),
+ N_RB2channel_bandwidth(PHY_vars_eNB->lte_frame_parms.N_RB_DL),
0,
4,
0);
if (interf2>-20)
- eNB2UE2 = new_channel_desc_scm(PHY_vars_eNb->lte_frame_parms.nb_antennas_tx,
+ eNB2UE2 = new_channel_desc_scm(PHY_vars_eNB->lte_frame_parms.nb_antennas_tx,
PHY_vars_UE->lte_frame_parms.nb_antennas_rx,
channel_model,
- N_RB2sampling_rate(PHY_vars_eNb->lte_frame_parms.N_RB_DL),
- N_RB2channel_bandwidth(PHY_vars_eNb->lte_frame_parms.N_RB_DL),
+ N_RB2sampling_rate(PHY_vars_eNB->lte_frame_parms.N_RB_DL),
+ N_RB2channel_bandwidth(PHY_vars_eNB->lte_frame_parms.N_RB_DL),
0,
8,
0);
@@ -567,47 +513,47 @@ int main(int argc, char **argv)
pbch_pdu[1]=1;
pbch_pdu[2]=0;
- if (PHY_vars_eNb->lte_frame_parms.frame_type == 0) {
- generate_pss(PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ if (PHY_vars_eNB->lte_frame_parms.frame_type == 0) {
+ generate_pss(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb->lte_frame_parms,
- (PHY_vars_eNb->lte_frame_parms.Ncp==0) ? 6 : 5,
+ &PHY_vars_eNB->lte_frame_parms,
+ (PHY_vars_eNB->lte_frame_parms.Ncp==0) ? 6 : 5,
0);
- generate_sss(PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ generate_sss(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb->lte_frame_parms,
- (PHY_vars_eNb->lte_frame_parms.Ncp==0) ? 5 : 4,
+ &PHY_vars_eNB->lte_frame_parms,
+ (PHY_vars_eNB->lte_frame_parms.Ncp==0) ? 5 : 4,
0);
- generate_pss(PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ generate_pss(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb->lte_frame_parms,
- (PHY_vars_eNb->lte_frame_parms.Ncp==0) ? 6 : 5,
+ &PHY_vars_eNB->lte_frame_parms,
+ (PHY_vars_eNB->lte_frame_parms.Ncp==0) ? 6 : 5,
10);
- generate_sss(PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ generate_sss(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb->lte_frame_parms,
- (PHY_vars_eNb->lte_frame_parms.Ncp==0) ? 5 : 4,
+ &PHY_vars_eNB->lte_frame_parms,
+ (PHY_vars_eNB->lte_frame_parms.Ncp==0) ? 5 : 4,
10);
} else {
- generate_sss(PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ generate_sss(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb->lte_frame_parms,
- (PHY_vars_eNb->lte_frame_parms.Ncp==0) ? 6 : 5,
+ &PHY_vars_eNB->lte_frame_parms,
+ (PHY_vars_eNB->lte_frame_parms.Ncp==0) ? 6 : 5,
1);
- generate_pss(PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ generate_pss(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb->lte_frame_parms,
+ &PHY_vars_eNB->lte_frame_parms,
2,
2);
- generate_sss(PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ generate_sss(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb->lte_frame_parms,
- (PHY_vars_eNb->lte_frame_parms.Ncp==0) ? 6 : 5,
+ &PHY_vars_eNB->lte_frame_parms,
+ (PHY_vars_eNB->lte_frame_parms.Ncp==0) ? 6 : 5,
11);
- generate_pss(PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ generate_pss(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb->lte_frame_parms,
+ &PHY_vars_eNB->lte_frame_parms,
2,
12);
@@ -626,11 +572,11 @@ int main(int argc, char **argv)
dci_alloc[1].rnti = 0x1234;
*/
- printf("Generating PBCH for mode1_flag = %d\n", PHY_vars_eNb->lte_frame_parms.mode1_flag);
+ printf("Generating PBCH for mode1_flag = %d\n", PHY_vars_eNB->lte_frame_parms.mode1_flag);
- generate_pilots(PHY_vars_eNb,
- PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ generate_pilots(PHY_vars_eNB,
+ PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME);
@@ -641,8 +587,8 @@ int main(int argc, char **argv)
dci_alloc,
0,
1024,
- &PHY_vars_eNb->lte_frame_parms,
- PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ &PHY_vars_eNB->lte_frame_parms,
+ PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
0);
*/
@@ -657,47 +603,47 @@ int main(int argc, char **argv)
dummybuf[1] = dummy1;
dummybuf[2] = dummy2;
dummybuf[3] = dummy3;
- generate_pbch(&PHY_vars_eNb->lte_eNB_pbch,
+ generate_pbch(&PHY_vars_eNB->lte_eNB_pbch,
(mod_sym_t**)dummybuf,
AMP,
- &PHY_vars_eNb->lte_frame_parms,
+ &PHY_vars_eNB->lte_frame_parms,
pbch_pdu,
0);
}
- generate_pbch(&PHY_vars_eNb->lte_eNB_pbch,
- PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ generate_pbch(&PHY_vars_eNB->lte_eNB_pbch,
+ PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb->lte_frame_parms,
+ &PHY_vars_eNB->lte_frame_parms,
pbch_pdu,
pbch_phase);
/*
- generate_pbch(&PHY_vars_eNb->lte_eNB_pbch,
- PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ generate_pbch(&PHY_vars_eNB->lte_eNB_pbch,
+ PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb->lte_frame_parms,
+ &PHY_vars_eNB->lte_frame_parms,
pbch_pdu,
1);
*/
if (interf1>-20) {
/*
- generate_pss(PHY_vars_eNb1->lte_eNB_common_vars.txdataF[0],
+ generate_pss(PHY_vars_eNB1->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb1->lte_frame_parms,
- (PHY_vars_eNb1->lte_frame_parms.Ncp==0)?6:5,
+ &PHY_vars_eNB1->lte_frame_parms,
+ (PHY_vars_eNB1->lte_frame_parms.Ncp==0)?6:5,
0);
*/
- generate_pilots(PHY_vars_eNb1,
- PHY_vars_eNb1->lte_eNB_common_vars.txdataF[0],
+ generate_pilots(PHY_vars_eNB1,
+ PHY_vars_eNB1->lte_eNB_common_vars.txdataF[0],
AMP,
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME);
- generate_pbch(&PHY_vars_eNb1->lte_eNB_pbch,
- PHY_vars_eNb1->lte_eNB_common_vars.txdataF[0],
+ generate_pbch(&PHY_vars_eNB1->lte_eNB_pbch,
+ PHY_vars_eNB1->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb1->lte_frame_parms,
+ &PHY_vars_eNB1->lte_frame_parms,
pbch_pdu,
0);
@@ -705,26 +651,26 @@ int main(int argc, char **argv)
if (interf2>-20) {
/*
- generate_pss(PHY_vars_eNb2->lte_eNB_common_vars.txdataF[0],
+ generate_pss(PHY_vars_eNB2->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb2->lte_frame_parms,
- (PHY_vars_eNb2->lte_frame_parms.Ncp==0)?6:5,
+ &PHY_vars_eNB2->lte_frame_parms,
+ (PHY_vars_eNB2->lte_frame_parms.Ncp==0)?6:5,
0);
*/
- generate_pilots(PHY_vars_eNb2,
- PHY_vars_eNb2->lte_eNB_common_vars.txdataF[0],
+ generate_pilots(PHY_vars_eNB2,
+ PHY_vars_eNB2->lte_eNB_common_vars.txdataF[0],
AMP,
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME);
- generate_pbch(&PHY_vars_eNb2->lte_eNB_pbch,
- PHY_vars_eNb2->lte_eNB_common_vars.txdataF[0],
+ generate_pbch(&PHY_vars_eNB2->lte_eNB_pbch,
+ PHY_vars_eNB2->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb2->lte_frame_parms,
+ &PHY_vars_eNB2->lte_frame_parms,
pbch_pdu,
0);
@@ -733,10 +679,10 @@ int main(int argc, char **argv)
// write_output("pilotsF.m","rsF",txdataF[0],lte_frame_parms->ofdm_symbol_size,1,1);
- write_output("txsigF0.m","txsF0", PHY_vars_eNb->lte_eNB_common_vars.txdataF[0][0],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1);
+ write_output("txsigF0.m","txsF0", PHY_vars_eNB->lte_eNB_common_vars.txdataF[0][0],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1);
- if (PHY_vars_eNb->lte_frame_parms.nb_antennas_tx>1)
- write_output("txsigF1.m","txsF1", PHY_vars_eNb->lte_eNB_common_vars.txdataF[0][1],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1);
+ if (PHY_vars_eNB->lte_frame_parms.nb_antennas_tx>1)
+ write_output("txsigF1.m","txsF1", PHY_vars_eNB->lte_eNB_common_vars.txdataF[0][1],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1);
tx_lev = 0;
tx_lev1 = 0;
@@ -745,16 +691,16 @@ int main(int argc, char **argv)
- for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) {
+ for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) {
if (frame_parms->Ncp == 1)
- PHY_ofdm_mod(PHY_vars_eNb->lte_eNB_common_vars.txdataF[0][aa], // input,
+ PHY_ofdm_mod(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0][aa], // input,
txdata[aa], // output
- frame_parms->log2_symbol_size, // log2_fft_size
+ frame_parms->ofdm_symbol_size,
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*nsymb, // number of symbols
frame_parms->nb_prefix_samples, // number of prefix samples
CYCLIC_PREFIX);
else {
- normal_prefix_mod(PHY_vars_eNb->lte_eNB_common_vars.txdataF[0][aa],
+ normal_prefix_mod(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0][aa],
txdata[aa],
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*nsymb,
frame_parms);
@@ -765,17 +711,17 @@ int main(int argc, char **argv)
}
if (interf1>-20) {
- for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) {
+ for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) {
if (frame_parms->Ncp == 1)
- PHY_ofdm_mod(PHY_vars_eNb1->lte_eNB_common_vars.txdataF[0][aa], // input,
- PHY_vars_eNb1->lte_eNB_common_vars.txdata[0][aa], // output
- frame_parms->log2_symbol_size, // log2_fft_size
+ PHY_ofdm_mod(PHY_vars_eNB1->lte_eNB_common_vars.txdataF[0][aa], // input,
+ PHY_vars_eNB1->lte_eNB_common_vars.txdata[0][aa], // output
+ frame_parms->ofdm_symbol_size,
2*nsymb, // number of symbols
frame_parms->nb_prefix_samples, // number of prefix samples
CYCLIC_PREFIX);
else {
- normal_prefix_mod(PHY_vars_eNb1->lte_eNB_common_vars.txdataF[0][aa],
- PHY_vars_eNb1->lte_eNB_common_vars.txdata[0][aa],
+ normal_prefix_mod(PHY_vars_eNB1->lte_eNB_common_vars.txdataF[0][aa],
+ PHY_vars_eNB1->lte_eNB_common_vars.txdata[0][aa],
2*nsymb,
frame_parms);
}
@@ -784,24 +730,24 @@ int main(int argc, char **argv)
OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES);
}
- write_output("txsigF0_1.m","txsF0_1", PHY_vars_eNb1->lte_eNB_common_vars.txdataF[0][0],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1);
+ write_output("txsigF0_1.m","txsF0_1", PHY_vars_eNB1->lte_eNB_common_vars.txdataF[0][0],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1);
- if (PHY_vars_eNb1->lte_frame_parms.nb_antennas_tx>1)
- write_output("txsigF1_1.m","txsF1_1", PHY_vars_eNb1->lte_eNB_common_vars.txdataF[0][1],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1);
+ if (PHY_vars_eNB1->lte_frame_parms.nb_antennas_tx>1)
+ write_output("txsigF1_1.m","txsF1_1", PHY_vars_eNB1->lte_eNB_common_vars.txdataF[0][1],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1);
}
if (interf2>-20) {
- for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) {
+ for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) {
if (frame_parms->Ncp == 1)
- PHY_ofdm_mod(PHY_vars_eNb2->lte_eNB_common_vars.txdataF[0][aa], // input,
- PHY_vars_eNb2->lte_eNB_common_vars.txdata[0][aa], // output
- frame_parms->log2_symbol_size, // log2_fft_size
+ PHY_ofdm_mod(PHY_vars_eNB2->lte_eNB_common_vars.txdataF[0][aa], // input,
+ PHY_vars_eNB2->lte_eNB_common_vars.txdata[0][aa], // output
+ frame_parms->ofdm_symbol_size,
2*nsymb, // number of symbols
frame_parms->nb_prefix_samples, // number of prefix samples
CYCLIC_PREFIX);
else {
- normal_prefix_mod(PHY_vars_eNb2->lte_eNB_common_vars.txdataF[0][aa],
- PHY_vars_eNb2->lte_eNB_common_vars.txdata[0][aa],
+ normal_prefix_mod(PHY_vars_eNB2->lte_eNB_common_vars.txdataF[0][aa],
+ PHY_vars_eNB2->lte_eNB_common_vars.txdata[0][aa],
2*nsymb,
frame_parms);
}
@@ -810,10 +756,10 @@ int main(int argc, char **argv)
OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES);
}
- write_output("txsigF0_2.m","txsF0_2", PHY_vars_eNb2->lte_eNB_common_vars.txdataF[0][0],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1);
+ write_output("txsigF0_2.m","txsF0_2", PHY_vars_eNB2->lte_eNB_common_vars.txdataF[0][0],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1);
- if (PHY_vars_eNb2->lte_frame_parms.nb_antennas_tx>1)
- write_output("txsigF1_2.m","txsF1_2", PHY_vars_eNb2->lte_eNB_common_vars.txdataF[0][1],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1);
+ if (PHY_vars_eNB2->lte_frame_parms.nb_antennas_tx>1)
+ write_output("txsigF1_2.m","txsF1_2", PHY_vars_eNB2->lte_eNB_common_vars.txdataF[0][1],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1);
}
// tx_lev_dB = (unsigned int) dB_fixed(tx_lev);
@@ -823,15 +769,15 @@ int main(int argc, char **argv)
if (frame_parms->nb_antennas_tx>1)
write_output("txsig1.m","txs1", txdata[1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1);
- write_output("txsig0_1.m","txs0_1", PHY_vars_eNb1->lte_eNB_common_vars.txdata[0][0],FRAME_LENGTH_COMPLEX_SAMPLES,1,1);
+ write_output("txsig0_1.m","txs0_1", PHY_vars_eNB1->lte_eNB_common_vars.txdata[0][0],FRAME_LENGTH_COMPLEX_SAMPLES,1,1);
if (frame_parms->nb_antennas_tx>1)
- write_output("txsig1_1.m","txs1_1", PHY_vars_eNb1->lte_eNB_common_vars.txdata[0][1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1);
+ write_output("txsig1_1.m","txs1_1", PHY_vars_eNB1->lte_eNB_common_vars.txdata[0][1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1);
- write_output("txsig0_2.m","txs0_2", PHY_vars_eNb2->lte_eNB_common_vars.txdata[0][0],FRAME_LENGTH_COMPLEX_SAMPLES,1,1);
+ write_output("txsig0_2.m","txs0_2", PHY_vars_eNB2->lte_eNB_common_vars.txdata[0][0],FRAME_LENGTH_COMPLEX_SAMPLES,1,1);
if (frame_parms->nb_antennas_tx>1)
- write_output("txsig1_2.m","txs1_2", PHY_vars_eNb2->lte_eNB_common_vars.txdata[0][1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1);
+ write_output("txsig1_2.m","txs1_2", PHY_vars_eNB2->lte_eNB_common_vars.txdata[0][1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1);
} else { //read in from file
i=0;
@@ -864,7 +810,7 @@ int main(int argc, char **argv)
// multipath channel
for (i=0; i<2*nsymb*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES; i++) {
- for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) {
+ for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) {
s_re[aa][i] = ((double)(((short *)txdata[aa]))[(i<<1)]);
s_im[aa][i] = ((double)(((short *)txdata[aa]))[(i<<1)+1]);
@@ -925,7 +871,7 @@ int main(int argc, char **argv)
}
}
- sigma2_dB = 10*log10((double)tx_lev) +10*log10((double)PHY_vars_eNb->lte_frame_parms.ofdm_symbol_size/(double)(12*NB_RB)) - SNR;
+ sigma2_dB = 10*log10((double)tx_lev) +10*log10((double)PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size/(double)(12*NB_RB)) - SNR;
if (n_frames==1)
printf("sigma2_dB %f (SNR %f dB) tx_lev_dB %f,%f,%f\n",sigma2_dB,SNR,
@@ -947,7 +893,7 @@ int main(int argc, char **argv)
for (n_trials=0; n_trialslte_frame_parms.nb_antennas_rx; aa++) {
+ for (aa=0; aalte_frame_parms.nb_antennas_rx; aa++) {
if (n_trials==0) {
r_re[aa][i] += (pow(10.0,.05*interf1)*r_re1[aa][i] + pow(10.0,.05*interf2)*r_re2[aa][i]);
r_im[aa][i] += (pow(10.0,.05*interf1)*r_im1[aa][i] + pow(10.0,.05*interf2)*r_im2[aa][i]);
@@ -983,14 +929,14 @@ int main(int argc, char **argv)
*/
- for (l=0; llte_frame_parms.symbols_per_tti; l++) {
+ for (l=0; llte_frame_parms.symbols_per_tti; l++) {
- // subframe_offset = (l/PHY_vars_eNb->lte_frame_parms.symbols_per_tti)*PHY_vars_eNb->lte_frame_parms.samples_per_tti;
+ // subframe_offset = (l/PHY_vars_eNB->lte_frame_parms.symbols_per_tti)*PHY_vars_eNB->lte_frame_parms.samples_per_tti;
// printf("subframe_offset = %d\n",subframe_offset);
slot_fep(PHY_vars_UE,
- l%(PHY_vars_eNb->lte_frame_parms.symbols_per_tti/2),
- l/(PHY_vars_eNb->lte_frame_parms.symbols_per_tti/2),
+ l%(PHY_vars_eNB->lte_frame_parms.symbols_per_tti/2),
+ l/(PHY_vars_eNB->lte_frame_parms.symbols_per_tti/2),
0,
0,
0);
@@ -1026,7 +972,7 @@ int main(int argc, char **argv)
*/
}
- if (l==((PHY_vars_eNb->lte_frame_parms.Ncp==0)?4:3)) {
+ if (l==((PHY_vars_eNB->lte_frame_parms.Ncp==0)?4:3)) {
//sprintf(fname,"dl_ch00_%d.m",l);
//sprintf(vname,"dl_ch00_%d",l);
//write_output(fname,vname,&(lte_ue_common_vars->dl_ch_estimates[0][lte_frame_parms->ofdm_symbol_size*(l%6)]),lte_frame_parms->ofdm_symbol_size,1,1);
@@ -1038,7 +984,7 @@ int main(int argc, char **argv)
1);
}
- if (l==((PHY_vars_eNb->lte_frame_parms.Ncp==0)?10:9)) {
+ if (l==((PHY_vars_eNB->lte_frame_parms.Ncp==0)?10:9)) {
for (frame_mod4=0; frame_mod4<4; frame_mod4++) {
pbch_tx_ant = rx_pbch(&PHY_vars_UE->lte_ue_common_vars,
@@ -1059,7 +1005,7 @@ int main(int argc, char **argv)
pbch_tx_ant = rx_pbch(&PHY_vars_UE->lte_ue_common_vars,
PHY_vars_UE->lte_ue_pbch_vars[0],
- &PHY_vars_eNb->lte_frame_parms,
+ &PHY_vars_eNB->lte_frame_parms,
0,
ALAMOUTI,
PHY_vars_UE->high_speed_flag,
@@ -1119,10 +1065,10 @@ int main(int argc, char **argv)
if (n_frames==1) {
- write_output("H00.m","h00",&(PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[0][0][0]),((frame_parms->Ncp==0)?7:6)*(PHY_vars_eNb->lte_frame_parms.ofdm_symbol_size),1,1);
+ write_output("H00.m","h00",&(PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[0][0][0]),((frame_parms->Ncp==0)?7:6)*(PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size),1,1);
if (n_tx==2)
- write_output("H10.m","h10",&(PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[0][2][0]),((frame_parms->Ncp==0)?7:6)*(PHY_vars_eNb->lte_frame_parms.ofdm_symbol_size),1,1);
+ write_output("H10.m","h10",&(PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[0][2][0]),((frame_parms->Ncp==0)?7:6)*(PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size),1,1);
write_output("rxsig0.m","rxs0", PHY_vars_UE->lte_ue_common_vars.rxdata[0],FRAME_LENGTH_COMPLEX_SAMPLES,1,1);
write_output("rxsigF0.m","rxsF0", PHY_vars_UE->lte_ue_common_vars.rxdataF[0],NUMBER_OF_OFDM_CARRIERS*2*((frame_parms->Ncp==0)?14:12),2,1);
diff --git a/openair1/SIMULATION/LTE_PHY/pdcchsim.c b/openair1/SIMULATION/LTE_PHY/pdcchsim.c
index 7a36132980..a6556c4f24 100644
--- a/openair1/SIMULATION/LTE_PHY/pdcchsim.c
+++ b/openair1/SIMULATION/LTE_PHY/pdcchsim.c
@@ -58,98 +58,6 @@ PHY_VARS_UE *PHY_vars_UE;
#define CCCH_RB_ALLOC computeRIV(PHY_vars_eNB->lte_frame_parms.N_RB_UL,0,2)
#define DLSCH_RB_ALLOC 0x1fbf // igore DC component,RB13
-void lte_param_init(unsigned char N_tx, unsigned char N_rx,unsigned char transmission_mode,unsigned char extended_prefix_flag,uint16_t Nid_cell,uint8_t tdd_config,uint8_t N_RB_DL,
- lte_frame_type_t frame_type,uint8_t osf,uint32_t perfect_ce)
-{
-
- unsigned int i;
- LTE_DL_FRAME_PARMS *lte_frame_parms;
-
- printf("Start lte_param_init (Nid_cell %d, extended_prefix %d, transmission_mode %d, N_tx %d, N_rx %d)\n",
- Nid_cell, extended_prefix_flag,transmission_mode,N_tx,N_rx);
- PHY_vars_eNB = malloc(sizeof(PHY_VARS_eNB));
- PHY_vars_eNB1 = malloc(sizeof(PHY_VARS_eNB));
- PHY_vars_eNB2 = malloc(sizeof(PHY_VARS_eNB));
-
- PHY_vars_UE = malloc(sizeof(PHY_VARS_UE));
- //PHY_config = malloc(sizeof(PHY_CONFIG));
- mac_xface = malloc(sizeof(MAC_xface));
-
- randominit(0);
- set_taus_seed(0);
-
- lte_frame_parms = &(PHY_vars_eNB->lte_frame_parms);
-
- lte_frame_parms->N_RB_DL = N_RB_DL; //50 for 10MHz and 25 for 5 MHz
- lte_frame_parms->N_RB_UL = N_RB_DL;
- lte_frame_parms->Ncp = extended_prefix_flag;
- lte_frame_parms->Nid_cell = Nid_cell;
- lte_frame_parms->nushift = Nid_cell%6;
- lte_frame_parms->nb_antennas_tx_eNB = N_tx;
- lte_frame_parms->nb_antennas_tx = N_tx;
- lte_frame_parms->nb_antennas_rx = N_rx;
- lte_frame_parms->phich_config_common.phich_resource = one; //half
- lte_frame_parms->tdd_config = tdd_config;
- lte_frame_parms->frame_type = frame_type;
-
- // lte_frame_parms->Csrs = 2;
- // lte_frame_parms->Bsrs = 0;
- // lte_frame_parms->kTC = 0;
- // lte_frame_parms->n_RRC = 0;
- lte_frame_parms->mode1_flag = (transmission_mode == 1)? 1 : 0;
-
- init_frame_parms(lte_frame_parms,osf);
-
- //copy_lte_parms_to_phy_framing(lte_frame_parms, &(PHY_config->PHY_framing));
-
-
- memcpy(&PHY_vars_UE->lte_frame_parms,lte_frame_parms,sizeof(LTE_DL_FRAME_PARMS));
-
-
- phy_init_lte_top(lte_frame_parms);
-
- phy_init_lte_ue(PHY_vars_UE,1,0);
-
- phy_init_lte_eNB(PHY_vars_eNB,0,0,0);
-
- memcpy((void*)&PHY_vars_eNB1->lte_frame_parms,(void*)&PHY_vars_eNB->lte_frame_parms,sizeof(LTE_DL_FRAME_PARMS));
- PHY_vars_eNB1->lte_frame_parms.nushift=(Nid_cell+1)%6;
- PHY_vars_eNB1->lte_frame_parms.Nid_cell=Nid_cell+1;
-
- memcpy((void*)&PHY_vars_eNB2->lte_frame_parms,(void*)&PHY_vars_eNB->lte_frame_parms,sizeof(LTE_DL_FRAME_PARMS));
- PHY_vars_eNB2->lte_frame_parms.nushift=(Nid_cell+2)%6;
- PHY_vars_eNB2->lte_frame_parms.Nid_cell=Nid_cell+2;
-
- phy_init_lte_eNB(PHY_vars_eNB1,0,0,0);
-
- phy_init_lte_eNB(PHY_vars_eNB2,0,0,0);
-
- phy_init_lte_top(lte_frame_parms);
-
- PHY_vars_UE->PHY_measurements.n_adj_cells=2;
- PHY_vars_UE->PHY_measurements.adj_cell_id[0] = Nid_cell+1;
- PHY_vars_UE->PHY_measurements.adj_cell_id[1] = Nid_cell+2;
- PHY_vars_UE->perfect_ce = perfect_ce;
-
- for (i=0; i<3; i++)
- lte_gold(lte_frame_parms,PHY_vars_UE->lte_gold_table[i],Nid_cell+i);
-
- generate_pcfich_reg_mapping(&PHY_vars_UE->lte_frame_parms);
- generate_phich_reg_mapping(&PHY_vars_UE->lte_frame_parms);
-
- printf("Done lte_param_init\n");
-
- CCCH_alloc_pdu.type = 1;
- CCCH_alloc_pdu.vrb_type = 0;
- CCCH_alloc_pdu.rballoc = CCCH_RB_ALLOC;
- CCCH_alloc_pdu.ndi = 1;
- CCCH_alloc_pdu.mcs = 1;
- CCCH_alloc_pdu.harq_pid = 0;
-
-}
-
-
-
DCI_PDU DCI_pdu;
DCI_PDU *get_dci(LTE_DL_FRAME_PARMS *lte_frame_parms,uint8_t log2L, uint8_t log2Lcommon, uint8_t format_selector, uint32_t rnti)
@@ -798,9 +706,10 @@ int main(int argc, char **argv)
n_rx,
transmission_mode,
extended_prefix_flag,
+ frame_type,
Nid_cell,
tdd_config,
- N_RB_DL,frame_type,
+ N_RB_DL,
osf,
perfect_ce);
@@ -1084,7 +993,7 @@ int main(int argc, char **argv)
if (PHY_vars_eNB->lte_frame_parms.Ncp == 1)
PHY_ofdm_mod(&PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id][aa][subframe*nsymb*PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size], // input,
&txdata[aa][subframe*PHY_vars_eNB->lte_frame_parms.samples_per_tti], // output
- PHY_vars_eNB->lte_frame_parms.log2_symbol_size, // log2_fft_size
+ PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size,
2*nsymb, // number of symbols
PHY_vars_eNB->lte_frame_parms.nb_prefix_samples, // number of prefix samples
CYCLIC_PREFIX);
diff --git a/openair1/SIMULATION/LTE_PHY/prachsim.c b/openair1/SIMULATION/LTE_PHY/prachsim.c
index 4df53b053f..187a521e07 100644
--- a/openair1/SIMULATION/LTE_PHY/prachsim.c
+++ b/openair1/SIMULATION/LTE_PHY/prachsim.c
@@ -56,58 +56,6 @@ PHY_VARS_UE *PHY_vars_UE;
-void lte_param_init(unsigned char N_tx, unsigned char N_rx,unsigned char transmission_mode,unsigned char extended_prefix_flag,uint16_t Nid_cell,uint8_t N_RB_DL,uint8_t osf)
-{
-
- LTE_DL_FRAME_PARMS *lte_frame_parms;
-
- printf("Start lte_param_init\n");
- PHY_vars_eNB = malloc(sizeof(PHY_VARS_eNB));
-
- PHY_vars_UE = malloc(sizeof(PHY_VARS_UE));
- //PHY_config = malloc(sizeof(PHY_CONFIG));
- mac_xface = malloc(sizeof(MAC_xface));
-
- randominit(0);
- set_taus_seed(0);
-
- lte_frame_parms = &(PHY_vars_eNB->lte_frame_parms);
-
- lte_frame_parms->N_RB_DL = N_RB_DL; //50 for 10MHz and 25 for 5 MHz
- lte_frame_parms->N_RB_UL = N_RB_DL;
- lte_frame_parms->Ncp = extended_prefix_flag;
- lte_frame_parms->Nid_cell = Nid_cell;
- lte_frame_parms->nushift = 0;
- lte_frame_parms->nb_antennas_tx = N_tx;
- lte_frame_parms->nb_antennas_rx = N_rx;
- // lte_frame_parms->Csrs = 2;
- // lte_frame_parms->Bsrs = 0;
- // lte_frame_parms->kTC = 0;
- // lte_frame_parms->n_RRC = 0;
- lte_frame_parms->mode1_flag = (transmission_mode == 1)? 1 : 0;
- lte_frame_parms->tdd_config = 1;
- lte_frame_parms->frame_type = 1;
- init_frame_parms(lte_frame_parms,osf);
-
- //copy_lte_parms_to_phy_framing(lte_frame_parms, &(PHY_config->PHY_framing));
-
-
- PHY_vars_UE->lte_frame_parms = *lte_frame_parms;
-
- phy_init_lte_top(lte_frame_parms);
-
- phy_init_lte_ue(PHY_vars_UE,1,0);
-
- phy_init_lte_eNB(PHY_vars_eNB,0,0,0);
-
-
-
-
-
- printf("Done lte_param_init\n");
-
-}
-
extern uint16_t prach_root_sequence_map0_3[838];
int main(int argc, char **argv)
@@ -370,7 +318,16 @@ int main(int argc, char **argv)
if (transmission_mode==2)
n_tx=2;
- lte_param_init(n_tx,n_rx,transmission_mode,extended_prefix_flag,Nid_cell,N_RB_DL,osf);
+ lte_param_init(n_tx,
+ n_rx,
+ transmission_mode,
+ extended_prefix_flag,
+ FDD,
+ Nid_cell,
+ 3,
+ N_RB_DL,
+ osf,
+ 0);
if (snr1set==0) {
diff --git a/openair1/SIMULATION/LTE_PHY/pucchsim.c b/openair1/SIMULATION/LTE_PHY/pucchsim.c
index d9a3367b90..aa886fa50b 100644
--- a/openair1/SIMULATION/LTE_PHY/pucchsim.c
+++ b/openair1/SIMULATION/LTE_PHY/pucchsim.c
@@ -58,60 +58,6 @@ PHY_VARS_UE *PHY_vars_UE;
-void lte_param_init(unsigned char N_tx, unsigned char N_rx,unsigned char transmission_mode,unsigned char extended_prefix_flag,uint16_t Nid_cell,uint8_t N_RB_DL,uint8_t osf)
-{
-
- LTE_DL_FRAME_PARMS *lte_frame_parms;
-
- printf("Start lte_param_init\n");
- PHY_vars_eNB = malloc(sizeof(PHY_VARS_eNB));
-
- PHY_vars_UE = malloc(sizeof(PHY_VARS_UE));
- //PHY_config = malloc(sizeof(PHY_CONFIG));
- mac_xface = malloc(sizeof(MAC_xface));
-
- randominit(0);
- set_taus_seed(0);
-
- lte_frame_parms = &(PHY_vars_eNB->lte_frame_parms);
-
- lte_frame_parms->N_RB_DL = N_RB_DL; //50 for 10MHz and 25 for 5 MHz
- lte_frame_parms->N_RB_UL = N_RB_DL;
- lte_frame_parms->Ncp = extended_prefix_flag;
- lte_frame_parms->Nid_cell = Nid_cell;
- lte_frame_parms->nushift = 0;
- lte_frame_parms->nb_antennas_tx = N_tx;
- lte_frame_parms->nb_antennas_rx = N_rx;
- // lte_frame_parms->Csrs = 2;
- // lte_frame_parms->Bsrs = 0;
- // lte_frame_parms->kTC = 0;
- // lte_frame_parms->n_RRC = 0;
- lte_frame_parms->mode1_flag = (transmission_mode == 1)? 1 : 0;
- lte_frame_parms->tdd_config = 3;
- lte_frame_parms->frame_type = 0;
- init_frame_parms(lte_frame_parms,osf);
-
- //copy_lte_parms_to_phy_framing(lte_frame_parms, &(PHY_config->PHY_framing));
-
-// phy_init_top(lte_frame_parms); //allocation
-
- PHY_vars_UE->lte_frame_parms = *lte_frame_parms;
-
-
- phy_init_lte_ue(PHY_vars_UE,1,0);
-
- phy_init_lte_eNB(PHY_vars_eNB,0,0,0);
-
- phy_init_lte_top(lte_frame_parms);
-
-
-
-
- printf("Done lte_param_init\n");
-
-}
-
-
int main(int argc, char **argv)
{
@@ -368,7 +314,16 @@ int main(int argc, char **argv)
if (transmission_mode==2)
n_tx=2;
- lte_param_init(n_tx,n_rx,transmission_mode,extended_prefix_flag,Nid_cell,N_RB_DL,osf);
+ lte_param_init(n_tx,
+ n_rx,
+ transmission_mode,
+ extended_prefix_flag,
+ Nid_cell,
+ FDD,
+ 3,
+ N_RB_DL,
+ osf,
+ 0);
if (snr1set==0) {
@@ -473,7 +428,7 @@ int main(int argc, char **argv)
if (frame_parms->Ncp == 1)
PHY_ofdm_mod(txdataF2[aa], // input
txdata[aa], // output
- frame_parms->log2_symbol_size, // log2_fft_size
+ frame_parms->ofdm_symbol_size,
2*nsymb, // number of symbols
frame_parms->nb_prefix_samples, // number of prefix samples
CYCLIC_PREFIX);
@@ -496,7 +451,7 @@ int main(int argc, char **argv)
if (frame_parms->Ncp == 1)
PHY_ofdm_mod(&PHY_vars_UE->lte_ue_common_vars.txdataF[aa][2*subframe*nsymb*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX], // input,
&txdata[aa][PHY_vars_eNB->lte_frame_parms.samples_per_tti*subframe], // output
- frame_parms->log2_symbol_size, // log2_fft_size
+ frame_parms->ofdm_symbol_size,
nsymb, // number of symbols
frame_parms->nb_prefix_samples, // number of prefix samples
CYCLIC_PREFIX);
diff --git a/openair1/SIMULATION/LTE_PHY/scansim.c b/openair1/SIMULATION/LTE_PHY/scansim.c
index c2ceb1c58d..2cbb7b3e32 100644
--- a/openair1/SIMULATION/LTE_PHY/scansim.c
+++ b/openair1/SIMULATION/LTE_PHY/scansim.c
@@ -56,94 +56,11 @@
#define BW 20.0
-PHY_VARS_eNB *PHY_vars_eNb,*PHY_vars_eNb1,*PHY_vars_eNb2;
+PHY_VARS_eNB *PHY_vars_eNB,*PHY_vars_eNB1,*PHY_vars_eNB2;
PHY_VARS_UE *PHY_vars_UE;
#define DLSCH_RB_ALLOC 0x1fbf // igore DC component,RB13
-void lte_param_init(unsigned char N_tx, unsigned char N_rx,unsigned char transmission_mode,unsigned char extended_prefix_flag,unsigned char frame_type, uint16_t Nid_cell,uint8_t N_RB_DL,uint8_t osf)
-{
-
- // unsigned int ind;
- LTE_DL_FRAME_PARMS *lte_frame_parms;
- int i;
-
- printf("Start lte_param_init\n");
- PHY_vars_eNb = malloc(sizeof(PHY_VARS_eNB));
- PHY_vars_eNb1 = malloc(sizeof(PHY_VARS_eNB));
- PHY_vars_eNb2 = malloc(sizeof(PHY_VARS_eNB));
-
- PHY_vars_UE = malloc(sizeof(PHY_VARS_UE));
- //PHY_config = malloc(sizeof(PHY_CONFIG));
- mac_xface = malloc(sizeof(MAC_xface));
-
- randominit(0);
- set_taus_seed(0);
-
- lte_frame_parms = &(PHY_vars_eNb->lte_frame_parms);
-
- lte_frame_parms->N_RB_DL = N_RB_DL; //50 for 10MHz and 25 for 5 MHz
- lte_frame_parms->N_RB_UL = N_RB_DL;
- lte_frame_parms->Ncp = extended_prefix_flag;
- lte_frame_parms->Nid_cell = Nid_cell;
- lte_frame_parms->nushift = Nid_cell%6;
- lte_frame_parms->nb_antennas_tx = N_tx;
- lte_frame_parms->nb_antennas_tx_eNB = N_tx;
- lte_frame_parms->nb_antennas_rx = N_rx;
- // lte_frame_parms->Csrs = 2;
- // lte_frame_parms->Bsrs = 0;
- // lte_frame_parms->kTC = 0;
- // lte_frame_parms->n_RRC = 0;
- lte_frame_parms->mode1_flag = (transmission_mode == 1)? 1 : 0;
- lte_frame_parms->tdd_config = 3;
- lte_frame_parms->frame_type = frame_type;
- init_frame_parms(lte_frame_parms,osf);
-
- //copy_lte_parms_to_phy_framing(lte_frame_parms, &(PHY_config->PHY_framing));
-
-
- PHY_vars_UE->lte_frame_parms = *lte_frame_parms;
-
- phy_init_lte_top(lte_frame_parms);
-
- PHY_vars_UE->PHY_measurements.n_adj_cells=2;
- PHY_vars_UE->PHY_measurements.adj_cell_id[0] = Nid_cell+1;
- PHY_vars_UE->PHY_measurements.adj_cell_id[1] = Nid_cell+2;
-
- for (i=0; i<3; i++)
- lte_gold(lte_frame_parms,PHY_vars_UE->lte_gold_table[i],Nid_cell+i);
-
- phy_init_lte_ue(PHY_vars_UE,1,0);
-
- phy_init_lte_eNB(PHY_vars_eNb,0,0,0);
-
- for (i=0; i<10; i++) {
- PHY_vars_UE->scan_info[0].amp[0][i] = 0;
- PHY_vars_UE->scan_info[0].amp[1][i] = 0;
- PHY_vars_UE->scan_info[0].amp[2][i] = 0;
- }
-
- memcpy((void*)&PHY_vars_eNb1->lte_frame_parms,(void*)&PHY_vars_eNb->lte_frame_parms,sizeof(LTE_DL_FRAME_PARMS));
- PHY_vars_eNb1->lte_frame_parms.Nid_cell=Nid_cell+1;
- PHY_vars_eNb1->lte_frame_parms.nushift=(Nid_cell+1)%6;
- PHY_vars_eNb1->Mod_id=1;
-
- memcpy((void*)&PHY_vars_eNb2->lte_frame_parms,(void*)&PHY_vars_eNb->lte_frame_parms,sizeof(LTE_DL_FRAME_PARMS));
- PHY_vars_eNb2->lte_frame_parms.Nid_cell=Nid_cell+2;
- PHY_vars_eNb2->lte_frame_parms.nushift=(Nid_cell+2)%6;
- PHY_vars_eNb2->Mod_id=2;
-
- phy_init_lte_eNB(PHY_vars_eNb1,0,0,0);
-
- phy_init_lte_eNB(PHY_vars_eNb2,0,0,0);
-
- phy_init_lte_top(lte_frame_parms);
-
- printf("Done lte_param_init\n");
-
-
-}
-
mod_sym_t *dummybuf[4];
mod_sym_t dummy0[2048*14];
mod_sym_t dummy1[2048*14];
@@ -404,7 +321,16 @@ int main(int argc, char **argv)
if (transmission_mode>=2)
n_tx=2;
- lte_param_init(n_tx,n_rx,transmission_mode,extended_prefix_flag,frame_type,Nid_cell,N_RB_DL,osf);
+ lte_param_init(n_tx,
+ n_rx,
+ transmission_mode,
+ extended_prefix_flag,
+ frame_type,
+ Nid_cell,
+ 3,
+ N_RB_DL,
+ osf,
+ 0);
#ifdef XFORMS
fl_initialize (&argc, argv, NULL, 0, 0);
@@ -422,13 +348,13 @@ int main(int argc, char **argv)
printf("SNR0 %f, SNR1 %f\n",snr0,snr1);
- frame_parms = &PHY_vars_eNb->lte_frame_parms;
+ frame_parms = &PHY_vars_eNB->lte_frame_parms;
- txdata = PHY_vars_eNb->lte_eNB_common_vars.txdata[0];
- txdata1 = PHY_vars_eNb1->lte_eNB_common_vars.txdata[0];
- txdata2 = PHY_vars_eNb2->lte_eNB_common_vars.txdata[0];
+ txdata = PHY_vars_eNB->lte_eNB_common_vars.txdata[0];
+ txdata1 = PHY_vars_eNB1->lte_eNB_common_vars.txdata[0];
+ txdata2 = PHY_vars_eNB2->lte_eNB_common_vars.txdata[0];
s_re = malloc(2*sizeof(double*));
@@ -449,8 +375,8 @@ int main(int argc, char **argv)
printf("FFT Size %d, Extended Prefix %d, Samples per subframe %d, Symbols per subframe %d\n",NUMBER_OF_OFDM_CARRIERS,
frame_parms->Ncp,frame_parms->samples_per_tti,nsymb);
- printf("PHY_vars_eNb1->lte_eNB_common_vars.txdataF[0][0] = %p\n",
- PHY_vars_eNb1->lte_eNB_common_vars.txdataF[0][0]);
+ printf("PHY_vars_eNB1->lte_eNB_common_vars.txdataF[0][0] = %p\n",
+ PHY_vars_eNB1->lte_eNB_common_vars.txdataF[0][0]);
DLSCH_alloc_pdu2.rah = 0;
@@ -465,13 +391,14 @@ int main(int argc, char **argv)
// Forget second codeword
DLSCH_alloc_pdu2.tpmi = (transmission_mode==6 ? 5 : 0) ; // precoding
- eNB2UE = new_channel_desc_scm(PHY_vars_eNb->lte_frame_parms.nb_antennas_tx,
- PHY_vars_UE->lte_frame_parms.nb_antennas_rx,
- channel_model,
- BW,
- 0,
- 0,
- 0);
+ eNB2UE = new_channel_desc_scm(PHY_vars_eNB->lte_frame_parms.nb_antennas_tx,
+ PHY_vars_UE->lte_frame_parms.nb_antennas_rx,
+ channel_model,
+ N_RB2sampling_rate(PHY_vars_eNB->lte_frame_parms.N_RB_DL),
+ N_RB2channel_bandwidth(PHY_vars_eNB->lte_frame_parms.N_RB_DL),
+ 0,
+ 0,
+ 0);
if (eNB2UE==NULL) {
@@ -512,51 +439,51 @@ int main(int argc, char **argv)
pbch_pdu[1]=1;
pbch_pdu[2]=0;
- if (PHY_vars_eNb->lte_frame_parms.frame_type == FDD) {
- generate_pss(PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ if (PHY_vars_eNB->lte_frame_parms.frame_type == FDD) {
+ generate_pss(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb->lte_frame_parms,
- (PHY_vars_eNb->lte_frame_parms.Ncp==NORMAL) ? 6 : 5,
+ &PHY_vars_eNB->lte_frame_parms,
+ (PHY_vars_eNB->lte_frame_parms.Ncp==NORMAL) ? 6 : 5,
0);
/*
- generate_sss(PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ generate_sss(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb->lte_frame_parms,
- (PHY_vars_eNb->lte_frame_parms.Ncp==0) ? 5 : 4,
+ &PHY_vars_eNB->lte_frame_parms,
+ (PHY_vars_eNB->lte_frame_parms.Ncp==0) ? 5 : 4,
0);*/
- generate_pss(PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ generate_pss(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb->lte_frame_parms,
- (PHY_vars_eNb->lte_frame_parms.Ncp==0) ? 6 : 5,
+ &PHY_vars_eNB->lte_frame_parms,
+ (PHY_vars_eNB->lte_frame_parms.Ncp==0) ? 6 : 5,
10);
/*
- generate_sss(PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ generate_sss(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb->lte_frame_parms,
- (PHY_vars_eNb->lte_frame_parms.Ncp==0) ? 5 : 4,
+ &PHY_vars_eNB->lte_frame_parms,
+ (PHY_vars_eNB->lte_frame_parms.Ncp==0) ? 5 : 4,
10);
*/
} else {
- generate_sss(PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ generate_sss(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb->lte_frame_parms,
- (PHY_vars_eNb->lte_frame_parms.Ncp==0) ? 6 : 5,
+ &PHY_vars_eNB->lte_frame_parms,
+ (PHY_vars_eNB->lte_frame_parms.Ncp==0) ? 6 : 5,
1);
- generate_pss(PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ generate_pss(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb->lte_frame_parms,
+ &PHY_vars_eNB->lte_frame_parms,
2,
2);
- generate_sss(PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ generate_sss(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb->lte_frame_parms,
- (PHY_vars_eNb->lte_frame_parms.Ncp==0) ? 6 : 5,
+ &PHY_vars_eNB->lte_frame_parms,
+ (PHY_vars_eNB->lte_frame_parms.Ncp==0) ? 6 : 5,
11);
- generate_pss(PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ generate_pss(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb->lte_frame_parms,
+ &PHY_vars_eNB->lte_frame_parms,
2,
12);
@@ -565,8 +492,8 @@ int main(int argc, char **argv)
/*
- generate_pilots(PHY_vars_eNb,
- PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ generate_pilots(PHY_vars_eNB,
+ PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME);
@@ -577,8 +504,8 @@ int main(int argc, char **argv)
dci_alloc,
0,
1024,
- &PHY_vars_eNb->lte_frame_parms,
- PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ &PHY_vars_eNB->lte_frame_parms,
+ PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
0);
*/
@@ -593,25 +520,25 @@ int main(int argc, char **argv)
dummybuf[1] = dummy1;
dummybuf[2] = dummy2;
dummybuf[3] = dummy3;
- generate_pbch(&PHY_vars_eNb->lte_eNB_pbch,
+ generate_pbch(&PHY_vars_eNB->lte_eNB_pbch,
(mod_sym_t**)dummybuf,
AMP,
- &PHY_vars_eNb->lte_frame_parms,
+ &PHY_vars_eNB->lte_frame_parms,
pbch_pdu,
0);
}
- generate_pbch(&PHY_vars_eNb->lte_eNB_pbch,
- PHY_vars_eNb->lte_eNB_common_vars.txdataF[0],
+ generate_pbch(&PHY_vars_eNB->lte_eNB_pbch,
+ PHY_vars_eNB->lte_eNB_common_vars.txdataF[0],
AMP,
- &PHY_vars_eNb->lte_frame_parms,
+ &PHY_vars_eNB->lte_frame_parms,
pbch_pdu,
pbch_phase);
*/
- write_output("txsigF0.m","txsF0", PHY_vars_eNb->lte_eNB_common_vars.txdataF[0][0],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1);
+ write_output("txsigF0.m","txsF0", PHY_vars_eNB->lte_eNB_common_vars.txdataF[0][0],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1);
- if (PHY_vars_eNb->lte_frame_parms.nb_antennas_tx>1)
- write_output("txsigF1.m","txsF1", PHY_vars_eNb->lte_eNB_common_vars.txdataF[0][1],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1);
+ if (PHY_vars_eNB->lte_frame_parms.nb_antennas_tx>1)
+ write_output("txsigF1.m","txsF1", PHY_vars_eNB->lte_eNB_common_vars.txdataF[0][1],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1);
tx_lev = 0;
tx_lev1 = 0;
@@ -620,16 +547,16 @@ int main(int argc, char **argv)
- for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) {
+ for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) {
if (frame_parms->Ncp == 1)
- PHY_ofdm_mod(PHY_vars_eNb->lte_eNB_common_vars.txdataF[0][aa], // input,
+ PHY_ofdm_mod(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0][aa], // input,
txdata[aa], // output
- frame_parms->log2_symbol_size, // log2_fft_size
+ frame_parms->ofdm_symbol_size,
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*nsymb, // number of symbols
frame_parms->nb_prefix_samples, // number of prefix samples
CYCLIC_PREFIX);
else {
- normal_prefix_mod(PHY_vars_eNb->lte_eNB_common_vars.txdataF[0][aa],
+ normal_prefix_mod(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0][aa],
txdata[aa],
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*nsymb,
frame_parms);
@@ -648,7 +575,7 @@ int main(int argc, char **argv)
// multipath channel
for (i=0; i<2*nsymb*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES; i++) {
- for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) {
+ for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) {
s_re[aa][i] = ((double)(((short *)txdata[aa]))[(i<<1)]);
s_im[aa][i] = ((double)(((short *)txdata[aa]))[(i<<1)+1]);
}
@@ -667,7 +594,7 @@ int main(int argc, char **argv)
multipath_channel(eNB2UE,s_re,s_im,r_re,r_im,
2*nsymb*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES,0);
- sigma2_dB = 10*log10((double)tx_lev) +10*log10((double)PHY_vars_eNb->lte_frame_parms.ofdm_symbol_size/(double)(12*NB_RB)) - SNR;
+ sigma2_dB = 10*log10((double)tx_lev) +10*log10((double)PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size/(double)(12*NB_RB)) - SNR;
if (n_frames==1)
printf("sigma2_dB %f (SNR %f dB) tx_lev_dB %f,%f,%f\n",sigma2_dB,SNR,
@@ -689,7 +616,7 @@ int main(int argc, char **argv)
for (n_trials=0; n_trialslte_frame_parms.nb_antennas_rx; aa++) {
+ for (aa=0; aalte_frame_parms.nb_antennas_rx; aa++) {
((short*) PHY_vars_UE->lte_ue_common_vars.rxdata[aa])[2*i] = (short) ((r_re[aa][i] +sqrt(sigma2/2)*gaussdouble(0.0,1.0)));
((short*) PHY_vars_UE->lte_ue_common_vars.rxdata[aa])[2*i+1] = (short) ((r_im[aa][i] + (iqim*r_re[aa][i]) + sqrt(sigma2/2)*gaussdouble(0.0,1.0)));
}
diff --git a/openair1/SIMULATION/LTE_PHY/syncsim.c b/openair1/SIMULATION/LTE_PHY/syncsim.c
index a5f046da93..45b69adcc5 100644
--- a/openair1/SIMULATION/LTE_PHY/syncsim.c
+++ b/openair1/SIMULATION/LTE_PHY/syncsim.c
@@ -1189,7 +1189,7 @@ int main(int argc, char **argv)
if (frame_parms->Ncp == 1)
PHY_ofdm_mod(txdataF2[aa], // input
txdata[aa], // output
- PHY_vars_eNB->lte_frame_parms.log2_symbol_size, // log2_fft_size
+ PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size, // log2_fft_size
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*nsymb, // number of symbols
PHY_vars_eNB->lte_frame_parms.nb_prefix_samples, // number of prefix samples
PHY_vars_eNB->lte_frame_parms.twiddle_ifft, // IFFT twiddle factors
@@ -1218,7 +1218,7 @@ int main(int argc, char **argv)
if (frame_parms->Ncp == 1)
PHY_ofdm_mod(PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id][aa], // input,
txdata[aa], // output
- frame_parms->log2_symbol_size, // log2_fft_size
+ frame_parms->ofdm_symbol_size, // log2_fft_size
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*nsymb, // number of symbols
frame_parms->nb_prefix_samples, // number of prefix samples
frame_parms->twiddle_ifft, // IFFT twiddle factors
@@ -1240,7 +1240,7 @@ int main(int argc, char **argv)
if (frame_parms->Ncp == 1)
PHY_ofdm_mod(PHY_vars_eNB1->lte_eNB_common_vars.txdataF[eNb_id][aa], // input,
PHY_vars_eNB1->lte_eNB_common_vars.txdata[eNb_id][aa], // output
- frame_parms->log2_symbol_size, // log2_fft_size
+ frame_parms->ofdm_symbol_size, // log2_fft_size
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*nsymb, // number of symbols
frame_parms->nb_prefix_samples, // number of prefix samples
frame_parms->twiddle_ifft, // IFFT twiddle factors
@@ -1260,7 +1260,7 @@ int main(int argc, char **argv)
if (frame_parms->Ncp == 1)
PHY_ofdm_mod(PHY_vars_eNB2->lte_eNB_common_vars.txdataF[eNb_id][aa], // input,
PHY_vars_eNB2->lte_eNB_common_vars.txdata[eNb_id][aa], // output
- frame_parms->log2_symbol_size, // log2_fft_size
+ frame_parms->ofdm_symbol_size, // log2_fft_size
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*nsymb, // number of symbols
frame_parms->nb_prefix_samples, // number of prefix samples
frame_parms->twiddle_ifft, // IFFT twiddle factors
diff --git a/openair1/SIMULATION/LTE_PHY/ulsim.c b/openair1/SIMULATION/LTE_PHY/ulsim.c
index de2789acef..4a78667535 100644
--- a/openair1/SIMULATION/LTE_PHY/ulsim.c
+++ b/openair1/SIMULATION/LTE_PHY/ulsim.c
@@ -89,60 +89,6 @@ double t_rx_min = 1000000000; /*!< \brief initial min process time for tx */
int n_tx_dropped = 0; /*!< \brief initial max process time for tx */
int n_rx_dropped = 0; /*!< \brief initial max process time for rx */
-void lte_param_init(unsigned char N_tx, unsigned char N_rx,unsigned char transmission_mode,uint8_t extended_prefix_flag,uint8_t N_RB_DL,uint8_t frame_type,uint8_t tdd_config,uint8_t osf)
-{
-
- LTE_DL_FRAME_PARMS *lte_frame_parms;
-
- printf("Start lte_param_init\n");
- PHY_vars_eNB = malloc(sizeof(PHY_VARS_eNB));
- PHY_vars_UE = malloc(sizeof(PHY_VARS_UE));
- //PHY_config = malloc(sizeof(PHY_CONFIG));
- mac_xface = malloc(sizeof(MAC_xface));
-
- randominit(0);
- set_taus_seed(0);
-
- lte_frame_parms = &(PHY_vars_eNB->lte_frame_parms);
-
- lte_frame_parms->frame_type = frame_type;
- lte_frame_parms->tdd_config = tdd_config;
- lte_frame_parms->N_RB_DL = N_RB_DL; //50 for 10MHz and 25 for 5 MHz
- lte_frame_parms->N_RB_UL = N_RB_DL;
- lte_frame_parms->Ncp = extended_prefix_flag;
- lte_frame_parms->Ncp_UL = extended_prefix_flag;
- lte_frame_parms->Nid_cell = 10;
- lte_frame_parms->nushift = 0;
- lte_frame_parms->nb_antennas_tx = N_tx;
- lte_frame_parms->nb_antennas_rx = N_rx;
- // lte_frame_parms->Csrs = 2;
- // lte_frame_parms->Bsrs = 0;
- // lte_frame_parms->kTC = 0;
- // lte_frame_parms->n_RRC = 0;
- lte_frame_parms->mode1_flag = (transmission_mode == 1)? 1 : 0;
- lte_frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift = 0;//n_DMRS1 set to 0
-
- init_frame_parms(lte_frame_parms,osf);
-
- //copy_lte_parms_to_phy_framing(lte_frame_parms, &(PHY_config->PHY_framing));
-
-
- PHY_vars_UE->lte_frame_parms = *lte_frame_parms;
-
- phy_init_lte_top(lte_frame_parms);
-
- phy_init_lte_ue(PHY_vars_UE,1,0);
-
- phy_init_lte_eNB(PHY_vars_eNB,0,0,0);
-
- printf("Done lte_param_init\n");
-
-
-}
-
-
-
-
int main(int argc, char **argv)
{
@@ -520,7 +466,16 @@ int main(int argc, char **argv)
}
}
- lte_param_init(1,n_rx,1,extended_prefix_flag,N_RB_DL,frame_type,tdd_config,osf);
+ lte_param_init(1,
+ n_rx,
+ 1,
+ extended_prefix_flag,
+ frame_type,
+ 0,
+ tdd_config,
+ N_RB_DL,
+ osf,
+ 0);
if (nb_rb_set == 0)
nb_rb = PHY_vars_eNB->lte_frame_parms.N_RB_UL;
@@ -1109,7 +1064,7 @@ int main(int argc, char **argv)
if (frame_parms->Ncp == 1)
PHY_ofdm_mod(&PHY_vars_UE->lte_ue_common_vars.txdataF[aa][subframe*nsymb*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX], // input
&txdata[aa][PHY_vars_eNB->lte_frame_parms.samples_per_tti*subframe], // output
- PHY_vars_UE->lte_frame_parms.log2_symbol_size, // log2_fft_size
+ PHY_vars_UE->lte_frame_parms.ofdm_symbol_size,
nsymb, // number of symbols
PHY_vars_UE->lte_frame_parms.nb_prefix_samples, // number of prefix samples
CYCLIC_PREFIX);
diff --git a/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c b/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c
index d515a206ae..c7f2ee7b5e 100644
--- a/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c
+++ b/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c
@@ -38,6 +38,14 @@
#include
#include "bladerf_lib.h"
+#ifdef __SSE4_1__
+# include
+#endif
+
+#ifdef __AVX2__
+# include
+#endif
+
int num_devices=0;
/*These items configure the underlying asynch stream used by the the sync interface.
*/
@@ -47,16 +55,17 @@ int trx_brf_init(openair0_device *openair0) {
}
-openair0_timestamp trx_get_timestamp(openair0_device *device) {
+openair0_timestamp trx_get_timestamp(openair0_device *device, bladerf_module module) {
int status;
struct bladerf_metadata meta;
brf_state_t *brf = (brf_state_t*)device->priv;
+ memset(&meta, 0, sizeof(meta));
- if ((status=bladerf_get_timestamp(brf->dev, BLADERF_MODULE_TX, &meta.timestamp)) != 0) {
- fprintf(stderr,"Failed to get current RX timestamp: %s\n",bladerf_strerror(status));
- } else {
- printf("Current TX timestampe 0x%016"PRIx64"\n", meta.timestamp);
- }
+ if ((status=bladerf_get_timestamp(brf->dev, module, &meta.timestamp)) != 0) {
+ fprintf(stderr,"Failed to get current %s timestamp: %s\n",(module == BLADERF_MODULE_RX ) ? "RX" : "TX", bladerf_strerror(status));
+ return -1;
+ } // else {printf("Current RX timestampe 0x%016"PRIx64"\n", meta.timestamp); }
+
return meta.timestamp;
}
@@ -73,22 +82,26 @@ static void trx_brf_stats(openair0_device *device){
static int trx_brf_write(openair0_device *device,openair0_timestamp ptimestamp, void **buff, int nsamps, int cc) {
- int status, i;
+ int status;
brf_state_t *brf = (brf_state_t*)device->priv;
/* BRF has only 1 rx/tx chaine : is it correct? */
- void *samples = (void*)buff[0];
+ int16_t *samples = (int16_t*)buff[0];
- //brf->meta_tx.flags &= ~BLADERF_META_FLAG_TX_NOW;
- brf->meta_tx.flags = BLADERF_META_FLAG_TX_BURST_START |
- BLADERF_META_FLAG_TX_NOW |
- BLADERF_META_FLAG_TX_BURST_END;
-
- brf->meta_tx.timestamp= (uint64_t) ptimestamp;
-
+ //memset(&brf->meta_tx, 0, sizeof(brf->meta_tx));
+ // When BLADERF_META_FLAG_TX_NOW is used the timestamp is not used, so one can't schedule a tx
+ if (brf->meta_tx.flags == 0 )
+ brf->meta_tx.flags = (BLADERF_META_FLAG_TX_BURST_START);// | BLADERF_META_FLAG_TX_BURST_END);// | BLADERF_META_FLAG_TX_NOW);
+
+
+ brf->meta_tx.timestamp= (uint64_t) (ptimestamp);
status = bladerf_sync_tx(brf->dev, samples, (unsigned int) nsamps, &brf->meta_tx, 2*brf->tx_timeout_ms);
+
+ if (brf->meta_tx.flags == BLADERF_META_FLAG_TX_BURST_START)
+ brf->meta_tx.flags = BLADERF_META_FLAG_TX_UPDATE_TIMESTAMP;
+
if (status != 0) {
- fprintf(stderr,"Failed to TX sample: %s\n", bladerf_strerror(status));
+ //fprintf(stderr,"Failed to TX sample: %s\n", bladerf_strerror(status));
brf->num_tx_errors++;
brf_error(status);
} else if (brf->meta_tx.status & BLADERF_META_STATUS_UNDERRUN){
@@ -96,6 +109,8 @@ static int trx_brf_write(openair0_device *device,openair0_timestamp ptimestamp,
fprintf(stderr, "TX Underrun detected. %u valid samples were read.\n", brf->meta_tx.actual_count);
brf->num_underflows++;
}
+ //printf("Provided TX timestampe %u, meta timestame %u\n", ptimestamp,brf->meta_tx.timestamp);
+
// printf("tx status %d \n",brf->meta_tx.status);
brf->tx_current_ts=brf->meta_tx.timestamp;
brf->tx_actual_nsamps+=brf->meta_tx.actual_count;
@@ -107,26 +122,28 @@ static int trx_brf_write(openair0_device *device,openair0_timestamp ptimestamp,
}
static int trx_brf_read(openair0_device *device, openair0_timestamp *ptimestamp, void **buff, int nsamps, int cc) {
- int status, ret;
-
- unsigned int i;
+
+ int status=0;
brf_state_t *brf = (brf_state_t*)device->priv;
// BRF has only one rx/tx chain
- void *samples = (void*)buff[0];
-
- brf->meta_rx.flags |= BLADERF_META_FLAG_RX_NOW;
+ int16_t *samples = (int16_t*)buff[0];
+
+ brf->meta_rx.flags = BLADERF_META_FLAG_RX_NOW;
status = bladerf_sync_rx(brf->dev, samples, (unsigned int) nsamps, &brf->meta_rx, 2*brf->rx_timeout_ms);
+ // printf("Current RX timestampe %u, nsamps %u, actual %u, cc %d\n", brf->meta_rx.timestamp, nsamps, brf->meta_rx.actual_count, cc);
+
if (status != 0) {
fprintf(stderr, "RX failed: %s\n", bladerf_strerror(status));
+ // printf("RX failed: %s\n", bladerf_strerror(status));
brf->num_rx_errors++;
} else if ( brf->meta_rx.status & BLADERF_META_STATUS_OVERRUN) {
brf->num_overflows++;
- fprintf(stderr, "RX overrun (%d) is detected. t=0x%"PRIu64". Got %u samples. nsymps %d\n",
- brf->num_overflows,brf->meta_rx.timestamp, brf->meta_rx.actual_count, nsamps);
- //brf->meta_rx.timestamp=(unsigned int)(nsamps-brf->meta_rx.actual_count);
- }
+ printf("RX overrun (%d) is detected. t=%u. Got %u samples. nsymps %d\n",
+ brf->num_overflows,brf->meta_rx.timestamp, brf->meta_rx.actual_count, nsamps);
+ }
+ //printf("Current RX timestampe %u\n", brf->meta_rx.timestamp);
//printf("[BRF] (buff %p) ts=0x%"PRIu64" %s\n",samples, brf->meta_rx.timestamp,bladerf_strerror(status));
brf->rx_current_ts=brf->meta_rx.timestamp;
brf->rx_actual_nsamps+=brf->meta_rx.actual_count;
@@ -135,7 +152,7 @@ static int trx_brf_read(openair0_device *device, openair0_timestamp *ptimestamp,
*ptimestamp = brf->meta_rx.timestamp;
-
+
return brf->meta_rx.actual_count;
}
@@ -176,6 +193,23 @@ int trx_brf_stop(openair0_device* device) {
int trx_brf_set_freq(openair0_device* device) {
+ int status;
+ brf_state_t *brf = (brf_state_t *)device->priv;
+ openair0_config_t *openair0_cfg = (openair0_config_t *)device->openair0_cfg;
+
+
+ if ((status=bladerf_set_frequency(brf->dev, BLADERF_MODULE_TX, (unsigned int) openair0_cfg->tx_freq[0])) != 0){
+ fprintf(stderr,"Failed to set TX frequency: %s\n",bladerf_strerror(status));
+ brf_error(status);
+ }else
+ printf("[BRF] set TX Frequency to %u\n", (unsigned int) openair0_cfg->tx_freq[0]);
+
+ if ((status=bladerf_set_frequency(brf->dev, BLADERF_MODULE_RX, (unsigned int) openair0_cfg->rx_freq[0])) != 0){
+ fprintf(stderr,"Failed to set RX frequency: %s\n",bladerf_strerror(status));
+ brf_error(status);
+ } else
+ printf("[BRF] set RX frequency to %u\n",(unsigned int)openair0_cfg->rx_freq[0]);
+
return(0);
}
@@ -185,6 +219,609 @@ int trx_brf_set_gains(openair0_device* device) {
}
+#define RXDCLENGTH 16384
+int16_t cos_fsover8[8] = {2047, 1447, 0, -1448, -2047, -1448, 0, 1447};
+int16_t cos_3fsover8[8] = {2047, -1448, 0, 1447, -2047, 1447, 0, -1448};
+
+rx_gain_calib_table_t calib_table_fx4[] = {
+ {2300000000.0,53.5},
+ {1880000000.0,57.0},
+ {816000000.0,73.0},
+ {-1,0}};
+
+void set_rx_gain_offset(openair0_config_t *openair0_cfg, int chain_index) {
+
+ int i=0;
+ // loop through calibration table to find best adjustment factor for RX frequency
+ double min_diff = 6e9,diff;
+
+ while (openair0_cfg->rx_gain_calib_table[i].freq>0) {
+ diff = fabs(openair0_cfg->rx_freq[chain_index] - openair0_cfg->rx_gain_calib_table[i].freq);
+ printf("cal %d: freq %f, offset %f, diff %f\n",
+ i,
+ openair0_cfg->rx_gain_calib_table[i].freq,
+ openair0_cfg->rx_gain_calib_table[i].offset,diff);
+ if (min_diff > diff) {
+ min_diff = diff;
+ openair0_cfg->rx_gain_offset[chain_index] = openair0_cfg->rx_gain_calib_table[i].offset;
+ }
+ i++;
+ }
+
+}
+
+void calibrate_rf(openair0_device *device) {
+
+
+ brf_state_t *brf = (brf_state_t *)device->priv;
+ openair0_timestamp ptimestamp;
+ int16_t *calib_buffp,*calib_tx_buffp;
+ int16_t calib_buff[2*RXDCLENGTH];
+ int16_t calib_tx_buff[2*RXDCLENGTH];
+ int i,j,offI,offQ,offIold,offQold,offInew,offQnew,offphase,offphaseold,offphasenew,offgain,offgainold,offgainnew;
+ int32_t meanI,meanQ,meanIold,meanQold;
+ int cnt=0,loop;
+
+ // put TX on a far-away frequency to avoid interference in RX band
+ bladerf_set_frequency(brf->dev,BLADERF_MODULE_TX, (unsigned int) device->openair0_cfg->rx_freq[0] + 200e6);
+ // Set gains to close to max
+ bladerf_set_gain(brf->dev, BLADERF_MODULE_RX, 60);
+ bladerf_set_gain(brf->dev, BLADERF_MODULE_TX, 60);
+
+ // fill TX buffer with fs/8 complex sinusoid
+ j=0;
+ for (i=0;idev,BLADERF_MODULE_RX,BLADERF_CORR_LMS_DCOFF_I,offIold);
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_RX,BLADERF_CORR_LMS_DCOFF_Q,offQold);
+ for (i=0;i<10;i++)
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+
+ for (meanIold=meanQold=i=j=0;i (%d,%d)\n",offIold,offQold,meanIold,meanQold);
+
+ offI=offQ=-2048;
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_RX,BLADERF_CORR_LMS_DCOFF_I,offI);
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_RX,BLADERF_CORR_LMS_DCOFF_Q,offQ);
+ for (i=0;i<10;i++)
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+
+ for (meanI=meanQ=i=j=0;i (%d,%d)\n",offI,offQ,meanI,meanQ);
+
+ while (cnt++ < 12) {
+
+ offInew=(offIold+offI)>>1;
+ offQnew=(offQold+offQ)>>1;
+
+ if (meanI*meanI < meanIold*meanIold) {
+ meanIold = meanI;
+ offIold = offI;
+ printf("[BRF] *** RX DC: offI %d => %d\n",offIold,meanI);
+ }
+ if (meanQ*meanQ < meanQold*meanQold) {
+ meanQold = meanQ;
+ offQold = offQ;
+ printf("[BRF] *** RX DC: offQ %d => %d\n",offQold,meanQ);
+ }
+ offI = offInew;
+ offQ = offQnew;
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_RX,BLADERF_CORR_LMS_DCOFF_I,offI);
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_RX,BLADERF_CORR_LMS_DCOFF_Q,offQ);
+
+ for (i=0;i<10;i++)
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+
+ for (meanI=meanQ=i=j=0;i (%d,%d)\n",offI,offQ,meanI,meanQ);
+ }
+
+ printf("[BRF] RX DC: (%d,%d) => (%d,%d)\n",offIold,offQold,meanIold,meanQold);
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_RX,BLADERF_CORR_LMS_DCOFF_I,offIold);
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_RX,BLADERF_CORR_LMS_DCOFF_Q,offQold);
+
+ // TX DC offset
+ // PUT TX as f_RX + fs/4
+ // loop back BLADERF_LB_RF_LNA1
+ bladerf_set_frequency(brf->dev,BLADERF_MODULE_TX, (unsigned int) device->openair0_cfg->rx_freq[0] + (unsigned int) device->openair0_cfg->sample_rate/4);
+ bladerf_set_loopback (brf->dev,BLADERF_LB_RF_LNA1);
+
+ offIold=2048;
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_TX,BLADERF_CORR_LMS_DCOFF_I,offIold);
+ for (i=0;i<10;i++) {
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0);
+ }
+ for (meanIold=meanQold=i=j=0;i (%d,%d)\n",offIold,meanIold,meanQold);
+
+ offI=-2048;
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_TX,BLADERF_CORR_LMS_DCOFF_I,offI);
+ for (i=0;i<10;i++) {
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0);
+ }
+ for (meanI=meanQ=i=j=0;i (%d,%d)\n",offI,meanI,meanQ);
+ cnt = 0;
+ while (cnt++ < 12) {
+
+ offInew=(offIold+offI)>>1;
+ if (meanI*meanI+meanQ*meanQ < meanIold*meanIold +meanQold*meanQold) {
+ printf("[BRF] TX DC (offI): ([%d,%d]) => %d : %d\n",offIold,offI,offInew,meanI*meanI+meanQ*meanQ);
+ meanIold = meanI;
+ meanQold = meanQ;
+ offIold = offI;
+ }
+ offI = offInew;
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_TX,BLADERF_CORR_LMS_DCOFF_I,offI);
+
+ for (i=0;i<10;i++) {
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0);
+ }
+ for (meanI=meanQ=i=j=0;i (%d,%d)\n",offI,meanI,meanQ);
+ }
+
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_TX,BLADERF_CORR_LMS_DCOFF_I,offIold);
+
+ offQold=2048;
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_TX,BLADERF_CORR_LMS_DCOFF_Q,offQold);
+ for (i=0;i<10;i++) {
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0);
+ }
+ // project on fs/4
+ for (meanIold=meanQold=i=j=0;i (%d,%d)\n",offQold,meanIold,meanQold);
+
+ offQ=-2048;
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_TX,BLADERF_CORR_LMS_DCOFF_Q,offQ);
+ for (i=0;i<10;i++) {
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0);
+ }
+ for (meanI=meanQ=i=j=0;i (%d,%d)\n",offQ,meanI,meanQ);
+
+ cnt=0;
+ while (cnt++ < 12) {
+
+ offQnew=(offQold+offQ)>>1;
+ if (meanI*meanI+meanQ*meanQ < meanIold*meanIold +meanQold*meanQold) {
+ printf("[BRF] TX DC (offQ): ([%d,%d]) => %d : %d\n",offQold,offQ,offQnew,meanI*meanI+meanQ*meanQ);
+
+ meanIold = meanI;
+ meanQold = meanQ;
+ offQold = offQ;
+ }
+ offQ = offQnew;
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_TX,BLADERF_CORR_LMS_DCOFF_Q,offQ);
+
+ for (i=0;i<10;i++) {
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0);
+ }
+ for (meanI=meanQ=i=j=0;i (%d,%d)\n",offQ,meanI,meanQ);
+ }
+
+ printf("[BRF] TX DC: (%d,%d) => (%d,%d)\n",offIold,offQold,meanIold,meanQold);
+
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_TX,BLADERF_CORR_LMS_DCOFF_Q,offQold);
+
+ // TX IQ imbalance
+ for (loop=0;loop<2;loop++) {
+ offphaseold=4096;
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_TX,BLADERF_CORR_FPGA_PHASE,offphaseold);
+ for (i=0;i<10;i++) {
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0);
+ }
+ // project on fs/8 (Image of TX signal in +ve frequencies)
+ for (meanIold=meanQold=i=j=0;i>11;
+ meanQold+= (calib_buff[j]*cos_fsover8[(i+2)&7] + calib_buff[j+1]*cos_fsover8[i&7])>>11;
+ j+=2;
+ }
+
+ meanIold/=RXDCLENGTH;
+ meanQold/=RXDCLENGTH;
+ printf("[BRF] TX IQ (offphase): %d => (%d,%d)\n",offphaseold,meanIold,meanQold);
+
+ offphase=-4096;
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_TX,BLADERF_CORR_FPGA_PHASE,offphase);
+ for (i=0;i<10;i++) {
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0);
+ }
+ // project on fs/8 (Image of TX signal in +ve frequencies)
+ for (meanI=meanQ=i=j=0;i>11;
+ meanQ+= (calib_buff[j]*cos_fsover8[(i+2)&7] + calib_buff[j+1]*cos_fsover8[i&7])>>11;
+ j+=2;
+ }
+
+ meanI/=RXDCLENGTH;
+ meanQ/=RXDCLENGTH;
+ printf("[BRF] TX IQ (offphase): %d => (%d,%d)\n",offphase,meanI,meanQ);
+
+ cnt=0;
+ while (cnt++ < 13) {
+
+ offphasenew=(offphaseold+offphase)>>1;
+ printf("[BRF] TX IQ (offphase): ([%d,%d]) => %d : %d\n",offphaseold,offphase,offphasenew,meanI*meanI+meanQ*meanQ);
+ if (meanI*meanI+meanQ*meanQ < meanIold*meanIold +meanQold*meanQold) {
+
+
+ meanIold = meanI;
+ meanQold = meanQ;
+ offphaseold = offphase;
+ }
+ offphase = offphasenew;
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_TX,BLADERF_CORR_FPGA_PHASE,offphase);
+
+ for (i=0;i<10;i++) {
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0);
+ }
+ // project on fs/8 (Image of TX signal in +ve frequencies)
+ for (meanI=meanQ=i=j=0;i>11;
+ meanQ+= (calib_buff[j]*cos_fsover8[(i+2)&7] + calib_buff[j+1]*cos_fsover8[i&7])>>11;
+ j+=2;
+ }
+ meanI/=RXDCLENGTH;
+ meanQ/=RXDCLENGTH;
+
+ // printf("[BRF] TX DC (offQ): %d => (%d,%d)\n",offQ,meanI,meanQ);
+ }
+
+ printf("[BRF] TX IQ offphase: %d => (%d,%d)\n",offphaseold,meanIold,meanQold);
+
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_TX,BLADERF_CORR_FPGA_PHASE,offphaseold);
+
+ offgainold=4096;
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_TX,BLADERF_CORR_FPGA_GAIN,offgainold);
+ for (i=0;i<10;i++) {
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0);
+ }
+ // project on fs/8 (Image of TX signal in +ve frequencies)
+ for (meanIold=meanQold=i=j=0;i>11;
+ meanQold+= (calib_buff[j]*cos_fsover8[(i+2)&7] + calib_buff[j+1]*cos_fsover8[i&7])>>11;
+ j+=2;
+ }
+
+ meanIold/=RXDCLENGTH;
+ meanQold/=RXDCLENGTH;
+ printf("[BRF] TX IQ (offgain): %d => (%d,%d)\n",offgainold,meanIold,meanQold);
+
+ offgain=-4096;
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_TX,BLADERF_CORR_FPGA_GAIN,offgain);
+ for (i=0;i<10;i++) {
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0);
+ }
+ // project on fs/8 (Image of TX signal in +ve frequencies)
+ for (meanI=meanQ=i=j=0;i>11;
+ meanQ+= (calib_buff[j]*cos_fsover8[(i+2)&7] + calib_buff[j+1]*cos_fsover8[i&7])>>11;
+ j+=2;
+ }
+
+ meanI/=RXDCLENGTH;
+ meanQ/=RXDCLENGTH;
+ printf("[BRF] TX IQ (offgain): %d => (%d,%d)\n",offgain,meanI,meanQ);
+
+ cnt=0;
+ while (cnt++ < 13) {
+
+ offgainnew=(offgainold+offgain)>>1;
+ if (meanI*meanI+meanQ*meanQ < meanIold*meanIold +meanQold*meanQold) {
+ printf("[BRF] TX IQ (offgain): ([%d,%d]) => %d : %d\n",offgainold,offgain,offgainnew,meanI*meanI+meanQ*meanQ);
+
+ meanIold = meanI;
+ meanQold = meanQ;
+ offgainold = offgain;
+ }
+ offgain = offgainnew;
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_TX,BLADERF_CORR_FPGA_GAIN,offgain);
+
+ for (i=0;i<10;i++) {
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0);
+ }
+ // project on fs/8 (Image of TX signal in +ve frequencies)
+ for (meanI=meanQ=i=j=0;i>11;
+ meanQ+= (calib_buff[j]*cos_fsover8[(i+2)&7] + calib_buff[j+1]*cos_fsover8[i&7])>>11;
+ j+=2;
+ }
+ meanI/=RXDCLENGTH;
+ meanQ/=RXDCLENGTH;
+
+ // printf("[BRF] TX DC (offQ): %d => (%d,%d)\n",offQ,meanI,meanQ);
+ }
+
+ printf("[BRF] TX IQ offgain: %d => (%d,%d)\n",offgainold,meanIold,meanQold);
+
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_TX,BLADERF_CORR_FPGA_GAIN,offgainold);
+ }
+
+ // RX IQ imbalance
+ for (loop=0;loop<2;loop++) {
+ offphaseold=4096;
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_RX,BLADERF_CORR_FPGA_PHASE,offphaseold);
+ for (i=0;i<10;i++) {
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0);
+ }
+ // project on -3fs/8 (Image of TX signal in -ve frequencies)
+ for (meanIold=meanQold=i=j=0;i>11;
+ meanQold+= (calib_buff[j]*cos_3fsover8[(i+2)&7] + calib_buff[j+1]*cos_3fsover8[i&7])>>11;
+ j+=2;
+ }
+
+ meanIold/=RXDCLENGTH;
+ meanQold/=RXDCLENGTH;
+ printf("[BRF] RX IQ (offphase): %d => (%d,%d)\n",offphaseold,meanIold,meanQold);
+
+ offphase=-4096;
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_RX,BLADERF_CORR_FPGA_PHASE,offphase);
+ for (i=0;i<10;i++) {
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0);
+ }
+ // project on -3fs/8 (Image of TX signal in -ve frequencies)
+ for (meanI=meanQ=i=j=0;i>11;
+ meanQ+= (calib_buff[j]*cos_3fsover8[(i+2)&7] + calib_buff[j+1]*cos_3fsover8[i&7])>>11;
+ j+=2;
+ }
+
+ meanI/=RXDCLENGTH;
+ meanQ/=RXDCLENGTH;
+ printf("[BRF] RX IQ (offphase): %d => (%d,%d)\n",offphase,meanI,meanQ);
+
+ cnt=0;
+ while (cnt++ < 13) {
+
+ offphasenew=(offphaseold+offphase)>>1;
+ printf("[BRF] RX IQ (offphase): ([%d,%d]) => %d : %d\n",offphaseold,offphase,offphasenew,meanI*meanI+meanQ*meanQ);
+ if (meanI*meanI+meanQ*meanQ < meanIold*meanIold +meanQold*meanQold) {
+
+
+ meanIold = meanI;
+ meanQold = meanQ;
+ offphaseold = offphase;
+ }
+ offphase = offphasenew;
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_RX,BLADERF_CORR_FPGA_PHASE,offphase);
+
+ for (i=0;i<10;i++) {
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0);
+ }
+ // project on -3fs/8 (Image of TX signal in -ve frequencies)
+ for (meanI=meanQ=i=j=0;i>11;
+ meanQ+= (calib_buff[j]*cos_3fsover8[(i+2)&7] + calib_buff[j+1]*cos_3fsover8[i&7])>>11;
+ j+=2;
+ }
+ meanI/=RXDCLENGTH;
+ meanQ/=RXDCLENGTH;
+
+ // printf("[BRF] TX DC (offQ): %d => (%d,%d)\n",offQ,meanI,meanQ);
+ }
+
+ printf("[BRF] RX IQ offphase: %d => (%d,%d)\n",offphaseold,meanIold,meanQold);
+
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_RX,BLADERF_CORR_FPGA_PHASE,offphaseold);
+
+ offgainold=4096;
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_RX,BLADERF_CORR_FPGA_GAIN,offgainold);
+ for (i=0;i<10;i++) {
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0);
+ }
+ // project on -3fs/8 (Image of TX signal in +ve frequencies)
+ for (meanIold=meanQold=i=j=0;i>11;
+ meanQold+= (calib_buff[j]*cos_3fsover8[(i+2)&7] + calib_buff[j+1]*cos_3fsover8[i&7])>>11;
+ j+=2;
+ }
+
+ meanIold/=RXDCLENGTH;
+ meanQold/=RXDCLENGTH;
+ printf("[BRF] RX IQ (offgain): %d => (%d,%d)\n",offgainold,meanIold,meanQold);
+
+ offgain=-4096;
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_RX,BLADERF_CORR_FPGA_GAIN,offgain);
+ for (i=0;i<10;i++) {
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0);
+ }
+ // project on 3fs/8 (Image of TX signal in -ve frequencies)
+ for (meanI=meanQ=i=j=0;i>11;
+ meanQ+= (calib_buff[j]*cos_3fsover8[(i+2)&7] + calib_buff[j+1]*cos_3fsover8[i&7])>>11;
+ j+=2;
+ }
+
+ meanI/=RXDCLENGTH;
+ meanQ/=RXDCLENGTH;
+ printf("[BRF] RX IQ (offgain): %d => (%d,%d)\n",offgain,meanI,meanQ);
+
+ cnt=0;
+ while (cnt++ < 13) {
+
+ offgainnew=(offgainold+offgain)>>1;
+ if (meanI*meanI+meanQ*meanQ < meanIold*meanIold +meanQold*meanQold) {
+ printf("[BRF] RX IQ (offgain): ([%d,%d]) => %d : %d\n",offgainold,offgain,offgainnew,meanI*meanI+meanQ*meanQ);
+
+ meanIold = meanI;
+ meanQold = meanQ;
+ offgainold = offgain;
+ }
+ offgain = offgainnew;
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_RX,BLADERF_CORR_FPGA_GAIN,offgain);
+
+ for (i=0;i<10;i++) {
+ trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0);
+ }
+ // project on -3fs/8 (Image of TX signal in -ve frequencies)
+ for (meanI=meanQ=i=j=0;i>11;
+ meanQ+= (calib_buff[j]*cos_3fsover8[(i+2)&7] + calib_buff[j+1]*cos_3fsover8[i&7])>>11;
+ j+=2;
+ }
+ meanI/=RXDCLENGTH;
+ meanQ/=RXDCLENGTH;
+
+ // printf("[BRF] TX DC (offQ): %d => (%d,%d)\n",offQ,meanI,meanQ);
+ }
+
+ printf("[BRF] RX IQ offgain: %d => (%d,%d)\n",offgainold,meanIold,meanQold);
+
+ bladerf_set_correction(brf->dev,BLADERF_MODULE_RX,BLADERF_CORR_FPGA_GAIN,offgainold);
+ }
+
+ bladerf_set_frequency(brf->dev,BLADERF_MODULE_TX, (unsigned int) device->openair0_cfg->tx_freq[0]);
+ bladerf_set_loopback(brf->dev,BLADERF_LB_NONE);
+ bladerf_set_gain(brf->dev, BLADERF_MODULE_RX, (unsigned int) device->openair0_cfg->rx_gain[0]-device->openair0_cfg[0].rx_gain_offset[0]);
+ bladerf_set_gain(brf->dev, BLADERF_MODULE_TX, (unsigned int) device->openair0_cfg->tx_gain[0]);
+ // write_output("blade_rf_test.m","rxs",calib_buff,RXDCLENGTH,1,1);
+}
+
int openair0_dev_init_bladerf(openair0_device *device, openair0_config_t *openair0_cfg) {
int status;
@@ -192,18 +829,52 @@ int openair0_dev_init_bladerf(openair0_device *device, openair0_config_t *openai
brf_state_t *brf = (brf_state_t*)malloc(sizeof(brf_state_t));
memset(brf, 0, sizeof(brf_state_t));
- // init required params for BRF
- brf->num_buffers = 128;
- brf->buffer_size = (unsigned int) openair0_cfg[card].samples_per_packet*sizeof(int32_t); // buffer size = 4096 for sample_len of 1024
- brf->num_transfers = 16;
- brf->rx_timeout_ms = 0;
- brf->tx_timeout_ms = 0;
- brf->sample_rate=(unsigned int)openair0_cfg[card].sample_rate;
+ // init required params
-
- printf("\n[BRF] sampling_rate %d, num_buffers %d, buffer_size %d, num transfer %d, timeout_ms (rx %d, tx %d)\n",
- brf->sample_rate, brf->num_buffers, brf->buffer_size,brf->num_transfers, brf->rx_timeout_ms, brf->tx_timeout_ms);
+ switch ((int)openair0_cfg->sample_rate) {
+ case 30720000:
+ openair0_cfg->samples_per_packet = 2048;
+ openair0_cfg->tx_sample_advance = 0;
+ openair0_cfg->tx_scheduling_advance = 8*openair0_cfg->samples_per_packet;
+ break;
+ case 15360000:
+ openair0_cfg->samples_per_packet = 2048;
+ openair0_cfg->tx_sample_advance = 0;
+ openair0_cfg->tx_scheduling_advance = 4*openair0_cfg->samples_per_packet;
+ break;
+ case 7680000:
+ openair0_cfg->samples_per_packet = 1024;
+ openair0_cfg->tx_sample_advance = 0;
+ openair0_cfg->tx_scheduling_advance = 4*openair0_cfg->samples_per_packet;
+ break;
+ case 1920000:
+ openair0_cfg->samples_per_packet = 256;
+ openair0_cfg->tx_sample_advance = 50;
+ openair0_cfg->tx_scheduling_advance = 8*openair0_cfg->samples_per_packet;
+ break;
+ default:
+ printf("Error: unknown sampling rate %f\n",openair0_cfg->sample_rate);
+ exit(-1);
+ break;
+ }
+ openair0_cfg->rx_gain_calib_table = calib_table_fx4;
+
+ // The number of buffers to use in the underlying data stream
+ brf->num_buffers = 128;
+ // the size of the underlying stream buffers, in samples
+ brf->buffer_size = (unsigned int) openair0_cfg->samples_per_packet;//*sizeof(int32_t); // buffer size = 4096 for sample_len of 1024
+ brf->num_transfers = 16;
+ brf->rx_timeout_ms = 0;
+ brf->tx_timeout_ms = 0;
+ brf->sample_rate=(unsigned int)openair0_cfg->sample_rate;
+
+ memset(&brf->meta_rx, 0, sizeof(brf->meta_rx));
+ memset(&brf->meta_tx, 0, sizeof(brf->meta_tx));
+
+ printf("\n[BRF] sampling_rate %d, num_buffers %d, buffer_size %d, num transfer %d, timeout_ms (rx %d, tx %d)\n",
+ brf->sample_rate, brf->num_buffers, brf->buffer_size,brf->num_transfers, brf->rx_timeout_ms, brf->tx_timeout_ms);
+
if ((status=bladerf_open(&brf->dev, "")) != 0 ) {
fprintf(stderr,"Failed to open brf device: %s\n",bladerf_strerror(status));
brf_error(status);
@@ -217,83 +888,81 @@ int openair0_dev_init_bladerf(openair0_device *device, openair0_config_t *openai
printf("[BRF] Device does not operates at max speed, change the USB port\n");
brf_error(BLADERF_ERR_UNSUPPORTED);
}
- // RX
+ // RX
// Example of CLI output: RX Frequency: 2539999999Hz
- if ((status=bladerf_set_frequency(brf->dev, BLADERF_MODULE_RX, (unsigned int) openair0_cfg[card].rx_freq[0])) != 0){
+ if ((status=bladerf_set_frequency(brf->dev, BLADERF_MODULE_RX, (unsigned int) openair0_cfg->rx_freq[0])) != 0){
fprintf(stderr,"Failed to set RX frequency: %s\n",bladerf_strerror(status));
brf_error(status);
} else
- printf("[BRF] set RX frequency to %f\n",openair0_cfg[card].rx_freq[0]);
+ printf("[BRF] set RX frequency to %u\n",(unsigned int)openair0_cfg->rx_freq[0]);
-
- if ((status=bladerf_set_sample_rate(brf->dev, BLADERF_MODULE_RX, (unsigned int)openair0_cfg[card].sample_rate, NULL)) != 0){
+
+
+ unsigned int actual_value=0;
+ if ((status=bladerf_set_sample_rate(brf->dev, BLADERF_MODULE_RX, (unsigned int) openair0_cfg->sample_rate, &actual_value)) != 0){
fprintf(stderr,"Failed to set RX sample rate: %s\n", bladerf_strerror(status));
brf_error(status);
- }else
- printf("[BRF] set RX sample rate to %f\n",openair0_cfg[card].sample_rate);
+ }else
+ printf("[BRF] set RX sample rate to %u, %u\n", (unsigned int) openair0_cfg->sample_rate, actual_value);
- if ((status=bladerf_set_bandwidth(brf->dev, BLADERF_MODULE_RX, (unsigned int) openair0_cfg[card].rx_bw, NULL)) != 0){
+
+ if ((status=bladerf_set_bandwidth(brf->dev, BLADERF_MODULE_RX, (unsigned int) openair0_cfg->rx_bw*2, &actual_value)) != 0){
fprintf(stderr,"Failed to set RX bandwidth: %s\n", bladerf_strerror(status));
brf_error(status);
}else
- printf("[BRF] set RX bandwidth to %f\n",openair0_cfg[card].rx_bw);
+ printf("[BRF] set RX bandwidth to %u, %u\n",(unsigned int)openair0_cfg->rx_bw*2, actual_value);
- if ((status=bladerf_set_gain(brf->dev, BLADERF_MODULE_RX, (int) openair0_cfg[card].rx_gain[0])) != 0) {
+ set_rx_gain_offset(&openair0_cfg[0],0);
+ if ((status=bladerf_set_gain(brf->dev, BLADERF_MODULE_RX, (int) openair0_cfg->rx_gain[0]-openair0_cfg[0].rx_gain_offset[0])) != 0) {
fprintf(stderr,"Failed to set RX gain: %s\n",bladerf_strerror(status));
brf_error(status);
} else
- printf("[BRF] set RX gain to %f\n",openair0_cfg[card].rx_gain[0]);
+ printf("[BRF] set RX gain to %d (%d)\n",(int)(openair0_cfg->rx_gain[0]-openair0_cfg[0].rx_gain_offset[0]),(int)openair0_cfg[0].rx_gain_offset[0]);
- /* Configure the device's RX module for use with the sync interface.
- * SC16 Q11 samples *with* metadata are used. */
- if ((status=bladerf_sync_config(brf->dev, BLADERF_MODULE_RX, BLADERF_FORMAT_SC16_Q11_META,brf->num_buffers,brf->buffer_size,brf->num_transfers,brf->rx_timeout_ms)) != 0 ) {
- fprintf(stderr,"Failed to configure RX sync interface: %s\n", bladerf_strerror(status));
- brf_error(status);
- }else
- printf("[BRF] configured Rx for sync interface \n");
-
- /* We must always enable the RX module after calling bladerf_sync_config(), and
- * before attempting to RX samples via bladerf_sync_rx(). */
- if ((status=bladerf_enable_module(brf->dev, BLADERF_MODULE_RX, true)) != 0) {
- fprintf(stderr,"Failed to enable RX module: %s\n", bladerf_strerror(status));
- brf_error(status);
- }else
- printf("[BRF] RX module enabled \n");
-
// TX
- if ((status=bladerf_set_frequency(brf->dev, BLADERF_MODULE_TX, (unsigned int) openair0_cfg[card].tx_freq[0])) != 0){
+
+ if ((status=bladerf_set_frequency(brf->dev, BLADERF_MODULE_TX, (unsigned int) openair0_cfg->tx_freq[0])) != 0){
fprintf(stderr,"Failed to set TX frequency: %s\n",bladerf_strerror(status));
brf_error(status);
}else
- printf("[BRF] set Tx Frequenct to %f \n", openair0_cfg[card].tx_freq[0]);
+ printf("[BRF] set TX Frequency to %u\n", (unsigned int) openair0_cfg->tx_freq[0]);
- if ((status=bladerf_set_sample_rate(brf->dev, BLADERF_MODULE_TX, (unsigned int) openair0_cfg[card].sample_rate, NULL)) != 0){
+ if ((status=bladerf_set_sample_rate(brf->dev, BLADERF_MODULE_TX, (unsigned int) openair0_cfg->sample_rate, NULL)) != 0){
fprintf(stderr,"Failed to set TX sample rate: %s\n", bladerf_strerror(status));
brf_error(status);
}else
- printf("[BRF] set Tx sampling rate to %f \n", openair0_cfg[card].sample_rate);
+ printf("[BRF] set TX sampling rate to %u \n", (unsigned int) openair0_cfg->sample_rate);
- if ((status=bladerf_set_bandwidth(brf->dev, BLADERF_MODULE_TX,(unsigned int)openair0_cfg[card].tx_bw, NULL)) != 0){
- fprintf(stderr, "Failed to set RX bandwidth: %s\n", bladerf_strerror(status));
+ if ((status=bladerf_set_bandwidth(brf->dev, BLADERF_MODULE_TX,(unsigned int)openair0_cfg->tx_bw*2, NULL)) != 0){
+ fprintf(stderr, "Failed to set TX bandwidth: %s\n", bladerf_strerror(status));
brf_error(status);
}else
- printf("[BRF] set Tx sampling ratebandwidth to %f \n", openair0_cfg[card].tx_bw);
+ printf("[BRF] set TX bandwidth to %u \n", (unsigned int) openair0_cfg->tx_bw*2);
- if ((status=bladerf_set_gain(brf->dev, BLADERF_MODULE_TX, (int)openair0_cfg[card].tx_gain[0])) != 0) {
+ if ((status=bladerf_set_gain(brf->dev, BLADERF_MODULE_TX, (int) openair0_cfg->tx_gain[0])) != 0) {
fprintf(stderr,"Failed to set TX gain: %s\n",bladerf_strerror(status));
brf_error(status);
}else
- printf("[BRF] set the Tx gain to %f \n", openair0_cfg[card].tx_gain[0]);
+ printf("[BRF] set the TX gain to %d\n", (int)openair0_cfg->tx_gain[0]);
+
-
- /* Configure the device's TX module for use with the sync interface.
+ /* Configure the device's TX module for use with the sync interface.
* SC16 Q11 samples *with* metadata are used. */
if ((status=bladerf_sync_config(brf->dev, BLADERF_MODULE_TX,BLADERF_FORMAT_SC16_Q11_META,brf->num_buffers,brf->buffer_size,brf->num_transfers,brf->tx_timeout_ms)) != 0 ) {
fprintf(stderr,"Failed to configure TX sync interface: %s\n", bladerf_strerror(status));
brf_error(status);
}else
- printf("[BRF] configured tx for sync interface \n");
+ printf("[BRF] configured TX sync interface \n");
+
+/* Configure the device's RX module for use with the sync interface.
+ * SC16 Q11 samples *with* metadata are used. */
+ if ((status=bladerf_sync_config(brf->dev, BLADERF_MODULE_RX, BLADERF_FORMAT_SC16_Q11_META,brf->num_buffers,brf->buffer_size,brf->num_transfers,brf->rx_timeout_ms)) != 0 ) {
+ fprintf(stderr,"Failed to configure RX sync interface: %s\n", bladerf_strerror(status));
+ brf_error(status);
+ }else
+ printf("[BRF] configured Rx sync interface \n");
+
/* We must always enable the TX module after calling bladerf_sync_config(), and
* before attempting to TX samples via bladerf_sync_tx(). */
@@ -303,7 +972,31 @@ int openair0_dev_init_bladerf(openair0_device *device, openair0_config_t *openai
} else
printf("[BRF] TX module enabled \n");
- bladerf_log_set_verbosity(get_brf_log_level(openair0_cfg[card].log_level));
+ /* We must always enable the RX module after calling bladerf_sync_config(), and
+ * before attempting to RX samples via bladerf_sync_rx(). */
+ if ((status=bladerf_enable_module(brf->dev, BLADERF_MODULE_RX, true)) != 0) {
+ fprintf(stderr,"Failed to enable RX module: %s\n", bladerf_strerror(status));
+ brf_error(status);
+ }else
+ printf("[BRF] RX module enabled \n");
+
+ // calibrate
+
+ if ((status=bladerf_calibrate_dc(brf->dev, BLADERF_MODULE_TX)) != 0) {
+ fprintf(stderr,"Failed to calibrate TX DC: %s\n", bladerf_strerror(status));
+ brf_error(status);
+ } else
+ printf("[BRF] TX module calibrated DC \n");
+
+ if ((status=bladerf_calibrate_dc(brf->dev, BLADERF_MODULE_RX)) != 0) {
+ fprintf(stderr,"Failed to calibrate RX DC: %s\n", bladerf_strerror(status));
+ brf_error(status);
+ }else
+ printf("[BRF] RX module calibrated DC \n");
+
+
+
+ bladerf_log_set_verbosity(get_brf_log_level(openair0_cfg->log_level));
printf("BLADERF: Initializing openair0_device\n");
device->priv = brf;
@@ -317,7 +1010,11 @@ int openair0_dev_init_bladerf(openair0_device *device, openair0_config_t *openai
device->trx_stop_func = trx_brf_stop;
device->trx_set_freq_func = trx_brf_set_freq;
device->trx_set_gains_func = trx_brf_set_gains;
- memcpy((void*)&device->openair0_cfg,(void*)openair0_cfg,sizeof(openair0_config_t));
+ device->openair0_cfg = openair0_cfg;
+
+ calibrate_rf(device);
+
+ // memcpy((void*)&device->openair0_cfg,(void*)&openair0_cfg[0],sizeof(openair0_config_t));
return 0;
}
@@ -359,7 +1056,7 @@ struct bladerf * open_bladerf_from_serial(const char *serial) {
int get_brf_log_level(int log_level){
int level=BLADERF_LOG_LEVEL_INFO;
- //return BLADERF_LOG_LEVEL_DEBUG;
+ return BLADERF_LOG_LEVEL_DEBUG; // BLADERF_LOG_LEVEL_VERBOSE;// BLADERF_LOG_LEVEL_DEBUG; //
switch(log_level) {
case LOG_DEBUG:
level=BLADERF_LOG_LEVEL_DEBUG;
diff --git a/targets/ARCH/COMMON/common_lib.h b/targets/ARCH/COMMON/common_lib.h
index 156da0c4ce..a3fe9e9dbd 100644
--- a/targets/ARCH/COMMON/common_lib.h
+++ b/targets/ARCH/COMMON/common_lib.h
@@ -193,7 +193,7 @@ struct openair0_device_t {
func_type_t func_type;
/* RF frontend parameters set by application */
- openair0_config_t openair0_cfg;
+ openair0_config_t *openair0_cfg;
/* Can be used by driver to hold internal structure*/
void *priv;
diff --git a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
index b12f7397f0..290f83ad5c 100644
--- a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
+++ b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
@@ -38,6 +38,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -304,27 +305,59 @@ int trx_usrp_stop(int card) {
rx_gain_calib_table_t calib_table_b210[] = {
- {3500000000.0,46.0},
- {2660000000.0,53.0},
- {2300000000.0,54.0},
- {1880000000.0,55.0},
- {816000000.0,62.0},
+ {3500000000.0,44.0},
+ {2660000000.0,49.0},
+ {2300000000.0,50.0},
+ {1880000000.0,53.0},
+ {816000000.0,58.0},
+ {-1,0}};
+
+rx_gain_calib_table_t calib_table_b210_38[] = {
+ {3500000000.0,44.0},
+ {2660000000.0,49.8},
+ {2300000000.0,51.0},
+ {1880000000.0,53.0},
+ {816000000.0,57.0},
{-1,0}};
rx_gain_calib_table_t calib_table_x310[] = {
{3500000000.0,77.0},
- {2660000000.0,80.0},
+ {2660000000.0,81.0},
{2300000000.0,81.0},
{1880000000.0,82.0},
{816000000.0,85.0},
{-1,0}};
-void set_rx_gain_offset(openair0_config_t *openair0_cfg, int chain_index) {
+void set_rx_gain_offset(openair0_config_t *openair0_cfg, int chain_index,int bw_gain_adjust) {
int i=0;
// loop through calibration table to find best adjustment factor for RX frequency
- double min_diff = 6e9,diff;
-
+ double min_diff = 6e9,diff,gain_adj=0.0;
+ if (bw_gain_adjust==1) {
+ switch ((int)openair0_cfg[0].sample_rate) {
+ case 30720000:
+ break;
+ case 23040000:
+ gain_adj=1.25;
+ break;
+ case 15360000:
+ gain_adj=3.0;
+ break;
+ case 7680000:
+ gain_adj=6.0;
+ break;
+ case 3840000:
+ gain_adj=9.0;
+ break;
+ case 1920000:
+ gain_adj=12.0;
+ break;
+ default:
+ printf("unknown sampling rate %d\n",(int)openair0_cfg[0].sample_rate);
+ exit(-1);
+ break;
+ }
+ }
while (openair0_cfg->rx_gain_calib_table[i].freq>0) {
diff = fabs(openair0_cfg->rx_freq[chain_index] - openair0_cfg->rx_gain_calib_table[i].freq);
printf("cal %d: freq %f, offset %f, diff %f\n",
@@ -333,7 +366,7 @@ void set_rx_gain_offset(openair0_config_t *openair0_cfg, int chain_index) {
openair0_cfg->rx_gain_calib_table[i].offset,diff);
if (min_diff > diff) {
min_diff = diff;
- openair0_cfg->rx_gain_offset[chain_index] = openair0_cfg->rx_gain_calib_table[i].offset;
+ openair0_cfg->rx_gain_offset[chain_index] = openair0_cfg->rx_gain_calib_table[i].offset+gain_adj;
}
i++;
}
@@ -366,8 +399,13 @@ int openair0_dev_init_usrp(openair0_device* device, openair0_config_t *openair0_
uhd::device_addrs_t device_adds = uhd::device::find(args);
size_t i;
+
+ int vers=0,subvers=0,subsubvers=0;
+ int bw_gain_adjust=0;
- printf("Checking for USRPs\n");
+ sscanf(uhd::get_version_string().c_str(),"%d.%d.%d",&vers,&subvers,&subsubvers);
+
+ printf("Checking for USRPs : UHD %s (%d.%d.%d)\n",uhd::get_version_string().c_str(),vers,subvers,subsubvers);
if(device_adds.size() == 0)
{
@@ -388,6 +426,7 @@ int openair0_dev_init_usrp(openair0_device* device, openair0_config_t *openair0_
}
+
printf("Found USRP X300\n");
s->usrp = uhd::usrp::multi_usrp::make(args);
// s->usrp->set_rx_subdev_spec(rx_subdev);
@@ -410,21 +449,29 @@ int openair0_dev_init_usrp(openair0_device* device, openair0_config_t *openair0_
// from usrp_time_offset
openair0_cfg[0].samples_per_packet = 2048;
openair0_cfg[0].tx_sample_advance = 15;
+ openair0_cfg[0].tx_bw = 20e6;
+ openair0_cfg[0].rx_bw = 20e6;
openair0_cfg[0].tx_scheduling_advance = 8*openair0_cfg[0].samples_per_packet;
break;
case 15360000:
openair0_cfg[0].samples_per_packet = 2048;
openair0_cfg[0].tx_sample_advance = 45;
+ openair0_cfg[0].tx_bw = 10e6;
+ openair0_cfg[0].rx_bw = 10e6;
openair0_cfg[0].tx_scheduling_advance = 5*openair0_cfg[0].samples_per_packet;
break;
case 7680000:
openair0_cfg[0].samples_per_packet = 1024;
openair0_cfg[0].tx_sample_advance = 50;
+ openair0_cfg[0].tx_bw = 5e6;
+ openair0_cfg[0].rx_bw = 5e6;
openair0_cfg[0].tx_scheduling_advance = 5*openair0_cfg[0].samples_per_packet;
break;
case 1920000:
openair0_cfg[0].samples_per_packet = 256;
openair0_cfg[0].tx_sample_advance = 50;
+ openair0_cfg[0].tx_bw = 1.25e6;
+ openair0_cfg[0].rx_bw = 1.25e6;
openair0_cfg[0].tx_scheduling_advance = 8*openair0_cfg[0].samples_per_packet;
break;
default:
@@ -446,30 +493,56 @@ int openair0_dev_init_usrp(openair0_device* device, openair0_config_t *openair0_
// set master clock rate and sample rate for tx & rx for streaming
device->type = USRP_B200_IF;
- s->usrp->set_master_clock_rate(30.72e6);
- openair0_cfg[0].rx_gain_calib_table = calib_table_b210;
+ if ((vers == 3) && (subvers == 9) && (subsubvers>=2)) {
+ openair0_cfg[0].rx_gain_calib_table = calib_table_b210;
+ bw_gain_adjust=0;
+ }
+ else {
+ openair0_cfg[0].rx_gain_calib_table = calib_table_b210_38;
+ bw_gain_adjust=1;
+ }
switch ((int)openair0_cfg[0].sample_rate) {
case 30720000:
+ s->usrp->set_master_clock_rate(30.72e6);
// from usrp_time_offset
- openair0_cfg[0].samples_per_packet = 2048;
+ openair0_cfg[0].samples_per_packet = 4096;
openair0_cfg[0].tx_sample_advance = 115;
+ openair0_cfg[0].tx_bw = 20e6;
+ openair0_cfg[0].rx_bw = 20e6;
openair0_cfg[0].tx_scheduling_advance = 11*openair0_cfg[0].samples_per_packet;
break;
- case 15360000:
+ case 23040000:
+ s->usrp->set_master_clock_rate(46.08e6);
openair0_cfg[0].samples_per_packet = 2048;
openair0_cfg[0].tx_sample_advance = 113;
+ openair0_cfg[0].tx_bw = 20e6;
+ openair0_cfg[0].rx_bw = 20e6;
+ openair0_cfg[0].tx_scheduling_advance = 8*openair0_cfg[0].samples_per_packet;
+ break;
+ case 15360000:
+ s->usrp->set_master_clock_rate(30.72e6);
+ openair0_cfg[0].samples_per_packet = 2048;
+ openair0_cfg[0].tx_sample_advance = 113;
+ openair0_cfg[0].tx_bw = 10e6;
+ openair0_cfg[0].rx_bw = 10e6;
openair0_cfg[0].tx_scheduling_advance = 5*openair0_cfg[0].samples_per_packet;
break;
case 7680000:
+ s->usrp->set_master_clock_rate(30.72e6);
openair0_cfg[0].samples_per_packet = 1024;
openair0_cfg[0].tx_sample_advance = 70;//103;
+ openair0_cfg[0].tx_bw = 5e6;
+ openair0_cfg[0].rx_bw = 5e6;
openair0_cfg[0].tx_scheduling_advance = 5*openair0_cfg[0].samples_per_packet;
break;
case 1920000:
+ s->usrp->set_master_clock_rate(30.72e6);
openair0_cfg[0].samples_per_packet = 256;
openair0_cfg[0].tx_sample_advance = 40;
+ openair0_cfg[0].tx_bw = 1.25e6;
+ openair0_cfg[0].rx_bw = 1.25e6;
openair0_cfg[0].tx_scheduling_advance = 8*openair0_cfg[0].samples_per_packet;
break;
default:
@@ -485,7 +558,7 @@ int openair0_dev_init_usrp(openair0_device* device, openair0_config_t *openair0_
s->usrp->set_rx_bandwidth(openair0_cfg[0].rx_bw,i);
printf("Setting rx freq/gain on channel %lu/%lu : BW %f (readback %f)\n",i,s->usrp->get_rx_num_channels(),openair0_cfg[0].rx_bw/1e6,s->usrp->get_rx_bandwidth(i)/1e6);
s->usrp->set_rx_freq(openair0_cfg[0].rx_freq[i],i);
- set_rx_gain_offset(&openair0_cfg[0],i);
+ set_rx_gain_offset(&openair0_cfg[0],i,bw_gain_adjust);
::uhd::gain_range_t gain_range = s->usrp->get_rx_gain_range(i);
// limit to maximum gain
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpb210.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpb210.conf
index 1d47abdd60..174eda2c81 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpb210.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpb210.conf
@@ -28,7 +28,7 @@ eNBs =
tdd_config_s = 0;
prefix_type = "NORMAL";
eutra_band = 7;
- downlink_frequency = 2660000000L;
+ downlink_frequency = 2680000000L;
uplink_frequency_offset = -120000000;
Nid_cell = 0;
N_RB_DL = 100;
@@ -36,7 +36,7 @@ eNBs =
nb_antennas_tx = 1;
nb_antennas_rx = 1;
tx_gain = 90;
- rx_gain = 120;
+ rx_gain = 127;
prach_root = 0;
prach_config_index = 0;
prach_high_speed = "DISABLE";
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.bladerfx40.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.bladerfx40.conf
new file mode 100644
index 0000000000..5f7ac3d65f
--- /dev/null
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.bladerfx40.conf
@@ -0,0 +1,171 @@
+Active_eNBs = ( "eNB_Eurecom_LTEBox");
+# Asn1_verbosity, choice in: none, info, annoying
+Asn1_verbosity = "none";
+
+eNBs =
+(
+ {
+ ////////// Identification parameters:
+ eNB_ID = 0xe00;
+
+ cell_type = "CELL_MACRO_ENB";
+
+ eNB_name = "eNB_Eurecom_LTEBox";
+
+ // Tracking area code, 0x0000 and 0xfffe are reserved values
+ tracking_area_code = "1";
+
+ mobile_country_code = "208";
+
+ mobile_network_code = "92";
+
+ ////////// Physical parameters:
+
+ component_carriers = (
+ {
+ frame_type = "FDD";
+ tdd_config = 3;
+ tdd_config_s = 0;
+ prefix_type = "NORMAL";
+ eutra_band = 7;
+ downlink_frequency = 2680000000L;
+ uplink_frequency_offset = -120000000;
+ Nid_cell = 0;
+ N_RB_DL = 50;
+ Nid_cell_mbsfn = 0;
+ nb_antennas_tx = 1;
+ nb_antennas_rx = 1;
+ tx_gain = 60;
+ rx_gain = 60;
+ prach_root = 0;
+ prach_config_index = 0;
+ prach_high_speed = "DISABLE";
+ prach_zero_correlation = 1;
+ prach_freq_offset = 2;
+ pucch_delta_shift = 1;
+ pucch_nRB_CQI = 1;
+ pucch_nCS_AN = 0;
+ pucch_n1_AN = 32;
+ pdsch_referenceSignalPower = -26;
+ pdsch_p_b = 0;
+ pusch_n_SB = 1;
+ pusch_enable64QAM = "DISABLE";
+ pusch_hoppingMode = "interSubFrame";
+ pusch_hoppingOffset = 0;
+ pusch_groupHoppingEnabled = "ENABLE";
+ pusch_groupAssignment = 0;
+ pusch_sequenceHoppingEnabled = "DISABLE";
+ pusch_nDMRS1 = 1;
+ phich_duration = "NORMAL";
+ phich_resource = "ONESIXTH";
+ srs_enable = "DISABLE";
+ /* srs_BandwidthConfig =;
+ srs_SubframeConfig =;
+ srs_ackNackST =;
+ srs_MaxUpPts =;*/
+
+ pusch_p0_Nominal = -90;
+ pusch_alpha = "AL1";
+ pucch_p0_Nominal = -108;
+ msg3_delta_Preamble = 6;
+ pucch_deltaF_Format1 = "deltaF2";
+ pucch_deltaF_Format1b = "deltaF3";
+ pucch_deltaF_Format2 = "deltaF0";
+ pucch_deltaF_Format2a = "deltaF0";
+ pucch_deltaF_Format2b = "deltaF0";
+
+ rach_numberOfRA_Preambles = 64;
+ rach_preamblesGroupAConfig = "DISABLE";
+/*
+ rach_sizeOfRA_PreamblesGroupA = ;
+ rach_messageSizeGroupA = ;
+ rach_messagePowerOffsetGroupB = ;
+*/
+ rach_powerRampingStep = 4;
+ rach_preambleInitialReceivedTargetPower = -108;
+ rach_preambleTransMax = 10;
+ rach_raResponseWindowSize = 10;
+ rach_macContentionResolutionTimer = 48;
+ rach_maxHARQ_Msg3Tx = 4;
+
+ pcch_default_PagingCycle = 128;
+ pcch_nB = "oneT";
+ bcch_modificationPeriodCoeff = 2;
+ ue_TimersAndConstants_t300 = 1000;
+ ue_TimersAndConstants_t301 = 1000;
+ ue_TimersAndConstants_t310 = 1000;
+ ue_TimersAndConstants_t311 = 10000;
+ ue_TimersAndConstants_n310 = 20;
+ ue_TimersAndConstants_n311 = 1;
+
+ }
+ );
+
+
+ srb1_parameters :
+ {
+ # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
+ timer_poll_retransmit = 80;
+
+ # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
+ timer_reordering = 35;
+
+ # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
+ timer_status_prohibit = 0;
+
+ # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
+ poll_pdu = 4;
+
+ # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
+ poll_byte = 99999;
+
+ # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
+ max_retx_threshold = 4;
+ }
+
+ # ------- SCTP definitions
+ SCTP :
+ {
+ # Number of streams to use in input/output
+ SCTP_INSTREAMS = 2;
+ SCTP_OUTSTREAMS = 2;
+ };
+
+ ////////// MME parameters:
+ mme_ip_address = ( { ipv4 = "192.168.13.11";
+ ipv6 = "192:168:30::17";
+ active = "yes";
+ preference = "ipv4";
+ }
+ );
+
+ NETWORK_INTERFACES :
+ {
+ ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
+ ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.13.10/24";
+
+ ENB_INTERFACE_NAME_FOR_S1U = "eth0";
+ ENB_IPV4_ADDRESS_FOR_S1U = "192.168.13.10/24";
+ ENB_PORT_FOR_S1U = 2152; # Spec 2152
+ };
+
+ log_config :
+ {
+ global_log_level ="info";
+ global_log_verbosity ="medium";
+ hw_log_level ="info";
+ hw_log_verbosity ="medium";
+ phy_log_level ="info";
+ phy_log_verbosity ="medium";
+ mac_log_level ="info";
+ mac_log_verbosity ="high";
+ rlc_log_level ="info";
+ rlc_log_verbosity ="medium";
+ pdcp_log_level ="info";
+ pdcp_log_verbosity ="medium";
+ rrc_log_level ="info";
+ rrc_log_verbosity ="medium";
+ };
+
+ }
+);
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf
index 8f9dc280ae..b19cca6e6d 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf
@@ -28,7 +28,7 @@ eNBs =
tdd_config_s = 0;
prefix_type = "NORMAL";
eutra_band = 7;
- downlink_frequency = 2660000000L;
+ downlink_frequency = 2680000000L;
uplink_frequency_offset = -120000000;
Nid_cell = 0;
N_RB_DL = 50;
@@ -36,7 +36,7 @@ eNBs =
nb_antennas_tx = 1;
nb_antennas_rx = 1;
tx_gain = 90;
- rx_gain = 118;
+ rx_gain = 125;
prach_root = 0;
prach_config_index = 0;
prach_high_speed = "DISABLE";
@@ -140,10 +140,10 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
- ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.213/24";
+ ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.212/24";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
- ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.213/24";
+ ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.212/24";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
};
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf
index bdbb46a98b..5c53803c4d 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf
@@ -17,7 +17,7 @@ eNBs =
mobile_country_code = "208";
- mobile_network_code = "92";
+ mobile_network_code = "93";
////////// Physical parameters:
@@ -35,8 +35,8 @@ eNBs =
Nid_cell_mbsfn = 0;
nb_antennas_tx = 1;
nb_antennas_rx = 1;
- tx_gain = 20;
- rx_gain = 20;
+ tx_gain = 60;
+ rx_gain = 120;
prach_root = 0;
prach_config_index = 0;
prach_high_speed = "DISABLE";
@@ -46,7 +46,7 @@ eNBs =
pucch_nRB_CQI = 1;
pucch_nCS_AN = 0;
pucch_n1_AN = 32;
- pdsch_referenceSignalPower = -26;
+ pdsch_referenceSignalPower = -29;
pdsch_p_b = 0;
pusch_n_SB = 1;
pusch_enable64QAM = "DISABLE";
@@ -132,7 +132,7 @@ eNBs =
};
////////// MME parameters:
- mme_ip_address = ( { ipv4 = "192.168.13.11";
+ mme_ip_address = ( { ipv4 = "192.168.12.11";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
@@ -142,10 +142,10 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
- ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.13.10/24";
+ ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.212/24";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
- ENB_IPV4_ADDRESS_FOR_S1U = "192.168.13.10/24";
+ ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.212/24";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
};
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
index d8ea58910a..2883d8de0c 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
@@ -36,7 +36,7 @@ eNBs =
nb_antennas_tx = 1;
nb_antennas_rx = 1;
tx_gain = 90;
- rx_gain = 132;
+ rx_gain = 125;
prach_root = 0;
prach_config_index = 0;
prach_high_speed = "DISABLE";
@@ -143,10 +143,10 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
- ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.213/24";
+ ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.212/24";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
- ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.213/24";
+ ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.212/24";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
};
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf
index 6470b310f0..75969c04fd 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf
@@ -16,50 +16,49 @@ eNBs =
tracking_area_code = "1";
mobile_country_code = "208";
-
mobile_network_code = "95";
////////// Physical parameters:
component_carriers = (
{
- frame_type = "FDD";
- tdd_config = 3;
- tdd_config_s = 0;
- prefix_type = "NORMAL";
- eutra_band = 7;
- downlink_frequency = 2660000000L;
- uplink_frequency_offset = -120000000;
- Nid_cell = 0;
- N_RB_DL = 25;
- Nid_cell_mbsfn = 0;
- nb_antennas_tx = 1;
- nb_antennas_rx = 1;
- tx_gain = 90;
- rx_gain = 132;
- prach_root = 0;
- prach_config_index = 0;
- prach_high_speed = "DISABLE";
- prach_zero_correlation = 1;
- prach_freq_offset = 2;
- pucch_delta_shift = 1;
- pucch_nRB_CQI = 1;
- pucch_nCS_AN = 0;
- pucch_n1_AN = 32;
- pdsch_referenceSignalPower = -26;
- pdsch_p_b = 0;
- pusch_n_SB = 1;
- pusch_enable64QAM = "DISABLE";
- pusch_hoppingMode = "interSubFrame";
- pusch_hoppingOffset = 0;
- pusch_groupHoppingEnabled = "ENABLE";
- pusch_groupAssignment = 0;
- pusch_sequenceHoppingEnabled = "DISABLE";
- pusch_nDMRS1 = 1;
- phich_duration = "NORMAL";
- phich_resource = "ONESIXTH";
+ frame_type = "FDD";
+ tdd_config = 3;
+ tdd_config_s = 0;
+ prefix_type = "NORMAL";
+ eutra_band = 7;
+ downlink_frequency = 2660000000L;
+ uplink_frequency_offset = -120000000;
+ Nid_cell = 0;
+ N_RB_DL = 25;
+ Nid_cell_mbsfn = 0;
+ nb_antennas_tx = 1;
+ nb_antennas_rx = 1;
+ tx_gain = 90;
+ rx_gain = 132;
+ prach_root = 0;
+ prach_config_index = 0;
+ prach_high_speed = "DISABLE";
+ prach_zero_correlation = 1;
+ prach_freq_offset = 2;
+ pucch_delta_shift = 1;
+ pucch_nRB_CQI = 1;
+ pucch_nCS_AN = 0;
+ pucch_n1_AN = 32;
+ pdsch_referenceSignalPower = -26;
+ pdsch_p_b = 0;
+ pusch_n_SB = 1;
+ pusch_enable64QAM = "DISABLE";
+ pusch_hoppingMode = "interSubFrame";
+ pusch_hoppingOffset = 0;
+ pusch_groupHoppingEnabled = "ENABLE";
+ pusch_groupAssignment = 0;
+ pusch_sequenceHoppingEnabled = "DISABLE";
+ pusch_nDMRS1 = 1;
+ phich_duration = "NORMAL";
+ phich_resource = "ONESIXTH";
srs_enable = "DISABLE";
- /* srs_BandwidthConfig =;
+ /* srs_BandwidthConfig =;
srs_SubframeConfig =;
srs_ackNackST =;
srs_MaxUpPts =;*/
@@ -72,15 +71,15 @@ eNBs =
pucch_deltaF_Format1b = "deltaF3";
pucch_deltaF_Format2 = "deltaF0";
pucch_deltaF_Format2a = "deltaF0";
- pucch_deltaF_Format2b = "deltaF0";
+ pucch_deltaF_Format2b = "deltaF0";
rach_numberOfRA_Preambles = 64;
rach_preamblesGroupAConfig = "DISABLE";
- /*
+ /*
rach_sizeOfRA_PreamblesGroupA = ;
rach_messageSizeGroupA = ;
rach_messagePowerOffsetGroupB = ;
- */
+ */
rach_powerRampingStep = 4;
rach_preambleInitialReceivedTargetPower = -108;
rach_preambleTransMax = 10;
@@ -90,16 +89,17 @@ eNBs =
pcch_default_PagingCycle = 128;
pcch_nB = "oneT";
- bcch_modificationPeriodCoeff = 2;
- ue_TimersAndConstants_t300 = 1000;
- ue_TimersAndConstants_t301 = 1000;
- ue_TimersAndConstants_t310 = 1000;
- ue_TimersAndConstants_t311 = 10000;
- ue_TimersAndConstants_n310 = 20;
- ue_TimersAndConstants_n311 = 1;
+ bcch_modificationPeriodCoeff = 2;
+ ue_TimersAndConstants_t300 = 1000;
+ ue_TimersAndConstants_t301 = 1000;
+ ue_TimersAndConstants_t310 = 1000;
+ ue_TimersAndConstants_t311 = 10000;
+ ue_TimersAndConstants_n310 = 20;
+ ue_TimersAndConstants_n311 = 1;
}
);
+
srb1_parameters :
{
# timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
@@ -129,28 +129,25 @@ eNBs =
SCTP_OUTSTREAMS = 2;
};
-
////////// MME parameters:
- mme_ip_address = ( { ipv4 = "192.188.2.2";
- ipv6 = "192:168:30::17";
- active = "yes";
- preference = "ipv4";
- }
- );
+ mme_ip_address = ( {ipv4 = "192.170.0.1";
+ ipv6="192:168:30::17";
+ active="yes";
+ preference="ipv4";});
NETWORK_INTERFACES :
{
- ENB_INTERFACE_NAME_FOR_S1_MME = "tun2";
- ENB_IPV4_ADDRESS_FOR_S1_MME = "192.188.2.2/24";
+ ENB_INTERFACE_NAME_FOR_S1_MME = "eth0:3";
+ ENB_IPV4_ADDRESS_FOR_S1_MME = "192.170.0.2/24";
- ENB_INTERFACE_NAME_FOR_S1U = "lo";
- ENB_IPV4_ADDRESS_FOR_S1U = "127.0.0.1/24";
- ENB_PORT_FOR_S1U = 2153; # Spec 2152
+ ENB_INTERFACE_NAME_FOR_S1U = "eth0:4";
+ ENB_IPV4_ADDRESS_FOR_S1U = "192.170.0.2/24";
+ ENB_PORT_FOR_S1U = 2152; # Spec 2152
};
log_config :
{
- global_log_level ="info";
+ global_log_level ="debug";
global_log_verbosity ="medium";
hw_log_level ="info";
hw_log_verbosity ="medium";
@@ -164,10 +161,6 @@ eNBs =
pdcp_log_verbosity ="medium";
rrc_log_level ="info";
rrc_log_verbosity ="medium";
- gtpu_log_level ="info";
- gtpu_log_verbosity ="medium";
- udp_log_level ="info";
- udp_log_verbosity ="medium";
};
}
diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c
index 2409f102a4..0b651ccb8d 100644
--- a/targets/RT/USER/lte-softmodem.c
+++ b/targets/RT/USER/lte-softmodem.c
@@ -235,6 +235,7 @@ static int time_offset[4] = {0,0,0,0};
static char UE_flag=0;
//static uint8_t eNB_id=0,UE_id=0;
+static char threequarter_fs=0;
uint32_t downlink_frequency[MAX_NUM_CCs][4];
int32_t uplink_frequency_offset[MAX_NUM_CCs][4];
@@ -909,13 +910,13 @@ void do_OFDM_mod_rt(int subframe,PHY_VARS_eNB *phy_vars_eNB)
if (phy_vars_eNB->lte_frame_parms.Ncp == EXTENDED) {
PHY_ofdm_mod(&phy_vars_eNB->lte_eNB_common_vars.txdataF[0][aa][slot_offset_F],
dummy_tx_b,
- phy_vars_eNB->lte_frame_parms.log2_symbol_size,
+ phy_vars_eNB->lte_frame_parms.ofdm_symbol_size,
6,
phy_vars_eNB->lte_frame_parms.nb_prefix_samples,
CYCLIC_PREFIX);
PHY_ofdm_mod(&phy_vars_eNB->lte_eNB_common_vars.txdataF[0][aa][slot_offset_F+slot_sizeF],
dummy_tx_b+(phy_vars_eNB->lte_frame_parms.samples_per_tti>>1),
- phy_vars_eNB->lte_frame_parms.log2_symbol_size,
+ phy_vars_eNB->lte_frame_parms.ofdm_symbol_size,
6,
phy_vars_eNB->lte_frame_parms.nb_prefix_samples,
CYCLIC_PREFIX);
@@ -950,7 +951,7 @@ void do_OFDM_mod_rt(int subframe,PHY_VARS_eNB *phy_vars_eNB)
((short*)&phy_vars_eNB->lte_eNB_common_vars.txdata[0][aa][tx_offset])[0]=
#ifdef EXMIMO
((short*)dummy_tx_b)[2*i]<<4;
-#elif OAI_BLADRF
+#elif OAI_BLADERF
((short*)dummy_tx_b)[2*i];
#else
((short*)dummy_tx_b)[2*i]<<4;
@@ -958,7 +959,7 @@ void do_OFDM_mod_rt(int subframe,PHY_VARS_eNB *phy_vars_eNB)
((short*)&phy_vars_eNB->lte_eNB_common_vars.txdata[0][aa][tx_offset])[1]=
#ifdef EXMIMO
((short*)dummy_tx_b)[2*i+1]<<4;
-#elif OAI_BLADRF
+#elif OAI_BLADERF
((short*)dummy_tx_b)[2*i+1];
#else
((short*)dummy_tx_b)[2*i+1]<<4;
@@ -1016,6 +1017,7 @@ static void* eNB_thread_tx( void* param )
eNB_proc_t *proc = (eNB_proc_t*)param;
FILE *tx_time_file;
char tx_time_name[101];
+
if (opp_enabled == 1) {
snprintf(tx_time_name, 100,"/tmp/%s_tx_time_thread_sf_%d", "eNB", proc->subframe);
tx_time_file = fopen(tx_time_name,"w");
@@ -1155,7 +1157,20 @@ static void* eNB_thread_tx( void* param )
}
do_OFDM_mod_rt( proc->subframe_tx, PHY_vars_eNB_g[0][proc->CC_id] );
-
+ /*
+ short *txdata = (short*)&PHY_vars_eNB_g[0][proc->CC_id]->lte_eNB_common_vars.txdata[0][0][proc->subframe_tx*PHY_vars_eNB_g[0][proc->CC_id]->lte_frame_parms.samples_per_tti];
+ int i;
+ for (i=0;i<7680*2;i+=8) {
+ txdata[i] = 2047;
+ txdata[i+1] = 0;
+ txdata[i+2] = 0;
+ txdata[i+3] = 2047;
+ txdata[i+4] = -2047;
+ txdata[i+5] = 0;
+ txdata[i+6] = 0;
+ txdata[i+7] = -2047;
+ }
+ */
if (pthread_mutex_lock(&proc->mutex_tx) != 0) {
LOG_E( PHY, "[SCHED][eNB] error locking mutex for eNB TX proc %d\n", proc->subframe );
exit_fun("nothing to add");
@@ -1837,7 +1852,8 @@ static void* eNB_thread( void* arg )
rt_sleep_ns(1000000);
#endif
- if ((tx_launched == 0) &&
+ if ((frame>50) &&
+ (tx_launched == 0) &&
(rx_pos >= (((2*hw_subframe)+1)*PHY_vars_eNB_g[0][0]->lte_frame_parms.samples_per_tti>>1))) {
tx_launched = 1;
@@ -1906,52 +1922,53 @@ static void* eNB_thread( void* arg )
#else
int sf = hw_subframe;
#endif
-
- for (int CC_id=0; CC_id50) {
+ for (int CC_id=0; CC_idproc[sf].mutex_tx) != 0) {
- LOG_E(PHY,"[eNB] ERROR pthread_mutex_lock for eNB TX thread %d (IC %d)\n",sf,PHY_vars_eNB_g[0][CC_id]->proc[sf].instance_cnt_tx);
- } else {
- // LOG_I(PHY,"[eNB] Waking up eNB process %d (IC %d)\n",sf,PHY_vars_eNB_g[0][CC_id]->proc[sf].instance_cnt);
- PHY_vars_eNB_g[0][CC_id]->proc[sf].instance_cnt_tx++;
- pthread_mutex_unlock(&PHY_vars_eNB_g[0][CC_id]->proc[sf].mutex_tx);
-
- if (PHY_vars_eNB_g[0][CC_id]->proc[sf].instance_cnt_tx == 0) {
- if (pthread_cond_signal(&PHY_vars_eNB_g[0][CC_id]->proc[sf].cond_tx) != 0) {
- LOG_E(PHY,"[eNB] ERROR pthread_cond_signal for eNB TX thread %d\n",sf);
+
+ if (pthread_mutex_lock(&PHY_vars_eNB_g[0][CC_id]->proc[sf].mutex_tx) != 0) {
+ LOG_E(PHY,"[eNB] ERROR pthread_mutex_lock for eNB TX thread %d (IC %d)\n",sf,PHY_vars_eNB_g[0][CC_id]->proc[sf].instance_cnt_tx);
+ } else {
+ // LOG_I(PHY,"[eNB] Waking up eNB process %d (IC %d)\n",sf,PHY_vars_eNB_g[0][CC_id]->proc[sf].instance_cnt);
+ PHY_vars_eNB_g[0][CC_id]->proc[sf].instance_cnt_tx++;
+ pthread_mutex_unlock(&PHY_vars_eNB_g[0][CC_id]->proc[sf].mutex_tx);
+
+ if (PHY_vars_eNB_g[0][CC_id]->proc[sf].instance_cnt_tx == 0) {
+ if (pthread_cond_signal(&PHY_vars_eNB_g[0][CC_id]->proc[sf].cond_tx) != 0) {
+ LOG_E(PHY,"[eNB] ERROR pthread_cond_signal for eNB TX thread %d\n",sf);
+ exit_fun("nothing to add");
+ }
+ } else {
+ LOG_W(PHY,"[eNB] Frame %d, eNB TX thread %d busy!!\n",PHY_vars_eNB_g[0][CC_id]->proc[sf].frame_tx,sf);
exit_fun("nothing to add");
- }
- } else {
- LOG_W(PHY,"[eNB] Frame %d, eNB TX thread %d busy!!\n",PHY_vars_eNB_g[0][CC_id]->proc[sf].frame_tx,sf);
- exit_fun("nothing to add");
- }
- }
-
+ }
+ }
+
#endif
- if (pthread_mutex_lock(&PHY_vars_eNB_g[0][CC_id]->proc[sf].mutex_rx) != 0) {
- LOG_E( PHY, "[eNB] ERROR pthread_mutex_lock for eNB RX thread %d (IC %d)\n", sf, PHY_vars_eNB_g[0][CC_id]->proc[sf].instance_cnt_rx );
- exit_fun( "error locking mutex_rx" );
- break;
- }
-
- int cnt_rx = ++PHY_vars_eNB_g[0][CC_id]->proc[sf].instance_cnt_rx;
-
- pthread_mutex_unlock( &PHY_vars_eNB_g[0][CC_id]->proc[sf].mutex_rx );
-
- if (cnt_rx == 0) {
- // the thread was presumably waiting where it should and can now be woken up
- if (pthread_cond_signal(&PHY_vars_eNB_g[0][CC_id]->proc[sf].cond_rx) != 0) {
- LOG_E( PHY, "[eNB] ERROR pthread_cond_signal for eNB RX thread %d\n", sf );
- exit_fun( "ERROR pthread_cond_signal" );
- break;
- }
- } else {
- LOG_W( PHY, "[eNB] Frame %d, eNB RX thread %d busy!! instance_cnt %d CC_id %d\n", PHY_vars_eNB_g[0][CC_id]->proc[sf].frame_rx, sf, PHY_vars_eNB_g[0][CC_id]->proc[sf].instance_cnt_rx, CC_id );
- exit_fun( "RX thread busy" );
- break;
- }
+ if (pthread_mutex_lock(&PHY_vars_eNB_g[0][CC_id]->proc[sf].mutex_rx) != 0) {
+ LOG_E( PHY, "[eNB] ERROR pthread_mutex_lock for eNB RX thread %d (IC %d)\n", sf, PHY_vars_eNB_g[0][CC_id]->proc[sf].instance_cnt_rx );
+ exit_fun( "error locking mutex_rx" );
+ break;
+ }
+
+ int cnt_rx = ++PHY_vars_eNB_g[0][CC_id]->proc[sf].instance_cnt_rx;
+
+ pthread_mutex_unlock( &PHY_vars_eNB_g[0][CC_id]->proc[sf].mutex_rx );
+
+ if (cnt_rx == 0) {
+ // the thread was presumably waiting where it should and can now be woken up
+ if (pthread_cond_signal(&PHY_vars_eNB_g[0][CC_id]->proc[sf].cond_rx) != 0) {
+ LOG_E( PHY, "[eNB] ERROR pthread_cond_signal for eNB RX thread %d\n", sf );
+ exit_fun( "ERROR pthread_cond_signal" );
+ break;
+ }
+ } else {
+ LOG_W( PHY, "[eNB] Frame %d, eNB RX thread %d busy!! instance_cnt %d CC_id %d\n", PHY_vars_eNB_g[0][CC_id]->proc[sf].frame_rx, sf, PHY_vars_eNB_g[0][CC_id]->proc[sf].instance_cnt_rx, CC_id );
+ exit_fun( "RX thread busy" );
+ break;
+ }
+ }
}
}
@@ -2060,7 +2077,7 @@ static void get_options (int argc, char **argv)
{NULL, 0, NULL, 0}
};
- while ((c = getopt_long (argc, argv, "A:a:C:dK:g:F:G:hqO:m:SUVRM:r:P:Ws:t:Tx:",long_options,NULL)) != -1) {
+ while ((c = getopt_long (argc, argv, "A:a:C:dEK:g:F:G:hqO:m:SUVRM:r:P:Ws:t:Tx:",long_options,NULL)) != -1) {
switch (c) {
case LONG_OPTION_MAXPOWER:
tx_max_power[0]=atoi(optarg);
@@ -2162,6 +2179,10 @@ static void get_options (int argc, char **argv)
printf("Running with XFORMS!\n");
#endif
break;
+
+ case 'E':
+ threequarter_fs=1;
+ break;
case 'K':
#if defined(ENABLE_ITTI)
@@ -2671,6 +2692,7 @@ int main( int argc, char **argv )
frame_parms[CC_id]->pusch_config_common.ul_ReferenceSignalsPUSCH.groupHoppingEnabled = 0;
frame_parms[CC_id]->pusch_config_common.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled = 0;
frame_parms[CC_id]->pusch_config_common.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH = 0;
+ frame_parms[CC_id]->threequarter_fs = threequarter_fs;
init_ul_hopping(frame_parms[CC_id]);
init_frame_parms(frame_parms[CC_id],1);
// phy_init_top(frame_parms[CC_id]);
@@ -2876,10 +2898,18 @@ int main( int argc, char **argv )
for (card=0; cardN_RB_DL == 100) {
- openair0_cfg[card].sample_rate=30.72e6;
- openair0_cfg[card].samples_per_frame = 307200;
- openair0_cfg[card].tx_bw = 10e6;
- openair0_cfg[card].rx_bw = 10e6;
+ if (frame_parms[0]->threequarter_fs) {
+ openair0_cfg[card].sample_rate=23.04e6;
+ openair0_cfg[card].samples_per_frame = 230400;
+ openair0_cfg[card].tx_bw = 10e6;
+ openair0_cfg[card].rx_bw = 10e6;
+ }
+ else {
+ openair0_cfg[card].sample_rate=30.72e6;
+ openair0_cfg[card].samples_per_frame = 307200;
+ openair0_cfg[card].tx_bw = 10e6;
+ openair0_cfg[card].rx_bw = 10e6;
+ }
} else if(frame_parms[0]->N_RB_DL == 50) {
openair0_cfg[card].sample_rate=15.36e6;
openair0_cfg[card].samples_per_frame = 153600;
@@ -2888,9 +2918,8 @@ int main( int argc, char **argv )
} else if (frame_parms[0]->N_RB_DL == 25) {
openair0_cfg[card].sample_rate=7.68e6;
openair0_cfg[card].samples_per_frame = 76800;
- openair0_cfg[card].tx_bw = 5e6;
- openair0_cfg[card].rx_bw = 5e6;
-
+ openair0_cfg[card].tx_bw = 2.5e6;
+ openair0_cfg[card].rx_bw = 2.5e6;
} else if (frame_parms[0]->N_RB_DL == 6) {
openair0_cfg[card].sample_rate=1.92e6;
openair0_cfg[card].samples_per_frame = 19200;
@@ -2959,9 +2988,10 @@ int main( int argc, char **argv )
openair0_cfg[card].rx_gain[i] = PHY_vars_eNB_g[0][0]->rx_total_gain_eNB_dB;
}
else {
- openair0_cfg[card].rx_gain[i] = PHY_vars_UE_g[0][0]->rx_total_gain_dB;// - USRP_GAIN_OFFSET; // calibrated for USRP B210 @ 2.6 GHz, 30.72 MS/s
+ openair0_cfg[card].rx_gain[i] = PHY_vars_UE_g[0][0]->rx_total_gain_dB;
}
-
+
+#if 0 // UHD 3.8
switch(frame_parms[0]->N_RB_DL) {
case 6:
openair0_cfg[card].rx_gain[i] -= 12;
@@ -2982,7 +3012,7 @@ int main( int argc, char **argv )
default:
break;
}
-
+#endif
}
diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c
index 9930f677c1..6293ad4264 100644
--- a/targets/RT/USER/lte-ue.c
+++ b/targets/RT/USER/lte-ue.c
@@ -279,7 +279,7 @@ static void *UE_thread_synch(void *arg)
#ifdef OAI_USRP
openair0_cfg[card].rx_gain[i] = UE->rx_total_gain_dB;//-USRP_GAIN_OFFSET;
-
+#if 0 // UHD 3.8
switch(UE->lte_frame_parms.N_RB_DL) {
case 6:
openair0_cfg[card].rx_gain[i] -= 12;
@@ -301,7 +301,7 @@ static void *UE_thread_synch(void *arg)
printf( "Unknown number of RBs %d\n", UE->lte_frame_parms.N_RB_DL );
break;
}
-
+#endif
printf( "UE synch: setting RX gain (%d,%d) to %f\n", card, i, openair0_cfg[card].rx_gain[i] );
#endif
}
@@ -357,7 +357,8 @@ static void *UE_thread_synch(void *arg)
openair0_cfg[card].tx_freq[i] = downlink_frequency[card][i]+uplink_frequency_offset[card][i];
#ifdef OAI_USRP
openair0_cfg[card].rx_gain[i] = UE->rx_total_gain_dB;//-USRP_GAIN_OFFSET; // 65 calibrated for USRP B210 @ 2.6 GHz
-
+
+#if 0 // UHD 3.8
switch(UE->lte_frame_parms.N_RB_DL) {
case 6:
openair0_cfg[card].rx_gain[i] -= 12;
@@ -379,7 +380,7 @@ static void *UE_thread_synch(void *arg)
printf("Unknown number of RBs %d\n",UE->lte_frame_parms.N_RB_DL);
break;
}
-
+#endif
printf("UE synch: setting RX gain (%d,%d) to %f\n",card,i,openair0_cfg[card].rx_gain[i]);
#endif
@@ -400,7 +401,7 @@ static void *UE_thread_synch(void *arg)
case pbch:
-
+ LOG_I(PHY,"[UE thread Synch] Running Initial Synch\n");
if (initial_sync( UE, UE->mode ) == 0) {
hw_slot_offset = (UE->rx_offset<<1) / UE->lte_frame_parms.samples_per_tti;
@@ -423,25 +424,25 @@ static void *UE_thread_synch(void *arg)
openair0_cfg[0].sample_rate =1.92e6;
openair0_cfg[0].rx_bw =.96e6;
openair0_cfg[0].tx_bw =.96e6;
- openair0_cfg[0].rx_gain[0] -= 12;
+ // openair0_cfg[0].rx_gain[0] -= 12;
break;
case 25:
openair0_cfg[0].sample_rate =7.68e6;
openair0_cfg[0].rx_bw =2.5e6;
openair0_cfg[0].tx_bw =2.5e6;
- openair0_cfg[0].rx_gain[0] -= 6;
+ // openair0_cfg[0].rx_gain[0] -= 6;
break;
case 50:
openair0_cfg[0].sample_rate =15.36e6;
openair0_cfg[0].rx_bw =5.0e6;
openair0_cfg[0].tx_bw =5.0e6;
- openair0_cfg[0].rx_gain[0] -= 3;
+ // openair0_cfg[0].rx_gain[0] -= 3;
break;
case 100:
openair0_cfg[0].sample_rate=30.72e6;
openair0_cfg[0].rx_bw=10.0e6;
openair0_cfg[0].tx_bw=10.0e6;
- openair0_cfg[0].rx_gain[0] -= 0;
+ // openair0_cfg[0].rx_gain[0] -= 0;
break;
}
#ifndef EXMIMO
@@ -520,10 +521,6 @@ static void *UE_thread_synch(void *arg)
for (i=0; irx_total_gain_dB;//-USRP_GAIN_OFFSET;
-
-
#ifndef EXMIMO
openair0.trx_set_freq_func(&openair0,&openair0_cfg[0],0);
@@ -531,6 +528,12 @@ static void *UE_thread_synch(void *arg)
openair0_set_frequencies(&openair0,&openair0_cfg[0],0);
#endif
+
+#ifdef OAI_USRP
+ openair0_cfg[card].rx_gain[i] = UE->rx_total_gain_dB;//-USRP_GAIN_OFFSET;
+
+
+
switch(UE->lte_frame_parms.N_RB_DL) {
case 6:
openair0_cfg[card].rx_gain[i] -= 12;
@@ -1104,10 +1107,10 @@ void *UE_thread(void *arg)
for (int i=0; ilte_frame_parms.nb_antennas_rx; i++)
rxp[i] = (dummy_dump==0) ? (void*)&rxdata[i][rxpos] : (void*)dummy[i];
- /*
- if (dummy_dump == 0)
- printf("writing %d samples to %d (first_rx %d)\n",spp - ((first_rx==1) ? rx_off_diff : 0),rxpos,first_rx);
- */
+
+ /* if (dummy_dump == 0)
+ printf("writing %d samples to %d (first_rx %d)\n",spp - ((first_rx==1) ? rx_off_diff : 0),rxpos,first_rx);*/
+
if (UE->mode != loop_through_memory) {
rxs = openair0.trx_read_func(&openair0,
×tamp,
@@ -1116,8 +1119,11 @@ void *UE_thread(void *arg)
UE->lte_frame_parms.nb_antennas_rx);
if (rxs != (spp- ((first_rx==1) ? rx_off_diff : 0))) {
- exit_fun("problem in rx");
- return &UE_thread_retval;
+ printf("rx error: asked %d got %d ",spp - ((first_rx==1) ? rx_off_diff : 0),rxs);
+ if (UE->is_synchronized == 1) {
+ exit_fun("problem in rx");
+ return &UE_thread_retval;
+ }
}
}
@@ -1334,6 +1340,7 @@ void *UE_thread(void *arg)
#ifndef USRP_DEBUG
if (UE->mode != loop_through_memory) {
+ LOG_I(PHY,"Resynchronizing RX by %d samples\n",UE->rx_offset);
rxs = openair0.trx_read_func(&openair0,
×tamp,
(void**)rxdata,