Commit 98a9469f authored by Navid Nikaein's avatar Navid Nikaein

* add oaisim performance profiler OPP (enabled with option q )

* fix the bug for IP connectivity when more than 1 UE is connected (test with iperf: ok)
* set target ul/dl mcs in the eNB scheduler to hardwire the desired MCS (option t for UL and m for DL)
* add the code related to abstraction from http://svn.eurecom.fr/openairsvn/openair4G/tags/asilomar2013
* cleanup the code
* pre-ci passed for all except for eMBMS



git-svn-id: http://svn.eurecom.fr/openair4G/trunk@5093 818b1a75-f10b-46b9-bf7c-635c3b92a50f
parent 70920ffd
......@@ -373,7 +373,7 @@ run in segments with final trace back after last segment.
@param traceback flag to indicate that traceback should be performed*/
void phy_viterbi_dot11_sse2(int8_t *y,uint8_t *decoded_bytes,uint16_t n);
/*!\fn void phy_viterbi_lte_sse2(s8 *y, u8 *decoded_bytes, u16 n)
/*!\fn void phy_viterbi_lte_sse2(int8_t *y, uint8_t *decoded_bytes, uint16_t n)
\brief This routine performs a SIMD optmized Viterbi decoder for the LTE 64-state tail-biting convolutional code.
@param y Pointer to soft input (coded on 8-bits but should be limited to 4-bit precision to avoid overflow)
@param decoded_bytes Pointer to decoded output
......
......@@ -582,7 +582,16 @@ void phy_config_dedicated_ue(u8 Mod_id,u8 CH_index,
PHY_VARS_UE *phy_vars_ue = PHY_vars_UE_g[Mod_id];
phy_vars_ue->total_TBS[CH_index]=0;
phy_vars_ue->total_TBS_last[CH_index]=0;
phy_vars_ue->bitrate[CH_index]=0;
phy_vars_ue->total_received_bits[CH_index]=0;
phy_vars_ue->dlsch_errors[CH_index]=0;
phy_vars_ue->dlsch_errors_last[CH_index]=0;
phy_vars_ue->dlsch_received[CH_index]=0;
phy_vars_ue->dlsch_received_last[CH_index]=0;
phy_vars_ue->dlsch_fer[CH_index]=0;
if (physicalConfigDedicated) {
......
......@@ -154,10 +154,11 @@ phy_adjust_gain (PHY_VARS_UE *phy_vars_ue, u8 eNB_id) {
#endif
#ifdef DEBUG_PHY
if ((phy_vars_ue->frame%100==0) || (phy_vars_ue->frame < 10))
/* if ((phy_vars_ue->frame%100==0) || (phy_vars_ue->frame < 10))
msg("[PHY][ADJUST_GAIN] frame %d, rx_power = %d, rx_power_fil = %d, rx_power_fil_dB = %d, coef=%d, ncoef=%d, rx_total_gain_dB = %d (%d,%d,%d)\n",
phy_vars_ue->frame,rx_power,rx_power_fil,rx_power_fil_dB,coef,ncoef,phy_vars_ue->rx_total_gain_dB,
TARGET_RX_POWER,MAX_RF_GAIN,MIN_RF_GAIN);
*/
#endif //DEBUG_PHY
}
......
......@@ -45,6 +45,7 @@
#include "PHY/defs.h"
#include "PHY/extern.h"
#include "SCHED/defs.h"
#include "SIMULATION/TOOLS/defs.h" // for taus
#include <emmintrin.h>
#include <xmmintrin.h>
#ifdef __SSE3__
......@@ -2062,9 +2063,10 @@ u8 generate_dci_top(u8 num_ue_spec_dci,
y[1] = &yseq1[0];
// reset all bits to <NIL>, here we set <NIL> elements as 2
memset(e, 2, DCI_BITS_MAX);
//memset(e, 2, DCI_BITS_MAX);
// here we interpred NIL as a random QPSK sequence. That makes power estimation easier.
//for (i=0;i<DCI_BITS_MAX;i++) e[i]=taus()&1;
for (i=0;i<DCI_BITS_MAX;i++)
e[i]=taus()&1;
e_ptr = e;
// generate DCIs in order of decreasing aggregation level, then common/ue spec
......
......@@ -2636,7 +2636,7 @@ uint16_t quantize_wideband_pmi(PHY_MEASUREMENTS *meas,uint8_t eNB_id) {
}
*/
uint8_t sinr2cqi(int sinr,uint8_t trans_mode) {
uint8_t sinr2cqi(double sinr,uint8_t trans_mode) {
// int flag_LA=0;
if(flag_LA==0){
......@@ -2751,7 +2751,9 @@ void fill_CQI(void *o,UCI_format_t uci_format,PHY_MEASUREMENTS *meas,uint8_t eNB
if(flag_LA==1)
sinr_tmp = sinr_eff;
else
sinr_tmp = meas->wideband_cqi_avg[eNB_id];
sinr_tmp = (double) meas->wideband_cqi_avg[eNB_id];
LOG_I(PHY,"Filling CQI %f for eNB %d\n",sinr_tmp,eNB_id);
switch (uci_format) {
case wideband_cqi_rank1_2A:
......
......@@ -45,6 +45,7 @@
#include "PHY/CODING/lte_interleaver_inline.h"
#include "PHY/LTE_TRANSPORT/defs.h"
#include "defs.h"
#include "UTIL/LOG/vcd_signal_dumper.h"
//#define DEBUG_DLSCH_CODING
//#define DEBUG_DLSCH_FREE 1
......@@ -74,11 +75,12 @@ void free_eNB_dlsch(LTE_eNB_DLSCH_t *dlsch) {
msg("Freeing dlsch process %d (%p)\n",i,dlsch->harq_processes[i]);
#endif
if (dlsch->harq_processes[i]->b) {
free16(dlsch->harq_processes[i]->b,MAX_DLSCH_PAYLOAD_BYTES);
free16(dlsch->harq_processes[i]->b,MAX_DLSCH_PAYLOAD_BYTES);
dlsch->harq_processes[i]->b = NULL;
#ifdef DEBUG_DLSCH_FREE
msg("Freeing dlsch process %d b (%p)\n",i,dlsch->harq_processes[i]->b);
#endif
}
}
if (dlsch->harq_processes[i]->c) {
#ifdef DEBUG_DLSCH_FREE
msg("Freeing dlsch process %d c (%p)\n",i,dlsch->harq_processes[i]->c);
......@@ -88,14 +90,18 @@ void free_eNB_dlsch(LTE_eNB_DLSCH_t *dlsch) {
#ifdef DEBUG_DLSCH_FREE
msg("Freeing dlsch process %d c[%d] (%p)\n",i,r,dlsch->harq_processes[i]->c[r]);
#endif
if (dlsch->harq_processes[i]->c[r])
if (dlsch->harq_processes[i]->c[r]) {
free16(dlsch->harq_processes[i]->c[r],((r==0)?8:0) + 3+768);
dlsch->harq_processes[i]->c[r] = NULL;
}
}
}
free16(dlsch->harq_processes[i],sizeof(LTE_DL_eNB_HARQ_t));
dlsch->harq_processes[i] = NULL;
}
}
free16(dlsch,sizeof(LTE_eNB_DLSCH_t));
dlsch = NULL;
}
}
......@@ -137,7 +143,10 @@ LTE_eNB_DLSCH_t *new_eNB_dlsch(unsigned char Kmimo,unsigned char Mdlharq,unsigne
bzero(dlsch->harq_processes[i],sizeof(LTE_DL_eNB_HARQ_t));
// dlsch->harq_processes[i]->first_tx=1;
dlsch->harq_processes[i]->b = (unsigned char*)malloc16(MAX_DLSCH_PAYLOAD_BYTES/bw_scaling);
if (!dlsch->harq_processes[i]->b) {
if (dlsch->harq_processes[i]->b) {
bzero(dlsch->harq_processes[i]->b,MAX_DLSCH_PAYLOAD_BYTES/bw_scaling);
}
else {
msg("Can't get b\n");
exit_flag=1;
}
......@@ -145,7 +154,10 @@ LTE_eNB_DLSCH_t *new_eNB_dlsch(unsigned char Kmimo,unsigned char Mdlharq,unsigne
for (r=0;r<MAX_NUM_DLSCH_SEGMENTS/bw_scaling;r++) {
// account for filler in first segment and CRCs for multiple segment case
dlsch->harq_processes[i]->c[r] = (unsigned char*)malloc16(((r==0)?8:0) + 3+ 768);
if (!dlsch->harq_processes[i]->c[r]) {
if (dlsch->harq_processes[i]->c[r]) {
bzero(dlsch->harq_processes[i]->c[r],((r==0)?8:0) + 3+ 768);
}
else {
msg("Can't get c\n");
exit_flag=2;
}
......@@ -169,7 +181,8 @@ LTE_eNB_DLSCH_t *new_eNB_dlsch(unsigned char Kmimo,unsigned char Mdlharq,unsigne
return(dlsch);
}
}
msg("new_eNB_dlsch exit flag %d, size of %zd\n", exit_flag, sizeof(LTE_eNB_DLSCH_t));
LOG_D(PHY, "new_eNB_dlsch exit flag %d, size of %ld\n",
exit_flag, sizeof(LTE_eNB_DLSCH_t));
free_eNB_dlsch(dlsch);
return(NULL);
......@@ -224,6 +237,8 @@ int dlsch_encoding(unsigned char *a,
unsigned int Kr=0,Kr_bytes,r,r_offset=0;
unsigned short m=dlsch->harq_processes[harq_pid]->mcs;
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ENCODING, VCD_FUNCTION_IN);
A = dlsch->harq_processes[harq_pid]->TBS; //6228
// printf("Encoder: A: %d\n",A);
mod_order = get_Qm(dlsch->harq_processes[harq_pid]->mcs);
......@@ -355,6 +370,8 @@ int dlsch_encoding(unsigned char *a,
write_output("enc_output.m","enc",dlsch->e,r_offset,1,4);
#endif
}
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ENCODING, VCD_FUNCTION_OUT);
return(0);
}
......
......@@ -495,34 +495,14 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
}
}
}
//printf("sinr_eff1 = %f\n",sinr_eff);
LOG_D(OCM,"sinr_eff (lin, unweighted) = %f\n",sinr_eff);
sinr_eff = -beta2_dlsch[TM][mcs]*log((sinr_eff)/(12*rb_count));
LOG_D(OCM,"sinr_eff (lin, weighted) = %f\n",sinr_eff);
sinr_eff = 10 * log10(sinr_eff);
LOG_I(OCM,"sinr_eff2 = %f\n",sinr_eff);
// table lookup
sinr_eff *= 10;
sinr_eff = floor(sinr_eff);
// if ((int)sinr_eff%2) {
// sinr_eff += 1;
// }
sinr_eff /= 10;
msg("Imran sinr_eff after rounding = %f\n",sinr_eff);
for (index = 0; index < table_length[mcs]; index++) {
if(index == 0) {
if (sinr_eff < sinr_bler_map[mcs][0][index]) {
bler = 1;
break;
}
else if(sinr_eff > sinr_bler_map[mcs][0][table_length[mcs]]){
bler = 0;
break;
}
}
if (sinr_eff == sinr_bler_map[mcs][0][index]) {
bler = sinr_bler_map[mcs][1][index];
}
}
LOG_D(OCM,"sinr_eff (dB) = %f\n",sinr_eff);
bler = interp(sinr_eff,&sinr_bler_map[mcs][0][0],&sinr_bler_map[mcs][1][0],table_length[mcs]);
#ifdef USER_MODE // need to be adapted for the emulation in the kernel space
if (uniformrandom() < bler) {
LOG_I(OCM,"abstraction_decoding failed (mcs=%d, sinr_eff=%f, bler=%f)\n",mcs,sinr_eff,bler);
......@@ -591,56 +571,34 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
}
}
// averaging of accumulated MI
I = I/(12*rb_count);
//Now I->SINR_effective Mapping
if(mcs<10)
{
sinr_eff = (p_qpsk[0]*pow(I,7) + p_qpsk[1]*pow(I,6) + p_qpsk[2]*pow(I,5) + p_qpsk[3]*pow(I,4) + p_qpsk[4]*pow(I,3) + p_qpsk[5]*pow(I,2) + p_qpsk[6]*I + p_qpsk[7]);
}
else if(mcs>9 && mcs<17)
{
sinr_eff = (p_qam16[0]*pow(I,7) + p_qam16[1]*pow(I,6) + p_qam16[2]*pow(I,5) + p_qam16[3]*pow(I,4) + p_qam16[4]*pow(I,3) + p_qam16[5]*pow(I,2) + p_qam16[6]*I + p_qam16[7]);
}
else if(mcs>16 && mcs<23)
{
sinr_eff = (p_qam64[0]*pow(I,7) + p_qam64[1]*pow(I,6) + p_qam64[2]*pow(I,5) + p_qam64[3]*pow(I,4) + p_qam64[4]*pow(I,3) + p_qam64[5]*pow(I,2) + p_qam64[6]*I + p_qam64[7]);
}
sinr_eff = sinr_eff + 10*log10(beta2_dlsch_MI[TM][mcs]);
msg("SINR_Eff = %e\n",sinr_eff);
sinr_eff *= 10;
sinr_eff = floor(sinr_eff);
// if ((int)sinr_eff%2) {
// sinr_eff += 1;
// }
sinr_eff /= 10;
msg("sinr_eff after rounding = %f\n",sinr_eff);
for (index = 0; index < table_length[mcs]; index++) {
if(index == 0) {
if (sinr_eff < sinr_bler_map[mcs][0][index]) {
bler = 1;
break;
}
else if(sinr_eff > sinr_bler_map[mcs][0][table_length[mcs]]){
bler = 0;
break;
}
I = I/(12*rb_count);
//Now I->SINR_effective Mapping
if(mcs<10)
{
sinr_eff = (p_qpsk[0]*pow(I,7) + p_qpsk[1]*pow(I,6) + p_qpsk[2]*pow(I,5) + p_qpsk[3]*pow(I,4) + p_qpsk[4]*pow(I,3) + p_qpsk[5]*pow(I,2) + p_qpsk[6]*I + p_qpsk[7]);
}
if (sinr_eff == sinr_bler_map[mcs][0][index]) {
bler = sinr_bler_map[mcs][1][index];
else if(mcs>9 && mcs<17)
{
sinr_eff = (p_qam16[0]*pow(I,7) + p_qam16[1]*pow(I,6) + p_qam16[2]*pow(I,5) + p_qam16[3]*pow(I,4) + p_qam16[4]*pow(I,3) + p_qam16[5]*pow(I,2) + p_qam16[6]*I + p_qam16[7]);
}
}
else if(mcs>16 && mcs<23)
{
sinr_eff = (p_qam64[0]*pow(I,7) + p_qam64[1]*pow(I,6) + p_qam64[2]*pow(I,5) + p_qam64[3]*pow(I,4) + p_qam64[4]*pow(I,3) + p_qam64[5]*pow(I,2) + p_qam64[6]*I + p_qam64[7]);
}
//sinr_eff = sinr_eff + 10*log10(beta2_dlsch_MI[TM][mcs]);
LOG_D(OCM,"SINR_Eff = %e\n",sinr_eff);
bler = interp(sinr_eff,&sinr_bler_map[mcs][0][0],&sinr_bler_map[mcs][1][0],table_length[mcs]);
#ifdef USER_MODE // need to be adapted for the emulation in the kernel space
if (uniformrandom() < bler) {
msg("abstraction_decoding failed (mcs=%d, sinr_eff=%f, bler=%f)\n",mcs,sinr_eff,bler);
if (uniformrandom() < bler) {
LOG_I(OCM,"abstraction_decoding failed (mcs=%d, sinr_eff=%f, bler=%f)\n",mcs,sinr_eff,bler);
return(0);
}
else {
msg("abstraction_decoding successful (mcs=%d, sinr_eff=%f, bler=%f)\n",mcs,sinr_eff,bler);
LOG_I(OCM,"abstraction_decoding successful (mcs=%d, sinr_eff=%f, bler=%f)\n",mcs,sinr_eff,bler);
return(1);
}
#endif
......@@ -660,7 +618,7 @@ uint32_t dlsch_decoding_emul(PHY_VARS_UE *phy_vars_ue,
u16 i;
#endif
// may not be necessaru for PMCH??
// may not be necessary for PMCH??
for (eNB_id2=0;eNB_id2<NB_eNB_INST;eNB_id2++) {
if (PHY_vars_eNB_g[eNB_id2]->lte_frame_parms.Nid_cell == phy_vars_ue->lte_frame_parms.Nid_cell)
break;
......
......@@ -50,6 +50,10 @@
#include "extern.h"
#include "PHY/extern.h"
#ifdef PHY_ABSTRACTION
#include "SIMULATION/TOOLS/defs.h"
#endif
#ifndef __SSE3__
extern __m128i zero;
#define _mm_abs_epi16(xmmx) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zero,(xmmx)))
......@@ -900,21 +904,34 @@ u16 rx_pbch(LTE_UE_COMMON *lte_ue_common_vars,
}
#ifdef PHY_ABSTRACTION
u16 rx_pbch_emul(PHY_VARS_UE *phy_vars_ue,
u8 eNB_id,
u8 pbch_phase) {
u8 pbch_error=0;
LOG_D(PHY,"EMUL UE rx_pbch_emul: eNB_id %d, pbch_phase %d\n",eNB_id,pbch_phase);
double bler=0.0, x=0.0;
double sinr=0.0;
u16 nb_rb = phy_vars_ue->lte_frame_parms.N_RB_DL;
s16 f;
// compute effective sinr
// TODO: adapt this to varible bandwidth
for (f=(nb_rb*6-3*12);f<(nb_rb*6+3*12);f++) {
if (f!=0) //skip DC
sinr += pow(10, 0.1*(phy_vars_ue->sinr_dB[f]));
}
sinr = 10*log10(sinr/(6*12));
bler = pbch_bler(sinr);
LOG_D(PHY,"EMUL UE rx_pbch_emul: eNB_id %d, pbch_phase %d, sinr %f dB, bler %f \n",
eNB_id,
pbch_phase,
sinr,
bler);
if (pbch_phase == (phy_vars_ue->frame % 4)) {
// abtract pbch error here
// pbch_error = pbch_abstraction();
if (pbch_error == 0) {
if (uniformrandom() >= bler) {
memcpy(phy_vars_ue->lte_ue_pbch_vars[eNB_id]->decoded_output,PHY_vars_eNB_g[eNB_id]->pbch_pdu,PBCH_PDU_SIZE);
return(PHY_vars_eNB_g[eNB_id]->lte_frame_parms.nb_antennas_tx_eNB);
}
......@@ -924,3 +941,4 @@ u16 rx_pbch_emul(PHY_VARS_UE *phy_vars_ue,
else
return(-1);
}
#endif
......@@ -827,6 +827,8 @@ void rx_prach(PHY_VARS_eNB *phy_vars_eNB,u8 subframe,u16 *preamble_energy_list,
NCS = NCS_restricted[Ncs_config];
}
start_meas(&phy_vars_eNB->rx_prach);
n_ra_prb = n_ra_prboffset;
prach_root_sequence_map = (prach_fmt < 4) ? prach_root_sequence_map0_3 : prach_root_sequence_map4;
......@@ -1133,6 +1135,8 @@ void rx_prach(PHY_VARS_eNB *phy_vars_eNB,u8 subframe,u16 *preamble_energy_list,
#endif
// exit(-1);
}// preamble_index
stop_meas(&phy_vars_eNB->rx_prach);
}
void init_prach_tables(int N_ZC) {
......
......@@ -119,6 +119,7 @@ int dump_ue_stats(PHY_VARS_UE *phy_vars_ue, char* buffer, int length, runmode_t
len += sprintf(&buffer[len], "[UE PROC] RX total power eNB%d: %d dB, avg: %d dB\n",eNB,phy_vars_ue->PHY_measurements.rx_power_tot_dB[eNB],phy_vars_ue->PHY_measurements.rx_power_avg_dB[eNB]);
len += sprintf(&buffer[len], "[UE PROC] RX total power lin: %d, avg: %d, RX total noise lin: %d, avg: %d\n",phy_vars_ue->PHY_measurements.rx_power_tot[eNB], phy_vars_ue->PHY_measurements.rx_power_avg[eNB], phy_vars_ue->PHY_measurements.n0_power_tot, phy_vars_ue->PHY_measurements.n0_power_avg);
len += sprintf(&buffer[len], "[UE PROC] effective SINR %.2f dB\n",phy_vars_ue->sinr_eff);
len += sprintf(&buffer[len], "[UE PROC] Wideband CQI eNB %d: %d dB, avg: %d dB\n",eNB,phy_vars_ue->PHY_measurements.wideband_cqi_tot[eNB],phy_vars_ue->PHY_measurements.wideband_cqi_avg[eNB]);
len += sprintf(&buffer[len], "[UE PROC] Subband CQI eNB%d (Ant 0): [%d %d %d %d %d %d %d] dB\n",
......@@ -195,6 +196,7 @@ int dump_ue_stats(PHY_VARS_UE *phy_vars_ue, char* buffer, int length, runmode_t
RRC_status = mac_get_rrc_status(phy_vars_ue->Mod_id,0,0);
len += sprintf(&buffer[len],"[UE PROC] RRC status = %d\n",RRC_status);
#endif
len += sprintf(&buffer[len],"[UE PROC] RSRP[0] %d, RSSI %d, RSRQ[0] %d\n",phy_vars_ue->PHY_measurements.rsrp[0], phy_vars_ue->PHY_measurements.rssi, phy_vars_ue->PHY_measurements.rsrq[0]);
len += sprintf(&buffer[len], "[UE PROC] Transmission Mode %d (mode1_flag %d)\n",phy_vars_ue->transmission_mode[eNB],phy_vars_ue->lte_frame_parms.mode1_flag);
if (phy_vars_ue->transmission_mode[eNB] == 6)
......@@ -252,8 +254,7 @@ int dump_ue_stats(PHY_VARS_UE *phy_vars_ue, char* buffer, int length, runmode_t
}
len += sprintf(&buffer[len],"EOF\n");
/* SR: for trailing '\0' */
len ++;
len += sprintf(&buffer[len],"\0");
return len;
} // is_clusterhead
......@@ -479,8 +480,7 @@ int dump_eNB_stats(PHY_VARS_eNB *phy_vars_eNB, char* buffer, int length) {
len += sprintf(&buffer[len],"\n");
}
len += sprintf(&buffer[len],"EOF\n");
/* SR: for trailing '\0' */
len++;
len += sprintf(&buffer[len],"\0");
return len;
}
......@@ -247,12 +247,14 @@ u32 ulsch_encoding(u8 *a,
// fill CQI/PMI information
if (ulsch->O>0) {
/* //not correctly done
if (flag_LA==1)
sinr_eff = sinr_eff_cqi_calc(phy_vars_ue, 0); //eNB_id is missing here
else
sinr_eff = 0;
*/
rnti = phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti;
fill_CQI(ulsch->o,ulsch->uci_format,meas,0,rnti, tmode,sinr_eff);
fill_CQI(ulsch->o,ulsch->uci_format,meas,0,rnti, tmode,phy_vars_ue->sinr_eff);
LOG_D(PHY,"UE CQI\n");
print_CQI(ulsch->o,ulsch->uci_format,0);
......
......@@ -1607,6 +1607,7 @@ void dump_ulsch(PHY_VARS_eNB *PHY_vars_eNB,uint8_t subframe, uint8_t UE_id) {
uint32_t nsymb = (PHY_vars_eNB->lte_frame_parms.Ncp == 0) ? 14 : 12;
uint8_t harq_pid = subframe2harq_pid(&PHY_vars_eNB->lte_frame_parms,PHY_vars_eNB->frame,subframe);
printf("Dumping ULSCH in subframe %d with harq_pid %d, for NB_rb %d, mcs %d, Qm %d, N_symb %d\n", subframe,harq_pid,PHY_vars_eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->nb_rb,PHY_vars_eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->mcs,get_Qm_ul(PHY_vars_eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->mcs),PHY_vars_eNB->ulsch_eNB[UE_id]->Nsymb_pusch);
#ifndef OAI_EMU
write_output("/tmp/ulsch_d.m","ulsch_dseq",&PHY_vars_eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->d[0][96],
PHY_vars_eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->Kplus*3,1,0);
write_output("/tmp/rxsig0.m","rxs0", &PHY_vars_eNB->lte_eNB_common_vars.rxdata[0][0][0],PHY_vars_eNB->lte_frame_parms.samples_per_tti*10,1,1);
......@@ -1639,6 +1640,7 @@ void dump_ulsch(PHY_VARS_eNB *PHY_vars_eNB,uint8_t subframe, uint8_t UE_id) {
write_output("/tmp/ulsch_rxF_llr.m","ulsch_llr",PHY_vars_eNB->lte_eNB_pusch_vars[UE_id]->llr,PHY_vars_eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->nb_rb*12*get_Qm_ul(PHY_vars_eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->mcs)*PHY_vars_eNB->ulsch_eNB[UE_id]->Nsymb_pusch,1,0);
write_output("/tmp/ulsch_ch_mag.m","ulsch_ch_mag",&PHY_vars_eNB->lte_eNB_pusch_vars[UE_id]->ul_ch_mag[0][0][0],PHY_vars_eNB->lte_frame_parms.N_RB_UL*12*nsymb,1,1);
// write_output("ulsch_ch_mag1.m","ulsch_ch_mag1",&PHY_vars_eNB->lte_eNB_pusch_vars[UE_id]->ul_ch_mag[0][1][0],PHY_vars_eNB->lte_frame_parms.N_RB_UL*12*nsymb,1,1);
#endif
#endif
#endif
}
......@@ -80,5 +80,7 @@ PHY_OBJS += $(TOP_DIR)/PHY/TOOLS/sqrt.o
ifdef SMBV
PHY_OBJS += $(TOP_DIR)/PHY/TOOLS/smbv.o
endif
PHY_OBJS += $(TOP_DIR)/PHY/TOOLS/time_meas.o
PHY_OBJS += $(TOP_DIR)/PHY/TOOLS/lut.o
#PHY_OBJS += $(TOP_DIR)/SIMULATION/TOOLS/rangen_double.o
......@@ -569,7 +569,7 @@ s16 dB_fixed_times10(u32 x) {
dB_power = dB_table_times10[(x&255)-1];
}
if (dB_power > 900)
return(0);
return(900);
return dB_power;
}
......@@ -593,7 +593,7 @@ s8 dB_fixed(u32 x) {
dB_power = dB_table[(x&255)-1];
}
if (dB_power > 90)
return(0);
return(90);
return dB_power;
}
......
......@@ -588,4 +588,6 @@ void idft2048(int16_t *x,int16_t *y,int scale);
/** @} */
double interp(double x, double *xs, double *ys, int count);
#endif //__PHY_TOOLS_DEFS__H__
......@@ -10,8 +10,7 @@ int write_output(const char *fname,const char *vname,void *data,int length,int d
int i;
printf("Writing %d elements of type %d to %s\n",length,format,fname);
printf("Writing %d elements of type %d to %s\n",length,format,fname);
printf("Writing %d elements of type %d to %s\n",length,format,fname);
if (format == 10 || format ==11 || format == 12 )
......
double interp(double x, double *xs, double *ys, int count)
{
int i;
double dx, dy;
if (x < xs[0]) {
return 1.0; /* return minimum element */
}
if (x > xs[count-1]) {
return 0.0; /* return maximum */
}
/* find i, such that xs[i] <= x < xs[i+1] */
for (i = 0; i < count-1; i++) {
if (xs[i+1] > x) {
break;
}
}
/* interpolate */
dx = xs[i+1] - xs[i];
dy = ys[i+1] - ys[i];
return ys[i] + (x - xs[i]) * dy / dx;
}
#include <stdio.h>
#include "time_meas.h"
// global var for openair performance profiler
int opp_enabled = 0;
void print_meas(time_stats_t *ts, const char* name, time_stats_t * total_exec_time, time_stats_t * sf_exec_time){
if (opp_enabled) {
static int first_time = 0;
static double cpu_freq_GHz = 0.0;
if (cpu_freq_GHz == 0.0)
cpu_freq_GHz = get_cpu_freq_GHz();
if (first_time == 0) {
first_time=1;
fprintf(stderr, "%25s %25s %25s %20s %15s %6f\n","Name","Total","Average/Frame","Trials","CPU_F_GHz", cpu_freq_GHz);
}
if (ts->trials>0) {
//printf("%20s: total: %10.3f ms, average: %10.3f us (%10d trials)\n", name, ts->diff/cpu_freq_GHz/1000000.0, ts->diff/ts->trials/cpu_freq_GHz/1000.0, ts->trials);
fprintf(stderr, "%25s: %15.3f ms (%5.2f%); %15.3f us (%5.2f%); %15d;\n",
name,
(ts->diff/cpu_freq_GHz/1000000.0),
((ts->diff/cpu_freq_GHz/1000000.0)/(total_exec_time->diff/cpu_freq_GHz/1000000.0))*100, // percentage
(ts->diff/ts->trials/cpu_freq_GHz/1000.0),
((ts->diff/ts->trials/cpu_freq_GHz/1000.0)/(sf_exec_time->diff/sf_exec_time->trials/cpu_freq_GHz/1000.0))*100, // percentage
ts->trials);
}
}
}
#ifdef OMP
#include <omp.h>
#endif
#include <unistd.h>
// global var to enable openair performance profiler
extern int opp_enabled;
typedef struct {
......@@ -13,6 +16,8 @@ typedef struct {
static inline void start_meas(time_stats_t *ts) __attribute__((always_inline));
static inline void stop_meas(time_stats_t *ts) __attribute__((always_inline));
void print_meas(time_stats_t *ts, const char* name, time_stats_t * total_exec_time, time_stats_t * sf_exec_time);
#if defined(__i386__)
static inline unsigned long long rdtsc_oai(void) __attribute__((always_inline));
static inline unsigned long long rdtsc_oai(void) {
......@@ -31,38 +36,62 @@ static inline unsigned long long rdtsc_oai() {
static inline void start_meas(time_stats_t *ts) {
#ifdef OMP
int tid;
if (opp_enabled) {
tid = omp_get_thread_num();
if (tid==0)
#ifdef OMP
int tid;
tid = omp_get_thread_num();
if (tid==0)
#endif
{
ts->trials++;
ts->in = rdtsc_oai();
}
{
ts->trials++;
ts->in = rdtsc_oai();
}
}
}
static inline void stop_meas(time_stats_t *ts) {
long long out = rdtsc_oai();
if (opp_enabled) {
long long out = rdtsc_oai();
#ifdef OMP
int tid;
tid = omp_get_thread_num();
if (tid==0)
int tid;
tid = omp_get_thread_num();
if (tid==0)
#endif
{
ts->diff += (out-ts->in);
if ((out-ts->in) > ts->max)
ts->max = out-ts->in;
}
{
ts->diff += (out-ts->in);
if ((out-ts->in) > ts->max)
ts->max = out-ts->in;
}
}
}
static inline void reset_meas(time_stats_t *ts) {
ts->trials=0;
ts->diff=0;
ts->max=0;
if (opp_enabled){
ts->trials=0;
ts->diff=0;
ts->max=0;
}
}
/*static inline double get_mean_meas_us(time_stats_t *ts, double cpu_freq_GHz) {
return (double) ts->diff/ts->trials/cpu_freq_GHz/1000.0;
}*/
static inline double get_cpu_freq_GHz(void) {
time_stats_t ts;
reset_meas(&ts);
start_meas(&ts);
sleep(1);
stop_meas(&ts);
return (double)ts.diff/1000000000;
}
......@@ -301,10 +301,16 @@ typedef struct {
unsigned int total_dlsch_bitrate;
unsigned int total_transmitted_bits;
unsigned int total_system_throughput;
time_stats_t phy_proc;
time_stats_t phy_proc_tx;
time_stats_t phy_proc_rx;
time_stats_t rx_prach;
time_stats_t ofdm_mod_stats;
time_stats_t dlsch_encoding_stats;
time_stats_t dlsch_modulation_stats;
time_stats_t dlsch_scrambling_stats;
time_stats_t dlsch_rate_matching_stats;
time_stats_t dlsch_turbo_encoding_stats;
time_stats_t dlsch_interleaving_stats;
......@@ -452,6 +458,9 @@ typedef struct
/// sinr for all subcarriers of first symbol for the CQI Calculation
double *sinr_CQI_dB;
/// sinr_effective used for CQI calulcation
double sinr_eff;
/// N0 (used for abstraction)
double N0;
......@@ -488,7 +497,11 @@ typedef struct
/// Transmission mode per eNB
u8 transmission_mode[NUMBER_OF_CONNECTED_eNB_MAX];
time_stats_t phy_proc;
time_stats_t phy_proc_tx;
time_stats_t phy_proc_rx;
time_stats_t ofdm_mod_stats;
time_stats_t ulsch_encoding_stats;
time_stats_t ulsch_modulation_stats;
......@@ -508,6 +521,7 @@ typedef struct
time_stats_t dlsch_turbo_decoding_stats;
time_stats_t dlsch_deinterleaving_stats;
time_stats_t dlsch_llr_stats;
time_stats_t dlsch_unscrambling_stats;
time_stats_t dlsch_tc_init_stats;
time_stats_t dlsch_tc_alpha_stats;
time_stats_t dlsch_tc_beta_stats;
......@@ -515,7 +529,8 @@ typedef struct
time_stats_t dlsch_tc_ext_stats;
time_stats_t dlsch_tc_intl1_stats;
time_stats_t dlsch_tc_intl2_stats;
time_stats_t tx_prach;
#if defined(ENABLE_RAL)
hash_table_t *ral_thresholds_timed;
SLIST_HEAD(ral_thresholds_gen_poll_s, ral_threshold_phy_t) ral_thresholds_gen_polled[RAL_LINK_PARAM_GEN_MAX];
......
......@@ -61,7 +61,7 @@ extern unsigned char NB_RN_INST;
#endif
extern int flag_LA;
extern double sinr_bler_map[MCS_COUNT][2][20];
extern double sinr_bler_map[MCS_COUNT][2][MCS_TABLE_LENGTH_MAX];
extern double sinr_bler_map_up[MCS_COUNT][2][16];
extern int table_length[MCS_COUNT];
extern double sinr_to_cqi[4][16];
......
......@@ -239,6 +239,10 @@
#define AMP 512//1024 //4096
#endif
#define AMP_OVER_SQRT2 ((AMP*ONE_OVER_SQRT2_Q15)>>15)
#define AMP_OVER_2 (AMP>>1)
#ifndef OPENAIR_LTE
///
/// PHY-MAC Interface Defs
......@@ -486,7 +490,8 @@ typedef struct
} PHY_MEASUREMENTS_eNB;
#define MCS_COUNT 24
#define MCS_COUNT 28
#define MCS_TABLE_LENGTH_MAX 64
#endif //__PHY_IMPLEMENTATION_DEFS_H__
/**@}
......
......@@ -71,7 +71,7 @@ int flagMag;
//extern channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX];
//extern double ABS_SINR_eff_BLER_table[MCS_COUNT][9][9];
//extern double ABS_beta[MCS_COUNT];odi
double sinr_bler_map[MCS_COUNT][2][20];
double sinr_bler_map[MCS_COUNT][2][MCS_TABLE_LENGTH_MAX];
int table_length[MCS_COUNT];
//double sinr_bler_map_up[MCS_COUNT][2][16];
......@@ -110,8 +110,10 @@ double beta1_dlsch_MI[6][MCS_COUNT] = { {1.32955, 0.59522, 0.54024, 0.98698, 0.8
double beta2_dlsch_MI[6][MCS_COUNT] = { {1.36875, 0.59304, 0.53870, 0.98239, 0.81637, 0.76847, 0.69842, 0.69885, 0.69967, 0.69826, 0.82660, 0.70559, 0.78404, 0.70670, 0.55393, 0.36893, 0.52225, 0.39752, 0.40494, 0.46239, 0.49247,0.26900,0.34504,1}, {0.43775, 0.78208, 0.72875, 0.77458, 0.64485, 0.69174, 0.66097, 0.63289, 0.59652, 0.61175, 0.44551, 0.56047, 0.57314, 0.57553, 0.58849, 0.52159, 0.21241, 0.30139, 0.37373, 0.32029, 0.37067, 0.36706, 0.27118,1}, {1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1,1,1,1,1}, {1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1,1,1,1,1},{1.079518113138858, 1.105622953570353, 1.031337449900606, 1.073342032668810, 1.242636589110353, 1.255054927783647, 1.291463834317768, 1.317048698347491, 1.354485054187984, 0.338534029291017, 1.85, 1.79, 1.65, 1.54, 1.46, 1.39, 1.33,1, 1,1,1,1,1,1},{0.54448, 0.73731, 0.79165, 0.74407, 0.68042, 0.64906, 0.71349, 0.62109, 0.65815, 0.60940, 0.90549, 0.78708, 1.03176, 0.58431, 0.53379, 0.51224, 0.52767, 0.26848, 0.29642, 0.36879, 0.34148, 0.35279,0.40633,1}};
*/
//ideal channel estimation values
double beta1_dlsch[6][MCS_COUNT] = { {2.3814, 0.4956, 0.5273, 1.1708, 0.8014, 0.7889, 0.8111, 0.8139, 0.8124, 0.8479, 1.9280, 1.9664, 2.3857, 2.5147, 2.4511, 3.0158, 2.8643, 5.3013, 5.8594, 6.5372, 7.8073, 7.8030, 7.5295, 7.1320}, {0.5146, 0.5549, 0.7405, 0.6913, 0.7349, 0.7000, 0.7539, 0.7955, 0.8074, 0.7760, 1.8150, 1.6561, 1.9280, 2.3563, 2.6699, 2.3086, 3.1601, 4.5316, 5.2870, 6.0983, 6.5635, 7.7024, 9.9592, 6.6173}, {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1,1,1,1,1,1}, {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1,1,1,1,1}, {1.79358, 1.17908, 2.02600, 1.72040, 1.58618, 1.59039, 1.68111, 1.67062, 1.64911, 1.33274, 4.87800, 3.58797, 3.72338, 5.35700, 2.81752, 1.93472, 2.23259, 1,1,1,1,1,1,1}, {0.4445, 0.5918, 0.7118, 0.7115, 0.7284, 0.7202, 0.7117, 0.8111, 0.8239, 0.7907, 1.8456, 1.8144, 2.3830, 2.6634, 2.6129, 2.8127, 2.7372, 4.9424, 4.8763, 6.8413, 7.1493, 9.4180, 10.1230, 8.9613}};
double beta2_dlsch[6][MCS_COUNT] = { {2.3639, 0.4952, 0.5207, 1.1572, 0.8026, 0.7864, 0.7996, 0.8034, 0.8200, 0.8367, 1.8701, 1.9212, 2.2947, 2.4472, 2.4091, 2.9479, 2.8973, 5.0591, 5.5134, 6.1483, 7.2166, 7.5177, 7.5704, 7.2248}, {0.5113, 0.5600, 0.7359, 0.6860, 0.7344, 0.6902, 0.7315, 0.7660, 0.7817, 0.7315, 1.7268, 1.5912, 1.8519, 2.2115, 2.4580, 2.1879, 2.9015, 4.1543, 4.6986, 5.3193, 5.6319, 6.5640, 8.2421, 5.6393}, {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1,1,1,1,1,1}, {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1,1,1,1,1}, {0.79479, 0.52872, 0.90005, 0.77170, 0.73220, 0.72060, 0.75433, 0.75451, 0.75989, 0.67655, 1.68525, 1.31100, 1.46573, 1.99843, 1.57293, 1.62852, 2.10636, 1,1,1,1,1,1,1}, {0.4398, 0.5823, 0.7094, 0.7043, 0.7282, 0.7041, 0.6979, 0.7762, 0.7871, 0.7469, 1.7752, 1.7443, 2.2266, 2.4767, 2.4146, 2.6040, 2.5708, 4.4488, 4.4944, 5.9630, 6.3740, 8.1097, 8.4210, 7.8027}};
//double beta1_dlsch[6][MCS_COUNT] = { {2.3814, 0.4956, 0.5273, 1.1708, 0.8014, 0.7889, 0.8111, 0.8139, 0.8124, 0.8479, 1.9280, 1.9664, 2.3857, 2.5147, 2.4511, 3.0158, 2.8643, 5.3013, 5.8594, 6.5372, 7.8073, 7.8030, 7.5295, 7.1320}, {0.5146, 0.5549, 0.7405, 0.6913, 0.7349, 0.7000, 0.7539, 0.7955, 0.8074, 0.7760, 1.8150, 1.6561, 1.9280, 2.3563, 2.6699, 2.3086, 3.1601, 4.5316, 5.2870, 6.0983, 6.5635, 7.7024, 9.9592, 6.6173}, {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1,1,1,1,1,1}, {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1,1,1,1,1}, {1.79358, 1.17908, 2.02600, 1.72040, 1.58618, 1.59039, 1.68111, 1.67062, 1.64911, 1.33274, 4.87800, 3.58797, 3.72338, 5.35700, 2.81752, 1.93472, 2.23259, 1,1,1,1,1,1,1}, {0.4445, 0.5918, 0.7118, 0.7115, 0.7284, 0.7202, 0.7117, 0.8111, 0.8239, 0.7907, 1.8456, 1.8144, 2.3830, 2.6634, 2.6129, 2.8127, 2.7372, 4.9424, 4.8763, 6.8413, 7.1493, 9.4180, 10.1230, 8.9613}};
//double beta2_dlsch[6][MCS_COUNT] = { {2.3639, 0.4952, 0.5207, 1.1572, 0.8026, 0.7864, 0.7996, 0.8034, 0.8200, 0.8367, 1.8701, 1.9212, 2.2947, 2.4472, 2.4091, 2.9479, 2.8973, 5.0591, 5.5134, 6.1483, 7.2166, 7.5177, 7.5704, 7.2248}, {0.5113, 0.5600, 0.7359, 0.6860, 0.7344, 0.6902, 0.7315, 0.7660, 0.7817, 0.7315, 1.7268, 1.5912, 1.8519, 2.2115, 2.4580, 2.1879, 2.9015, 4.1543, 4.6986, 5.3193, 5.6319, 6.5640, 8.2421, 5.6393}, {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1,1,1,1,1,1}, {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1,1,1,1,1}, {0.79479, 0.52872, 0.90005, 0.77170, 0.73220, 0.72060, 0.75433, 0.75451, 0.75989, 0.67655, 1.68525, 1.31100, 1.46573, 1.99843, 1.57293, 1.62852, 2.10636, 1,1,1,1,1,1,1}, {0.4398, 0.5823, 0.7094, 0.7043, 0.7282, 0.7041, 0.6979, 0.7762, 0.7871, 0.7469, 1.7752, 1.7443, 2.2266, 2.4767, 2.4146, 2.6040, 2.5708, 4.4488, 4.4944, 5.9630, 6.3740, 8.1097, 8.4210, 7.8027}};
double beta1_dlsch[6][MCS_COUNT] = { {1.199175, 1.085656, 0.983872, 0.843789, 0.816093, 0.853078, 0.899236, 0.919665, 0.888673, 0.924181, 0.814176, 0.794108, 0.770653, 0.826266, 0.982043, 0.979621, 0.985176, 0.901741, 0.870311, 0.911303, 0.898923, 1.003359, 0.988535, 1.030639, 1.151038, 1.116939, 1.214118, 1.219148}, {0.5146, 0.5549, 0.7405, 0.6913, 0.7349, 0.7000, 0.7539, 0.7955, 0.8074, 0.7760, 1.8150, 1.6561, 1.9280, 2.3563, 2.6699, 2.3086, 3.1601, 4.5316, 5.2870, 6.0983, 6.5635, 7.7024, 9.9592, 6.6173}, {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1,1,1,1,1,1}, {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1,1,1,1,1}, {1.79358, 1.17908, 2.02600, 1.72040, 1.58618, 1.59039, 1.68111, 1.67062, 1.64911, 1.33274, 4.87800, 3.58797, 3.72338, 5.35700, 2.81752, 1.93472, 2.23259, 1,1,1,1,1,1,1}, {0.4445, 0.5918, 0.7118, 0.7115, 0.7284, 0.7202, 0.7117, 0.8111, 0.8239, 0.7907, 1.8456, 1.8144, 2.3830, 2.6634, 2.6129, 2.8127, 2.7372, 4.9424, 4.8763, 6.8413, 7.1493, 9.4180, 10.1230, 8.9613}};
double beta2_dlsch[6][MCS_COUNT] = { {0.534622, 0.596561, 0.500838, 0.471721, 0.548218, 0.547974, 0.924245, 0.836484, 0.776917, 0.879691, 0.875722, 0.666933, 0.666393, 0.755377, 1.074985, 1.080290, 1.010914, 0.790892, 0.793435, 0.860249, 0.901508, 0.967060, 0.951372, 1.011493, 1.106151, 1.117076, 1.209397, 1.227790}, {0.5113, 0.5600, 0.7359, 0.6860, 0.7344, 0.6902, 0.7315, 0.7660, 0.7817, 0.7315, 1.7268, 1.5912, 1.8519, 2.2115, 2.4580, 2.1879, 2.9015, 4.1543, 4.6986, 5.3193, 5.6319, 6.5640, 8.2421, 5.6393}, {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1,1,1,1,1,1}, {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1,1,1,1,1}, {0.79479, 0.52872, 0.90005, 0.77170, 0.73220, 0.72060, 0.75433, 0.75451, 0.75989, 0.67655, 1.68525, 1.31100, 1.46573, 1.99843, 1.57293, 1.62852, 2.10636, 1,1,1,1,1,1,1}, {0.4398, 0.5823, 0.7094, 0.7043, 0.7282, 0.7041, 0.6979, 0.7762, 0.7871, 0.7469, 1.7752, 1.7443, 2.2266, 2.4767, 2.4146, 2.6040, 2.5708, 4.4488, 4.4944, 5.9630, 6.3740, 8.1097, 8.4210, 7.8027}};
//real channel estimation valus
/*
......
This diff is collapsed.
This diff is collapsed.
SNR; MCS; TBS; rate; err0; trials0; err1; trials1; err2; trials2; err3; trials3; dci_err
-7.000000;0;680;0.090667;5002;5002;0;0;0;0;0;0;0
-6.900000;0;680;0.090667;5002;5002;0;0;0;0;0;0;0
-6.800000;0;680;0.090667;5002;5002;0;0;0;0;0;0;0
-6.700000;0;680;0.090667;5002;5002;0;0;0;0;0;0;0
-6.600000;0;680;0.090667;5002;5002;0;0;0;0;0;0;0
-6.500000;0;680;0.090667;5002;5002;0;0;0;0;0;0;0
-6.400000;0;680;0.090667;5002;5002;0;0;0;0;0;0;0
-6.300000;0;680;0.090667;5002;5002;0;0;0;0;0;0;0
-6.200000;0;680;0.090667;5002;5002;0;0;0;0;0;0;0
-6.100000;0;680;0.090667;5002;5002;0;0;0;0;0;0;0
-6.000000;0;680;0.090667;5002;5002;0;0;0;0;0;0;0
-5.900000;0;680;0.090667;5002;5002;0;0;0;0;0;0;0
-5.800000;0;680;0.090667;5002;5002;0;0;0;0;0;0;0
-5.700000;0;680;0.090667;5002;5002;0;0;0;0;0;0;0
-5.600000;0;680;0.090667;5002;5002;0;0;0;0;0;0;0
-5.500000;0;680;0.090667;5002;5002;0;0;0;0;0;0;0
-5.400000;0;680;0.090667;5002;5002;0;0;0;0;0;0;0
-5.300000;0;680;0.090667;5002;5002;0;0;0;0;0;0;0
-5.200000;0;680;0.090667;5002;5002;0;0;0;0;0;0;0
-5.100000;0;680;0.090667;5002;5002;0;0;0;0;0;0;0
-5.000000;0;680;0.090667;5002;5002;0;0;0;0;0;0;0
-4.900000;0;680;0.090667;5002;5002;0;0;0;0;0;0;0
-4.800000;0;680;0.090667;5002;5002;0;0;0;0;0;0;0
-4.700000;0;680;0.090667;5002;5002;0;0;0;0;0;0;0
-4.600000;0;680;0.090667;5002;5002;0;0;0;0;0;0;0
-4.500000;0;680;0.090667;5002;5002;0;0;0;0;0;0;0
-4.400000;0;680;0.090667;5002;5002;0;0;0;0;0;0;0
-4.300000;0;680;0.090667;5002;5002;0;0;0;0;0;0;0
-4.200000;0;680;0.090667;5002;5002;0;0;0;0;0;0;0
-4.100000;0;680;0.090667;4999;5002;0;0;0;0;0;0;0
-4.000000;0;680;0.090667;4994;5002;0;0;0;0;0;0;0
-3.900000;0;680;0.090667;4980;5002;0;0;0;0;0;0;0
-3.800000;0;680;0.090667;4954;5002;0;0;0;0;0;0;0
-3.700000;0;680;0.090667;4921;5002;0;0;0;0;0;0;0
-3.600000;0;680;0.090667;4833;5002;0;0;0;0;0;0;0
-3.500000;0;680;0.090667;4639;5002;0;0;0;0;0;0;0
-3.400000;0;680;0.090667;4467;5002;0;0;0;0;0;0;0
-3.300000;0;680;0.090667;4169;5002;0;0;0;0;0;0;0
-3.200000;0;680;0.090667;3725;5002;0;0;0;0;0;0;0
-3.100000;0;680;0.090667;3342;5002;0;0;0;0;0;0;0
-3.000000;0;680;0.090667;2792;5002;0;0;0;0;0;0;0
-2.900000;0;680;0.090667;2290;5002;0;0;0;0;0;0;0
-2.800000;0;680;0.090667;1859;5002;0;0;0;0;0;0;0
-2.700000;0;680;0.090667;1438;5002;0;0;0;0;0;0;0
-2.600000;0;680;0.090667;1097;5002;0;0;0;0;0;0;0
-2.500000;0;680;0.090667;1000;6360;0;0;0;0;0;0;0
-2.400000;0;680;0.090667;1000;8356;0;0;0;0;0;0;0
-2.300000;0;680;0.090667;963;10000;0;0;0;0;0;0;0
-2.200000;0;680;0.090667;740;10000;0;0;0;0;0;0;0
-2.100000;0;680;0.090667;634;10000;0;0;0;0;0;0;0
-2.000000;0;680;0.090667;519;10000;0;0;0;0;0;0;0
-1.900000;0;680;0.090667;519;10000;0;0;0;0;0;0;0
-1.800000;0;680;0.090667;494;10000;0;0;0;0;0;0;0
-1.700000;0;680;0.090667;425;10000;0;0;0;0;0;0;0
-1.600000;0;680;0.090667;420;10000;0;0;0;0;0;0;0
-1.500000;0;680;0.090667;372;10000;0;0;0;0;0;0;0
-1.400000;0;680;0.090667;347;10000;0;0;0;0;0;0;0
-1.300000;0;680;0.090667;297;10000;0;0;0;0;0;0;0
-1.200000;0;680;0.090667;294;10000;0;0;0;0;0;0;0
-1.100000;0;680;0.090667;260;10000;0;0;0;0;0;0;0
-1.000000;0;680;0.090667;254;10000;0;0;0;0;0;0;0
-0.900000;0;680;0.090667;247;10000;0;0;0;0;0;0;0
-0.800000;0;680;0.090667;209;10000;0;0;0;0;0;0;0
-0.700000;0;680;0.090667;190;10000;0;0;0;0;0;0;0
-0.600000;0;680;0.090667;207;10000;0;0;0;0;0;0;0
-0.500000;0;680;0.090667;171;10000;0;0;0;0;0;0;0
-0.400000;0;680;0.090667;169;10000;0;0;0;0;0;0;0
-0.300000;0;680;0.090667;150;10000;0;0;0;0;0;0;0
-0.200000;0;680;0.090667;125;10000;0;0;0;0;0;0;0
-0.100000;0;680;0.090667;125;10000;0;0;0;0;0;0;0
-0.000000;0;680;0.090667;110;10000;0;0;0;0;0;0;0
0.100000;0;680;0.090667;103;10000;0;0;0;0;0;0;0
0.200000;0;680;0.090667;104;10000;0;0;0;0;0;0;0
0.300000;0;680;0.090667;88;10000;0;0;0;0;0;0;0
SNR; MCS; TBS; rate; err0; trials0; err1; trials1; err2; trials2; err3; trials3; dci_err
-6.000000;1;904;0.120533;5002;5002;0;0;0;0;0;0;0
-5.900000;1;904;0.120533;5002;5002;0;0;0;0;0;0;0
-5.800000;1;904;0.120533;5002;5002;0;0;0;0;0;0;0
-5.700000;1;904;0.120533;5002;5002;0;0;0;0;0;0;0
-5.600000;1;904;0.120533;5002;5002;0;0;0;0;0;0;0
-5.500000;1;904;0.120533;5002;5002;0;0;0;0;0;0;0
-5.400000;1;904;0.120533;5002;5002;0;0;0;0;0;0;0
-5.300000;1;904;0.120533;5002;5002;0;0;0;0;0;0;0
-5.200000;1;904;0.120533;5002;5002;0;0;0;0;0;0;0
-5.100000;1;904;0.120533;5002;5002;0;0;0;0;0;0;0
-5.000000;1;904;0.120533;5002;5002;0;0;0;0;0;0;0
-4.900000;1;904;0.120533;5002;5002;0;0;0;0;0;0;0
-4.800000;1;904;0.120533;5002;5002;0;0;0;0;0;0;0
-4.700000;1;904;0.120533;5002;5002;0;0;0;0;0;0;0
-4.600000;1;904;0.120533;5002;5002;0;0;0;0;0;0;0
-4.500000;1;904;0.120533;5002;5002;0;0;0;0;0;0;0
-4.400000;1;904;0.120533;5002;5002;0;0;0;0;0;0;0
-4.300000;1;904;0.120533;5002;5002;0;0;0;0;0;0;0
-4.200000;1;904;0.120533;5002;5002;0;0;0;0;0;0;0
-4.100000;1;904;0.120533;5002;5002;0;0;0;0;0;0;0
-4.000000;1;904;0.120533;5002;5002;0;0;0;0;0;0;0
-3.900000;1;904;0.120533;5002;5002;0;0;0;0;0;0;0
-3.800000;1;904;0.120533;5002;5002;0;0;0;0;0;0;0
-3.700000;1;904;0.120533;5002;5002;0;0;0;0;0;0;0
-3.600000;1;904;0.120533;5002;5002;0;0;0;0;0;0;0
-3.500000;1;904;0.120533;5002;5002;0;0;0;0;0;0;0
-3.400000;1;904;0.120533;5002;5002;0;0;0;0;0;0;0
-3.300000;1;904;0.120533;5001;5002;0;0;0;0;0;0;0
-3.200000;1;904;0.120533;5000;5002;0;0;0;0;0;0;0
-3.100000;1;904;0.120533;4997;5002;0;0;0;0;0;0;0
-3.000000;1;904;0.120533;4985;5002;0;0;0;0;0;0;0
-2.900000;1;904;0.120533;4957;5002;0;0;0;0;0;0;0
-2.800000;1;904;0.120533;4907;5002;0;0;0;0;0;0;0
-2.700000;1;904;0.120533;4820;5002;0;0;0;0;0;0;0
-2.600000;1;904;0.120533;4639;5002;0;0;0;0;0;0;0
-2.500000;1;904;0.120533;4448;5002;0;0;0;0;0;0;0
-2.400000;1;904;0.120533;4108;5002;0;0;0;0;0;0;0
-2.300000;1;904;0.120533;3632;5002;0;0;0;0;0;0;0
-2.200000;1;904;0.120533;3086;5002;0;0;0;0;0;0;0
-2.100000;1;904;0.120533;2593;5002;0;0;0;0;0;0;0
-2.000000;1;904;0.120533;1930;5002;0;0;0;0;0;0;0
-1.900000;1;904;0.120533;1445;5002;0;0;0;0;0;0;0
-1.800000;1;904;0.120533;1025;5002;0;0;0;0;0;0;0
-1.700000;1;904;0.120533;1000;6622;0;0;0;0;0;0;0
-1.600000;1;904;0.120533;1000;8803;0;0;0;0;0;0;0
-1.500000;1;904;0.120533;806;10000;0;0;0;0;0;0;0
-1.400000;1;904;0.120533;681;10000;0;0;0;0;0;0;0
-1.300000;1;904;0.120533;560;10000;0;0;0;0;0;0;0
-1.200000;1;904;0.120533;484;10000;0;0;0;0;0;0;0
-1.100000;1;904;0.120533;466;10000;0;0;0;0;0;0;0
-1.000000;1;904;0.120533;370;10000;0;0;0;0;0;0;0
-0.900000;1;904;0.120533;401;10000;0;0;0;0;0;0;0
-0.800000;1;904;0.120533;389;10000;0;0;0;0;0;0;0
-0.700000;1;904;0.120533;363;10000;0;0;0;0;0;0;0
-0.600000;1;904;0.120533;335;10000;0;0;0;0;0;0;0
-0.500000;1;904;0.120533;305;10000;0;0;0;0;0;0;0
-0.400000;1;904;0.120533;276;10000;0;0;0;0;0;0;0
-0.300000;1;904;0.120533;302;10000;0;0;0;0;0;0;0
-0.200000;1;904;0.120533;258;10000;0;0;0;0;0;0;0
-0.100000;1;904;0.120533;242;10000;0;0;0;0;0;0;0
-0.000000;1;904;0.120533;233;10000;0;0;0;0;0;0;0
0.100000;1;904;0.120533;229;10000;0;0;0;0;0;0;0
0.200000;1;904;0.120533;210;10000;0;0;0;0;0;0;0
0.300000;1;904;0.120533;190;10000;0;0;0;0;0;0;0
0.400000;1;904;0.120533;162;10000;0;0;0;0;0;0;0
0.500000;1;904;0.120533;144;10000;0;0;0;0;0;0;0
0.600000;1;904;0.120533;156;10000;0;0;0;0;0;0;0
0.700000;1;904;0.120533;138;10000;0;0;0;0;0;0;0
0.800000;1;904;0.120533;130;10000;0;0;0;0;0;0;0
0.900000;1;904;0.120533;101;10000;0;0;0;0;0;0;0
1.000000;1;904;0.120533;94;10000;0;0;0;0;0;0;0
SNR; MCS; TBS; rate; err0; trials0; err1; trials1; err2; trials2; err3; trials3; dci_err
1.000000;10;4008;0.267200;5002;5002;0;0;0;0;0;0;0
1.100000;10;4008;0.267200;5002;5002;0;0;0;0;0;0;0
1.200000;10;4008;0.267200;5002;5002;0;0;0;0;0;0;0
1.300000;10;4008;0.267200;5002;5002;0;0;0;0;0;0;0
1.400000;10;4008;0.267200;5002;5002;0;0;0;0;0;0;0
1.500000;10;4008;0.267200;5002;5002;0;0;0;0;0;0;0
1.600000;10;4008;0.267200;5002;5002;0;0;0;0;0;0;0
1.700000;10;4008;0.267200;5002;5002;0;0;0;0;0;0;0
1.800000;10;4008;0.267200;5002;5002;0;0;0;0;0;0;0
1.900000;10;4008;0.267200;5002;5002;0;0;0;0;0;0;0
2.000000;10;4008;0.267200;5002;5002;0;0;0;0;0;0;0
2.100000;10;4008;0.267200;5002;5002;0;0;0;0;0;0;0
2.200000;10;4008;0.267200;5002;5002;0;0;0;0;0;0;0
2.300000;10;4008;0.267200;5002;5002;0;0;0;0;0;0;0
2.400000;10;4008;0.267200;5002;5002;0;0;0;0;0;0;0
2.500000;10;4008;0.267200;5002;5002;0;0;0;0;0;0;0
2.600000;10;4008;0.267200;5002;5002;0;0;0;0;0;0;0
2.700000;10;4008;0.267200;5002;5002;0;0;0;0;0;0;0
2.800000;10;4008;0.267200;5002;5002;0;0;0;0;0;0;0
2.900000;10;4008;0.267200;5002;5002;0;0;0;0;0;0;0
3.000000;10;4008;0.267200;5002;5002;0;0;0;0;0;0;0
3.100000;10;4008;0.267200;5002;5002;0;0;0;0;0;0;0
3.200000;10;4008;0.267200;5002;5002;0;0;0;0;0;0;0
3.300000;10;4008;0.267200;5002;5002;0;0;0;0;0;0;0
3.400000;10;4008;0.267200;5002;5002;0;0;0;0;0;0;0
3.500000;10;4008;0.267200;5002;5002;0;0;0;0;0;0;0
3.600000;10;4008;0.267200;5002;5002;0;0;0;0;0;0;0
3.700000;10;4008;0.267200;5002;5002;0;0;0;0;0;0;0
3.800000;10;4008;0.267200;5002;5002;0;0;0;0;0;0;0
3.900000;10;4008;0.267200;5002;5002;0;0;0;0;0;0;0
4.000000;10;4008;0.267200;5002;5002;0;0;0;0;0;0;0
4.100000;10;4008;0.267200;5002;5002;0;0;0;0;0;0;0
4.200000;10;4008;0.267200;5002;5002;0;0;0;0;0;0;0
4.300000;10;4008;0.267200;4992;5002;0;0;0;0;0;0;0
4.400000;10;4008;0.267200;4947;5002;0;0;0;0;0;0;0
4.500000;10;4008;0.267200;4838;5002;0;0;0;0;0;0;0
4.600000;10;4008;0.267200;4521;5002;0;0;0;0;0;0;0
4.700000;10;4008;0.267200;3977;5002;0;0;0;0;0;0;0
4.800000;10;4008;0.267200;3034;5002;0;0;0;0;0;0;0
4.900000;10;4008;0.267200;2257;5002;0;0;0;0;0;0;0
5.000000;10;4008;0.267200;1435;5002;0;0;0;0;0;0;0
5.100000;10;4008;0.267200;1000;5561;0;0;0;0;0;0;0
5.200000;10;4008;0.267200;1000;8160;0;0;0;0;0;0;0
5.300000;10;4008;0.267200;974;10000;0;0;0;0;0;0;0
5.400000;10;4008;0.267200;845;10000;0;0;0;0;0;0;0
5.500000;10;4008;0.267200;752;10000;0;0;0;0;0;0;0
5.600000;10;4008;0.267200;738;10000;0;0;0;0;0;0;0
5.700000;10;4008;0.267200;703;10000;0;0;0;0;0;0;0
5.800000;10;4008;0.267200;635;10000;0;0;0;0;0;0;0
5.900000;10;4008;0.267200;630;10000;0;0;0;0;0;0;0
6.000000;10;4008;0.267200;574;10000;0;0;0;0;0;0;0
6.100000;10;4008;0.267200;557;10000;0;0;0;0;0;0;0
6.200000;10;4008;0.267200;556;10000;0;0;0;0;0;0;0
6.300000;10;4008;0.267200;507;10000;0;0;0;0;0;0;0
6.400000;10;4008;0.267200;492;10000;0;0;0;0;0;0;0
6.500000;10;4008;0.267200;453;10000;0;0;0;0;0;0;0
6.600000;10;4008;0.267200;488;10000;0;0;0;0;0;0;0
6.700000;10;4008;0.267200;442;10000;0;0;0;0;0;0;0
6.800000;10;4008;0.267200;441;10000;0;0;0;0;0;0;0
6.900000;10;4008;0.267200;429;10000;0;0;0;0;0;0;0
7.000000;10;4008;0.267200;388;10000;0;0;0;0;0;0;0
7.100000;10;4008;0.267200;355;10000;0;0;0;0;0;0;0
7.200000;10;4008;0.267200;361;10000;0;0;0;0;0;0;0
7.300000;10;4008;0.267200;325;10000;0;0;0;0;0;0;0
7.400000;10;4008;0.267200;313;10000;0;0;0;0;0;0;0
7.500000;10;4008;0.267200;302;10000;0;0;0;0;0;0;0
7.600000;10;4008;0.267200;238;10000;0;0;0;0;0;0;0
7.700000;10;4008;0.267200;254;10000;0;0;0;0;0;0;0
7.800000;10;4008;0.267200;225;10000;0;0;0;0;0;0;0
7.900000;10;4008;0.267200;199;10000;0;0;0;0;0;0;0
8.000000;10;4008;0.267200;225;10000;0;0;0;0;0;0;0
8.100000;10;4008;0.267200;181;10000;0;0;0;0;0;0;0
8.200000;10;4008;0.267200;177;10000;0;0;0;0;0;0;0
8.300000;10;4008;0.267200;167;10000;0;0;0;0;0;0;0
8.400000;10;4008;0.267200;158;10000;0;0;0;0;0;0;0
8.500000;10;4008;0.267200;161;10000;0;0;0;0;0;0;0
8.600000;10;4008;0.267200;124;10000;0;0;0;0;0;0;0
8.700000;10;4008;0.267200;128;10000;0;0;0;0;0;0;0
8.800000;10;4008;0.267200;129;10000;0;0;0;0;0;0;0
8.900000;10;4008;0.267200;117;10000;0;0;0;0;0;0;0
9.000000;10;4008;0.267200;104;10000;0;0;0;0;0;0;0
9.100000;10;4008;0.267200;97;10000;0;0;0;0;0;0;0
SNR; MCS; TBS; rate; err0; trials0; err1; trials1; err2; trials2; err3; trials3; dci_err
2.000000;11;4392;0.292800;5002;5002;0;0;0;0;0;0;0
2.100000;11;4392;0.292800;5002;5002;0;0;0;0;0;0;0
2.200000;11;4392;0.292800;5002;5002;0;0;0;0;0;0;0
2.300000;11;4392;0.292800;5002;5002;0;0;0;0;0;0;0
2.400000;11;4392;0.292800;5002;5002;0;0;0;0;0;0;0
2.500000;11;4392;0.292800;5002;5002;0;0;0;0;0;0;0
2.600000;11;4392;0.292800;5002;5002;0;0;0;0;0;0;0
2.700000;11;4392;0.292800;5002;5002;0;0;0;0;0;0;0
2.800000;11;4392;0.292800;5002;5002;0;0;0;0;0;0;0
2.900000;11;4392;0.292800;5002;5002;0;0;0;0;0;0;0
3.000000;11;4392;0.292800;5002;5002;0;0;0;0;0;0;0
3.100000;11;4392;0.292800;5002;5002;0;0;0;0;0;0;0
3.200000;11;4392;0.292800;5002;5002;0;0;0;0;0;0;0
3.300000;11;4392;0.292800;5002;5002;0;0;0;0;0;0;0
3.400000;11;4392;0.292800;5002;5002;0;0;0;0;0;0;0
3.500000;11;4392;0.292800;5002;5002;0;0;0;0;0;0;0
3.600000;11;4392;0.292800;5002;5002;0;0;0;0;0;0;0
3.700000;11;4392;0.292800;5002;5002;0;0;0;0;0;0;0
3.800000;11;4392;0.292800;5002;5002;0;0;0;0;0;0;0
3.900000;11;4392;0.292800;5002;5002;0;0;0;0;0;0;0
4.000000;11;4392;0.292800;5002;5002;0;0;0;0;0;0;0
4.100000;11;4392;0.292800;5002;5002;0;0;0;0;0;0;0
4.200000;11;4392;0.292800;5002;5002;0;0;0;0;0;0;0
4.300000;11;4392;0.292800;5002;5002;0;0;0;0;0;0;0
4.400000;11;4392;0.292800;5002;5002;0;0;0;0;0;0;0
4.500000;11;4392;0.292800;5002;5002;0;0;0;0;0;0;0
4.600000;11;4392;0.292800;5001;5002;0;0;0;0;0;0;0
4.700000;11;4392;0.292800;4986;5002;0;0;0;0;0;0;0
4.800000;11;4392;0.292800;4941;5002;0;0;0;0;0;0;0
4.900000;11;4392;0.292800;4730;5002;0;0;0;0;0;0;0
5.000000;11;4392;0.292800;4250;5002;0;0;0;0;0;0;0
5.100000;11;4392;0.292800;3440;5002;0;0;0;0;0;0;0
5.200000;11;4392;0.292800;2397;5002;0;0;0;0;0;0;0
5.300000;11;4392;0.292800;1403;5002;0;0;0;0;0;0;0
5.400000;11;4392;0.292800;1000;6845;0;0;0;0;0;0;0
5.500000;11;4392;0.292800;657;10000;0;0;0;0;0;0;0
5.600000;11;4392;0.292800;255;10000;0;0;0;0;0;0;0
5.700000;11;4392;0.292800;151;10000;0;0;0;0;0;0;0
5.800000;11;4392;0.292800;65;10000;0;0;0;0;0;0;0
SNR; MCS; TBS; rate; err0; trials0; err1; trials1; err2; trials2; err3; trials3; dci_err
3.000000;12;4968;0.331200;5002;5002;0;0;0;0;0;0;0
3.100000;12;4968;0.331200;5002;5002;0;0;0;0;0;0;0
3.200000;12;4968;0.331200;5002;5002;0;0;0;0;0;0;0
3.300000;12;4968;0.331200;5002;5002;0;0;0;0;0;0;0
3.400000;12;4968;0.331200;5002;5002;0;0;0;0;0;0;0
3.500000;12;4968;0.331200;5002;5002;0;0;0;0;0;0;0
3.600000;12;4968;0.331200;5002;5002;0;0;0;0;0;0;0
3.700000;12;4968;0.331200;5002;5002;0;0;0;0;0;0;0
3.800000;12;4968;0.331200;5002;5002;0;0;0;0;0;0;0
3.900000;12;4968;0.331200;5002;5002;0;0;0;0;0;0;0
4.000000;12;4968;0.331200;5002;5002;0;0;0;0;0;0;0
4.100000;12;4968;0.331200;5002;5002;0;0;0;0;0;0;0
4.200000;12;4968;0.331200;5002;5002;0;0;0;0;0;0;0
4.300000;12;4968;0.331200;5002;5002;0;0;0;0;0;0;0
4.400000;12;4968;0.331200;5002;5002;0;0;0;0;0;0;0
4.500000;12;4968;0.331200;5002;5002;0;0;0;0;0;0;0
4.600000;12;4968;0.331200;5002;5002;0;0;0;0;0;0;0
4.700000;12;4968;0.331200;5002;5002;0;0;0;0;0;0;0
4.800000;12;4968;0.331200;5002;5002;0;0;0;0;0;0;0
4.900000;12;4968;0.331200;5002;5002;0;0;0;0;0;0;0
5.000000;12;4968;0.331200;5001;5002;0;0;0;0;0;0;0
5.100000;12;4968;0.331200;4999;5002;0;0;0;0;0;0;0
5.200000;12;4968;0.331200;4980;5002;0;0;0;0;0;0;0
5.300000;12;4968;0.331200;4909;5002;0;0;0;0;0;0;0
5.400000;12;4968;0.331200;4655;5002;0;0;0;0;0;0;0
5.500000;12;4968;0.331200;4022;5002;0;0;0;0;0;0;0
5.600000;12;4968;0.331200;3049;5002;0;0;0;0;0;0;0
5.700000;12;4968;0.331200;1912;5002;0;0;0;0;0;0;0
5.800000;12;4968;0.331200;1063;5002;0;0;0;0;0;0;0
5.900000;12;4968;0.331200;843;10000;0;0;0;0;0;0;0
6.000000;12;4968;0.331200;310;10000;0;0;0;0;0;0;0
6.100000;12;4968;0.331200;86;10000;0;0;0;0;0;0;0
SNR; MCS; TBS; rate; err0; trials0; err1; trials1; err2; trials2; err3; trials3; dci_err
4.000000;13;5736;0.382400;5002;5002;0;0;0;0;0;0;0
4.100000;13;5736;0.382400;5002;5002;0;0;0;0;0;0;0
4.200000;13;5736;0.382400;5002;5002;0;0;0;0;0;0;0
4.300000;13;5736;0.382400;5002;5002;0;0;0;0;0;0;0
4.400000;13;5736;0.382400;5002;5002;0;0;0;0;0;0;0
4.500000;13;5736;0.382400;5002;5002;0;0;0;0;0;0;0
4.600000;13;5736;0.382400;5002;5002;0;0;0;0;0;0;0
4.700000;13;5736;0.382400;5002;5002;0;0;0;0;0;0;0
4.800000;13;5736;0.382400;5002;5002;0;0;0;0;0;0;0
4.900000;13;5736;0.382400;5002;5002;0;0;0;0;0;0;0
5.000000;13;5736;0.382400;5002;5002;0;0;0;0;0;0;0
5.100000;13;5736;0.382400;5002;5002;0;0;0;0;0;0;0
5.200000;13;5736;0.382400;5002;5002;0;0;0;0;0;0;0
5.300000;13;5736;0.382400;5002;5002;0;0;0;0;0;0;0
5.400000;13;5736;0.382400;5002;5002;0;0;0;0;0;0;0
5.500000;13;5736;0.382400;5002;5002;0;0;0;0;0;0;0
5.600000;13;5736;0.382400;5002;5002;0;0;0;0;0;0;0
5.700000;13;5736;0.382400;5002;5002;0;0;0;0;0;0;0
5.800000;13;5736;0.382400;5002;5002;0;0;0;0;0;0;0
5.900000;13;5736;0.382400;5002;5002;0;0;0;0;0;0;0
6.000000;13;5736;0.382400;5000;5002;0;0;0;0;0;0;0
6.100000;13;5736;0.382400;4991;5002;0;0;0;0;0;0;0
6.200000;13;5736;0.382400;4940;5002;0;0;0;0;0;0;0
6.300000;13;5736;0.382400;4741;5002;0;0;0;0;0;0;0
6.400000;13;5736;0.382400;4192;5002;0;0;0;0;0;0;0
6.500000;13;5736;0.382400;3241;5002;0;0;0;0;0;0;0
6.600000;13;5736;0.382400;2133;5002;0;0;0;0;0;0;0
6.700000;13;5736;0.382400;1057;5002;0;0;0;0;0;0;0
6.800000;13;5736;0.382400;889;10000;0;0;0;0;0;0;0
6.900000;13;5736;0.382400;311;10000;0;0;0;0;0;0;0
7.000000;13;5736;0.382400;87;10000;0;0;0;0;0;0;0
SNR; MCS; TBS; rate; err0; trials0; err1; trials1; err2; trials2; err3; trials3; dci_err
5.000000;14;6456;0.430400;5002;5002;0;0;0;0;0;0;0
5.100000;14;6456;0.430400;5002;5002;0;0;0;0;0;0;0
5.200000;14;6456;0.430400;5002;5002;0;0;0;0;0;0;0
5.300000;14;6456;0.430400;5002;5002;0;0;0;0;0;0;0
5.400000;14;6456;0.430400;5002;5002;0;0;0;0;0;0;0
5.500000;14;6456;0.430400;5002;5002;0;0;0;0;0;0;0
5.600000;14;6456;0.430400;5002;5002;0;0;0;0;0;0;0
5.700000;14;6456;0.430400;5002;5002;0;0;0;0;0;0;0
5.800000;14;6456;0.430400;5002;5002;0;0;0;0;0;0;0
5.900000;14;6456;0.430400;5002;5002;0;0;0;0;0;0;0
6.000000;14;6456;0.430400;5002;5002;0;0;0;0;0;0;0
6.100000;14;6456;0.430400;5002;5002;0;0;0;0;0;0;0
6.200000;14;6456;0.430400;5002;5002;0;0;0;0;0;0;0
6.300000;14;6456;0.430400;5002;5002;0;0;0;0;0;0;0
6.400000;14;6456;0.430400;5002;5002;0;0;0;0;0;0;0
6.500000;14;6456;0.430400;5002;5002;0;0;0;0;0;0;0
6.600000;14;6456;0.430400;5002;5002;0;0;0;0;0;0;0
6.700000;14;6456;0.430400;5002;5002;0;0;0;0;0;0;0
6.800000;14;6456;0.430400;5002;5002;0;0;0;0;0;0;0
6.900000;14;6456;0.430400;5001;5002;0;0;0;0;0;0;0
7.000000;14;6456;0.430400;4994;5002;0;0;0;0;0;0;0
7.100000;14;6456;0.430400;4958;5002;0;0;0;0;0;0;0
7.200000;14;6456;0.430400;4813;5002;0;0;0;0;0;0;0
7.300000;14;6456;0.430400;4460;5002;0;0;0;0;0;0;0
7.400000;14;6456;0.430400;3755;5002;0;0;0;0;0;0;0
7.500000;14;6456;0.430400;2907;5002;0;0;0;0;0;0;0
7.600000;14;6456;0.430400;1964;5002;0;0;0;0;0;0;0
7.700000;14;6456;0.430400;1264;5002;0;0;0;0;0;0;0
7.800000;14;6456;0.430400;1000;6588;0;0;0;0;0;0;0
7.900000;14;6456;0.430400;998;10000;0;0;0;0;0;0;0
8.000000;14;6456;0.430400;712;10000;0;0;0;0;0;0;0
8.100000;14;6456;0.430400;588;10000;0;0;0;0;0;0;0
8.200000;14;6456;0.430400;548;10000;0;0;0;0;0;0;0
8.300000;14;6456;0.430400;548;10000;0;0;0;0;0;0;0
8.400000;14;6456;0.430400;442;10000;0;0;0;0;0;0;0
8.500000;14;6456;0.430400;420;10000;0;0;0;0;0;0;0
8.600000;14;6456;0.430400;395;10000;0;0;0;0;0;0;0
8.700000;14;6456;0.430400;361;10000;0;0;0;0;0;0;0
8.800000;14;6456;0.430400;334;10000;0;0;0;0;0;0;0
8.900000;14;6456;0.430400;310;10000;0;0;0;0;0;0;0
9.000000;14;6456;0.430400;306;10000;0;0;0;0;0;0;0
9.100000;14;6456;0.430400;302;10000;0;0;0;0;0;0;0
9.200000;14;6456;0.430400;280;10000;0;0;0;0;0;0;0
9.300000;14;6456;0.430400;270;10000;0;0;0;0;0;0;0
9.400000;14;6456;0.430400;254;10000;0;0;0;0;0;0;0
9.500000;14;6456;0.430400;259;10000;0;0;0;0;0;0;0
9.600000;14;6456;0.430400;247;10000;0;0;0;0;0;0;0
9.700000;14;6456;0.430400;228;10000;0;0;0;0;0;0;0
9.800000;14;6456;0.430400;208;10000;0;0;0;0;0;0;0
9.900000;14;6456;0.430400;211;10000;0;0;0;0;0;0;0
10.000000;14;6456;0.430400;190;10000;0;0;0;0;0;0;0
10.100000;14;6456;0.430400;182;10000;0;0;0;0;0;0;0
10.200000;14;6456;0.430400;175;10000;0;0;0;0;0;0;0
10.300000;14;6456;0.430400;137;10000;0;0;0;0;0;0;0
10.400000;14;6456;0.430400;161;10000;0;0;0;0;0;0;0
10.500000;14;6456;0.430400;142;10000;0;0;0;0;0;0;0
10.600000;14;6456;0.430400;133;10000;0;0;0;0;0;0;0
10.700000;14;6456;0.430400;119;10000;0;0;0;0;0;0;0
10.800000;14;6456;0.430400;107;10000;0;0;0;0;0;0;0
10.900000;14;6456;0.430400;80;10000;0;0;0;0;0;0;0
SNR; MCS; TBS; rate; err0; trials0; err1; trials1; err2; trials2; err3; trials3; dci_err
6.000000;15;7224;0.481600;5002;5002;0;0;0;0;0;0;0
6.100000;15;7224;0.481600;5002;5002;0;0;0;0;0;0;0
6.200000;15;7224;0.481600;5002;5002;0;0;0;0;0;0;0
6.300000;15;7224;0.481600;5002;5002;0;0;0;0;0;0;0
6.400000;15;7224;0.481600;5002;5002;0;0;0;0;0;0;0
6.500000;15;7224;0.481600;5002;5002;0;0;0;0;0;0;0
6.600000;15;7224;0.481600;5002;5002;0;0;0;0;0;0;0
6.700000;15;7224;0.481600;5002;5002;0;0;0;0;0;0;0
6.800000;15;7224;0.481600;5002;5002;0;0;0;0;0;0;0
6.900000;15;7224;0.481600;5002;5002;0;0;0;0;0;0;0
7.000000;15;7224;0.481600;5002;5002;0;0;0;0;0;0;0
7.100000;15;7224;0.481600;5002;5002;0;0;0;0;0;0;0
7.200000;15;7224;0.481600;5002;5002;0;0;0;0;0;0;0
7.300000;15;7224;0.481600;5002;5002;0;0;0;0;0;0;0
7.400000;15;7224;0.481600;5002;5002;0;0;0;0;0;0;0
7.500000;15;7224;0.481600;5002;5002;0;0;0;0;0;0;0
7.600000;15;7224;0.481600;5002;5002;0;0;0;0;0;0;0
7.700000;15;7224;0.481600;4999;5002;0;0;0;0;0;0;0
7.800000;15;7224;0.481600;4985;5002;0;0;0;0;0;0;0
7.900000;15;7224;0.481600;4898;5002;0;0;0;0;0;0;0
8.000000;15;7224;0.481600;4612;5002;0;0;0;0;0;0;0
8.100000;15;7224;0.481600;4067;5002;0;0;0;0;0;0;0
8.200000;15;7224;0.481600;3175;5002;0;0;0;0;0;0;0
8.300000;15;7224;0.481600;2186;5002;0;0;0;0;0;0;0
8.400000;15;7224;0.481600;1363;5002;0;0;0;0;0;0;0
8.500000;15;7224;0.481600;1000;6598;0;0;0;0;0;0;0
8.600000;15;7224;0.481600;913;10000;0;0;0;0;0;0;0
8.700000;15;7224;0.481600;582;10000;0;0;0;0;0;0;0
8.800000;15;7224;0.481600;437;10000;0;0;0;0;0;0;0
8.900000;15;7224;0.481600;369;10000;0;0;0;0;0;0;0
9.000000;15;7224;0.481600;355;10000;0;0;0;0;0;0;0
9.100000;15;7224;0.481600;293;10000;0;0;0;0;0;0;0
9.200000;15;7224;0.481600;288;10000;0;0;0;0;0;0;0
9.300000;15;7224;0.481600;274;10000;0;0;0;0;0;0;0
9.400000;15;7224;0.481600;266;10000;0;0;0;0;0;0;0
9.500000;15;7224;0.481600;231;10000;0;0;0;0;0;0;0
9.600000;15;7224;0.481600;178;10000;0;0;0;0;0;0;0
9.700000;15;7224;0.481600;186;10000;0;0;0;0;0;0;0
9.800000;15;7224;0.481600;151;10000;0;0;0;0;0;0;0
9.900000;15;7224;0.481600;190;10000;0;0;0;0;0;0;0
10.000000;15;7224;0.481600;122;10000;0;0;0;0;0;0;0
10.100000;15;7224;0.481600;158;10000;0;0;0;0;0;0;0
10.200000;15;7224;0.481600;131;10000;0;0;0;0;0;0;0
10.300000;15;7224;0.481600;125;10000;0;0;0;0;0;0;0
10.400000;15;7224;0.481600;125;10000;0;0;0;0;0;0;0
10.500000;15;7224;0.481600;106;10000;0;0;0;0;0;0;0
10.600000;15;7224;0.481600;88;10000;0;0;0;0;0;0;0
SNR; MCS; TBS; rate; err0; trials0; err1; trials1; err2; trials2; err3; trials3; dci_err
5.000000;16;7736;0.515733;5002;5002;0;0;0;0;0;0;0
5.100000;16;7736;0.515733;5002;5002;0;0;0;0;0;0;0
5.200000;16;7736;0.515733;5002;5002;0;0;0;0;0;0;0
5.300000;16;7736;0.515733;5002;5002;0;0;0;0;0;0;0
5.400000;16;7736;0.515733;5002;5002;0;0;0;0;0;0;0
5.500000;16;7736;0.515733;5002;5002;0;0;0;0;0;0;0
5.600000;16;7736;0.515733;5002;5002;0;0;0;0;0;0;0
5.700000;16;7736;0.515733;5002;5002;0;0;0;0;0;0;0
5.800000;16;7736;0.515733;5002;5002;0;0;0;0;0;0;0
5.900000;16;7736;0.515733;5002;5002;0;0;0;0;0;0;0
6.000000;16;7736;0.515733;5002;5002;0;0;0;0;0;0;0
6.100000;16;7736;0.515733;5002;5002;0;0;0;0;0;0;0
6.200000;16;7736;0.515733;5002;5002;0;0;0;0;0;0;0
6.300000;16;7736;0.515733;5002;5002;0;0;0;0;0;0;0
6.400000;16;7736;0.515733;5002;5002;0;0;0;0;0;0;0
6.500000;16;7736;0.515733;5002;5002;0;0;0;0;0;0;0
6.600000;16;7736;0.515733;5002;5002;0;0;0;0;0;0;0
6.700000;16;7736;0.515733;5002;5002;0;0;0;0;0;0;0
6.800000;16;7736;0.515733;5002;5002;0;0;0;0;0;0;0
6.900000;16;7736;0.515733;5002;5002;0;0;0;0;0;0;0
7.000000;16;7736;0.515733;5002;5002;0;0;0;0;0;0;0
7.100000;16;7736;0.515733;5002;5002;0;0;0;0;0;0;0
7.200000;16;7736;0.515733;5002;5002;0;0;0;0;0;0;0
7.300000;16;7736;0.515733;5002;5002;0;0;0;0;0;0;0
7.400000;16;7736;0.515733;5002;5002;0;0;0;0;0;0;0
7.500000;16;7736;0.515733;5002;5002;0;0;0;0;0;0;0
7.600000;16;7736;0.515733;5002;5002;0;0;0;0;0;0;0
7.700000;16;7736;0.515733;5002;5002;0;0;0;0;0;0;0
7.800000;16;7736;0.515733;5002;5002;0;0;0;0;0;0;0
7.900000;16;7736;0.515733;5002;5002;0;0;0;0;0;0;0
8.000000;16;7736;0.515733;5002;5002;0;0;0;0;0;0;0
8.100000;16;7736;0.515733;5002;5002;0;0;0;0;0;0;0
8.200000;16;7736;0.515733;5000;5002;0;0;0;0;0;0;0
8.300000;16;7736;0.515733;4992;5002;0;0;0;0;0;0;0
8.400000;16;7736;0.515733;4936;5002;0;0;0;0;0;0;0
8.500000;16;7736;0.515733;4730;5002;0;0;0;0;0;0;0
8.600000;16;7736;0.515733;4205;5002;0;0;0;0;0;0;0
8.700000;16;7736;0.515733;3357;5002;0;0;0;0;0;0;0
8.800000;16;7736;0.515733;2255;5002;0;0;0;0;0;0;0
8.900000;16;7736;0.515733;1374;5002;0;0;0;0;0;0;0
9.000000;16;7736;0.515733;1000;7260;0;0;0;0;0;0;0
9.100000;16;7736;0.515733;690;10000;0;0;0;0;0;0;0
9.200000;16;7736;0.515733;354;10000;0;0;0;0;0;0;0
9.300000;16;7736;0.515733;214;10000;0;0;0;0;0;0;0
9.400000;16;7736;0.515733;127;10000;0;0;0;0;0;0;0
9.500000;16;7736;0.515733;138;10000;0;0;0;0;0;0;0
9.600000;16;7736;0.515733;105;10000;0;0;0;0;0;0;0
9.700000;16;7736;0.515733;108;10000;0;0;0;0;0;0;0
9.800000;16;7736;0.515733;93;10000;0;0;0;0;0;0;0
SNR; MCS; TBS; rate; err0; trials0; err1; trials1; err2; trials2; err3; trials3; dci_err
6.000000;17;7736;0.343822;5002;5002;0;0;0;0;0;0;0
6.100000;17;7736;0.343822;5002;5002;0;0;0;0;0;0;0
6.200000;17;7736;0.343822;5002;5002;0;0;0;0;0;0;0
6.300000;17;7736;0.343822;5002;5002;0;0;0;0;0;0;0
6.400000;17;7736;0.343822;5002;5002;0;0;0;0;0;0;0
6.500000;17;7736;0.343822;5002;5002;0;0;0;0;0;0;0
6.600000;17;7736;0.343822;5002;5002;0;0;0;0;0;0;0
6.700000;17;7736;0.343822;5002;5002;0;0;0;0;0;0;0
6.800000;17;7736;0.343822;5002;5002;0;0;0;0;0;0;0
6.900000;17;7736;0.343822;5002;5002;0;0;0;0;0;0;0
7.000000;17;7736;0.343822;5002;5002;0;0;0;0;0;0;0
7.100000;17;7736;0.343822;5002;5002;0;0;0;0;0;0;0
7.200000;17;7736;0.343822;5002;5002;0;0;0;0;0;0;0
7.300000;17;7736;0.343822;5002;5002;0;0;0;0;0;0;0
7.400000;17;7736;0.343822;5002;5002;0;0;0;0;0;0;0
7.500000;17;7736;0.343822;5002;5002;0;0;0;0;0;0;0
7.600000;17;7736;0.343822;5002;5002;0;0;0;0;0;0;0
7.700000;17;7736;0.343822;5002;5002;0;0;0;0;0;0;0
7.800000;17;7736;0.343822;5002;5002;0;0;0;0;0;0;0
7.900000;17;7736;0.343822;5002;5002;0;0;0;0;0;0;0
8.000000;17;7736;0.343822;5002;5002;0;0;0;0;0;0;0
8.100000;17;7736;0.343822;5002;5002;0;0;0;0;0;0;0
8.200000;17;7736;0.343822;5002;5002;0;0;0;0;0;0;0
8.300000;17;7736;0.343822;5002;5002;0;0;0;0;0;0;0
8.400000;17;7736;0.343822;5002;5002;0;0;0;0;0;0;0
8.500000;17;7736;0.343822;5002;5002;0;0;0;0;0;0;0
8.600000;17;7736;0.343822;5002;5002;0;0;0;0;0;0;0
8.700000;17;7736;0.343822;5002;5002;0;0;0;0;0;0;0
8.800000;17;7736;0.343822;5002;5002;0;0;0;0;0;0;0
8.900000;17;7736;0.343822;5002;5002;0;0;0;0;0;0;0
9.000000;17;7736;0.343822;5002;5002;0;0;0;0;0;0;0
9.100000;17;7736;0.343822;5002;5002;0;0;0;0;0;0;0
9.200000;17;7736;0.343822;5002;5002;0;0;0;0;0;0;0
9.300000;17;7736;0.343822;5002;5002;0;0;0;0;0;0;0
9.400000;17;7736;0.343822;4987;5002;0;0;0;0;0;0;0
9.500000;17;7736;0.343822;4939;5002;0;0;0;0;0;0;0
9.600000;17;7736;0.343822;4707;5002;0;0;0;0;0;0;0
9.700000;17;7736;0.343822;4220;5002;0;0;0;0;0;0;0
9.800000;17;7736;0.343822;3337;5002;0;0;0;0;0;0;0
9.900000;17;7736;0.343822;2314;5002;0;0;0;0;0;0;0
10.000000;17;7736;0.343822;1353;5002;0;0;0;0;0;0;0
10.100000;17;7736;0.343822;1000;6908;0;0;0;0;0;0;0
10.200000;17;7736;0.343822;781;10000;0;0;0;0;0;0;0
10.300000;17;7736;0.343822;417;10000;0;0;0;0;0;0;0
10.400000;17;7736;0.343822;288;10000;0;0;0;0;0;0;0
10.500000;17;7736;0.343822;209;10000;0;0;0;0;0;0;0
10.600000;17;7736;0.343822;195;10000;0;0;0;0;0;0;0
10.700000;17;7736;0.343822;158;10000;0;0;0;0;0;0;0
10.800000;17;7736;0.343822;203;10000;0;0;0;0;0;0;0
10.900000;17;7736;0.343822;161;10000;0;0;0;0;0;0;0
11.000000;17;7736;0.343822;119;10000;0;0;0;0;0;0;0
11.100000;17;7736;0.343822;138;10000;0;0;0;0;0;0;0
11.200000;17;7736;0.343822;124;10000;0;0;0;0;0;0;0
11.300000;17;7736;0.343822;94;10000;0;0;0;0;0;0;0
SNR; MCS; TBS; rate; err0; trials0; err1; trials1; err2; trials2; err3; trials3; dci_err
7.000000;18;7992;0.355200;5002;5002;0;0;0;0;0;0;0
7.100000;18;7992;0.355200;5002;5002;0;0;0;0;0;0;0
7.200000;18;7992;0.355200;5002;5002;0;0;0;0;0;0;0
7.300000;18;7992;0.355200;5002;5002;0;0;0;0;0;0;0
7.400000;18;7992;0.355200;5002;5002;0;0;0;0;0;0;0
7.500000;18;7992;0.355200;5002;5002;0;0;0;0;0;0;0
7.600000;18;7992;0.355200;5002;5002;0;0;0;0;0;0;0
7.700000;18;7992;0.355200;5002;5002;0;0;0;0;0;0;0
7.800000;18;7992;0.355200;5002;5002;0;0;0;0;0;0;0
7.900000;18;7992;0.355200;5002;5002;0;0;0;0;0;0;0
8.000000;18;7992;0.355200;5002;5002;0;0;0;0;0;0;0
8.100000;18;7992;0.355200;5002;5002;0;0;0;0;0;0;0
8.200000;18;7992;0.355200;5002;5002;0;0;0;0;0;0;0
8.300000;18;7992;0.355200;5002;5002;0;0;0;0;0;0;0
8.400000;18;7992;0.355200;5002;5002;0;0;0;0;0;0;0
8.500000;18;7992;0.355200;5002;5002;0;0;0;0;0;0;0
8.600000;18;7992;0.355200;5002;5002;0;0;0;0;0;0;0
8.700000;18;7992;0.355200;5002;5002;0;0;0;0;0;0;0
8.800000;18;7992;0.355200;5002;5002;0;0;0;0;0;0;0
8.900000;18;7992;0.355200;5002;5002;0;0;0;0;0;0;0
9.000000;18;7992;0.355200;5002;5002;0;0;0;0;0;0;0
9.100000;18;7992;0.355200;5002;5002;0;0;0;0;0;0;0
9.200000;18;7992;0.355200;5002;5002;0;0;0;0;0;0;0
9.300000;18;7992;0.355200;5002;5002;0;0;0;0;0;0;0
9.400000;18;7992;0.355200;5002;5002;0;0;0;0;0;0;0
9.500000;18;7992;0.355200;5001;5002;0;0;0;0;0;0;0
9.600000;18;7992;0.355200;4983;5002;0;0;0;0;0;0;0
9.700000;18;7992;0.355200;4928;5002;0;0;0;0;0;0;0
9.800000;18;7992;0.355200;4709;5002;0;0;0;0;0;0;0
9.900000;18;7992;0.355200;4200;5002;0;0;0;0;0;0;0
10.000000;18;7992;0.355200;3257;5002;0;0;0;0;0;0;0
10.100000;18;7992;0.355200;2195;5002;0;0;0;0;0;0;0
10.200000;18;7992;0.355200;1197;5002;0;0;0;0;0;0;0
10.300000;18;7992;0.355200;1000;8488;0;0;0;0;0;0;0
10.400000;18;7992;0.355200;533;10000;0;0;0;0;0;0;0
10.500000;18;7992;0.355200;185;10000;0;0;0;0;0;0;0
10.600000;18;7992;0.355200;61;10000;0;0;0;0;0;0;0
SNR; MCS; TBS; rate; err0; trials0; err1; trials1; err2; trials2; err3; trials3; dci_err
8.000000;19;9144;0.406400;5002;5002;0;0;0;0;0;0;0
8.100000;19;9144;0.406400;5002;5002;0;0;0;0;0;0;0
8.200000;19;9144;0.406400;5002;5002;0;0;0;0;0;0;0
8.300000;19;9144;0.406400;5002;5002;0;0;0;0;0;0;0
8.400000;19;9144;0.406400;5002;5002;0;0;0;0;0;0;0
8.500000;19;9144;0.406400;5002;5002;0;0;0;0;0;0;0
8.600000;19;9144;0.406400;5002;5002;0;0;0;0;0;0;0
8.700000;19;9144;0.406400;5002;5002;0;0;0;0;0;0;0
8.800000;19;9144;0.406400;5002;5002;0;0;0;0;0;0;0
8.900000;19;9144;0.406400;5002;5002;0;0;0;0;0;0;0
9.000000;19;9144;0.406400;5002;5002;0;0;0;0;0;0;0
9.100000;19;9144;0.406400;5002;5002;0;0;0;0;0;0;0
9.200000;19;9144;0.406400;5002;5002;0;0;0;0;0;0;0
9.300000;19;9144;0.406400;5002;5002;0;0;0;0;0;0;0
9.400000;19;9144;0.406400;5002;5002;0;0;0;0;0;0;0
9.500000;19;9144;0.406400;5002;5002;0;0;0;0;0;0;0
9.600000;19;9144;0.406400;5002;5002;0;0;0;0;0;0;0
9.700000;19;9144;0.406400;5002;5002;0;0;0;0;0;0;0
9.800000;19;9144;0.406400;5002;5002;0;0;0;0;0;0;0
9.900000;19;9144;0.406400;5002;5002;0;0;0;0;0;0;0
10.000000;19;9144;0.406400;5002;5002;0;0;0;0;0;0;0
10.100000;19;9144;0.406400;5002;5002;0;0;0;0;0;0;0
10.200000;19;9144;0.406400;5002;5002;0;0;0;0;0;0;0
10.300000;19;9144;0.406400;5002;5002;0;0;0;0;0;0;0
10.400000;19;9144;0.406400;5002;5002;0;0;0;0;0;0;0
10.500000;19;9144;0.406400;5002;5002;0;0;0;0;0;0;0
10.600000;19;9144;0.406400;5002;5002;0;0;0;0;0;0;0
10.700000;19;9144;0.406400;5000;5002;0;0;0;0;0;0;0
10.800000;19;9144;0.406400;4992;5002;0;0;0;0;0;0;0
10.900000;19;9144;0.406400;4914;5002;0;0;0;0;0;0;0
11.000000;19;9144;0.406400;4677;5002;0;0;0;0;0;0;0
11.100000;19;9144;0.406400;4127;5002;0;0;0;0;0;0;0
11.200000;19;9144;0.406400;3249;5002;0;0;0;0;0;0;0
11.300000;19;9144;0.406400;2219;5002;0;0;0;0;0;0;0
11.400000;19;9144;0.406400;1276;5002;0;0;0;0;0;0;0
11.500000;19;9144;0.406400;1000;7658;0;0;0;0;0;0;0
11.600000;19;9144;0.406400;597;10000;0;0;0;0;0;0;0
11.700000;19;9144;0.406400;297;10000;0;0;0;0;0;0;0
11.800000;19;9144;0.406400;180;10000;0;0;0;0;0;0;0
11.900000;19;9144;0.406400;115;10000;0;0;0;0;0;0;0
12.000000;19;9144;0.406400;117;10000;0;0;0;0;0;0;0
12.100000;19;9144;0.406400;82;10000;0;0;0;0;0;0;0
SNR; MCS; TBS; rate; err0; trials0; err1; trials1; err2; trials2; err3; trials3; dci_err
-5.000000;2;1096;0.146133;5002;5002;0;0;0;0;0;0;0
-4.900000;2;1096;0.146133;5002;5002;0;0;0;0;0;0;0
-4.800000;2;1096;0.146133;5002;5002;0;0;0;0;0;0;0
-4.700000;2;1096;0.146133;5002;5002;0;0;0;0;0;0;0
-4.600000;2;1096;0.146133;5002;5002;0;0;0;0;0;0;0
-4.500000;2;1096;0.146133;5002;5002;0;0;0;0;0;0;0
-4.400000;2;1096;0.146133;5002;5002;0;0;0;0;0;0;0
-4.300000;2;1096;0.146133;5002;5002;0;0;0;0;0;0;0
-4.200000;2;1096;0.146133;5002;5002;0;0;0;0;0;0;0
-4.100000;2;1096;0.146133;5002;5002;0;0;0;0;0;0;0
-4.000000;2;1096;0.146133;5002;5002;0;0;0;0;0;0;0
-3.900000;2;1096;0.146133;5002;5002;0;0;0;0;0;0;0
-3.800000;2;1096;0.146133;5002;5002;0;0;0;0;0;0;0
-3.700000;2;1096;0.146133;5002;5002;0;0;0;0;0;0;0
-3.600000;2;1096;0.146133;5002;5002;0;0;0;0;0;0;0
-3.500000;2;1096;0.146133;5002;5002;0;0;0;0;0;0;0
-3.400000;2;1096;0.146133;5002;5002;0;0;0;0;0;0;0
-3.300000;2;1096;0.146133;5002;5002;0;0;0;0;0;0;0
-3.200000;2;1096;0.146133;5002;5002;0;0;0;0;0;0;0
-3.100000;2;1096;0.146133;5002;5002;0;0;0;0;0;0;0
-3.000000;2;1096;0.146133;5002;5002;0;0;0;0;0;0;0
-2.900000;2;1096;0.146133;5002;5002;0;0;0;0;0;0;0
-2.800000;2;1096;0.146133;5002;5002;0;0;0;0;0;0;0
-2.700000;2;1096;0.146133;5002;5002;0;0;0;0;0;0;0
-2.600000;2;1096;0.146133;5001;5002;0;0;0;0;0;0;0
-2.500000;2;1096;0.146133;4999;5002;0;0;0;0;0;0;0
-2.400000;2;1096;0.146133;4988;5002;0;0;0;0;0;0;0
-2.300000;2;1096;0.146133;4982;5002;0;0;0;0;0;0;0
-2.200000;2;1096;0.146133;4943;5002;0;0;0;0;0;0;0
-2.100000;2;1096;0.146133;4846;5002;0;0;0;0;0;0;0
-2.000000;2;1096;0.146133;4704;5002;0;0;0;0;0;0;0
-1.900000;2;1096;0.146133;4432;5002;0;0;0;0;0;0;0
-1.800000;2;1096;0.146133;4087;5002;0;0;0;0;0;0;0
-1.700000;2;1096;0.146133;3653;5002;0;0;0;0;0;0;0
-1.600000;2;1096;0.146133;3052;5002;0;0;0;0;0;0;0
-1.500000;2;1096;0.146133;2449;5002;0;0;0;0;0;0;0
-1.400000;2;1096;0.146133;1900;5002;0;0;0;0;0;0;0
-1.300000;2;1096;0.146133;1378;5002;0;0;0;0;0;0;0
-1.200000;2;1096;0.146133;1000;5333;0;0;0;0;0;0;0
-1.100000;2;1096;0.146133;1000;7587;0;0;0;0;0;0;0
-1.000000;2;1096;0.146133;910;10000;0;0;0;0;0;0;0
-0.900000;2;1096;0.146133;703;10000;0;0;0;0;0;0;0
-0.800000;2;1096;0.146133;580;10000;0;0;0;0;0;0;0
-0.700000;2;1096;0.146133;488;10000;0;0;0;0;0;0;0
-0.600000;2;1096;0.146133;429;10000;0;0;0;0;0;0;0
-0.500000;2;1096;0.146133;386;10000;0;0;0;0;0;0;0
-0.400000;2;1096;0.146133;427;10000;0;0;0;0;0;0;0
-0.300000;2;1096;0.146133;371;10000;0;0;0;0;0;0;0
-0.200000;2;1096;0.146133;316;10000;0;0;0;0;0;0;0
-0.100000;2;1096;0.146133;327;10000;0;0;0;0;0;0;0
-0.000000;2;1096;0.146133;322;10000;0;0;0;0;0;0;0
0.100000;2;1096;0.146133;288;10000;0;0;0;0;0;0;0
0.200000;2;1096;0.146133;243;10000;0;0;0;0;0;0;0
0.300000;2;1096;0.146133;246;10000;0;0;0;0;0;0;0
0.400000;2;1096;0.146133;220;10000;0;0;0;0;0;0;0
0.500000;2;1096;0.146133;210;10000;0;0;0;0;0;0;0
0.600000;2;1096;0.146133;190;10000;0;0;0;0;0;0;0
0.700000;2;1096;0.146133;210;10000;0;0;0;0;0;0;0
0.800000;2;1096;0.146133;181;10000;0;0;0;0;0;0;0
0.900000;2;1096;0.146133;167;10000;0;0;0;0;0;0;0
1.000000;2;1096;0.146133;144;10000;0;0;0;0;0;0;0
1.100000;2;1096;0.146133;146;10000;0;0;0;0;0;0;0
1.200000;2;1096;0.146133;112;10000;0;0;0;0;0;0;0
1.300000;2;1096;0.146133;138;10000;0;0;0;0;0;0;0
1.400000;2;1096;0.146133;96;10000;0;0;0;0;0;0;0
SNR; MCS; TBS; rate; err0; trials0; err1; trials1; err2; trials2; err3; trials3; dci_err
9.000000;20;9912;0.440533;5002;5002;0;0;0;0;0;0;0
9.100000;20;9912;0.440533;5002;5002;0;0;0;0;0;0;0
9.200000;20;9912;0.440533;5002;5002;0;0;0;0;0;0;0
9.300000;20;9912;0.440533;5002;5002;0;0;0;0;0;0;0
9.400000;20;9912;0.440533;5002;5002;0;0;0;0;0;0;0
9.500000;20;9912;0.440533;5002;5002;0;0;0;0;0;0;0
9.600000;20;9912;0.440533;5002;5002;0;0;0;0;0;0;0
9.700000;20;9912;0.440533;5002;5002;0;0;0;0;0;0;0
9.800000;20;9912;0.440533;5002;5002;0;0;0;0;0;0;0
9.900000;20;9912;0.440533;5002;5002;0;0;0;0;0;0;0
10.000000;20;9912;0.440533;5002;5002;0;0;0;0;0;0;0
10.100000;20;9912;0.440533;5002;5002;0;0;0;0;0;0;0
10.200000;20;9912;0.440533;5002;5002;0;0;0;0;0;0;0
10.300000;20;9912;0.440533;5002;5002;0;0;0;0;0;0;0
10.400000;20;9912;0.440533;5002;5002;0;0;0;0;0;0;0
10.500000;20;9912;0.440533;5002;5002;0;0;0;0;0;0;0
10.600000;20;9912;0.440533;5002;5002;0;0;0;0;0;0;0
10.700000;20;9912;0.440533;5002;5002;0;0;0;0;0;0;0
10.800000;20;9912;0.440533;5002;5002;0;0;0;0;0;0;0
10.900000;20;9912;0.440533;5002;5002;0;0;0;0;0;0;0
11.000000;20;9912;0.440533;5002;5002;0;0;0;0;0;0;0
11.100000;20;9912;0.440533;5002;5002;0;0;0;0;0;0;0
11.200000;20;9912;0.440533;5002;5002;0;0;0;0;0;0;0
11.300000;20;9912;0.440533;5000;5002;0;0;0;0;0;0;0
11.400000;20;9912;0.440533;4985;5002;0;0;0;0;0;0;0
11.500000;20;9912;0.440533;4905;5002;0;0;0;0;0;0;0
11.600000;20;9912;0.440533;4681;5002;0;0;0;0;0;0;0
11.700000;20;9912;0.440533;4143;5002;0;0;0;0;0;0;0
11.800000;20;9912;0.440533;3197;5002;0;0;0;0;0;0;0
11.900000;20;9912;0.440533;2159;5002;0;0;0;0;0;0;0
12.000000;20;9912;0.440533;1179;5002;0;0;0;0;0;0;0
12.100000;20;9912;0.440533;1000;8312;0;0;0;0;0;0;0
12.200000;20;9912;0.440533;559;10000;0;0;0;0;0;0;0
12.300000;20;9912;0.440533;329;10000;0;0;0;0;0;0;0
12.400000;20;9912;0.440533;215;10000;0;0;0;0;0;0;0
12.500000;20;9912;0.440533;175;10000;0;0;0;0;0;0;0
12.600000;20;9912;0.440533;118;10000;0;0;0;0;0;0;0
12.700000;20;9912;0.440533;124;10000;0;0;0;0;0;0;0
12.800000;20;9912;0.440533;109;10000;0;0;0;0;0;0;0
12.900000;20;9912;0.440533;95;10000;0;0;0;0;0;0;0
SNR; MCS; TBS; rate; err0; trials0; err1; trials1; err2; trials2; err3; trials3; dci_err
10.000000;21;10680;0.474667;5002;5002;0;0;0;0;0;0;0
10.100000;21;10680;0.474667;5002;5002;0;0;0;0;0;0;0
10.200000;21;10680;0.474667;5002;5002;0;0;0;0;0;0;0
10.300000;21;10680;0.474667;5002;5002;0;0;0;0;0;0;0
10.400000;21;10680;0.474667;5002;5002;0;0;0;0;0;0;0
10.500000;21;10680;0.474667;5002;5002;0;0;0;0;0;0;0
10.600000;21;10680;0.474667;5002;5002;0;0;0;0;0;0;0
10.700000;21;10680;0.474667;5002;5002;0;0;0;0;0;0;0
10.800000;21;10680;0.474667;5002;5002;0;0;0;0;0;0;0
10.900000;21;10680;0.474667;5002;5002;0;0;0;0;0;0;0
11.000000;21;10680;0.474667;5002;5002;0;0;0;0;0;0;0
11.100000;21;10680;0.474667;5002;5002;0;0;0;0;0;0;0
11.200000;21;10680;0.474667;5002;5002;0;0;0;0;0;0;0
11.300000;21;10680;0.474667;5002;5002;0;0;0;0;0;0;0
11.400000;21;10680;0.474667;5002;5002;0;0;0;0;0;0;0
11.500000;21;10680;0.474667;5002;5002;0;0;0;0;0;0;0
11.600000;21;10680;0.474667;5002;5002;0;0;0;0;0;0;0
11.700000;21;10680;0.474667;5002;5002;0;0;0;0;0;0;0
11.800000;21;10680;0.474667;5002;5002;0;0;0;0;0;0;0
11.900000;21;10680;0.474667;5002;5002;0;0;0;0;0;0;0
12.000000;21;10680;0.474667;5000;5002;0;0;0;0;0;0;0
12.100000;21;10680;0.474667;4989;5002;0;0;0;0;0;0;0
12.200000;21;10680;0.474667;4935;5002;0;0;0;0;0;0;0
12.300000;21;10680;0.474667;4780;5002;0;0;0;0;0;0;0
12.400000;21;10680;0.474667;4284;5002;0;0;0;0;0;0;0
12.500000;21;10680;0.474667;3477;5002;0;0;0;0;0;0;0
12.600000;21;10680;0.474667;2490;5002;0;0;0;0;0;0;0
12.700000;21;10680;0.474667;1564;5002;0;0;0;0;0;0;0
12.800000;21;10680;0.474667;1000;5635;0;0;0;0;0;0;0
12.900000;21;10680;0.474667;853;10000;0;0;0;0;0;0;0
13.000000;21;10680;0.474667;466;10000;0;0;0;0;0;0;0
13.100000;21;10680;0.474667;273;10000;0;0;0;0;0;0;0
13.200000;21;10680;0.474667;200;10000;0;0;0;0;0;0;0
13.300000;21;10680;0.474667;200;10000;0;0;0;0;0;0;0
13.400000;21;10680;0.474667;142;10000;0;0;0;0;0;0;0
13.500000;21;10680;0.474667;144;10000;0;0;0;0;0;0;0
13.600000;21;10680;0.474667;121;10000;0;0;0;0;0;0;0
13.700000;21;10680;0.474667;101;10000;0;0;0;0;0;0;0
13.800000;21;10680;0.474667;83;10000;0;0;0;0;0;0;0
SNR; MCS; TBS; rate; err0; trials0; err1; trials1; err2; trials2; err3; trials3; dci_err
11.000000;22;11448;0.508800;5002;5002;0;0;0;0;0;0;0
11.100000;22;11448;0.508800;5002;5002;0;0;0;0;0;0;0
11.200000;22;11448;0.508800;5002;5002;0;0;0;0;0;0;0
11.300000;22;11448;0.508800;5002;5002;0;0;0;0;0;0;0
11.400000;22;11448;0.508800;5002;5002;0;0;0;0;0;0;0
11.500000;22;11448;0.508800;5002;5002;0;0;0;0;0;0;0
11.600000;22;11448;0.508800;5002;5002;0;0;0;0;0;0;0
11.700000;22;11448;0.508800;5002;5002;0;0;0;0;0;0;0
11.800000;22;11448;0.508800;5002;5002;0;0;0;0;0;0;0
11.900000;22;11448;0.508800;5002;5002;0;0;0;0;0;0;0
12.000000;22;11448;0.508800;5002;5002;0;0;0;0;0;0;0
12.100000;22;11448;0.508800;5002;5002;0;0;0;0;0;0;0
12.200000;22;11448;0.508800;5002;5002;0;0;0;0;0;0;0
12.300000;22;11448;0.508800;5002;5002;0;0;0;0;0;0;0
12.400000;22;11448;0.508800;5002;5002;0;0;0;0;0;0;0
12.500000;22;11448;0.508800;5001;5002;0;0;0;0;0;0;0
12.600000;22;11448;0.508800;4998;5002;0;0;0;0;0;0;0
12.700000;22;11448;0.508800;4991;5002;0;0;0;0;0;0;0
12.800000;22;11448;0.508800;4926;5002;0;0;0;0;0;0;0
12.900000;22;11448;0.508800;4729;5002;0;0;0;0;0;0;0
13.000000;22;11448;0.508800;4189;5002;0;0;0;0;0;0;0
13.100000;22;11448;0.508800;3307;5002;0;0;0;0;0;0;0
13.200000;22;11448;0.508800;2256;5002;0;0;0;0;0;0;0
13.300000;22;11448;0.508800;1299;5002;0;0;0;0;0;0;0
13.400000;22;11448;0.508800;1000;8110;0;0;0;0;0;0;0
13.500000;22;11448;0.508800;538;10000;0;0;0;0;0;0;0
13.600000;22;11448;0.508800;213;10000;0;0;0;0;0;0;0
13.700000;22;11448;0.508800;63;10000;0;0;0;0;0;0;0
SNR; MCS; TBS; rate; err0; trials0; err1; trials1; err2; trials2; err3; trials3; dci_err
12.000000;23;12576;0.558933;5002;5002;0;0;0;0;0;0;0
12.100000;23;12576;0.558933;5002;5002;0;0;0;0;0;0;0
12.200000;23;12576;0.558933;5002;5002;0;0;0;0;0;0;0
12.300000;23;12576;0.558933;5002;5002;0;0;0;0;0;0;0
12.400000;23;12576;0.558933;5002;5002;0;0;0;0;0;0;0
12.500000;23;12576;0.558933;5002;5002;0;0;0;0;0;0;0
12.600000;23;12576;0.558933;5002;5002;0;0;0;0;0;0;0
12.700000;23;12576;0.558933;5002;5002;0;0;0;0;0;0;0
12.800000;23;12576;0.558933;5002;5002;0;0;0;0;0;0;0
12.900000;23;12576;0.558933;5002;5002;0;0;0;0;0;0;0
13.000000;23;12576;0.558933;5002;5002;0;0;0;0;0;0;0
13.100000;23;12576;0.558933;5002;5002;0;0;0;0;0;0;0
13.200000;23;12576;0.558933;5002;5002;0;0;0;0;0;0;0
13.300000;23;12576;0.558933;5002;5002;0;0;0;0;0;0;0
13.400000;23;12576;0.558933;5002;5002;0;0;0;0;0;0;0
13.500000;23;12576;0.558933;5002;5002;0;0;0;0;0;0;0
13.600000;23;12576;0.558933;5002;5002;0;0;0;0;0;0;0
13.700000;23;12576;0.558933;5001;5002;0;0;0;0;0;0;0
13.800000;23;12576;0.558933;4986;5002;0;0;0;0;0;0;0
13.900000;23;12576;0.558933;4946;5002;0;0;0;0;0;0;0
14.000000;23;12576;0.558933;4715;5002;0;0;0;0;0;0;0
14.100000;23;12576;0.558933;4207;5002;0;0;0;0;0;0;0
14.200000;23;12576;0.558933;3458;5002;0;0;0;0;0;0;0
14.300000;23;12576;0.558933;2467;5002;0;0;0;0;0;0;0
14.400000;23;12576;0.558933;1564;5002;0;0;0;0;0;0;0
14.500000;23;12576;0.558933;1000;6038;0;0;0;0;0;0;0
14.600000;23;12576;0.558933;824;10000;0;0;0;0;0;0;0
14.700000;23;12576;0.558933;395;10000;0;0;0;0;0;0;0
14.800000;23;12576;0.558933;153;10000;0;0;0;0;0;0;0
14.900000;23;12576;0.558933;68;10000;0;0;0;0;0;0;0
SNR; MCS; TBS; rate; err0; trials0; err1; trials1; err2; trials2; err3; trials3; dci_err
13.000000;24;13536;0.601600;5002;5002;0;0;0;0;0;0;0
13.100000;24;13536;0.601600;5002;5002;0;0;0;0;0;0;0
13.200000;24;13536;0.601600;5002;5002;0;0;0;0;0;0;0
13.300000;24;13536;0.601600;5002;5002;0;0;0;0;0;0;0
13.400000;24;13536;0.601600;5002;5002;0;0;0;0;0;0;0
13.500000;24;13536;0.601600;5002;5002;0;0;0;0;0;0;0
13.600000;24;13536;0.601600;5002;5002;0;0;0;0;0;0;0
13.700000;24;13536;0.601600;5002;5002;0;0;0;0;0;0;0
13.800000;24;13536;0.601600;5002;5002;0;0;0;0;0;0;0
13.900000;24;13536;0.601600;5002;5002;0;0;0;0;0;0;0
14.000000;24;13536;0.601600;5002;5002;0;0;0;0;0;0;0
14.100000;24;13536;0.601600;5002;5002;0;0;0;0;0;0;0
14.200000;24;13536;0.601600;5002;5002;0;0;0;0;0;0;0
14.300000;24;13536;0.601600;5002;5002;0;0;0;0;0;0;0
14.400000;24;13536;0.601600;5002;5002;0;0;0;0;0;0;0
14.500000;24;13536;0.601600;4997;5002;0;0;0;0;0;0;0
14.600000;24;13536;0.601600;4976;5002;0;0;0;0;0;0;0
14.700000;24;13536;0.601600;4858;5002;0;0;0;0;0;0;0
14.800000;24;13536;0.601600;4525;5002;0;0;0;0;0;0;0
14.900000;24;13536;0.601600;3912;5002;0;0;0;0;0;0;0
15.000000;24;13536;0.601600;2863;5002;0;0;0;0;0;0;0
15.100000;24;13536;0.601600;1938;5002;0;0;0;0;0;0;0
15.200000;24;13536;0.601600;1156;5002;0;0;0;0;0;0;0
15.300000;24;13536;0.601600;1000;8723;0;0;0;0;0;0;0
15.400000;24;13536;0.601600;524;10000;0;0;0;0;0;0;0
15.500000;24;13536;0.601600;255;10000;0;0;0;0;0;0;0
15.600000;24;13536;0.601600;100;10000;0;0;0;0;0;0;0
15.700000;24;13536;0.601600;66;10000;0;0;0;0;0;0;0
SNR; MCS; TBS; rate; err0; trials0; err1; trials1; err2; trials2; err3; trials3; dci_err
14.000000;25;14112;0.627200;5002;5002;0;0;0;0;0;0;0
14.100000;25;14112;0.627200;5002;5002;0;0;0;0;0;0;0
14.200000;25;14112;0.627200;5002;5002;0;0;0;0;0;0;0
14.300000;25;14112;0.627200;5002;5002;0;0;0;0;0;0;0
14.400000;25;14112;0.627200;5002;5002;0;0;0;0;0;0;0
14.500000;25;14112;0.627200;5002;5002;0;0;0;0;0;0;0
14.600000;25;14112;0.627200;5002;5002;0;0;0;0;0;0;0
14.700000;25;14112;0.627200;5002;5002;0;0;0;0;0;0;0
14.800000;25;14112;0.627200;5002;5002;0;0;0;0;0;0;0
14.900000;25;14112;0.627200;5002;5002;0;0;0;0;0;0;0
15.000000;25;14112;0.627200;5001;5002;0;0;0;0;0;0;0
15.100000;25;14112;0.627200;5000;5002;0;0;0;0;0;0;0
15.200000;25;14112;0.627200;4973;5002;0;0;0;0;0;0;0
15.300000;25;14112;0.627200;4871;5002;0;0;0;0;0;0;0
15.400000;25;14112;0.627200;4599;5002;0;0;0;0;0;0;0
15.500000;25;14112;0.627200;3924;5002;0;0;0;0;0;0;0
15.600000;25;14112;0.627200;3115;5002;0;0;0;0;0;0;0
15.700000;25;14112;0.627200;2107;5002;0;0;0;0;0;0;0
15.800000;25;14112;0.627200;1274;5002;0;0;0;0;0;0;0
15.900000;25;14112;0.627200;1000;7614;0;0;0;0;0;0;0
16.000000;25;14112;0.627200;699;10000;0;0;0;0;0;0;0
16.100000;25;14112;0.627200;296;10000;0;0;0;0;0;0;0
16.200000;25;14112;0.627200;146;10000;0;0;0;0;0;0;0
16.300000;25;14112;0.627200;77;10000;0;0;0;0;0;0;0
SNR; MCS; TBS; rate; err0; trials0; err1; trials1; err2; trials2; err3; trials3; dci_err
15.000000;26;15264;0.678400;5002;5002;0;0;0;0;0;0;0
15.100000;26;15264;0.678400;5002;5002;0;0;0;0;0;0;0
15.200000;26;15264;0.678400;5002;5002;0;0;0;0;0;0;0
15.300000;26;15264;0.678400;5002;5002;0;0;0;0;0;0;0
15.400000;26;15264;0.678400;5002;5002;0;0;0;0;0;0;0
15.500000;26;15264;0.678400;5002;5002;0;0;0;0;0;0;0
15.600000;26;15264;0.678400;5002;5002;0;0;0;0;0;0;0
15.700000;26;15264;0.678400;5002;5002;0;0;0;0;0;0;0
15.800000;26;15264;0.678400;5002;5002;0;0;0;0;0;0;0
15.900000;26;15264;0.678400;5002;5002;0;0;0;0;0;0;0
16.000000;26;15264;0.678400;5000;5002;0;0;0;0;0;0;0
16.100000;26;15264;0.678400;4975;5002;0;0;0;0;0;0;0
16.200000;26;15264;0.678400;4911;5002;0;0;0;0;0;0;0
16.300000;26;15264;0.678400;4635;5002;0;0;0;0;0;0;0
16.400000;26;15264;0.678400;4057;5002;0;0;0;0;0;0;0
16.500000;26;15264;0.678400;3231;5002;0;0;0;0;0;0;0
16.600000;26;15264;0.678400;2244;5002;0;0;0;0;0;0;0
16.700000;26;15264;0.678400;1336;5002;0;0;0;0;0;0;0
16.800000;26;15264;0.678400;1000;6596;0;0;0;0;0;0;0
16.900000;26;15264;0.678400;724;10000;0;0;0;0;0;0;0
17.000000;26;15264;0.678400;340;10000;0;0;0;0;0;0;0
17.100000;26;15264;0.678400;142;10000;0;0;0;0;0;0;0
17.200000;26;15264;0.678400;63;10000;0;0;0;0;0;0;0
SNR; MCS; TBS; rate; err0; trials0; err1; trials1; err2; trials2; err3; trials3; dci_err
16.000000;27;15840;0.704000;5002;5002;0;0;0;0;0;0;0
16.100000;27;15840;0.704000;5002;5002;0;0;0;0;0;0;0
16.200000;27;15840;0.704000;5002;5002;0;0;0;0;0;0;0
16.300000;27;15840;0.704000;5002;5002;0;0;0;0;0;0;0
16.400000;27;15840;0.704000;4999;5002;0;0;0;0;0;0;0
16.500000;27;15840;0.704000;4981;5002;0;0;0;0;0;0;0
16.600000;27;15840;0.704000;4887;5002;0;0;0;0;0;0;0
16.700000;27;15840;0.704000;4688;5002;0;0;0;0;0;0;0
16.800000;27;15840;0.704000;4176;5002;0;0;0;0;0;0;0
16.900000;27;15840;0.704000;3340;5002;0;0;0;0;0;0;0
17.000000;27;15840;0.704000;2386;5002;0;0;0;0;0;0;0
17.100000;27;15840;0.704000;1510;5002;0;0;0;0;0;0;0
17.200000;27;15840;0.704000;1000;5552;0;0;0;0;0;0;0
17.300000;27;15840;0.704000;926;10000;0;0;0;0;0;0;0
17.400000;27;15840;0.704000;516;10000;0;0;0;0;0;0;0
17.500000;27;15840;0.704000;287;10000;0;0;0;0;0;0;0
17.600000;27;15840;0.704000;198;10000;0;0;0;0;0;0;0
17.700000;27;15840;0.704000;135;10000;0;0;0;0;0;0;0
17.800000;27;15840;0.704000;102;10000;0;0;0;0;0;0;0
17.900000;27;15840;0.704000;94;10000;0;0;0;0;0;0;0
SNR; MCS; TBS; rate; err0; trials0; err1; trials1; err2; trials2; err3; trials3; dci_err
-4.000000;3;1416;0.188800;5002;5002;0;0;0;0;0;0;0
-3.900000;3;1416;0.188800;5002;5002;0;0;0;0;0;0;0
-3.800000;3;1416;0.188800;5002;5002;0;0;0;0;0;0;0
-3.700000;3;1416;0.188800;5002;5002;0;0;0;0;0;0;0
-3.600000;3;1416;0.188800;5002;5002;0;0;0;0;0;0;0
-3.500000;3;1416;0.188800;5002;5002;0;0;0;0;0;0;0
-3.400000;3;1416;0.188800;5002;5002;0;0;0;0;0;0;0
-3.300000;3;1416;0.188800;5002;5002;0;0;0;0;0;0;0
-3.200000;3;1416;0.188800;5002;5002;0;0;0;0;0;0;0
-3.100000;3;1416;0.188800;5002;5002;0;0;0;0;0;0;0
-3.000000;3;1416;0.188800;5002;5002;0;0;0;0;0;0;0
-2.900000;3;1416;0.188800;5002;5002;0;0;0;0;0;0;0
-2.800000;3;1416;0.188800;5002;5002;0;0;0;0;0;0;0
-2.700000;3;1416;0.188800;5002;5002;0;0;0;0;0;0;0
-2.600000;3;1416;0.188800;5002;5002;0;0;0;0;0;0;0
-2.500000;3;1416;0.188800;5002;5002;0;0;0;0;0;0;0
-2.400000;3;1416;0.188800;5002;5002;0;0;0;0;0;0;0
-2.300000;3;1416;0.188800;5002;5002;0;0;0;0;0;0;0
-2.200000;3;1416;0.188800;5002;5002;0;0;0;0;0;0;0
-2.100000;3;1416;0.188800;5002;5002;0;0;0;0;0;0;0
-2.000000;3;1416;0.188800;5002;5002;0;0;0;0;0;0;0
-1.900000;3;1416;0.188800;5002;5002;0;0;0;0;0;0;0
-1.800000;3;1416;0.188800;5002;5002;0;0;0;0;0;0;0
-1.700000;3;1416;0.188800;5002;5002;0;0;0;0;0;0;0
-1.600000;3;1416;0.188800;5001;5002;0;0;0;0;0;0;0
-1.500000;3;1416;0.188800;4992;5002;0;0;0;0;0;0;0
-1.400000;3;1416;0.188800;4981;5002;0;0;0;0;0;0;0
-1.300000;3;1416;0.188800;4928;5002;0;0;0;0;0;0;0
-1.200000;3;1416;0.188800;4836;5002;0;0;0;0;0;0;0
-1.100000;3;1416;0.188800;4691;5002;0;0;0;0;0;0;0
-1.000000;3;1416;0.188800;4365;5002;0;0;0;0;0;0;0
-0.900000;3;1416;0.188800;3918;5002;0;0;0;0;0;0;0
-0.800000;3;1416;0.188800;3317;5002;0;0;0;0;0;0;0
-0.700000;3;1416;0.188800;2690;5002;0;0;0;0;0;0;0
-0.600000;3;1416;0.188800;2011;5002;0;0;0;0;0;0;0
-0.500000;3;1416;0.188800;1459;5002;0;0;0;0;0;0;0
-0.400000;3;1416;0.188800;1000;5044;0;0;0;0;0;0;0
-0.300000;3;1416;0.188800;1000;7616;0;0;0;0;0;0;0
-0.200000;3;1416;0.188800;923;10000;0;0;0;0;0;0;0
-0.100000;3;1416;0.188800;692;10000;0;0;0;0;0;0;0
0.000000;3;1416;0.188800;560;10000;0;0;0;0;0;0;0
0.100000;3;1416;0.188800;518;10000;0;0;0;0;0;0;0
0.200000;3;1416;0.188800;423;10000;0;0;0;0;0;0;0
0.300000;3;1416;0.188800;388;10000;0;0;0;0;0;0;0
0.400000;3;1416;0.188800;366;10000;0;0;0;0;0;0;0
0.500000;3;1416;0.188800;349;10000;0;0;0;0;0;0;0
0.600000;3;1416;0.188800;370;10000;0;0;0;0;0;0;0
0.700000;3;1416;0.188800;309;10000;0;0;0;0;0;0;0
0.800000;3;1416;0.188800;293;10000;0;0;0;0;0;0;0
0.900000;3;1416;0.188800;242;10000;0;0;0;0;0;0;0
1.000000;3;1416;0.188800;277;10000;0;0;0;0;0;0;0
1.100000;3;1416;0.188800;233;10000;0;0;0;0;0;0;0
1.200000;3;1416;0.188800;230;10000;0;0;0;0;0;0;0
1.300000;3;1416;0.188800;222;10000;0;0;0;0;0;0;0
1.400000;3;1416;0.188800;205;10000;0;0;0;0;0;0;0
1.500000;3;1416;0.188800;182;10000;0;0;0;0;0;0;0
1.600000;3;1416;0.188800;187;10000;0;0;0;0;0;0;0
1.700000;3;1416;0.188800;167;10000;0;0;0;0;0;0;0
1.800000;3;1416;0.188800;156;10000;0;0;0;0;0;0;0
1.900000;3;1416;0.188800;124;10000;0;0;0;0;0;0;0
2.000000;3;1416;0.188800;110;10000;0;0;0;0;0;0;0
2.100000;3;1416;0.188800;112;10000;0;0;0;0;0;0;0
2.200000;3;1416;0.188800;88;10000;0;0;0;0;0;0;0
SNR; MCS; TBS; rate; err0; trials0; err1; trials1; err2; trials2; err3; trials3; dci_err
-3.000000;4;1800;0.240000;5002;5002;0;0;0;0;0;0;0
-2.900000;4;1800;0.240000;5002;5002;0;0;0;0;0;0;0
-2.800000;4;1800;0.240000;5002;5002;0;0;0;0;0;0;0
-2.700000;4;1800;0.240000;5002;5002;0;0;0;0;0;0;0
-2.600000;4;1800;0.240000;5002;5002;0;0;0;0;0;0;0
-2.500000;4;1800;0.240000;5002;5002;0;0;0;0;0;0;0
-2.400000;4;1800;0.240000;5002;5002;0;0;0;0;0;0;0
-2.300000;4;1800;0.240000;5002;5002;0;0;0;0;0;0;0
-2.200000;4;1800;0.240000;5002;5002;0;0;0;0;0;0;0
-2.100000;4;1800;0.240000;5002;5002;0;0;0;0;0;0;0
-2.000000;4;1800;0.240000;5002;5002;0;0;0;0;0;0;0
-1.900000;4;1800;0.240000;5002;5002;0;0;0;0;0;0;0
-1.800000;4;1800;0.240000;5002;5002;0;0;0;0;0;0;0
-1.700000;4;1800;0.240000;5002;5002;0;0;0;0;0;0;0
-1.600000;4;1800;0.240000;5002;5002;0;0;0;0;0;0;0
-1.500000;4;1800;0.240000;5002;5002;0;0;0;0;0;0;0
-1.400000;4;1800;0.240000;5002;5002;0;0;0;0;0;0;0
-1.300000;4;1800;0.240000;5002;5002;0;0;0;0;0;0;0
-1.200000;4;1800;0.240000;5002;5002;0;0;0;0;0;0;0
-1.100000;4;1800;0.240000;5002;5002;0;0;0;0;0;0;0
-1.000000;4;1800;0.240000;5002;5002;0;0;0;0;0;0;0
-0.900000;4;1800;0.240000;5002;5002;0;0;0;0;0;0;0
-0.800000;4;1800;0.240000;5002;5002;0;0;0;0;0;0;0
-0.700000;4;1800;0.240000;4997;5002;0;0;0;0;0;0;0
-0.600000;4;1800;0.240000;4995;5002;0;0;0;0;0;0;0
-0.500000;4;1800;0.240000;4964;5002;0;0;0;0;0;0;0
-0.400000;4;1800;0.240000;4885;5002;0;0;0;0;0;0;0
-0.300000;4;1800;0.240000;4725;5002;0;0;0;0;0;0;0
-0.200000;4;1800;0.240000;4470;5002;0;0;0;0;0;0;0
-0.100000;4;1800;0.240000;4037;5002;0;0;0;0;0;0;0
0.000000;4;1800;0.240000;3475;5002;0;0;0;0;0;0;0
0.100000;4;1800;0.240000;2867;5002;0;0;0;0;0;0;0
0.200000;4;1800;0.240000;2104;5002;0;0;0;0;0;0;0
0.300000;4;1800;0.240000;1477;5002;0;0;0;0;0;0;0
0.400000;4;1800;0.240000;1059;5002;0;0;0;0;0;0;0
0.500000;4;1800;0.240000;1000;7320;0;0;0;0;0;0;0
0.600000;4;1800;0.240000;963;10000;0;0;0;0;0;0;0
0.700000;4;1800;0.240000;674;10000;0;0;0;0;0;0;0
0.800000;4;1800;0.240000;554;10000;0;0;0;0;0;0;0
0.900000;4;1800;0.240000;498;10000;0;0;0;0;0;0;0
1.000000;4;1800;0.240000;442;10000;0;0;0;0;0;0;0
1.100000;4;1800;0.240000;390;10000;0;0;0;0;0;0;0
1.200000;4;1800;0.240000;380;10000;0;0;0;0;0;0;0
1.300000;4;1800;0.240000;325;10000;0;0;0;0;0;0;0
1.400000;4;1800;0.240000;323;10000;0;0;0;0;0;0;0
1.500000;4;1800;0.240000;281;10000;0;0;0;0;0;0;0
1.600000;4;1800;0.240000;309;10000;0;0;0;0;0;0;0
1.700000;4;1800;0.240000;255;10000;0;0;0;0;0;0;0
1.800000;4;1800;0.240000;271;10000;0;0;0;0;0;0;0
1.900000;4;1800;0.240000;246;10000;0;0;0;0;0;0;0
2.000000;4;1800;0.240000;215;10000;0;0;0;0;0;0;0
2.100000;4;1800;0.240000;198;10000;0;0;0;0;0;0;0
2.200000;4;1800;0.240000;206;10000;0;0;0;0;0;0;0
2.300000;4;1800;0.240000;177;10000;0;0;0;0;0;0;0
2.400000;4;1800;0.240000;174;10000;0;0;0;0;0;0;0
2.500000;4;1800;0.240000;161;10000;0;0;0;0;0;0;0
2.600000;4;1800;0.240000;170;10000;0;0;0;0;0;0;0
2.700000;4;1800;0.240000;141;10000;0;0;0;0;0;0;0
2.800000;4;1800;0.240000;121;10000;0;0;0;0;0;0;0
2.900000;4;1800;0.240000;121;10000;0;0;0;0;0;0;0
3.000000;4;1800;0.240000;128;10000;0;0;0;0;0;0;0
3.100000;4;1800;0.240000;93;10000;0;0;0;0;0;0;0
SNR; MCS; TBS; rate; err0; trials0; err1; trials1; err2; trials2; err3; trials3; dci_err
-2.000000;5;2216;0.295467;5002;5002;0;0;0;0;0;0;0
-1.900000;5;2216;0.295467;5002;5002;0;0;0;0;0;0;0
-1.800000;5;2216;0.295467;5002;5002;0;0;0;0;0;0;0
-1.700000;5;2216;0.295467;5002;5002;0;0;0;0;0;0;0
-1.600000;5;2216;0.295467;5002;5002;0;0;0;0;0;0;0
-1.500000;5;2216;0.295467;5002;5002;0;0;0;0;0;0;0
-1.400000;5;2216;0.295467;5002;5002;0;0;0;0;0;0;0
-1.300000;5;2216;0.295467;5002;5002;0;0;0;0;0;0;0
-1.200000;5;2216;0.295467;5002;5002;0;0;0;0;0;0;0
-1.100000;5;2216;0.295467;5002;5002;0;0;0;0;0;0;0
-1.000000;5;2216;0.295467;5002;5002;0;0;0;0;0;0;0
-0.900000;5;2216;0.295467;5002;5002;0;0;0;0;0;0;0
-0.800000;5;2216;0.295467;5002;5002;0;0;0;0;0;0;0
-0.700000;5;2216;0.295467;5002;5002;0;0;0;0;0;0;0
-0.600000;5;2216;0.295467;5002;5002;0;0;0;0;0;0;0
-0.500000;5;2216;0.295467;5002;5002;0;0;0;0;0;0;0
-0.400000;5;2216;0.295467;5002;5002;0;0;0;0;0;0;0
-0.300000;5;2216;0.295467;5002;5002;0;0;0;0;0;0;0
-0.200000;5;2216;0.295467;5002;5002;0;0;0;0;0;0;0
-0.100000;5;2216;0.295467;5002;5002;0;0;0;0;0;0;0
0.000000;5;2216;0.295467;5002;5002;0;0;0;0;0;0;0
0.100000;5;2216;0.295467;4999;5002;0;0;0;0;0;0;0
0.200000;5;2216;0.295467;4989;5002;0;0;0;0;0;0;0
0.300000;5;2216;0.295467;4946;5002;0;0;0;0;0;0;0
0.400000;5;2216;0.295467;4837;5002;0;0;0;0;0;0;0
0.500000;5;2216;0.295467;4620;5002;0;0;0;0;0;0;0
0.600000;5;2216;0.295467;4265;5002;0;0;0;0;0;0;0
0.700000;5;2216;0.295467;3655;5002;0;0;0;0;0;0;0
0.800000;5;2216;0.295467;2933;5002;0;0;0;0;0;0;0
0.900000;5;2216;0.295467;2253;5002;0;0;0;0;0;0;0
1.000000;5;2216;0.295467;1517;5002;0;0;0;0;0;0;0
1.100000;5;2216;0.295467;1031;5002;0;0;0;0;0;0;0
1.200000;5;2216;0.295467;1000;8037;0;0;0;0;0;0;0
1.300000;5;2216;0.295467;825;10000;0;0;0;0;0;0;0
1.400000;5;2216;0.295467;605;10000;0;0;0;0;0;0;0
1.500000;5;2216;0.295467;436;10000;0;0;0;0;0;0;0
1.600000;5;2216;0.295467;374;10000;0;0;0;0;0;0;0
1.700000;5;2216;0.295467;326;10000;0;0;0;0;0;0;0
1.800000;5;2216;0.295467;325;10000;0;0;0;0;0;0;0
1.900000;5;2216;0.295467;305;10000;0;0;0;0;0;0;0
2.000000;5;2216;0.295467;269;10000;0;0;0;0;0;0;0
2.100000;5;2216;0.295467;257;10000;0;0;0;0;0;0;0
2.200000;5;2216;0.295467;210;10000;0;0;0;0;0;0;0
2.300000;5;2216;0.295467;213;10000;0;0;0;0;0;0;0
2.400000;5;2216;0.295467;193;10000;0;0;0;0;0;0;0
2.500000;5;2216;0.295467;178;10000;0;0;0;0;0;0;0
2.600000;5;2216;0.295467;152;10000;0;0;0;0;0;0;0
2.700000;5;2216;0.295467;145;10000;0;0;0;0;0;0;0
2.800000;5;2216;0.295467;128;10000;0;0;0;0;0;0;0
2.900000;5;2216;0.295467;144;10000;0;0;0;0;0;0;0
3.000000;5;2216;0.295467;124;10000;0;0;0;0;0;0;0
3.100000;5;2216;0.295467;113;10000;0;0;0;0;0;0;0
3.200000;5;2216;0.295467;97;10000;0;0;0;0;0;0;0
SNR; MCS; TBS; rate; err0; trials0; err1; trials1; err2; trials2; err3; trials3; dci_err
-1.000000;6;2600;0.346667;5002;5002;0;0;0;0;0;0;0
-0.900000;6;2600;0.346667;5002;5002;0;0;0;0;0;0;0
-0.800000;6;2600;0.346667;5002;5002;0;0;0;0;0;0;0
-0.700000;6;2600;0.346667;5002;5002;0;0;0;0;0;0;0
-0.600000;6;2600;0.346667;5002;5002;0;0;0;0;0;0;0
-0.500000;6;2600;0.346667;5002;5002;0;0;0;0;0;0;0
-0.400000;6;2600;0.346667;5002;5002;0;0;0;0;0;0;0
-0.300000;6;2600;0.346667;5002;5002;0;0;0;0;0;0;0
-0.200000;6;2600;0.346667;5002;5002;0;0;0;0;0;0;0
-0.100000;6;2600;0.346667;5002;5002;0;0;0;0;0;0;0
-0.000000;6;2600;0.346667;5002;5002;0;0;0;0;0;0;0
0.100000;6;2600;0.346667;5002;5002;0;0;0;0;0;0;0
0.200000;6;2600;0.346667;5002;5002;0;0;0;0;0;0;0
0.300000;6;2600;0.346667;5002;5002;0;0;0;0;0;0;0
0.400000;6;2600;0.346667;5002;5002;0;0;0;0;0;0;0
0.500000;6;2600;0.346667;5002;5002;0;0;0;0;0;0;0
0.600000;6;2600;0.346667;5002;5002;0;0;0;0;0;0;0
0.700000;6;2600;0.346667;4996;5002;0;0;0;0;0;0;0
0.800000;6;2600;0.346667;4977;5002;0;0;0;0;0;0;0
0.900000;6;2600;0.346667;4927;5002;0;0;0;0;0;0;0
1.000000;6;2600;0.346667;4757;5002;0;0;0;0;0;0;0
1.100000;6;2600;0.346667;4438;5002;0;0;0;0;0;0;0
1.200000;6;2600;0.346667;3918;5002;0;0;0;0;0;0;0
1.300000;6;2600;0.346667;3176;5002;0;0;0;0;0;0;0
1.400000;6;2600;0.346667;2309;5002;0;0;0;0;0;0;0
1.500000;6;2600;0.346667;1557;5002;0;0;0;0;0;0;0
1.600000;6;2600;0.346667;1000;5177;0;0;0;0;0;0;0
1.700000;6;2600;0.346667;1000;8453;0;0;0;0;0;0;0
1.800000;6;2600;0.346667;817;10000;0;0;0;0;0;0;0
1.900000;6;2600;0.346667;579;10000;0;0;0;0;0;0;0
2.000000;6;2600;0.346667;444;10000;0;0;0;0;0;0;0
2.100000;6;2600;0.346667;475;10000;0;0;0;0;0;0;0
2.200000;6;2600;0.346667;431;10000;0;0;0;0;0;0;0
2.300000;6;2600;0.346667;347;10000;0;0;0;0;0;0;0
2.400000;6;2600;0.346667;391;10000;0;0;0;0;0;0;0
2.500000;6;2600;0.346667;334;10000;0;0;0;0;0;0;0
2.600000;6;2600;0.346667;334;10000;0;0;0;0;0;0;0
2.700000;6;2600;0.346667;320;10000;0;0;0;0;0;0;0
2.800000;6;2600;0.346667;297;10000;0;0;0;0;0;0;0
2.900000;6;2600;0.346667;287;10000;0;0;0;0;0;0;0
3.000000;6;2600;0.346667;250;10000;0;0;0;0;0;0;0
3.100000;6;2600;0.346667;259;10000;0;0;0;0;0;0;0
3.200000;6;2600;0.346667;246;10000;0;0;0;0;0;0;0
3.300000;6;2600;0.346667;226;10000;0;0;0;0;0;0;0
3.400000;6;2600;0.346667;216;10000;0;0;0;0;0;0;0
3.500000;6;2600;0.346667;198;10000;0;0;0;0;0;0;0
3.600000;6;2600;0.346667;175;10000;0;0;0;0;0;0;0
3.700000;6;2600;0.346667;185;10000;0;0;0;0;0;0;0
3.800000;6;2600;0.346667;166;10000;0;0;0;0;0;0;0
3.900000;6;2600;0.346667;137;10000;0;0;0;0;0;0;0
4.000000;6;2600;0.346667;144;10000;0;0;0;0;0;0;0
4.100000;6;2600;0.346667;123;10000;0;0;0;0;0;0;0
4.200000;6;2600;0.346667;119;10000;0;0;0;0;0;0;0
4.300000;6;2600;0.346667;107;10000;0;0;0;0;0;0;0
4.400000;6;2600;0.346667;111;10000;0;0;0;0;0;0;0
4.500000;6;2600;0.346667;95;10000;0;0;0;0;0;0;0
SNR; MCS; TBS; rate; err0; trials0; err1; trials1; err2; trials2; err3; trials3; dci_err
0.000000;7;3112;0.414933;5002;5002;0;0;0;0;0;0;0
0.100000;7;3112;0.414933;5002;5002;0;0;0;0;0;0;0
0.200000;7;3112;0.414933;5002;5002;0;0;0;0;0;0;0
0.300000;7;3112;0.414933;5002;5002;0;0;0;0;0;0;0
0.400000;7;3112;0.414933;5002;5002;0;0;0;0;0;0;0
0.500000;7;3112;0.414933;5002;5002;0;0;0;0;0;0;0
0.600000;7;3112;0.414933;5002;5002;0;0;0;0;0;0;0
0.700000;7;3112;0.414933;5002;5002;0;0;0;0;0;0;0
0.800000;7;3112;0.414933;5002;5002;0;0;0;0;0;0;0
0.900000;7;3112;0.414933;5002;5002;0;0;0;0;0;0;0
1.000000;7;3112;0.414933;5002;5002;0;0;0;0;0;0;0
1.100000;7;3112;0.414933;5002;5002;0;0;0;0;0;0;0
1.200000;7;3112;0.414933;5002;5002;0;0;0;0;0;0;0
1.300000;7;3112;0.414933;5002;5002;0;0;0;0;0;0;0
1.400000;7;3112;0.414933;5002;5002;0;0;0;0;0;0;0
1.500000;7;3112;0.414933;5002;5002;0;0;0;0;0;0;0
1.600000;7;3112;0.414933;4997;5002;0;0;0;0;0;0;0
1.700000;7;3112;0.414933;4981;5002;0;0;0;0;0;0;0
1.800000;7;3112;0.414933;4892;5002;0;0;0;0;0;0;0
1.900000;7;3112;0.414933;4746;5002;0;0;0;0;0;0;0
2.000000;7;3112;0.414933;4388;5002;0;0;0;0;0;0;0
2.100000;7;3112;0.414933;3664;5002;0;0;0;0;0;0;0
2.200000;7;3112;0.414933;2843;5002;0;0;0;0;0;0;0
2.300000;7;3112;0.414933;1992;5002;0;0;0;0;0;0;0
2.400000;7;3112;0.414933;1285;5002;0;0;0;0;0;0;0
2.500000;7;3112;0.414933;1000;6867;0;0;0;0;0;0;0
2.600000;7;3112;0.414933;773;10000;0;0;0;0;0;0;0
2.700000;7;3112;0.414933;427;10000;0;0;0;0;0;0;0
2.800000;7;3112;0.414933;300;10000;0;0;0;0;0;0;0
2.900000;7;3112;0.414933;276;10000;0;0;0;0;0;0;0
3.000000;7;3112;0.414933;215;10000;0;0;0;0;0;0;0
3.100000;7;3112;0.414933;198;10000;0;0;0;0;0;0;0
3.200000;7;3112;0.414933;193;10000;0;0;0;0;0;0;0
3.300000;7;3112;0.414933;179;10000;0;0;0;0;0;0;0
3.400000;7;3112;0.414933;173;10000;0;0;0;0;0;0;0
3.500000;7;3112;0.414933;169;10000;0;0;0;0;0;0;0
3.600000;7;3112;0.414933;124;10000;0;0;0;0;0;0;0
3.700000;7;3112;0.414933;149;10000;0;0;0;0;0;0;0
3.800000;7;3112;0.414933;123;10000;0;0;0;0;0;0;0
3.900000;7;3112;0.414933;133;10000;0;0;0;0;0;0;0
4.000000;7;3112;0.414933;129;10000;0;0;0;0;0;0;0
4.100000;7;3112;0.414933;101;10000;0;0;0;0;0;0;0
4.200000;7;3112;0.414933;109;10000;0;0;0;0;0;0;0
4.300000;7;3112;0.414933;69;10000;0;0;0;0;0;0;0
SNR; MCS; TBS; rate; err0; trials0; err1; trials1; err2; trials2; err3; trials3; dci_err
1.000000;8;3496;0.466133;5002;5002;0;0;0;0;0;0;0
1.100000;8;3496;0.466133;5002;5002;0;0;0;0;0;0;0
1.200000;8;3496;0.466133;5002;5002;0;0;0;0;0;0;0
1.300000;8;3496;0.466133;5002;5002;0;0;0;0;0;0;0
1.400000;8;3496;0.466133;5002;5002;0;0;0;0;0;0;0
1.500000;8;3496;0.466133;5002;5002;0;0;0;0;0;0;0
1.600000;8;3496;0.466133;5002;5002;0;0;0;0;0;0;0
1.700000;8;3496;0.466133;5002;5002;0;0;0;0;0;0;0
1.800000;8;3496;0.466133;5002;5002;0;0;0;0;0;0;0
1.900000;8;3496;0.466133;5002;5002;0;0;0;0;0;0;0
2.000000;8;3496;0.466133;5002;5002;0;0;0;0;0;0;0
2.100000;8;3496;0.466133;5002;5002;0;0;0;0;0;0;0
2.200000;8;3496;0.466133;4999;5002;0;0;0;0;0;0;0
2.300000;8;3496;0.466133;4982;5002;0;0;0;0;0;0;0
2.400000;8;3496;0.466133;4943;5002;0;0;0;0;0;0;0
2.500000;8;3496;0.466133;4782;5002;0;0;0;0;0;0;0
2.600000;8;3496;0.466133;4443;5002;0;0;0;0;0;0;0
2.700000;8;3496;0.466133;3858;5002;0;0;0;0;0;0;0
2.800000;8;3496;0.466133;2987;5002;0;0;0;0;0;0;0
2.900000;8;3496;0.466133;2063;5002;0;0;0;0;0;0;0
3.000000;8;3496;0.466133;1290;5002;0;0;0;0;0;0;0
3.100000;8;3496;0.466133;1000;7204;0;0;0;0;0;0;0
3.200000;8;3496;0.466133;741;10000;0;0;0;0;0;0;0
3.300000;8;3496;0.466133;407;10000;0;0;0;0;0;0;0
3.400000;8;3496;0.466133;240;10000;0;0;0;0;0;0;0
3.500000;8;3496;0.466133;199;10000;0;0;0;0;0;0;0
3.600000;8;3496;0.466133;198;10000;0;0;0;0;0;0;0
3.700000;8;3496;0.466133;153;10000;0;0;0;0;0;0;0
3.800000;8;3496;0.466133;141;10000;0;0;0;0;0;0;0
3.900000;8;3496;0.466133;131;10000;0;0;0;0;0;0;0
4.000000;8;3496;0.466133;115;10000;0;0;0;0;0;0;0
4.100000;8;3496;0.466133;98;10000;0;0;0;0;0;0;0
SNR; MCS; TBS; rate; err0; trials0; err1; trials1; err2; trials2; err3; trials3; dci_err
2.000000;9;4008;0.534400;5002;5002;0;0;0;0;0;0;0
2.100000;9;4008;0.534400;5002;5002;0;0;0;0;0;0;0
2.200000;9;4008;0.534400;5002;5002;0;0;0;0;0;0;0
2.300000;9;4008;0.534400;5002;5002;0;0;0;0;0;0;0
2.400000;9;4008;0.534400;5002;5002;0;0;0;0;0;0;0
2.500000;9;4008;0.534400;5002;5002;0;0;0;0;0;0;0
2.600000;9;4008;0.534400;5002;5002;0;0;0;0;0;0;0
2.700000;9;4008;0.534400;5002;5002;0;0;0;0;0;0;0
2.800000;9;4008;0.534400;5001;5002;0;0;0;0;0;0;0
2.900000;9;4008;0.534400;4999;5002;0;0;0;0;0;0;0
3.000000;9;4008;0.534400;4983;5002;0;0;0;0;0;0;0
3.100000;9;4008;0.534400;4920;5002;0;0;0;0;0;0;0
3.200000;9;4008;0.534400;4740;5002;0;0;0;0;0;0;0
3.300000;9;4008;0.534400;4318;5002;0;0;0;0;0;0;0
3.400000;9;4008;0.534400;3635;5002;0;0;0;0;0;0;0
3.500000;9;4008;0.534400;2657;5002;0;0;0;0;0;0;0
3.600000;9;4008;0.534400;1780;5002;0;0;0;0;0;0;0
3.700000;9;4008;0.534400;1000;5063;0;0;0;0;0;0;0
3.800000;9;4008;0.534400;1000;9741;0;0;0;0;0;0;0
3.900000;9;4008;0.534400;505;10000;0;0;0;0;0;0;0
4.000000;9;4008;0.534400;269;10000;0;0;0;0;0;0;0
4.100000;9;4008;0.534400;141;10000;0;0;0;0;0;0;0
4.200000;9;4008;0.534400;118;10000;0;0;0;0;0;0;0
4.300000;9;4008;0.534400;93;10000;0;0;0;0;0;0;0
set(0, 'DefaultLineMarkerSize', 10);
set(0, 'Defaultaxesfontsize', 14);
set(0, 'DefaultLineLineWidth', 2);
root_path = 'Rayleigh8_perfectCE_new';
tx_mode = 6;
channel = 8;
%%
addpath('../../../EMOS/LTE/POST_PROCESSING')
load SISO.mat
scale_bps = (8*12+3*8)*6*100;
c_siso = [c_siso_4Qam; c_siso_16Qam; c_siso_64Qam];
bps_siso = c_siso.*scale_bps;
snr_all = -20:0.2:40;
throughput_all = zeros(length(snr_all),22);
plot_style = {'b-*';'r-*';'g-*';'y-*';'k-*';...
'b-o';'r-o';'g-o';'y-o';'k-o';...
'b-s';'r-s';'g-s';'y-s';'k-s';...
'b-d';'r-d';'g-d';'y-d';'k-d';...
'b-x';'r-x';'g-x';'y-x';'k-x';...
'b-+';'r-+';'g-+';'y-+';'k-+'};
%%
figure(1)
hold off
figure(2)
hold off
legend_str = {};
i=1;
for mcs=0:28
file = fullfile(root_path,sprintf('second_bler_tx%d_mcs%d_chan%d.csv',tx_mode,mcs,channel));
try
data = dlmread(file,';',1,0);
catch exception
disp(sprintf('Problem with file %s:',file));
disp(exception.message);
continue
end
snr = data(:,1);
bler = data(:,5)./data(:,6); % round 1
bler4 = data(:,11)./data(:,6); % round 4
harq_adjust = data(:,6)./sum(data(:,6:2:12),2);
if size(data,2)>13
uncoded_ber = data(:,14);
else
uncoded_ber = ones(size(data,1),1);
end
if (length(snr)==1)
throughput_all(:,mcs+1) = (1-bler4).*harq_adjust.*get_tbs(mcs,25)*6*100;
else
throughput_all(:,mcs+1) = interp1(snr, (1-bler4).*harq_adjust.*get_tbs(mcs,25)*6*100,snr_all,'nearest','extrap');
end
throughput_all(1:find(snr_all==snr(1)),mcs+1) = 0;
figure(1)
semilogy(snr,bler(:,1),plot_style{mcs+1});
hold on
figure(2)
semilogy(snr,uncoded_ber,plot_style{mcs+1});
hold on
legend_str{i} = sprintf('mcs %d',mcs);
i=i+1;
end
%%
h_fig = figure(1);
h_leg = legend(legend_str,'location','eastoutside');
set(h_leg,'FontSize',10);
title(sprintf('Tx mode %d: BLER vs SNR',tx_mode));
ylabel 'BLER'
xlabel 'SNR'
ylim([0.001 1])
grid on
saveas(h_fig,fullfile(root_path,sprintf('tx_mode%d_channel%d_bler.fig',tx_mode,channel)));
saveas(h_fig,fullfile(root_path,sprintf('tx_mode%d_channel%d_bler.emf',tx_mode,channel)));
h_fig = figure(2);
h_leg = legend(legend_str,'location','eastoutside');
set(h_leg,'FontSize',10);
title(sprintf('Tx mode %d: uncoded BER vs SNR',tx_mode));
ylabel 'uncoded BER'
xlabel 'SNR'
ylim([0.0001 1])
grid on
saveas(h_fig,fullfile(root_path,sprintf('tx_mode%d_channel%d_ber.fig',tx_mode,channel)));
saveas(h_fig,fullfile(root_path,sprintf('tx_mode%d_channel%d_ber.emf',tx_mode,channel)));
%%
h_fig = figure(4);
hold off
plot(snr_all,(max(throughput_all,[],2)))
%plot(snr_all,throughput_all)
hold on
plot(SNR,max(bps_siso),'r--');
legend('simulation','SISO mutual information','location','northwest');
xlabel('SNR [dB]')
ylabel('Throughput [bps]')
grid on
......@@ -280,11 +280,7 @@ int main(int argc, char **argv) {
int print_perf=0;
int llr8_flag=0;
reset_meas(&ts);
start_meas(&ts);
sleep(1);
stop_meas(&ts);
cpu_freq_GHz = (double)ts.diff/1000000000;
cpu_freq_GHz = (double)get_cpu_freq_GHz();
printf("Detected cpu_freq %f GHz\n",cpu_freq_GHz);
......@@ -483,6 +479,7 @@ int main(int argc, char **argv) {
break;
case 'P':
print_perf=1;
opp_enabled=1; // to enable the time meas
break;
case 'L':
llr8_flag=1;
......@@ -1657,9 +1654,9 @@ int main(int argc, char **argv) {
// printf("amc: ****************** eNB2UE[%d]->n_rx = %d,dd %d\n",round,eNB2UE[round]->nb_rx,eNB2UE[round]->channel_offset);
if(abstx==1 && num_rounds>1)
if(round==0 && hold_channel==0){
random_channel(eNB2UE[1]);
random_channel(eNB2UE[2]);
random_channel(eNB2UE[3]);
random_channel(eNB2UE[1],0);
random_channel(eNB2UE[2],0);
random_channel(eNB2UE[3],0);
}
}
......
......@@ -201,7 +201,6 @@ int main(int argc, char **argv) {
u8 N0=30;
double tx_gain=1.0;
double cpu_freq_GHz;
time_stats_t ts;
int avg_iter,iter_trials;
uint32_t UL_alloc_pdu;
......@@ -212,11 +211,7 @@ int main(int argc, char **argv) {
uint8_t llr8_flag=0;
int nb_rb_set = 0;
reset_meas(&ts);
start_meas(&ts);
sleep(1);
stop_meas(&ts);
cpu_freq_GHz = (double)ts.diff/1000000000;
cpu_freq_GHz = (double)get_cpu_freq_GHz();
printf("Detected cpu_freq %f GHz\n",cpu_freq_GHz);
......@@ -389,6 +384,7 @@ int main(int argc, char **argv) {
break;
case 'P':
dump_perf=1;
opp_enabled=1;
break;
case 'L':
llr8_flag=1;
......
......@@ -2,7 +2,11 @@
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
//#include "PHY/defs.h"
#include "SIMULATION/TOOLS/defs.h"
/*
extern void randominit(void);
extern double gaussdouble(double,double);
//free(input_data);
......@@ -10,6 +14,7 @@ extern double gaussdouble(double,double);
//extern int write_output(const char *,const char *,void *,int,int,char);
//flag change
extern int write_output(const char *,const char *,void *,int,int,char);
*/
//double pn[1024];
......@@ -206,8 +211,9 @@ void rf_rx_simple(double **r_re,
#ifdef RF_MAIN
#define INPUT_dBm -70.0
#include "../../PHY/TOOLS/defs.h"
#include "../TOOLS/defs.h"
int QPSK[4]={AMP_OVER_SQRT2|(AMP_OVER_SQRT2<<16),AMP_OVER_SQRT2|((65536-AMP_OVER_SQRT2)<<16),((65536-AMP_OVER_SQRT2)<<16)|AMP_OVER_SQRT2,((65536-AMP_OVER_SQRT2)<<16)|(65536-AMP_OVER_SQRT2)};
int QPSK2[4]={AMP_OVER_2|(AMP_OVER_2<<16),AMP_OVER_2|((65536-AMP_OVER_2)<<16),((65536-AMP_OVER_2)<<16)|AMP_OVER_2,((65536-AMP_OVER_2)<<16)|(65536-AMP_OVER_2)};
int main(int argc, char* argv[]) {
......@@ -217,31 +223,71 @@ int main(int argc, char* argv[]) {
int length = 100000;
int i,j,n;
double input_amp = pow(10.0,(.05*INPUT_dBm))/sqrt(2);
double **r_re,**r_im;
double nf[2] = {3.0,3.0};
double ip =0.0;
double path_loss_dB = -90, rx_gain_dB = 125;
double tx_pwr, rx_pwr;
u32 **input = malloc(nb_antennas*sizeof(u32*));
u32 **output = malloc(nb_antennas*sizeof(u32*));
r_re = malloc(nb_antennas*sizeof (double *));
r_im = malloc(nb_antennas*sizeof (double *));
printf("Input amp = %f\n",input_amp);
double **s_re = malloc(nb_antennas*sizeof (double *));
double **s_im = malloc(nb_antennas*sizeof (double *));
double **r_re = malloc(nb_antennas*sizeof (double *));
double **r_im = malloc(nb_antennas*sizeof (double *));
randominit();
channel_desc_t *channel;
for (i=0;i<nb_antennas;i++) {
srand(0);
randominit(0);
set_taus_seed(0);
channel = new_channel_desc_scm(nb_antennas,
nb_antennas,
AWGN,
7.68e6,
0,
0,
path_loss_dB);
for (i=0;i<nb_antennas;i++) {
s_re[i] = (double *)malloc(length * sizeof (double ));
s_im[i] = (double *)malloc(length * sizeof (double ));
r_re[i] = (double *)malloc(length * sizeof (double ));
r_im[i] = (double *)malloc(length * sizeof (double ));
input[i] = (u32*)malloc(length * sizeof(u32));
output[i] = (u32*)malloc(length * sizeof(u32));
}
for (i=0;i<nb_antennas;i++) {
// generate fs/4 complex exponential
for (j=0;j<length;j++) {
r_re[i][j] = 0; //input_amp; // * cos(M_PI*j/2);
r_im[i][j] = 0; //input_amp; // * sin(M_PI*j/2);
// generate a random QPSK signal
for (j=0;j<length/2;j++) {
input[i][j] = QPSK[taus()&3];
}
}
tx_pwr = dac_fixed_gain(s_re,
s_im,
input,
0,
nb_antennas,
length,
0,
512,
14,
15.0);
multipath_channel(channel,s_re,s_im,r_re,r_im,
length,0);
rf_rx_simple(r_re,
r_im,
nb_antennas,
length,
1.0/7.68e6 * 1e9,// sampling time (ns)
rx_gain_dB - 66.227);
/*
rf_rx(r_re,
r_im,
nb_antennas,
......@@ -257,9 +303,22 @@ int main(int argc, char* argv[]) {
-500.0, // pn_amp (dBc)
-0.0, // IQ imbalance (dB),
0.0); // IQ phase imbalance (rad)
*/
write_output("/tmp/test_output_re.m","rfout_re",r_re[0],length,1,7);
write_output("/tmp/test_output_im.m","rfout_im",r_im[0],length,1,7);
// write_output("pn.m","pnoise",pn,1024,1,7);
adc(r_re,
r_im,
0,
0,
output,
nb_antennas,
length,
12);
write_output("s_im.m","s_im",s_im[0],length,1,7);
write_output("s_re.m","s_re",s_re[0],length,1,7);
write_output("r_im.m","r_im",r_im[0],length,1,7);
write_output("r_re.m","r_re",r_re[0],length,1,7);
write_output("input.m","rfin",input[0],length,1,1);
write_output("output.m","rfout",output[0],length,1,1);
}
#endif
......@@ -69,7 +69,8 @@ void freq_channel(channel_desc_t *desc,u16 nb_rb,s16 n_samples) {
init_freq_channel(desc,nb_rb,n_samples);
freq_channel_init=1;
}
start_meas(&desc->interp_freq);
for (f=-n_samples/2;f<n_samples/2;f++) {
clut = cos_lut[n_samples/2+f];
slut = sin_lut[n_samples/2+f];
......@@ -88,6 +89,7 @@ void freq_channel(channel_desc_t *desc,u16 nb_rb,s16 n_samples) {
}
}
}
stop_meas(&desc->interp_freq);
}
double compute_pbch_sinr(channel_desc_t *desc,
......@@ -188,7 +190,7 @@ double compute_sinr(channel_desc_t *desc,
}
int pbch_polynomial_degree;
double a[7];
double pbch_awgn_polynomial[7];
void load_pbch_desc(FILE *pbch_file_fd) {
......@@ -213,8 +215,8 @@ void load_pbch_desc(FILE *pbch_file_fd) {
printf("fscanf failed: %s\n", strerror(errno));
exit(EXIT_FAILURE);
}
a[i] = strtod(dummy,NULL);
printf("%f ",a[i]);
pbch_awgn_polynomial[i] = strtod(dummy,NULL);
printf("%f ",pbch_awgn_polynomial[i]);
}
printf("\n");
}
......@@ -222,19 +224,24 @@ void load_pbch_desc(FILE *pbch_file_fd) {
double pbch_bler(double sinr) {
int i;
double log10_bler=a[pbch_polynomial_degree];
double log10_bler=pbch_awgn_polynomial[pbch_polynomial_degree];
double sinrpow=sinr;
double bler=0.0;
// printf("log10bler %f\n",log10_bler);
if (sinr<-7.9)
return(1.0);
bler= 1.0;
else if (sinr>=0.0)
return(1e-4);
for (i=1;i<=pbch_polynomial_degree;i++) {
// printf("sinrpow %f\n",sinrpow);
log10_bler += (a[pbch_polynomial_degree-i]*sinrpow);
sinrpow *= sinr;
// printf("log10bler %f\n",log10_bler);
bler=0.0001;
else {
for (i=1;i<=pbch_polynomial_degree;i++) {
// printf("sinrpow %f\n",sinrpow);
log10_bler += (pbch_awgn_polynomial[pbch_polynomial_degree-i]*sinrpow);
sinrpow *= sinr;
// printf("log10bler %f\n",log10_bler);
}
bler = pow(10.0,log10_bler);
}
return(pow(10.0,log10_bler));
printf ("sinr %f bler %f\n",sinr,bler);
return(bler);
}
......@@ -63,7 +63,12 @@ typedef struct {
/// initial phase for frequency offset simulation
double ip;
/// number of paths taken by transmit signal
u16 nb_paths;
u16 nb_paths;
/// timing measurements
time_stats_t random_channel;
time_stats_t interp_time;
time_stats_t interp_freq;
time_stats_t convolution;
} channel_desc_t;
typedef struct {
......@@ -164,7 +169,7 @@ typedef enum {
\param random_aoa If set to 1, AoA of ricean component is randomized
*/
channel_desc_t *new_channel_desc(u8 nb_tx,u8 nb_rx, u8 nb_taps, u8 channel_length, double *amps, double* delays, struct complex** R_sqrt, double Td, double BW, double ricean_factor, double aoa, double forgetting_factor, double max_Doppler, s32 channel_offset, double path_loss_dB,u8 random_aoa);
//channel_desc_t *new_channel_desc(u8 nb_tx,u8 nb_rx, u8 nb_taps, u8 channel_length, double *amps, double* delays, struct complex** R_sqrt, double Td, double BW, double ricean_factor, double aoa, double forgetting_factor, double max_Doppler, s32 channel_offset, double path_loss_dB,u8 random_aoa);
channel_desc_t *new_channel_desc_scm(u8 nb_tx,
u8 nb_rx,
......@@ -180,7 +185,7 @@ channel_desc_t *new_channel_desc_scm(u8 nb_tx,
\brief This routine generates a random channel response (time domain) according to a tapped delay line model.
\param desc Pointer to the channel descriptor
*/
int random_channel(channel_desc_t *desc);
int random_channel(channel_desc_t *desc, u8 abstraction_flag);
/**\fn void multipath_channel(channel_desc_t *desc,
double **tx_sig_re,
......@@ -239,6 +244,9 @@ double compute_sinr(channel_desc_t *desc,
u16 nb_rb);
double pbch_bler(double sinr);
void load_pbch_desc(FILE *pbch_file_fd);
/**@}*/
/**
......
......@@ -11,24 +11,24 @@
#include "UTIL/LOG/log.h"
//#define DEBUG_CH
channel_desc_t *new_channel_desc(u8 nb_tx,
u8 nb_rx,
u8 nb_taps,
u8 channel_length,
double *amps,
double *delays,
struct complex** R_sqrt,
double Td,
double BW,
double ricean_factor,
double aoa,
double forgetting_factor,
double max_Doppler,
s32 channel_offset,
double path_loss_dB,
u8 random_aoa) {
channel_desc_t *chan_desc = (channel_desc_t *)malloc(sizeof(channel_desc_t));
void fill_channel_desc(channel_desc_t *chan_desc,
u8 nb_tx,
u8 nb_rx,
u8 nb_taps,
u8 channel_length,
double *amps,
double *delays,
struct complex** R_sqrt,
double Td,
double BW,
double ricean_factor,
double aoa,
double forgetting_factor,
double max_Doppler,
s32 channel_offset,
double path_loss_dB,
u8 random_aoa) {
u16 i,j;
double delta_tau;
......@@ -106,7 +106,11 @@ channel_desc_t *new_channel_desc(u8 nb_tx,
chan_desc->nb_paths=10;
return(chan_desc);
reset_meas(&chan_desc->random_channel);
reset_meas(&chan_desc->interp_time);
reset_meas(&chan_desc->interp_freq);
reset_meas(&chan_desc->convolution);
}
double mbsfn_delays[] = {0,.03,.15,.31,.37,1.09,12.490,12.52,12.64,12.80,12.86,13.58,27.49,27.52,27.64,27.80,27.86,28.58};
......@@ -457,22 +461,23 @@ channel_desc_t *new_channel_desc_scm(u8 nb_tx,
aoa = .03;
maxDoppler = 0;
chan_desc = new_channel_desc(nb_tx,
nb_rx,
nb_taps,
channel_length,
default_amps_lin,
NULL,
NULL,
Td,
BW,
ricean_factor,
aoa,
forgetting_factor,
maxDoppler,
channel_offset,
path_loss_dB,
0);
fill_channel_desc(chan_desc,
nb_tx,
nb_rx,
nb_taps,
channel_length,
default_amps_lin,
NULL,
NULL,
Td,
BW,
ricean_factor,
aoa,
forgetting_factor,
maxDoppler,
channel_offset,
path_loss_dB,
0);
break;
case Rice8:
......@@ -483,7 +488,7 @@ channel_desc_t *new_channel_desc_scm(u8 nb_tx,
aoa = .03;
maxDoppler = 0;
chan_desc = new_channel_desc(nb_tx,
fill_channel_desc(chan_desc,nb_tx,
nb_rx,
nb_taps,
channel_length,
......@@ -509,7 +514,7 @@ channel_desc_t *new_channel_desc_scm(u8 nb_tx,
aoa = .03;
maxDoppler = 0;
chan_desc = new_channel_desc(nb_tx,
fill_channel_desc(chan_desc,nb_tx,
nb_rx,
nb_taps,
channel_length,
......@@ -535,7 +540,7 @@ channel_desc_t *new_channel_desc_scm(u8 nb_tx,
aoa = .03;
maxDoppler = 800;
chan_desc = new_channel_desc(nb_tx,
fill_channel_desc(chan_desc,nb_tx,
nb_rx,
nb_taps,
channel_length,
......@@ -570,7 +575,7 @@ channel_desc_t *new_channel_desc_scm(u8 nb_tx,
else
R_sqrt_ptr2 = NULL;
chan_desc = new_channel_desc(nb_tx,
fill_channel_desc(chan_desc,nb_tx,
nb_rx,
nb_taps,
channel_length,
......@@ -605,7 +610,7 @@ channel_desc_t *new_channel_desc_scm(u8 nb_tx,
else
R_sqrt_ptr2 = NULL;
chan_desc = new_channel_desc(nb_tx,
fill_channel_desc(chan_desc,nb_tx,
nb_rx,
nb_taps,
channel_length,
......@@ -631,7 +636,7 @@ channel_desc_t *new_channel_desc_scm(u8 nb_tx,
aoa = .03;
maxDoppler = 0;
chan_desc = new_channel_desc(nb_tx,
fill_channel_desc(chan_desc,nb_tx,
nb_rx,
nb_taps,
channel_length,
......@@ -657,7 +662,7 @@ channel_desc_t *new_channel_desc_scm(u8 nb_tx,
aoa = 0.0;
maxDoppler = 0;
chan_desc = new_channel_desc(nb_tx,
fill_channel_desc(chan_desc,nb_tx,
nb_rx,
nb_taps,
channel_length,
......@@ -694,7 +699,7 @@ channel_desc_t *new_channel_desc_scm(u8 nb_tx,
else
R_sqrt_ptr2 = NULL;
chan_desc = new_channel_desc(nb_tx,
fill_channel_desc(chan_desc,nb_tx,
nb_rx,
nb_taps,
channel_length,
......@@ -729,7 +734,7 @@ channel_desc_t *new_channel_desc_scm(u8 nb_tx,
else
R_sqrt_ptr2 = NULL;
chan_desc = new_channel_desc(nb_tx,
fill_channel_desc(chan_desc,nb_tx,
nb_rx,
nb_taps,
channel_length,
......@@ -762,7 +767,7 @@ channel_desc_t *new_channel_desc_scm(u8 nb_tx,
}
int random_channel(channel_desc_t *desc) {
int random_channel(channel_desc_t *desc, u8 abstraction_flag) {
double s;
int i,k,l,aarx,aatx;
......@@ -774,7 +779,7 @@ int random_channel(channel_desc_t *desc) {
return(-1);
}
start_meas(&desc->random_channel);
for (i=0;i<(int)desc->nb_taps;i++) {
for (aarx=0;aarx<desc->nb_rx;aarx++) {
for (aatx=0;aatx<desc->nb_tx;aatx++) {
......@@ -862,9 +867,12 @@ int random_channel(channel_desc_t *desc) {
*/
} //nb_taps
stop_meas(&desc->random_channel);
//memset((void *)desc->ch[aarx+(aatx*desc->nb_rx)],0,(int)(desc->channel_length)*sizeof(struct complex));
if (abstraction_flag==0) {
start_meas(&desc->interp_time);
for (aarx=0;aarx<desc->nb_rx;aarx++) {
for (aatx=0;aatx<desc->nb_tx;aatx++) {
if (desc->channel_length == 1) {
......@@ -895,6 +903,8 @@ int random_channel(channel_desc_t *desc) {
} //channel_length
} //aatx
} //aarx
stop_meas(&desc->interp_time);
}
if (desc->first_run==1)
desc->first_run = 0;
......
......@@ -655,6 +655,18 @@ typedef struct{
eNB_STATS eNB_stats;
/// eNB to UE statistics
eNB_UE_STATS eNB_UE_stats[NUMBER_OF_UE_MAX];
// MAC function execution peformance profiler
time_stats_t eNB_scheduler;
time_stats_t schedule_si;
time_stats_t schedule_ra;
time_stats_t schedule_ulsch;
time_stats_t fill_DLSCH_dci;
time_stats_t schedule_dlsch_preprocessor;
time_stats_t schedule_dlsch; // include rlc_data_req + MAC header + preprocessor
time_stats_t schedule_mch;
time_stats_t rx_ulsch_sdu; // include rlc_data_ind
}eNB_MAC_INST;
typedef struct {
......@@ -805,6 +817,14 @@ typedef struct{
uint16_t cba_rnti[NUM_MAX_CBA_GROUP];
uint8_t cba_last_access[NUM_MAX_CBA_GROUP];
//#endif
time_stats_t ue_scheduler; // total
time_stats_t tx_ulsch_sdu; // inlcude rlc_data_req + mac header gen
time_stats_t rx_dlsch_sdu ; // include mac_rrc_data_ind or mac_rlc_status_ind+mac_rlc_data_ind and mac header parser
time_stats_t ue_query_mch;
time_stats_t rx_mch_sdu;
time_stats_t rx_si; // include mac_rrc_data_ind
}UE_MAC_INST;
typedef struct {
......
......@@ -529,6 +529,8 @@ void rx_sdu(module_id_t enb_mod_idP,frame_t frameP,rnti_t rntiP,u8 *sdu, u16 sdu
unsigned short rx_lengths[NB_RB_MAX];
module_id_t ue_mod_id = find_UE_id(enb_mod_idP,rntiP);
int ii,j;
start_meas(&eNB_mac_inst[enb_mod_idP].rx_ulsch_sdu);
for(ii=0; ii<NB_RB_MAX; ii++) rx_lengths[ii] = 0;
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_SDU,1);
......@@ -648,7 +650,7 @@ void rx_sdu(module_id_t enb_mod_idP,frame_t frameP,rnti_t rntiP,u8 *sdu, u16 sdu
}
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_SDU,0);
stop_meas(&eNB_mac_inst[enb_mod_idP].rx_ulsch_sdu);
}
unsigned char generate_dlsch_header(unsigned char *mac_header,
......@@ -986,6 +988,8 @@ void add_ue_spec_dci(DCI_PDU *DCI_pdu,void *pdu,rnti_t rnti,unsigned char dci_si
void schedule_SI(module_id_t module_idP,frame_t frameP, unsigned char *nprb,unsigned int *nCCE) {
start_meas(&eNB_mac_inst[module_idP].schedule_si);
unsigned char bcch_sdu_length;
int mcs = -1;
void *BCCH_alloc_pdu=(void*)&eNB_mac_inst[module_idP].BCCH_alloc_pdu;
......@@ -1088,13 +1092,16 @@ void schedule_SI(module_id_t module_idP,frame_t frameP, unsigned char *nprb,unsi
eNB_mac_inst[module_idP].bcch_active=1;
*nprb=3;
*nCCE=4;
return;
}
eNB_mac_inst[module_idP].bcch_active=0;
*nprb=0;
*nCCE=0;
//LOG_D(MAC,"[eNB %d] Frame %d : BCCH not active \n",module_idP,frameP);
else {
eNB_mac_inst[module_idP].bcch_active=0;
*nprb=0;
*nCCE=0;
//LOG_D(MAC,"[eNB %d] Frame %d : BCCH not active \n",Mod_id,frame);
}
// this might be misleading when bcch is inactive
stop_meas(&eNB_mac_inst[module_idP].schedule_si);
return;
}
#ifdef Rel10
......@@ -1588,6 +1595,7 @@ MCH_PDU *get_mch_sdu(uint8_t module_idP,uint32_t frameP, sub_frame_t subframeP)
// First stage of Random-Access Scheduling
void schedule_RA(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP,unsigned char Msg3_subframe,unsigned char *nprb,unsigned int *nCCE) {
start_meas(&eNB_mac_inst[module_idP].schedule_ra);
RA_TEMPLATE *RA_template = (RA_TEMPLATE *)&eNB_mac_inst[module_idP].RA_template[0];
unsigned char i;//,harq_pid,round;
u16 rrc_sdu_length;
......@@ -1942,6 +1950,7 @@ void schedule_RA(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP,un
*/
}
}
stop_meas(&eNB_mac_inst[module_idP].schedule_ra);
}
// This has to be updated to include BSR information
......@@ -1980,10 +1989,9 @@ u8 rb_table[33] = {1,2,3,4,5,6,8,9,10,12,15,16,18,20,24,25,27,30,32,36,40,45,48,
void schedule_ulsch(module_id_t module_idP, frame_t frameP,unsigned char cooperation_flag,sub_frame_t subframeP, unsigned char sched_subframe,unsigned int *nCCE) {//,int calibration_flag) {
start_meas(&eNB_mac_inst[module_idP].schedule_ulsch);
u8 granted_UEs;
unsigned int nCCE_available;
u16 first_rb=1,i;
granted_UEs = find_ulgranted_UEs(module_idP);
......@@ -2017,6 +2025,7 @@ void schedule_ulsch(module_id_t module_idP, frame_t frameP,unsigned char coopera
if ((eNB_mac_inst[module_idP].num_active_cba_groups > 0) && (*nCCE == 0))
schedule_ulsch_cba_rnti(module_idP, cooperation_flag, frameP, subframeP, sched_subframe, granted_UEs, nCCE, &nCCE_available, &first_rb);
#endif
stop_meas(&eNB_mac_inst[module_idP].schedule_ulsch);
}
#ifdef CBA
......@@ -2660,8 +2669,8 @@ u32 allocate_prbs_sub(int nb_rb, u8 *rballoc) {
void fill_DLSCH_dci(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP,u32 RBalloc,u8 RA_scheduled,int mbsfn_flag) {
// loop over all allocated UEs and compute frequency allocations for PDSCH
module_id_t ue_mod_id = -1;
u8 first_rb,nb_rb=3;
rnti_t rnti;
......@@ -2680,7 +2689,9 @@ void fill_DLSCH_dci(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP
if (mbsfn_flag>0)
return;
start_meas(&eNB_mac_inst[module_idP].fill_DLSCH_dci);
// clear vrb_map
memset(vrb_map,0,100);
......@@ -3392,6 +3403,7 @@ void fill_DLSCH_dci(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP
}
stop_meas(&eNB_mac_inst[module_idP].fill_DLSCH_dci);
}
......@@ -3442,6 +3454,11 @@ void schedule_ue_spec(module_id_t module_idP,
int mcs;
u16 min_rb_unit;
short ta_update = 0;
if (mbsfn_flag>0)
return;
reset_meas(&eNB_mac_inst[module_idP].schedule_dlsch);
switch (mac_xface->lte_frame_parms->N_RB_DL) {
case 6:
......@@ -3461,9 +3478,6 @@ void schedule_ue_spec(module_id_t module_idP,
break;
}
if (mbsfn_flag>0)
return;
//int **rballoc_sub = (int **)malloc(1792*sizeof(int *));
granted_UEs = find_dlgranted_UEs(module_idP);
......@@ -3505,14 +3519,15 @@ void schedule_ue_spec(module_id_t module_idP,
/// CALLING Pre_Processor for downlink scheduling (Returns estimation of RBs required by each UE and the allocation on sub-band)
start_meas(&eNB_mac_inst[module_idP].schedule_dlsch_preprocessor);
dlsch_scheduler_pre_processor(module_idP,
frameP,
subframeP,
dl_pow_off,
pre_nb_available_rbs,
mac_xface->lte_frame_parms->N_RBGS,
rballoc_sub_UE);
frameP,
subframeP,
dl_pow_off,
pre_nb_available_rbs,
mac_xface->lte_frame_parms->N_RBGS,
rballoc_sub_UE);
stop_meas(&eNB_mac_inst[module_idP].schedule_dlsch_preprocessor);
for (ue_mod_id=0;ue_mod_id<granted_UEs;ue_mod_id++) {
......@@ -3596,11 +3611,13 @@ void schedule_ue_spec(module_id_t module_idP,
if (eNB_UE_stats==NULL)
mac_xface->macphy_exit("[MAC][eNB] Cannot find eNB_UE_stats\n");
//eNB_UE_stats->dlsch_mcs1 = openair_daq_vars.target_ue_dl_mcs;
// int flag_LA=0;
//printf("CQI %d\n",eNB_UE_stats->DL_cqi[0]);
eNB_UE_stats->dlsch_mcs1 = cqi_to_mcs[eNB_UE_stats->DL_cqi[0]];
if (openair_daq_vars.target_ue_dl_mcs <= 0) {
eNB_UE_stats->dlsch_mcs1 = cqi_to_mcs[eNB_UE_stats->DL_cqi[0]];
LOG_T(MAC,"CQI %d\n",eNB_UE_stats->DL_cqi[0]);
}
else
eNB_UE_stats->dlsch_mcs1 = openair_daq_vars.target_ue_dl_mcs;
if(eNB_UE_stats->dlsch_mcs1>22)
eNB_UE_stats->dlsch_mcs1=22;
......@@ -4285,10 +4302,12 @@ void schedule_ue_spec(module_id_t module_idP,
}
//printf("MAC nCCE : %d\n",*nCCE_used);
}
stop_meas(&eNB_mac_inst[module_idP].schedule_dlsch);
}
void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,u8 cooperation_flag, frame_t frameP, sub_frame_t subframeP) {//, int calibration_flag) {
start_meas(&eNB_mac_inst[module_idP].eNB_scheduler);
unsigned char nprb=0;
unsigned int nCCE=0;
int mbsfn_status=0;
......@@ -4411,8 +4430,9 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,u8 cooperation_flag, frame
#ifdef Rel10
if (eNB_mac_inst[module_idP].MBMS_flag >0) {
start_meas(&eNB_mac_inst[module_idP].schedule_mch);
mbsfn_status = schedule_MBMS(module_idP,frameP,subframeP);
stop_meas(&eNB_mac_inst[module_idP].schedule_mch);
}
#endif
......@@ -4688,4 +4708,6 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,u8 cooperation_flag, frame
LOG_D(MAC,"frameP %d, subframeP %d nCCE %d\n",frameP,subframeP,nCCE);
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ULSCH_SCHEDULER,0);
stop_meas(&eNB_mac_inst[module_idP].eNB_scheduler);
}
......@@ -106,7 +106,7 @@ unsigned short fill_rar(module_id_t module_idP,
rar[2] |= ((mcs&0x8)>>3); // mcs 10
rar[3] = (((mcs&0x7)<<5)) | ((TPC&7)<<2) | ((ULdelay&1)<<1) | (cqireq&1);
LOG_I(MAC,"[eNB %d][RAPROC] Frame %d Generating RAR (%02x|%02x.%02x.%02x.%02x.%02x.%02x) for ra_idx %d, CRNTI %x,preamble %d/%d,TIMING OFFSET %d\n",module_idP,frame,
LOG_I(MAC,"[eNB %d][RAPROC] Frame %d Generating RAR (%02x|%02x.%02x.%02x.%02x.%02x.%02x) for ra_idx %d, CRNTI %x,preamble %d/%d,TIMING OFFSET %d\n",module_idP,frameP,
*(uint8_t*)rarh,rar[0],rar[1],rar[2],rar[3],rar[4],rar[5],
ra_idx,
eNB_mac_inst[module_idP].RA_template[ra_idx].rnti,
......@@ -118,7 +118,7 @@ unsigned short fill_rar(module_id_t module_idP,
trace_pdu(1, dlsch_buffer, input_buffer_length, module_idP, 2, 1,
eNB_mac_inst[module_idP].subframe, 0, 0);
LOG_I(OPT,"[eNB %d][RAPROC] RAR Frame %d trace pdu for rnti %x and rapid %d size %d\n",
module_idP, frame, eNB_mac_inst[module_idP].RA_template[ra_idx].rnti,
module_idP, frameP, eNB_mac_inst[module_idP].RA_template[ra_idx].rnti,
rarh->RAPID, input_buffer_length);
}
#endif
......@@ -131,7 +131,7 @@ uint16_t ue_process_rar(module_id_t module_idP, frame_t frameP, u8 *dlsch_buffer
// RAR_PDU *rar = (RAR_PDU *)(dlsch_buffer+1);
uint8_t *rar = (uint8_t *)(dlsch_buffer+1);
LOG_I(MAC,"[eNB %d][RAPROC] Frame %d Received RAR (%02x|%02x.%02x.%02x.%02x.%02x.%02x) for preamble %d/%d\n",module_idP,frame,
LOG_I(MAC,"[eNB %d][RAPROC] Frame %d Received RAR (%02x|%02x.%02x.%02x.%02x.%02x.%02x) for preamble %d/%d\n",module_idP,frameP,
*(uint8_t*)rarh,rar[0],rar[1],rar[2],rar[3],rar[4],rar[5],
rarh->RAPID,preamble_index);
#ifdef DEBUG_RAR
......
......@@ -274,6 +274,7 @@ void ue_send_sdu(module_id_t module_idP,frame_t frameP,u8 *sdu,u16 sdu_len,u8 eN
unsigned short rx_lengths[NB_RB_MAX];
unsigned char *tx_sdu;
start_meas(&UE_mac_inst[module_idP].rx_dlsch_sdu);
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SEND_SDU, VCD_FUNCTION_IN);
LOG_T(MAC,"sdu: %x.%x.%x\n",sdu[0],sdu[1],sdu[2]);
......@@ -412,10 +413,12 @@ void ue_send_sdu(module_id_t module_idP,frame_t frameP,u8 *sdu,u16 sdu_len,u8 eN
payload_ptr+= rx_lengths[i];
}
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SEND_SDU, VCD_FUNCTION_OUT);
stop_meas(&UE_mac_inst[module_idP].rx_dlsch_sdu);
}
void ue_decode_si(module_id_t module_idP,frame_t frameP, u8 eNB_index, void *pdu,u16 len) {
start_meas(&UE_mac_inst[module_idP].rx_si);
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_SI, VCD_FUNCTION_IN);
LOG_D(MAC,"[UE %d] Frame %d Sending SI to RRC (LCID Id %d,len %d)\n",module_idP,frameP,BCCH,len);
......@@ -429,6 +432,7 @@ void ue_decode_si(module_id_t module_idP,frame_t frameP, u8 eNB_index, void *pdu
eNB_index,
0);
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_SI, VCD_FUNCTION_OUT);
stop_meas(&UE_mac_inst[module_idP].rx_si);
}
#ifdef Rel10
......@@ -484,7 +488,9 @@ void ue_send_mch_sdu(module_id_t module_idP, frame_t frameP, u8 *sdu, u16 sdu_le
unsigned char rx_lcids[NB_RB_MAX];
unsigned short rx_lengths[NB_RB_MAX];
// vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SEND_MCH_SDU, VCD_FUNCTION_IN);
start_meas(&UE_mac_inst[module_idP].rx_mch_sdu);
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SEND_MCH_SDU, VCD_FUNCTION_IN);
LOG_D(MAC,"[UE %d] Frame %d : process the mch PDU for sync area %d \n",module_idP,frameP, sync_area);
LOG_D(MAC,"[UE %d] sdu: %x.%x\n", module_idP,sdu[0], sdu[1]);
LOG_D(MAC,"[UE %d] parse_mch_header, demultiplex\n",module_idP);
......@@ -534,7 +540,8 @@ void ue_send_mch_sdu(module_id_t module_idP, frame_t frameP, u8 *sdu, u16 sdu_le
payload_ptr += rx_lengths[i];
}
// vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SEND_MCH_SDU, VCD_FUNCTION_OUT);
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SEND_MCH_SDU, VCD_FUNCTION_OUT);
stop_meas(&UE_mac_inst[module_idP].rx_mch_sdu);
}
s8 ue_get_mbsfn_sf_alloction (module_id_t module_idP, u8 mbsfn_sync_area, unsigned char eNB_index){
......@@ -558,7 +565,9 @@ int ue_query_mch(module_id_t module_idP, uint32_t frameP, uint32_t subframe, uin
int mbsfn_period = 0;// 1<<(UE_mac_inst[module_idP].mbsfn_SubframeConfig[0]->radioframeAllocationPeriod);
int mcch_period = 0;// 32<<(UE_mac_inst[module_idP].mbsfn_AreaInfo[0]->mcch_Config_r9.mcch_RepetitionPeriod_r9);
int mch_scheduling_period = -1;
start_meas(&UE_mac_inst[module_idP].ue_query_mch);
if (UE_mac_inst[module_idP].pmch_Config[0])
mch_scheduling_period = 8<<(UE_mac_inst[module_idP].pmch_Config[0]->mch_SchedulingPeriod_r9);
......@@ -757,6 +766,8 @@ int ue_query_mch(module_id_t module_idP, uint32_t frameP, uint32_t subframe, uin
}
} // end of for
stop_meas(&UE_mac_inst[module_idP].ue_query_mch);
if ( (mcch_flag==1))// || (msi_flag==1))
*mcch_active=1;
......@@ -1035,6 +1046,7 @@ void ue_get_sdu(module_id_t module_idP,frame_t frameP,sub_frame_t subframe, u8 e
int j; // used for padding
// Compute header length
start_meas(&UE_mac_inst[module_idP].tx_ulsch_sdu);
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GET_SDU, VCD_FUNCTION_IN);
#ifdef CBA
......@@ -1263,6 +1275,7 @@ void ue_get_sdu(module_id_t module_idP,frame_t frameP,sub_frame_t subframe, u8 e
UE_mac_inst[module_idP].scheduling_info.SR_pending=0;
UE_mac_inst[module_idP].scheduling_info.SR_COUNTER=0;
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GET_SDU, VCD_FUNCTION_OUT);
stop_meas(&UE_mac_inst[module_idP].tx_ulsch_sdu);
}
// called at each subframe
......@@ -1272,8 +1285,6 @@ void ue_get_sdu(module_id_t module_idP,frame_t frameP,sub_frame_t subframe, u8 e
// 3. Perform SR/BSR procedures for scheduling feedback
// 4. Perform PHR procedures
UE_L2_STATE_t ue_scheduler(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP, lte_subframe_t directionP,u8 eNB_indexP) {
int lcid; // lcid index
......@@ -1292,7 +1303,7 @@ UE_L2_STATE_t ue_scheduler(module_id_t module_idP,frame_t frameP, sub_frame_t su
instance_t instance;
int result;
#endif
start_meas(&UE_mac_inst[module_idP].ue_scheduler);
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SCHEDULER, VCD_FUNCTION_IN);
#if defined(ENABLE_ITTI)
......@@ -1329,37 +1340,11 @@ UE_L2_STATE_t ue_scheduler(module_id_t module_idP,frame_t frameP, sub_frame_t su
//Rrc_xface->Frame_index=Mac_rlc_xface->frameP;
//if (subframe%5 == 0)
#ifdef EXMIMO
pdcp_run(frameP, 0, module_idP, eNB_index);
/*
ret = pthread_mutex_trylock (&pdcp_mutex);
if (ret != 0) {
if (ret==EBUSY)
LOG_E(PDCP,"Mutex busy\n");
else
LOG_E(PDCP,"Cannot lock mutex\n");
//return(-1);
}
else {
pdcp_instance_cnt++;
pthread_mutex_unlock(&pdcp_mutex);
if (pdcp_instance_cnt == 0) {
if (pthread_cond_signal(&pdcp_cond) != 0) {
LOG_E(PDCP,"pthread_cond_signal unsuccessfull\n");
//return(-1);
}
}
else {
LOG_W(PDCP,"PDCP thread busy!!! inst_cnt=%d\n",pdcp_instance_cnt);
}
}
*/
pdcp_run(frameP, 0, module_idP, eNB_indexP);
#endif
UE_mac_inst[module_idP].frame = frameP;
UE_mac_inst[module_idP].subframe = subframeP;
#ifdef CELLULAR
rrc_rx_tx(module_idP, frameP, 0, eNB_indexP);
#else
......@@ -1371,10 +1356,14 @@ UE_L2_STATE_t ue_scheduler(module_id_t module_idP,frame_t frameP, sub_frame_t su
break;
case RRC_ConnSetup_failed:
LOG_E(MAC,"RRCConnectionSetup failed, returning to IDLE state\n");
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SCHEDULER, VCD_FUNCTION_OUT);
stop_meas(&UE_mac_inst[module_idP].ue_scheduler);
return(CONNECTION_LOST);
break;
case RRC_PHY_RESYNCH:
LOG_E(MAC,"RRC Loss of synch, returning PHY_RESYNCH\n");
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SCHEDULER, VCD_FUNCTION_OUT);
stop_meas(&UE_mac_inst[module_idP].ue_scheduler);
return(PHY_RESYNCH);
case RRC_Handover_failed:
LOG_N(MAC,"Handover failure for UE %d eNB_index %d\n",module_idP,eNB_indexP);
......@@ -1384,6 +1373,8 @@ UE_L2_STATE_t ue_scheduler(module_id_t module_idP,frame_t frameP, sub_frame_t su
break;
case RRC_HO_STARTED:
LOG_I(MAC,"RRC handover, Instruct PHY to start the contention-free PRACH and synchronization\n");
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SCHEDULER, VCD_FUNCTION_OUT);
stop_meas(&UE_mac_inst[module_idP].ue_scheduler);
return(PHY_HO_PRACH);
default:
break;
......@@ -1397,9 +1388,10 @@ UE_L2_STATE_t ue_scheduler(module_id_t module_idP,frame_t frameP, sub_frame_t su
rach_ConfigCommon = &UE_mac_inst[module_idP].radioResourceConfigCommon->rach_ConfigCommon;
else {
LOG_E(MAC,"FATAL: radioResourceConfigCommon is NULL!!!\n");
mac_xface->macphy_exit("");
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SCHEDULER, VCD_FUNCTION_OUT);
return(RRC_OK);
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SCHEDULER, VCD_FUNCTION_OUT);
stop_meas(&UE_mac_inst[module_idP].ue_scheduler);
mac_xface->macphy_exit("");
//return(RRC_OK);
}
LOG_I(MAC,"Frame %d: Contention resolution timer %d/%d\n",frameP,UE_mac_inst[module_idP].RA_contention_resolution_cnt,
......@@ -1454,6 +1446,7 @@ UE_L2_STATE_t ue_scheduler(module_id_t module_idP,frame_t frameP, sub_frame_t su
UE_mac_inst[module_idP].ul_active=0;
LOG_T(MAC,"[UE %d] Release all SRs \n", module_idP);
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SCHEDULER, VCD_FUNCTION_OUT);
stop_meas(&UE_mac_inst[module_idP].ue_scheduler);
return(CONNECTION_OK);
}
......@@ -1494,6 +1487,7 @@ UE_L2_STATE_t ue_scheduler(module_id_t module_idP,frame_t frameP, sub_frame_t su
}
//If the UE has UL resources allocated for new transmission for this TTI here:
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SCHEDULER, VCD_FUNCTION_OUT);
stop_meas(&UE_mac_inst[module_idP].ue_scheduler);
return(CONNECTION_OK);
}
......
......@@ -88,6 +88,7 @@ boolean_t pdcp_data_req(module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t
u16 current_sn = 0;
mem_block_t *pdcp_pdu_p = NULL;
rlc_op_status_t rlc_status;
boolean_t ret=TRUE;
AssertError (enb_mod_idP < NUMBER_OF_eNB_MAX, return FALSE, "eNB id is too high (%u/%d) %u %u!\n", enb_mod_idP, NUMBER_OF_eNB_MAX, ue_mod_idP, rb_idP);
AssertError (ue_mod_idP < NUMBER_OF_UE_MAX, return FALSE, "UE id is too high (%u/%d) %u %u!\n", ue_mod_idP, NUMBER_OF_UE_MAX, enb_mod_idP, rb_idP);
......@@ -123,7 +124,12 @@ boolean_t pdcp_data_req(module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t
// XXX What does following call do?
mac_xface->macphy_exit("PDCP sdu buffer size > MAX_IP_PACKET_SIZE");
}
if (enb_flagP == 0)
start_meas(&eNB_pdcp_stats[enb_mod_idP].data_req);
else
start_meas(&UE_pdcp_stats[ue_mod_idP].data_req);
// PDCP transparent mode for MBMS traffic
if (modeP == PDCP_TM) {
......@@ -183,7 +189,11 @@ boolean_t pdcp_data_req(module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t
memset(&pdu_header.mac_i[0],0,PDCP_CONTROL_PLANE_DATA_PDU_MAC_I_SIZE);
if (pdcp_serialize_control_plane_data_pdu_with_SRB_sn_buffer((unsigned char*)pdcp_pdu_p->data, &pdu_header) == FALSE) {
LOG_E(PDCP, "Cannot fill PDU buffer with relevant header fields!\n");
return FALSE;
if (enb_flagP == 0)
stop_meas(&eNB_pdcp_stats[enb_mod_idP].data_req);
else
stop_meas(&UE_pdcp_stats[ue_mod_idP].data_req);
return FALSE;
}
} else {
pdcp_user_plane_data_pdu_header_with_long_sn pdu_header;
......@@ -192,7 +202,11 @@ boolean_t pdcp_data_req(module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t
current_sn = pdu_header.sn ;
if (pdcp_serialize_user_plane_data_pdu_with_long_sn_buffer((unsigned char*)pdcp_pdu_p->data, &pdu_header) == FALSE) {
LOG_E(PDCP, "Cannot fill PDU buffer with relevant header fields!\n");
return FALSE;
if (enb_flagP == 0)
stop_meas(&eNB_pdcp_stats[enb_mod_idP].data_req);
else
stop_meas(&UE_pdcp_stats[ue_mod_idP].data_req);
return FALSE;
}
}
/*
......@@ -203,6 +217,10 @@ boolean_t pdcp_data_req(module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t
LOG_E(PDCP, "There must be a problem with PDCP initialization, ignoring this PDU...\n");
free_mem_block(pdcp_pdu_p);
if (enb_flagP == 0)
stop_meas(&eNB_pdcp_stats[enb_mod_idP].data_req);
else
stop_meas(&UE_pdcp_stats[ue_mod_idP].data_req);
return FALSE;
}
......@@ -234,6 +252,10 @@ boolean_t pdcp_data_req(module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t
//util_flush_hex_octets(PDCP, (unsigned char*)pdcp_pdu->data, pdcp_pdu_size);
} else {
LOG_E(PDCP, "Cannot create a mem_block for a PDU!\n");
if (enb_flagP == 0)
stop_meas(&eNB_pdcp_stats[enb_mod_idP].data_req);
else
stop_meas(&UE_pdcp_stats[ue_mod_idP].data_req);
#if defined(STOP_ON_IP_TRAFFIC_OVERLOAD)
AssertFatal(0, "[FRAME %5u][%s][PDCP][MOD %u/%u][RB %u] PDCP_DATA_REQ SDU DROPPED, OUT OF MEMORY \n",
frameP,
......@@ -253,25 +275,32 @@ boolean_t pdcp_data_req(module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t
switch (rlc_status) {
case RLC_OP_STATUS_OK:
LOG_D(PDCP, "Data sending request over RLC succeeded!\n");
ret=TRUE;
break;
case RLC_OP_STATUS_BAD_PARAMETER:
LOG_W(PDCP, "Data sending request over RLC failed with 'Bad Parameter' reason!\n");
return FALSE;
ret= FALSE;
break;
case RLC_OP_STATUS_INTERNAL_ERROR:
LOG_W(PDCP, "Data sending request over RLC failed with 'Internal Error' reason!\n");
return FALSE;
ret= FALSE;
break;
case RLC_OP_STATUS_OUT_OF_RESSOURCES:
LOG_W(PDCP, "Data sending request over RLC failed with 'Out of Resources' reason!\n");
return FALSE;
ret= FALSE;
break;
default:
LOG_W(PDCP, "RLC returned an unknown status code after PDCP placed the order to send some data (Status Code:%d)\n", rlc_status);
return FALSE;
ret= FALSE;
break;
}
if (enb_flagP == 0)
stop_meas(&eNB_pdcp_stats[enb_mod_idP].data_req);
else
stop_meas(&UE_pdcp_stats[ue_mod_idP].data_req);
/*
* Control arrives here only if rlc_data_req() returns RLC_OP_STATUS_OK
* so we return TRUE afterwards
......@@ -286,7 +315,7 @@ boolean_t pdcp_data_req(module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t
Pdcp_stats_tx_bytes[module_id][(rb_id & RAB_OFFSET2 )>> RAB_SHIFT2][(rb_id & RAB_OFFSET)-DTCH] += sdu_buffer_size;
}
}*/
return TRUE;
return ret;
}
......@@ -303,6 +332,11 @@ boolean_t pdcp_data_ind(module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t
pdcp_sn_t sequence_number = 0;
u8 payload_offset = 0;
if (enb_flagP)
start_meas(&eNB_pdcp_stats[enb_mod_idP].data_ind);
else
start_meas(&UE_pdcp_stats[ue_mod_idP].data_ind);
AssertFatal (enb_mod_idP >= oai_emulation.info.first_enb_local,
"eNB inst is too low (%u/%d)!\n",
enb_mod_idP,
......@@ -335,10 +369,14 @@ boolean_t pdcp_data_ind(module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t
enb_mod_idP, ue_mod_idP, rb_idP, sdu_buffer_sizeP, enb_flagP, enb_mod_idP);
}
sdu_list_p = &pdcp_sdu_list;
#
if (sdu_buffer_sizeP == 0) {
LOG_W(PDCP, "SDU buffer size is zero! Ignoring this chunk!\n");
if (enb_flagP)
stop_meas(&eNB_pdcp_stats[enb_mod_idP].data_ind);
else
stop_meas(&UE_pdcp_stats[ue_mod_idP].data_ind);
return FALSE;
}
......@@ -357,7 +395,11 @@ boolean_t pdcp_data_ind(module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t
if (sdu_buffer_sizeP < pdcp_header_len + pdcp_tailer_len ) {
LOG_W(PDCP, "Incoming (from RLC) SDU is short of size (size:%d)! Ignoring...\n", sdu_buffer_sizeP);
free_mem_block(sdu_buffer_pP);
return FALSE;
if (enb_flagP)
stop_meas(&eNB_pdcp_stats[enb_mod_idP].data_ind);
else
stop_meas(&UE_pdcp_stats[ue_mod_idP].data_ind);
return FALSE;
}
/*
......@@ -410,7 +452,11 @@ boolean_t pdcp_data_ind(module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t
(u8*)&sdu_buffer_pP->data[pdcp_header_len]);
free_mem_block(sdu_buffer_pP);
// free_mem_block(new_sdu);
return TRUE;
if (enb_flagP)
stop_meas(&eNB_pdcp_stats[enb_mod_idP].data_ind);
else
stop_meas(&UE_pdcp_stats[ue_mod_idP].data_ind);
return TRUE;
}
payload_offset=PDCP_USER_PLANE_DATA_PDU_LONG_SN_HEADER_SIZE;
#if defined(ENABLE_SECURITY)
......@@ -437,13 +483,21 @@ boolean_t pdcp_data_ind(module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t
if (otg_rx_pkt(src_id, dst_id,ctime,&sdu_buffer_pP->data[payload_offset],
sdu_buffer_sizeP - payload_offset ) == 0 ) {
free_mem_block(sdu_buffer_pP);
return TRUE;
if (enb_flagP)
stop_meas(&eNB_pdcp_stats[enb_mod_idP].data_ind);
else
stop_meas(&UE_pdcp_stats[ue_mod_idP].data_ind);
return TRUE;
}
}
#else
if (otg_enabled==1) {
LOG_D(OTG,"Discarding received packed\n");
free_mem_block(sdu_buffer_pP);
if (enb_flagP)
stop_meas(&eNB_pdcp_stats[enb_mod_idP].data_ind);
else
stop_meas(&UE_pdcp_stats[ue_mod_idP].data_ind);
return TRUE;
}
#endif
......@@ -516,7 +570,10 @@ boolean_t pdcp_data_ind(module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t
#endif
free_mem_block(sdu_buffer_pP);
if (enb_flagP)
stop_meas(&eNB_pdcp_stats[enb_mod_idP].data_ind);
else
stop_meas(&UE_pdcp_stats[ue_mod_idP].data_ind);
return TRUE;
}
......@@ -529,6 +586,10 @@ void pdcp_run (frame_t frameP, eNB_flag_t enb_flagP, module_id_t ue_mod_idP, mo
instance_t instance;
int result;
#endif
if (enb_flagP)
start_meas(&eNB_pdcp_stats[enb_mod_idP].pdcp_run);
else
start_meas(&UE_pdcp_stats[ue_mod_idP].pdcp_run);
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PDCP_RUN, VCD_FUNCTION_IN);
......@@ -602,7 +663,12 @@ void pdcp_run (frame_t frameP, eNB_flag_t enb_flagP, module_id_t ue_mod_idP, mo
// PDCP -> NAS/IP traffic: RX
pdcp_fifo_flush_sdus(frameP, enb_flagP, enb_mod_idP, ue_mod_idP);
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PDCP_RUN, VCD_FUNCTION_OUT);
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PDCP_RUN, VCD_FUNCTION_OUT);
if (enb_flagP)
stop_meas(&eNB_pdcp_stats[enb_mod_idP].pdcp_run);
else
stop_meas(&UE_pdcp_stats[ue_mod_idP].pdcp_run);
}
boolean_t rrc_pdcp_config_asn1_req (module_id_t enb_mod_idP,
......
......@@ -102,6 +102,18 @@ public_pdcp(unsigned int Pdcp_stats_rx_bytes[NB_MODULES_MAX][NB_CNX_CH][NB_RAB_M
public_pdcp(unsigned int Pdcp_stats_rx_bytes_last[NB_MODULES_MAX][NB_CNX_CH][NB_RAB_MAX]);
public_pdcp(unsigned int Pdcp_stats_rx_rate[NB_MODULES_MAX][NB_CNX_CH][NB_RAB_MAX]);
typedef struct pdcp_stats_t {
time_stats_t pdcp_run;
time_stats_t data_req;
time_stats_t data_ind;
time_stats_t encrption;
time_stats_t decrption;
time_stats_t pdcp_ip;
time_stats_t ip_pdcp;
}pdcp_stats_t; // common to eNB and UE
typedef struct pdcp_t {
boolean_t instanciated_instance;
u16 header_compression_profile;
......@@ -384,6 +396,8 @@ typedef struct pdcp_missing_pdu_info_t {
#define PDCP_MAX_SN_12BIT 4095 // 2^12-1
protected_pdcp(signed int pdcp_2_nas_irq;)
public_pdcp(pdcp_stats_t UE_pdcp_stats[NUMBER_OF_UE_MAX];)
public_pdcp(pdcp_stats_t eNB_pdcp_stats[NUMBER_OF_eNB_MAX];)
protected_pdcp(pdcp_t pdcp_array_ue[NUMBER_OF_UE_MAX][NB_RB_MAX];)
protected_pdcp(pdcp_t pdcp_array_eNB[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][NB_RB_MAX];)
#if defined(Rel10)
......
......@@ -59,7 +59,7 @@ void config_req_rlc_um (frame_t frameP,
rlc_p = &rlc_array_ue[ue_module_idP][rb_idP].rlc.um;
}
LOG_D(RLC, "[FRAME %05d][%s][RRC][MOD %u/%u][][--- CONFIG_REQ timer_reordering=%d sn_field_length=%d is_mXch=%d --->][RLC_UM][MOD %u/%u][RB %u] \n",
frame,
frameP,
(eNB_flagP) ? "eNB" : "UE",
enb_module_idP,
ue_module_idP,
......@@ -72,9 +72,9 @@ void config_req_rlc_um (frame_t frameP,
rlc_um_init(rlc_p);
if (rlc_um_fsm_notify_event (rlc_p, RLC_UM_RECEIVE_CRLC_CONFIG_REQ_ENTER_DATA_TRANSFER_READY_STATE_EVENT)) {
rlc_um_set_debug_infos(rlc_p, frame, eNB_flagP, enb_module_idP, ue_module_idP, rb_idP, rb_typeP);
rlc_um_set_debug_infos(rlc_p, frameP, eNB_flagP, enb_module_idP, ue_module_idP, rb_idP, rb_typeP);
rlc_um_configure(rlc_p,
frame,
frameP,
config_um_pP->timer_reordering,
config_um_pP->sn_field_length,
config_um_pP->sn_field_length,
......@@ -120,7 +120,7 @@ void config_req_rlc_um_asn1 (frame_t frameP,
//-----------------------------------------------------------------------------
LOG_D(RLC, "[FRAME %05d][%s][RRC][MOD %u/%u][][--- CONFIG_REQ timer_reordering=%dms sn_field_length= --->][RLC_UM][MOD %u/%u][RB %u] \n",
frame,
frameP,
(eNB_flagP) ? "eNB" : "UE",
enb_module_idP,
ue_module_idP,
......@@ -131,7 +131,7 @@ void config_req_rlc_um_asn1 (frame_t frameP,
rlc_um_init(rlc_p);
if (rlc_um_fsm_notify_event (rlc_p, RLC_UM_RECEIVE_CRLC_CONFIG_REQ_ENTER_DATA_TRANSFER_READY_STATE_EVENT)) {
rlc_um_set_debug_infos(rlc_p, frame, eNB_flagP, enb_module_idP, ue_module_idP, rb_idP, rb_typeP);
rlc_um_set_debug_infos(rlc_p, frameP, eNB_flagP, enb_module_idP, ue_module_idP, rb_idP, rb_typeP);
if (ul_rlc_pP != NULL) {
switch (ul_rlc_pP->sn_FieldLength) {
case SN_FieldLength_size5:
......@@ -142,7 +142,7 @@ void config_req_rlc_um_asn1 (frame_t frameP,
break;
default:
LOG_E(RLC,"[FRAME %05d][%s][RLC_UM][MOD %u/%u][RB %u][CONFIGURE] INVALID Uplink sn_FieldLength %d, RLC NOT CONFIGURED\n",
frame,
frameP,
(rlc_p->is_enb) ? "eNB" : "UE",
rlc_p->enb_module_id,
rlc_p->ue_module_id,
......@@ -162,7 +162,7 @@ void config_req_rlc_um_asn1 (frame_t frameP,
break;
default:
LOG_E(RLC,"[FRAME %05d][%s][RLC_UM][MOD %u/%u][RB %u][CONFIGURE] INVALID Downlink sn_FieldLength %d, RLC NOT CONFIGURED\n",
frame,
frameP,
(rlc_p->is_enb) ? "eNB" : "UE",
rlc_p->enb_module_id,
rlc_p->ue_module_id,
......@@ -174,7 +174,7 @@ void config_req_rlc_um_asn1 (frame_t frameP,
t_Reordering = t_Reordering_tab[dl_rlc_pP->t_Reordering];
} else {
LOG_E(RLC,"[FRAME %05d][%s][RLC_UM][MOD %u/%u][RB %u][CONFIGURE] INVALID T_Reordering %d, RLC NOT CONFIGURED\n",
frame,
frameP,
(rlc_p->is_enb) ? "eNB" : "UE",
rlc_p->enb_module_id,
rlc_p->ue_module_id,
......@@ -185,14 +185,14 @@ void config_req_rlc_um_asn1 (frame_t frameP,
}
if (eNB_flagP > 0) {
rlc_um_configure(rlc_p,
frame,
frameP,
t_Reordering,
ul_sn_FieldLength,
dl_sn_FieldLength,
mbms_flagP);
} else {
rlc_um_configure(rlc_p,
frame,
frameP,
t_Reordering,
dl_sn_FieldLength,
ul_sn_FieldLength,
......@@ -321,7 +321,7 @@ void rlc_um_configure(rlc_um_entity_t *rlc_pP,
rlc_pP->rx_header_min_length_in_bytes = 1;
} else if (rx_sn_field_lengthP != 0) {
LOG_E(RLC, "[FRAME %05d][%s][RLC_UM][MOD %u/%u][RB %u][CONFIGURE] INVALID RX SN LENGTH %d BITS NOT IMPLEMENTED YET, RLC NOT CONFIGURED\n",
frame,
frameP,
(rlc_pP->is_enb) ? "eNB" : "UE",
rlc_pP->enb_module_id,
rlc_pP->ue_module_id,
......@@ -342,7 +342,7 @@ void rlc_um_configure(rlc_um_entity_t *rlc_pP,
rlc_pP->tx_header_min_length_in_bytes = 1;
} else if (tx_sn_field_lengthP != 0) {
LOG_E(RLC, "[FRAME %05d][%s][RLC_UM][MOD %02d/%02][RB %u][CONFIGURE] INVALID RX SN LENGTH %d BITS NOT IMPLEMENTED YET, RLC NOT CONFIGURED\n",
frame,
frameP,
(rlc_pP->is_enb) ? "eNB" : "UE",
rlc_pP->enb_module_id,
rlc_pP->ue_module_id,
......@@ -378,7 +378,7 @@ void rlc_um_set_debug_infos(rlc_um_entity_t *rlc_pP,
//-----------------------------------------------------------------------------
{
LOG_D(RLC, "[FRAME %05d][%s][RLC_UM][SET DEBUG INFOS] enb_module_id %u ue_module_id %u rb_id %d rb_type %d\n",
frame,
frameP,
(rlc_pP->is_enb) ? "eNB" : "UE",
eNB_flagP,
enb_module_idP,
......
......@@ -436,7 +436,7 @@ rlc_op_status_t rlc_data_req (module_id_t enb_mod_idP,
if (MBMS_flagP == 0) {
LOG_D(RLC, "[FRAME %5u][%s][RLC][INST %u/%u][RB %u] Display of rlc_data_req:\n",
frame,
frameP,
(eNB_flagP) ? "eNB" : "UE",
enb_mod_idP,
ue_mod_idP,
......@@ -476,7 +476,7 @@ rlc_op_status_t rlc_data_req (module_id_t enb_mod_idP,
if (((rlc_am_entity_t*)rlc_p)->is_data_plane) {
LOG_D(RLC, "[FRAME %5u][%s][PDCP][INST %u/%u][RB %u][--- RLC_AM_DATA_REQ/%d Bytes --->][RLC_AM][INST %u/%u][RB %u]\n",
frame,
frameP,
(eNB_flagP) ? "eNB" : "UE",
enb_mod_idP,
ue_mod_idP,
......@@ -487,7 +487,7 @@ rlc_op_status_t rlc_data_req (module_id_t enb_mod_idP,
rb_idP);
} else {
LOG_D(RLC, "[FRAME %5u][%s][RRC][INST %u/%u][][--- RLC_AM_DATA_REQ/%d Bytes --->][RLC_AM][INST %u/%u][RB %u]\n",
frame,
frameP,
(eNB_flagP) ? "eNB" : "UE",
enb_mod_idP,
ue_mod_idP,
......@@ -498,7 +498,7 @@ rlc_op_status_t rlc_data_req (module_id_t enb_mod_idP,
rb_idP);
}
LOG_D(RLC, "%s\n",RLC_FG_COLOR_DEFAULT);
rlc_am_data_req((rlc_am_entity_t*)rlc_p, frame, new_sdu_p);
rlc_am_data_req((rlc_am_entity_t*)rlc_p, frameP, new_sdu_p);
return RLC_OP_STATUS_OK;
} else {
return RLC_OP_STATUS_INTERNAL_ERROR;
......@@ -520,7 +520,7 @@ rlc_op_status_t rlc_data_req (module_id_t enb_mod_idP,
LOG_D(RLC, "%s\n",RLC_FG_BRIGHT_COLOR_RED);
if (((rlc_am_entity_t*)rlc_p)->is_data_plane) {
LOG_D(RLC, "[FRAME %5u][%s][PDCP][INST %u/%u][RB %u][--- RLC_UM_DATA_REQ/%d Bytes --->][RLC_UM][INST %u/%u][RB %u]\n",
frame,
frameP,
(eNB_flagP) ? "eNB" : "UE",
enb_mod_idP,
ue_mod_idP,
......@@ -531,7 +531,7 @@ rlc_op_status_t rlc_data_req (module_id_t enb_mod_idP,
rb_idP);
} else {
LOG_D(RLC, "[FRAME %5u][%s][RRC][INST %u/%u][][--- RLC_UM_DATA_REQ/%d Bytes --->][RLC_UM][INST %u/%u][RB %u]\n",
frame,
frameP,
(eNB_flagP) ? "eNB" : "UE",
enb_mod_idP,
ue_mod_idP,
......@@ -542,7 +542,7 @@ rlc_op_status_t rlc_data_req (module_id_t enb_mod_idP,
rb_idP);
}
LOG_D(RLC, "%s\n",RLC_FG_COLOR_DEFAULT);
rlc_um_data_req((rlc_um_entity_t*)rlc_p, frame, new_sdu_p);
rlc_um_data_req((rlc_um_entity_t*)rlc_p, frameP, new_sdu_p);
//free_mem_block(new_sdu);
return RLC_OP_STATUS_OK;
......@@ -565,7 +565,7 @@ rlc_op_status_t rlc_data_req (module_id_t enb_mod_idP,
LOG_D(RLC, "%s\n",RLC_FG_BRIGHT_COLOR_RED);
if (((rlc_tm_entity_t*)rlc_p)->is_data_plane) {
LOG_D(RLC, "[FRAME %5u][%s][PDCP][INST %u/%u][RB %u][--- RLC_TM_DATA_REQ/%d Bytes --->][RLC_TM][INST %u/%u][RB %u]\n",
frame,
frameP,
(eNB_flagP) ? "eNB" : "UE",
enb_mod_idP,
ue_mod_idP,
......@@ -576,7 +576,7 @@ rlc_op_status_t rlc_data_req (module_id_t enb_mod_idP,
rb_idP);
} else {
LOG_D(RLC, "[FRAME %5u][%s][RRC][INST %u/%u][][--- RLC_TM_DATA_REQ/%d Bytes --->][RLC_TM][INST %u/%u][RB %u]\n",
frame,
frameP,
(eNB_flagP) ? "eNB" : "UE",
enb_mod_idP,
ue_mod_idP,
......@@ -626,7 +626,7 @@ rlc_op_status_t rlc_data_req (module_id_t enb_mod_idP,
LOG_D(RLC, "%s\n",RLC_FG_BRIGHT_COLOR_RED);
if (rlc_um_p->is_data_plane) {
LOG_D(RLC, "[FRAME %5u][PDCP][INST %u/%u][RB %u][--- RLC_UM_DATA_REQ/%d Bytes (MBMS) --->][RLC_UM][INST %u/%u][RB %u]\n",
frame,
frameP,
enb_mod_idP,
ue_mod_idP,
rb_idP,
......@@ -639,7 +639,7 @@ rlc_op_status_t rlc_data_req (module_id_t enb_mod_idP,
} else {
if (eNB_flagP) {
LOG_D(RLC, "[FRAME %5u][RRC_eNB][INST %u/%u][][--- RLC_UM_DATA_REQ/%d Bytes (MBMS) --->][RLC_UM][INST %u/%u][RB %u]\n",
frame,
frameP,
enb_mod_idP,
ue_mod_idP,
rb_idP,
......@@ -650,7 +650,7 @@ rlc_op_status_t rlc_data_req (module_id_t enb_mod_idP,
mbms_rb_id);
} else {
LOG_D(RLC, "[FRAME %5u][RRC_UE][INST %u/%u][][--- RLC_UM_DATA_REQ/%d Bytes (MBMS) --->][RLC_UM][INST %u/%u][RB %u]\n",
frame,
frameP,
enb_mod_idP,
ue_mod_idP,
rb_idP,
......@@ -701,7 +701,7 @@ void rlc_data_ind (module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t
}
LOG_D(RLC, "[FRAME %5u][%s][RLC][INST %u/%u][RB %u] Display of rlc_data_ind: size %u\n",
frame,
frameP,
(eNB_flagP) ? "eNB" : "UE",
enb_mod_idP,
ue_mod_idP,
......@@ -718,7 +718,7 @@ void rlc_data_ind (module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t
break;
case RLC_MODE_AM:
LOG_D(RLC, "[FRAME %5u][%s][RLC_AM][INST %u/%u][RB %u][--- RLC_DATA_IND/%d Bytes --->][PDCP][INST %u/%u][RB %u]\n",
frame,
frameP,
(eNB_flagP) ? "eNB" : "UE",
enb_mod_idP,
ue_mod_idP,
......@@ -730,7 +730,7 @@ void rlc_data_ind (module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t
break;
case RLC_MODE_UM:
LOG_D(RLC, "[FRAME %5u][%s][RLC_UM][INST %u/%u][RB %u][--- RLC_DATA_IND/%d Bytes --->][PDCP][INST %u/%u][RB %u]\n",
frame,
frameP,
(eNB_flagP) ? "eNB" : "UE",
enb_mod_idP,
ue_mod_idP,
......@@ -742,7 +742,7 @@ void rlc_data_ind (module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t
break;
case RLC_MODE_TM:
LOG_D(RLC, "[FRAME %5u][%s][RLC_TM][INST %u/%u][RB %u][--- RLC_DATA_IND/%d Bytes --->][PDCP][INST %u/%u][RB %u]\n",
frame,
frameP,
(eNB_flagP) ? "eNB" : "UE",
enb_mod_idP,
ue_mod_idP,
......@@ -753,7 +753,7 @@ void rlc_data_ind (module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t
rb_idP);
break;
}
pdcp_data_ind (enb_mod_idP, ue_mod_idP, frame, eNB_flagP, MBMS_flagP, rb_idP % NB_RB_MAX, sdu_sizeP, sdu_pP, is_data_planeP);
pdcp_data_ind (enb_mod_idP, ue_mod_idP, frameP, eNB_flagP, MBMS_flagP, rb_idP % NB_RB_MAX, sdu_sizeP, sdu_pP, is_data_planeP);
}
//-----------------------------------------------------------------------------
void rlc_data_conf (module_id_t enb_mod_idP,
......@@ -780,7 +780,7 @@ void rlc_data_conf (module_id_t enb_mod_idP,
break;
case RLC_MODE_AM:
LOG_D(RLC, "[FRAME %5u][%s][RLC_AM][INST %u/%u][RB %u][--- RLC_DATA_CONF /MUI %d --->][RRC][INST %u/%u][][RLC_DATA_CONF/ MUI %d]\n",
frame,
frameP,
(eNB_flagP) ? "eNB" : "UE",
enb_mod_idP,
ue_mod_idP,
......@@ -791,7 +791,7 @@ void rlc_data_conf (module_id_t enb_mod_idP,
break;
case RLC_MODE_UM:
LOG_D(RLC, "[FRAME %5u][%s][RLC_UM][INST %u/%u][RB %u][--- RLC_DATA_CONF /MUI %d --->][RRC][INST %u/%u][][RLC_DATA_CONF/ MUI %d]\n",
frame,
frameP,
(eNB_flagP) ? "eNB" : "UE",
enb_mod_idP,
ue_mod_idP,
......@@ -802,7 +802,7 @@ void rlc_data_conf (module_id_t enb_mod_idP,
break;
case RLC_MODE_TM:
LOG_D(RLC, "[FRAME %5u][%s][RLC_TM][INST %u/%u][RB %u][--- RLC_DATA_CONF /MUI %d --->][RRC][INST %u/%u][][RLC_DATA_CONF/ MUI %d]\n",
frame,
frameP,
(eNB_flagP) ? "eNB" : "UE",
enb_mod_idP,
ue_mod_idP,
......
This diff is collapsed.
......@@ -304,9 +304,9 @@ void rrc_t310_expiration(frame_t frameP, u8 Mod_id, u8 eNB_index) {
if (UE_rrc_inst[Mod_id].Srb2[eNB_index].Active == 1) {
msg ("[RRC Inst %d] eNB_index %d, Remove RB %d\n ", Mod_id, eNB_index,
UE_rrc_inst[Mod_id].Srb2[eNB_index].Srb_info.Srb_id);
rrc_pdcp_config_req (eNB_index, Mod_id, frame, 0, ACTION_REMOVE,
rrc_pdcp_config_req (eNB_index, Mod_id, frameP, 0, ACTION_REMOVE,
UE_rrc_inst[Mod_id].Srb2[eNB_index].Srb_info.Srb_id, 0);
rrc_rlc_config_req (eNB_index, Mod_id, frame, 0, ACTION_REMOVE,
rrc_rlc_config_req (eNB_index, Mod_id, frameP, 0, ACTION_REMOVE,
UE_rrc_inst[Mod_id].Srb2[eNB_index].Srb_info.Srb_id, SIGNALLING_RADIO_BEARER, Rlc_info_um);
UE_rrc_inst[Mod_id].Srb2[eNB_index].Active = 0;
UE_rrc_inst[Mod_id].Srb2[eNB_index].Status = IDLE;
......@@ -326,13 +326,13 @@ RRC_status_t rrc_rx_tx(u8 Mod_id,frame_t frameP, eNB_flag_t eNB_flagP,u8 index){
if (UE_rrc_inst[Mod_id].Info[index].T300_active == 1) {
if ((UE_rrc_inst[Mod_id].Info[index].T300_cnt % 10) == 0)
LOG_D(RRC,
"[UE %d][RAPROC] Frame %d T300 Count %d ms\n", Mod_id, frame, UE_rrc_inst[Mod_id].Info[index].T300_cnt);
"[UE %d][RAPROC] Frame %d T300 Count %d ms\n", Mod_id, frameP, UE_rrc_inst[Mod_id].Info[index].T300_cnt);
if (UE_rrc_inst[Mod_id].Info[index].T300_cnt
== T300[UE_rrc_inst[Mod_id].sib2[index]->ue_TimersAndConstants.t300]) {
UE_rrc_inst[Mod_id].Info[index].T300_active = 0;
// ALLOW CCCH to be used
UE_rrc_inst[Mod_id].Srb0[index].Tx_buffer.payload_size = 0;
rrc_ue_generate_RRCConnectionRequest (Mod_id, frame, index);
rrc_ue_generate_RRCConnectionRequest (Mod_id, frameP, index);
return (RRC_ConnSetup_failed);
}
UE_rrc_inst[Mod_id].Info[index].T300_cnt++;
......@@ -356,11 +356,11 @@ RRC_status_t rrc_rx_tx(u8 Mod_id,frame_t frameP, eNB_flag_t eNB_flagP,u8 index){
UE_rrc_inst[Mod_id].Info[index].N311_cnt = 0;
}
if ((UE_rrc_inst[Mod_id].Info[index].T310_cnt % 10) == 0)
LOG_D(RRC, "[UE %d] Frame %d T310 Count %d ms\n", Mod_id, frame, UE_rrc_inst[Mod_id].Info[index].T310_cnt);
LOG_D(RRC, "[UE %d] Frame %d T310 Count %d ms\n", Mod_id, frameP, UE_rrc_inst[Mod_id].Info[index].T310_cnt);
if (UE_rrc_inst[Mod_id].Info[index].T310_cnt
== T310[UE_rrc_inst[Mod_id].sib2[index]->ue_TimersAndConstants.t310]) {
UE_rrc_inst[Mod_id].Info[index].T310_active = 0;
rrc_t310_expiration (frame, Mod_id, index);
rrc_t310_expiration (frameP, Mod_id, index);
return (RRC_PHY_RESYNCH);
}
UE_rrc_inst[Mod_id].Info[index].T310_cnt++;
......@@ -369,7 +369,7 @@ RRC_status_t rrc_rx_tx(u8 Mod_id,frame_t frameP, eNB_flag_t eNB_flagP,u8 index){
if (UE_rrc_inst[Mod_id].Info[index].T304_active==1) {
if ((UE_rrc_inst[Mod_id].Info[index].T304_cnt % 10) == 0)
LOG_D(RRC,"[UE %d][RAPROC] Frame %d T304 Count %d ms\n",Mod_id,frame,
LOG_D(RRC,"[UE %d][RAPROC] Frame %d T304 Count %d ms\n",Mod_id,frameP,
UE_rrc_inst[Mod_id].Info[index].T304_cnt);
if (UE_rrc_inst[Mod_id].Info[index].T304_cnt == 0) {
UE_rrc_inst[Mod_id].Info[index].T304_active = 0;
......@@ -382,11 +382,11 @@ RRC_status_t rrc_rx_tx(u8 Mod_id,frame_t frameP, eNB_flag_t eNB_flagP,u8 index){
}
// Layer 3 filtering of RRC measurements
if (UE_rrc_inst[Mod_id].QuantityConfig[0] != NULL) {
ue_meas_filtering(Mod_id,frame,index);
ue_meas_filtering(Mod_id,frameP,index);
}
ue_measurement_report_triggering(Mod_id,frame,index);
ue_measurement_report_triggering(Mod_id,frameP,index);
if (UE_rrc_inst[Mod_id].Info[0].handoverTarget > 0)
LOG_I(RRC,"[UE %d] Frame %d : RRC handover initiated\n", Mod_id, frame);
LOG_I(RRC,"[UE %d] Frame %d : RRC handover initiated\n", Mod_id, frameP);
if((UE_rrc_inst[Mod_id].Info[index].State == RRC_HO_EXECUTION) &&
(UE_rrc_inst[Mod_id].HandoverInfoUe.targetCellId != 0xFF)) {
UE_rrc_inst[Mod_id].Info[index].State= RRC_IDLE;
......@@ -395,7 +395,7 @@ RRC_status_t rrc_rx_tx(u8 Mod_id,frame_t frameP, eNB_flag_t eNB_flagP,u8 index){
}
else {
check_handovers(Mod_id,frame);
check_handovers(Mod_id,frameP);
}
return (RRC_OK);
......
......@@ -88,6 +88,7 @@ typedef enum
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_PROCESS_RAR,
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SCHEDULER,
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GET_SR,
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SEND_MCH_SDU,
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_MEASUREMENT_PROCEDURES,
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_PDCCH_PROCEDURES,
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_PBCH_PROCEDURES,
......
......@@ -657,12 +657,13 @@ The following diagram is based on graphviz (http://www.graphviz.org/), you need
unsigned char multicast_group;
char *multicast_ifname;
// status
unsigned char ocg_enabled;
unsigned char ocm_enabled;
unsigned char opt_enabled;
unsigned char opt_mode;
unsigned char otg_enabled;
unsigned char omv_enabled;
unsigned char ocg_enabled; // openair config generator
unsigned char ocm_enabled; // openair channel modeling
unsigned char opt_enabled;//openair packet tracer
unsigned char opt_mode; // openair packet tracer mode: wireshark, pcap
unsigned char otg_enabled; // openair traffic generator
unsigned char omv_enabled; // openair mobility visulizer
unsigned char opp_enabled; // openair performance profiler
char *itti_dump_file;
unsigned char vcd_enabled;
char *vcd_file;
......
......@@ -1118,7 +1118,7 @@ static void get_options (int argc, char **argv)
{"no-L2-connect", no_argument, NULL, LONG_OPTION_NO_L2_CONNECT},
{NULL, 0, NULL, 0}};
while ((c = getopt_long (argc, argv, "C:dF:K:O:ST:UV",long_options,NULL)) != -1)
while ((c = getopt_long (argc, argv, "C:dF:K:qO:ST:UV",long_options,NULL)) != -1)
{
switch (c)
{
......@@ -1254,7 +1254,10 @@ static void get_options (int argc, char **argv)
case 'V':
ouput_vcd = 1;
break;
/* case 'q':
opp_enabled = 1;
break;
*/
default:
break;
}
......
......@@ -17,7 +17,13 @@ CPUFLAGS += $(shell if grep --silent ssse3 /proc/cpuinfo ; then echo "-mssse3" ;
CPUFLAGS += $(shell if grep --silent -w sse4 /proc/cpuinfo ; then echo "-msse4" ; else echo ""; fi)
linux = $(shell if [ `uname` = "Linux" ] ; then echo "1" ; else echo "0" ; fi)
CFLAGS += -g -ggdb -Wstrict-prototypes -Wpointer-sign
ifdef DEBUG
CFLAGS += -g -ggdb -DDEBUG_PHY
else
CFLAGE += -O2
endif
CFLAGS += -Wstrict-prototypes -Wpointer-sign
CFLAGS += -DUSER_MODE -DNB_ANTENNAS_RX=2 -DNB_ANTENNAS_TXRX=2 -DNB_ANTENNAS_TX=2 $(CPUFLAGS) -I/usr/include/X11 #-Wno-packed-bitfield-compat
# Check if GCC version is greater or equal to 4.4
......@@ -94,10 +100,6 @@ else
endif
endif
ifdef DEBUG_PHY
CFLAGS += -DDEBUG_PHY
endif
ifdef JF
CFLAGS += -DJUMBO_FRAME
endif
......
This diff is collapsed.
This diff is collapsed.
......@@ -45,4 +45,16 @@ void do_OFDM_mod(mod_sym_t **txdataF, s32 **txdata, frame_t frame, u16 next_slot
#ifdef OPENAIR2
int omv_write (int pfd, Node_list enb_node_list, Node_list ue_node_list, Data_Flow_Unit omv_data);
void omv_end (int pfd, Data_Flow_Unit omv_data);
void reset_opp_meas(void);
void print_opp_meas(void);
#endif
......@@ -337,6 +337,8 @@ void init_oai_emulation() {
oai_emulation.info.cli_enabled=0;// I flag
oai_emulation.info.omv_enabled =0; // v flag
oai_emulation.info.vcd_enabled=0;
oai_emulation.info.opp_enabled=0;
oai_emulation.info.cba_group_active=0;
oai_emulation.info.eMBMS_active_state=0;
oai_emulation.info.handover_active=0;
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment