lte-softmodem now uses new thread for pdcp
updated llr scaling for PDCCH and PDSCH in TM5 initialized all newly allocated memory to 0 in new_eNB/UE_ulsch/dlsch and setting pointers to 0 after freeing memory in free_eNB/UE_ulsch/dlsch some small modifications related to EMOS (from the MU-MIMO measurement campaign) git-svn-id: http://svn.eurecom.fr/openair4G/trunk@4480 818b1a75-f10b-46b9-bf7c-635c3b92a50f
This commit is contained in:
@@ -19,6 +19,7 @@
|
||||
#include "UTIL/LOG/log.h"
|
||||
|
||||
extern unsigned int dlsch_tbs25[27][25],TBStable[27][110];
|
||||
extern unsigned char offset_mumimo_llr_drange_fix;
|
||||
|
||||
#ifdef XFORMS
|
||||
#include "PHY/TOOLS/lte_phy_scope.h"
|
||||
@@ -297,7 +298,7 @@ int main(int argc, char **argv) {
|
||||
snr0 = 0;
|
||||
num_layers = 1;
|
||||
|
||||
while ((c = getopt (argc, argv, "hadpDe:m:n:o:s:f:t:c:g:r:F:x:y:z:M:N:I:i:R:S:C:T:b:u:v:w:B:PL")) != -1) {
|
||||
while ((c = getopt (argc, argv, "hadpDe:m:n:o:s:f:t:c:g:r:F:x:y:z:M:N:I:i:R:S:C:T:b:u:v:w:B:PLl:")) != -1) {
|
||||
switch (c)
|
||||
{
|
||||
case 'a':
|
||||
@@ -486,6 +487,9 @@ int main(int argc, char **argv) {
|
||||
case 'L':
|
||||
llr8_flag=1;
|
||||
break;
|
||||
case 'l':
|
||||
offset_mumimo_llr_drange_fix=atoi(optarg);
|
||||
break;
|
||||
case 'h':
|
||||
default:
|
||||
printf("%s -h(elp) -a(wgn on) -d(ci decoding on) -p(extended prefix on) -m mcs -n n_frames -s snr0 -x transmission mode (1,2,5,6) -y TXant -z RXant -I trch_file\n",argv[0]);
|
||||
@@ -1082,7 +1086,7 @@ int main(int argc, char **argv) {
|
||||
}
|
||||
memcpy(&dci_alloc[num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes);
|
||||
dci_alloc[num_dci].dci_length = dci_length;
|
||||
dci_alloc[num_dci].L = 2;
|
||||
dci_alloc[num_dci].L = 1;
|
||||
dci_alloc[num_dci].rnti = SI_RNTI;
|
||||
dci_alloc[num_dci].format = format1A;
|
||||
dci_alloc[num_dci].nCCE = 0;
|
||||
@@ -2401,12 +2405,12 @@ int main(int argc, char **argv) {
|
||||
}
|
||||
|
||||
} //ABStraction
|
||||
if(num_rounds==1){
|
||||
bler= (double)errs[0]/(round_trials[0]);
|
||||
if(num_rounds==1){
|
||||
bler= (double)errs[0]/(round_trials[0]);
|
||||
if (bler<1)
|
||||
{snr_step = input_snr_step; saving_bler = 0;}
|
||||
{snr_step = input_snr_step; saving_bler = 0;}
|
||||
else
|
||||
{snr_step = 1; saving_bler = 1;}
|
||||
{snr_step = 1; saving_bler = 1;}
|
||||
}
|
||||
if (((double)errs[0]/(round_trials[0]))<1e-2)
|
||||
break;
|
||||
@@ -2459,6 +2463,8 @@ int main(int argc, char **argv) {
|
||||
|
||||
// lte_sync_time_free();
|
||||
|
||||
printf("[MUMIMO] mcs %d, mcsi %d, offset %d, bler %f\n",mcs,mcs_i,offset_mumimo_llr_drange_fix,((double)errs[0])/((double)round_trials[0]));
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
||||
@@ -237,9 +237,56 @@ channel_desc_t *new_channel_desc_scm(u8 nb_tx,
|
||||
}
|
||||
break;
|
||||
case SCM_D:
|
||||
LOG_W(OCM,"channel model not yet supported\n");
|
||||
free(chan_desc);
|
||||
return(NULL);
|
||||
LOG_W(OCM,"This is not the real SCM-D model! It is just SCM-C with an additional Rice factor!\n");
|
||||
chan_desc->nb_taps = 18;
|
||||
chan_desc->Td = 4.625;
|
||||
chan_desc->channel_length = (int) (2*chan_desc->BW*chan_desc->Td + 1 + 2/(M_PI*M_PI)*log(4*M_PI*chan_desc->BW*chan_desc->Td));
|
||||
sum_amps = 0;
|
||||
chan_desc->amps = (double*) malloc(chan_desc->nb_taps*sizeof(double));
|
||||
for (i = 0; i<chan_desc->nb_taps; i++) {
|
||||
chan_desc->amps[i] = pow(10,.1*scm_c_amps_dB[i]);
|
||||
sum_amps += chan_desc->amps[i];
|
||||
}
|
||||
for (i = 0; i<chan_desc->nb_taps; i++)
|
||||
chan_desc->amps[i] /= sum_amps;
|
||||
chan_desc->delays = scm_c_delays;
|
||||
chan_desc->ricean_factor = 0.1;
|
||||
chan_desc->aoa = 0;
|
||||
chan_desc->random_aoa = 0;
|
||||
chan_desc->ch = (struct complex**) malloc(nb_tx*nb_rx*sizeof(struct complex*));
|
||||
chan_desc->chF = (struct complex**) malloc(nb_tx*nb_rx*sizeof(struct complex*));
|
||||
chan_desc->a = (struct complex**) malloc(chan_desc->nb_taps*sizeof(struct complex*));
|
||||
for (i = 0; i<nb_tx*nb_rx; i++)
|
||||
chan_desc->ch[i] = (struct complex*) malloc(chan_desc->channel_length * sizeof(struct complex));
|
||||
for (i = 0; i<nb_tx*nb_rx; i++)
|
||||
chan_desc->chF[i] = (struct complex*) malloc(1200 * sizeof(struct complex));
|
||||
for (i = 0; i<chan_desc->nb_taps; i++)
|
||||
chan_desc->a[i] = (struct complex*) malloc(nb_tx*nb_rx * sizeof(struct complex));
|
||||
|
||||
chan_desc->R_sqrt = (struct complex**) malloc(6*sizeof(struct complex**));
|
||||
if (nb_tx==2 && nb_rx==2) {
|
||||
for (i = 0; i<6; i++)
|
||||
chan_desc->R_sqrt[i] = (struct complex*) &R22_sqrt[i][0];
|
||||
}
|
||||
else if (nb_tx==2 && nb_rx==1) {
|
||||
for (i = 0; i<6; i++)
|
||||
chan_desc->R_sqrt[i] = (struct complex*) &R21_sqrt[i][0];
|
||||
}
|
||||
else if (nb_tx==1 && nb_rx==2) {
|
||||
for (i = 0; i<6; i++)
|
||||
chan_desc->R_sqrt[i] = (struct complex*) &R12_sqrt[i][0];
|
||||
}
|
||||
else {
|
||||
for (i = 0; i<6; i++) {
|
||||
chan_desc->R_sqrt[i] = (struct complex*) malloc(nb_tx*nb_rx*nb_tx*nb_rx * sizeof(struct complex));
|
||||
for (j = 0; j<nb_tx*nb_rx*nb_tx*nb_rx; j+=(nb_tx*nb_rx+1)) {
|
||||
chan_desc->R_sqrt[i][j].x = 1.0;
|
||||
chan_desc->R_sqrt[i][j].y = 0.0;
|
||||
}
|
||||
LOG_W(OCM,"correlation matrix not implemented for nb_tx==%d and nb_rx==%d, using identity\n", nb_tx, nb_rx);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case EPA:
|
||||
chan_desc->nb_taps = 7;
|
||||
chan_desc->Td = .410;
|
||||
|
||||
Reference in New Issue
Block a user