few more fixes
This commit is contained in:
@@ -203,7 +203,10 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
|
||||
frame_parms,
|
||||
dlsch0_harq->mimo_mode);
|
||||
//#ifdef DEBUG_DLSCH_MOD
|
||||
printf("dlsch: using pmi %lx, rb_alloc %x, pmi_ext %x\n",pmi2hex_2Ar1(dlsch0_harq->pmi_alloc),*rballoc,*lte_ue_pdsch_vars[eNB_id]->pmi_ext);
|
||||
printf("dlsch: using pmi %lx, rb_alloc %x, pmi_ext ",pmi2hex_2Ar1(dlsch0_harq->pmi_alloc),*rballoc);
|
||||
for (rb=0;rb<nb_rb;rb++)
|
||||
printf("%d",lte_ue_pdsch_vars[eNB_id]->pmi_ext[rb]);
|
||||
printf("\n");
|
||||
//#endif
|
||||
|
||||
if (rx_type==rx_IC_single_stream) {
|
||||
@@ -1381,17 +1384,19 @@ void prec2A_TM4_128(int pmi,__m128i *ch0,__m128i *ch1) {
|
||||
ch0[0] = _mm_adds_epi16(tmp0,tmp1);
|
||||
ch1[0] = _mm_subs_epi16(tmp0,tmp1);
|
||||
}
|
||||
else {
|
||||
else { //[1 j; 1 -j]
|
||||
tmp0 = ch0[0];
|
||||
tmp1 = _mm_sign_epi16(ch1[0],*(__m128i*)&conjugate[0]);
|
||||
tmp1 = _mm_shufflelo_epi16(tmp1,_MM_SHUFFLE(2,3,0,1));
|
||||
tmp1 = _mm_shufflehi_epi16(tmp1,_MM_SHUFFLE(2,3,0,1));
|
||||
ch0[0] = _mm_subs_epi16(tmp0,tmp1);
|
||||
tmp1 = ch1[0];
|
||||
ch0[0] = _mm_adds_epi16(tmp0,tmp1);
|
||||
ch1[0] = _mm_subs_epi16(tmp0,tmp1);
|
||||
}
|
||||
|
||||
//print_shorts("prec2A_TM4 ch0 (middle):",ch0);
|
||||
//print_shorts("prec2A_TM4 ch1 (middle):",ch1);
|
||||
|
||||
//print_shorts("prec2A_TM4 ch0 (middle):",ch0);
|
||||
//print_shorts("prec2A_TM4 ch1 (middle):",ch1);
|
||||
ch1[0] = _mm_sign_epi16(ch1[0],*(__m128i*)&conjugate2[0]);
|
||||
ch1[0] = _mm_shufflelo_epi16(ch1[0],_MM_SHUFFLE(2,3,0,1));
|
||||
ch1[0] = _mm_shufflehi_epi16(ch1[0],_MM_SHUFFLE(2,3,0,1));
|
||||
}
|
||||
|
||||
//ch0[0] = _mm_mulhi_epi16(ch0[0],amp);
|
||||
//ch0[0] = _mm_slli_epi16(ch0[0],1);
|
||||
@@ -1902,7 +1907,7 @@ void dlsch_channel_compensation_TM34(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
}
|
||||
}
|
||||
|
||||
else if (mimo_mode==DUALSTREAM_PUSCH_PRECODING) {
|
||||
else if (mimo_mode==DUALSTREAM_PUSCH_PRECODING) {
|
||||
prec2A_TM4_128(pmi_ext[rb],&dl_ch0_128[0],&dl_ch1_128[0]);
|
||||
prec2A_TM4_128(pmi_ext[rb],&dl_ch0_128[1],&dl_ch1_128[1]);
|
||||
|
||||
@@ -4137,14 +4142,16 @@ unsigned short dlsch_extract_rbs_dual(int **rxdataF,
|
||||
rxF = &rxdataF[aarx][prb_off2+
|
||||
(symbol*(frame_parms->ofdm_symbol_size))];
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
if (mimo_mode <= PUSCH_PRECODING1)
|
||||
*pmi_loc = (pmi>>((prb>>2)<<1))&3;
|
||||
else
|
||||
*pmi_loc=(pmi>>prb)&1;
|
||||
|
||||
*/
|
||||
*pmi_loc = get_pmi(frame_parms->N_RB_DL,mimo_mode,pmi,prb);
|
||||
pmi_loc++;
|
||||
|
||||
|
||||
|
||||
if (pilots == 0) {
|
||||
|
||||
@@ -4279,14 +4286,17 @@ unsigned short dlsch_extract_rbs_dual(int **rxdataF,
|
||||
#ifdef DEBUG_DLSCH_DEMOD
|
||||
printf("symbol %d / rb %d: alloc %d skip_half %d (rxF %p, rxF_ext %p) prb_off (%d,%d)\n",symbol,prb,rb_alloc_ind,skip_half,rxF,rxF_ext,prb_off,prb_off2);
|
||||
#endif
|
||||
/*
|
||||
if (mimo_mode <= PUSCH_PRECODING1)
|
||||
*pmi_loc = (pmi>>((prb>>2)<<1))&3;
|
||||
else
|
||||
*pmi_loc=(pmi>>prb)&1;
|
||||
// printf("symbol_mod %d (pilots %d) rb %d, sb %d, pmi %d (pmi_loc %p,rxF %p, ch00 %p, ch01 %p, rxF_ext %p dl_ch0_ext %p dl_ch1_ext %p)\n",symbol_mod,pilots,prb,prb>>2,*pmi_loc,pmi_loc,rxF,dl_ch0, dl_ch1, rxF_ext,dl_ch0_ext,dl_ch1_ext);
|
||||
*/
|
||||
|
||||
*pmi_loc = get_pmi(frame_parms->N_RB_DL,mimo_mode,pmi,prb);
|
||||
pmi_loc++;
|
||||
|
||||
|
||||
if (prb != (frame_parms->N_RB_DL>>1)) { // This PRB is not around DC
|
||||
if (pilots==0) {
|
||||
if (skip_half==1) {
|
||||
|
||||
@@ -1247,12 +1247,12 @@ int allocate_REs_in_RB_MCH(mod_sym_t **txdataF,
|
||||
return(0);
|
||||
}
|
||||
|
||||
uint8_t get_pmi(uint8_t N_RB_DL,LTE_DL_eNB_HARQ_t *dlsch_harq,uint16_t rb)
|
||||
uint8_t get_pmi(uint8_t N_RB_DL,MIMO_mode_t mode, uint32_t pmi_alloc,uint16_t rb)
|
||||
{
|
||||
|
||||
|
||||
/*
|
||||
MIMO_mode_t mode = dlsch_harq->mimo_mode;
|
||||
uint32_t pmi_alloc = dlsch_harq->pmi_alloc;
|
||||
*/
|
||||
|
||||
switch (N_RB_DL) {
|
||||
case 6: // 1 PRB per subband
|
||||
@@ -1268,7 +1268,7 @@ uint8_t get_pmi(uint8_t N_RB_DL,LTE_DL_eNB_HARQ_t *dlsch_harq,uint16_t rb)
|
||||
if (mode <= PUSCH_PRECODING1)
|
||||
return((pmi_alloc>>((rb>>2)<<1))&3);
|
||||
else {
|
||||
printf("Getting pmi for RB %d => %d\n",rb,((pmi_alloc>>(rb>>2))&1));
|
||||
//printf("Getting pmi for RB %d => %d\n",rb,((pmi_alloc>>(rb>>2))&1));
|
||||
return((pmi_alloc>>(rb>>2))&1);
|
||||
}
|
||||
break;
|
||||
@@ -1572,7 +1572,7 @@ int dlsch_modulation(mod_sym_t **txdataF,
|
||||
(dlsch1==NULL) ? NULL : dlsch1->harq_processes[harq_pid],
|
||||
pilots,
|
||||
((pilots) ? amp_rho_b : amp_rho_a),
|
||||
get_pmi(frame_parms->N_RB_DL,dlsch0->harq_processes[harq_pid],rb),
|
||||
get_pmi(frame_parms->N_RB_DL,dlsch0->harq_processes[harq_pid]->mimo_mode,dlsch0->harq_processes[harq_pid]->pmi_alloc,rb),
|
||||
qam_table_s0,
|
||||
qam_table_s1,
|
||||
&re_allocated,
|
||||
|
||||
@@ -1607,11 +1607,12 @@ uint32_t pmi_extend(LTE_DL_FRAME_PARMS *frame_parms,uint8_t wideband_pmi, uint8_
|
||||
|
||||
/** \brief This routine extracts a single subband PMI from a bitmap coming from UCI or the pmi_extend function
|
||||
@param N_RB_DL number of resource blocks
|
||||
@param dlsch_harq pointer to dlsch structure (containing mimo_mode and pmi_alloc)
|
||||
@param mimo_mode
|
||||
@param pmi_alloc subband PMI bitmap
|
||||
@param rb resource block for which to extract PMI
|
||||
@returns subband PMI
|
||||
*/
|
||||
uint8_t get_pmi(uint8_t N_RB_DL,LTE_DL_eNB_HARQ_t *dlsch_harq,uint16_t rb);
|
||||
uint8_t get_pmi(uint8_t N_RB_DL,MIMO_mode_t mode, uint32_t pmi_alloc,uint16_t rb);
|
||||
|
||||
|
||||
uint16_t get_nCCE(uint8_t num_pdcch_symbols,LTE_DL_FRAME_PARMS *frame_parms,uint8_t mi);
|
||||
|
||||
@@ -736,7 +736,7 @@ int main(int argc, char **argv)
|
||||
if (transmission_mode==5) {
|
||||
n_users = 2;
|
||||
//eNB_id_i = PHY_vars_UE->n_connected_eNB;
|
||||
eNB_id_i=1;
|
||||
eNB_id_i=1;
|
||||
|
||||
}
|
||||
else
|
||||
@@ -3437,74 +3437,6 @@ n(tikz_fname,"w");
|
||||
}
|
||||
stop_meas(&PHY_vars_UE->dlsch_llr_stats);
|
||||
}
|
||||
if (test_perf ==0 ) {
|
||||
if ((n_frames==1) && (Ns==(2+(2*subframe))) && (l==0)) {
|
||||
|
||||
|
||||
write_output("chanF11.m","chF11",eNB2UE[0]->chF[0],12*NB_RB,1,8);
|
||||
write_output("chan11.m","ch11",eNB2UE[0]->ch[0],eNB2UE[0]->channel_length,1,8);
|
||||
if ( PHY_vars_eNB->lte_frame_parms.nb_antennas_rx==2 && PHY_vars_eNB->lte_frame_parms.nb_antennas_tx==1 ){
|
||||
write_output("chan21.m","ch21",eNB2UE[0]->ch[1],eNB2UE[0]->channel_length,1,8);
|
||||
}
|
||||
if (PHY_vars_eNB->lte_frame_parms.nb_antennas_tx>1){
|
||||
write_output("chan12.m","ch12",eNB2UE[0]->ch[1],eNB2UE[0]->channel_length,1,8);
|
||||
if ( PHY_vars_eNB->lte_frame_parms.nb_antennas_rx>1){
|
||||
write_output("chan21.m","ch21",eNB2UE[0]->ch[2],eNB2UE[0]->channel_length,1,8);
|
||||
write_output("chan22.m","ch22",eNB2UE[0]->ch[3],eNB2UE[0]->channel_length,1,8);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*for (aarx=0;aarx<PHY_vars_UE->lte_frame_parms.nb_antennas_rx; aarx++) {
|
||||
for (aa=0;aa<PHY_vars_UE->lte_frame_parms.nb_antennas_tx; aa++) {
|
||||
sprintf(fname,"ch%d%d.m",(aarx+1), (aa+1));
|
||||
write_output(fname,"ch",eNB2UE[0]->ch[2*aarx+aa],eNB2UE[0]->channel_length,1,8);
|
||||
}
|
||||
} */
|
||||
/*write_output("ch0.m","ch0",eNB2UE[0]->ch[0],eNB2UE[0]->channel_length,1,8);
|
||||
if (PHY_vars_eNB->lte_frame_parms.nb_antennas_tx>1)
|
||||
write_output("ch1.m","ch1",eNB2UE[0]->ch[PHY_vars_eNB->lte_frame_parms.nb_antennas_rx],eNB2UE[0]->channel_length,1,8);*/
|
||||
|
||||
//common vars
|
||||
write_output("rxsig0.m","rxs0", &PHY_vars_UE->lte_ue_common_vars.rxdata[0][0],10*PHY_vars_UE->lte_frame_parms.samples_per_tti,1,1);
|
||||
write_output("rxsigF0.m","rxsF0", &PHY_vars_UE->lte_ue_common_vars.rxdataF[0][0],PHY_vars_UE->lte_frame_parms.ofdm_symbol_size*nsymb,1,1);
|
||||
if (PHY_vars_UE->lte_frame_parms.nb_antennas_rx>1) {
|
||||
write_output("rxsig1.m","rxs1", PHY_vars_UE->lte_ue_common_vars.rxdata[1],PHY_vars_UE->lte_frame_parms.samples_per_tti,1,1);
|
||||
write_output("rxsigF1.m","rxsF1", PHY_vars_UE->lte_ue_common_vars.rxdataF[1],PHY_vars_UE->lte_frame_parms.ofdm_symbol_size*nsymb,1,1);
|
||||
}
|
||||
|
||||
write_output("dlsch00_r0.m","dl00_r0",
|
||||
&(PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[eNB_id][0][0]),
|
||||
PHY_vars_UE->lte_frame_parms.ofdm_symbol_size*nsymb,1,1);
|
||||
if (PHY_vars_UE->lte_frame_parms.nb_antennas_rx>1)
|
||||
write_output("dlsch01_r0.m","dl01_r0",
|
||||
&(PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[eNB_id][1][0]),
|
||||
PHY_vars_UE->lte_frame_parms.ofdm_symbol_size*nsymb,1,1);
|
||||
if (PHY_vars_eNB->lte_frame_parms.nb_antennas_tx>1)
|
||||
write_output("dlsch10_r0.m","dl10_r0",
|
||||
&(PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[eNB_id][2][0]),
|
||||
PHY_vars_UE->lte_frame_parms.ofdm_symbol_size*nsymb,1,1);
|
||||
if ((PHY_vars_UE->lte_frame_parms.nb_antennas_rx>1) && (PHY_vars_eNB->lte_frame_parms.nb_antennas_tx>1))
|
||||
write_output("dlsch11_r0.m","dl11_r0",
|
||||
&(PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[eNB_id][3][0]),
|
||||
PHY_vars_UE->lte_frame_parms.ofdm_symbol_size*nsymb/2,1,1);
|
||||
|
||||
//pdsch_vars
|
||||
dump_dlsch2(PHY_vars_UE,eNB_id,coded_bits_per_codeword,round,PHY_vars_UE->dlsch_ue[0][1]->current_harq_pid );
|
||||
//dump_dlsch2(PHY_vars_UE,eNB_id_i,coded_bits_per_codeword);
|
||||
// write_output("dlsch_e.m","e",PHY_vars_eNB->dlsch_eNB[0][0]->harq_processes[0]->e,coded_bits_per_codeword,1,4);
|
||||
|
||||
|
||||
//pdcch_vars
|
||||
write_output("pdcchF0_ext.m","pdcchF_ext", PHY_vars_UE->lte_ue_pdcch_vars[eNB_id]->rxdataF_ext[0],2*3*PHY_vars_UE->lte_frame_parms.ofdm_symbol_size,1,1);
|
||||
write_output("pdcch00_ch0_ext.m","pdcch00_ch0_ext",PHY_vars_UE->lte_ue_pdcch_vars[eNB_id]->dl_ch_estimates_ext[0],300*3,1,1);
|
||||
|
||||
write_output("pdcch_rxF_comp0.m","pdcch0_rxF_comp0",PHY_vars_UE->lte_ue_pdcch_vars[eNB_id]->rxdataF_comp[0],4*300,1,1);
|
||||
write_output("pdcch_rxF_llr.m","pdcch_llr",PHY_vars_UE->lte_ue_pdcch_vars[eNB_id]->llr,2400,1,4);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3751,6 +3683,8 @@ n(tikz_fname,"w");
|
||||
stop_meas(&PHY_vars_UE->phy_proc_rx);
|
||||
|
||||
if (n_frames==1) {
|
||||
|
||||
//rxsig
|
||||
sprintf(fname,"rxsig0_r%d.m",round);
|
||||
sprintf(vname,"rxs0_r%d",round);
|
||||
write_output(fname,vname, &PHY_vars_UE->lte_ue_common_vars.rxdata[0][0],10*PHY_vars_UE->lte_frame_parms.samples_per_tti,1,1);
|
||||
@@ -3765,6 +3699,22 @@ n(tikz_fname,"w");
|
||||
sprintf(vname,"rxs1F_r%d",round);
|
||||
write_output(fname,vname, PHY_vars_UE->lte_ue_common_vars.rxdataF[1],2*PHY_vars_UE->lte_frame_parms.ofdm_symbol_size*nsymb,2,1);
|
||||
}
|
||||
|
||||
//channel
|
||||
write_output("chanF11.m","chF11",eNB2UE[0]->chF[0],12*NB_RB,1,8);
|
||||
write_output("chan11.m","ch11",eNB2UE[0]->ch[0],eNB2UE[0]->channel_length,1,8);
|
||||
if ( PHY_vars_eNB->lte_frame_parms.nb_antennas_rx==2 && PHY_vars_eNB->lte_frame_parms.nb_antennas_tx==1 ){
|
||||
write_output("chan21.m","ch21",eNB2UE[0]->ch[1],eNB2UE[0]->channel_length,1,8);
|
||||
}
|
||||
if (PHY_vars_eNB->lte_frame_parms.nb_antennas_tx>1){
|
||||
write_output("chan12.m","ch12",eNB2UE[0]->ch[1],eNB2UE[0]->channel_length,1,8);
|
||||
if ( PHY_vars_eNB->lte_frame_parms.nb_antennas_rx>1){
|
||||
write_output("chan21.m","ch21",eNB2UE[0]->ch[2],eNB2UE[0]->channel_length,1,8);
|
||||
write_output("chan22.m","ch22",eNB2UE[0]->ch[3],eNB2UE[0]->channel_length,1,8);
|
||||
}
|
||||
}
|
||||
|
||||
//channel estimates
|
||||
sprintf(fname,"dlsch00_r%d.m",round);
|
||||
sprintf(vname,"dl00_r%d",round);
|
||||
write_output(fname,vname,
|
||||
@@ -3775,21 +3725,21 @@ n(tikz_fname,"w");
|
||||
sprintf(vname,"dl01_r%d",round);
|
||||
write_output(fname,vname,
|
||||
&(PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[eNB_id][1][0]),
|
||||
PHY_vars_UE->lte_frame_parms.ofdm_symbol_size*nsymb/2,1,1);
|
||||
PHY_vars_UE->lte_frame_parms.ofdm_symbol_size*nsymb,1,1);
|
||||
}
|
||||
if (PHY_vars_eNB->lte_frame_parms.nb_antennas_tx>1) {
|
||||
sprintf(fname,"dlsch10_r%d.m",round);
|
||||
sprintf(vname,"dl10_r%d",round);
|
||||
write_output(fname,vname,
|
||||
&(PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[eNB_id][2][0]),
|
||||
PHY_vars_UE->lte_frame_parms.ofdm_symbol_size*nsymb/2,1,1);
|
||||
PHY_vars_UE->lte_frame_parms.ofdm_symbol_size*nsymb,1,1);
|
||||
}
|
||||
if ((PHY_vars_UE->lte_frame_parms.nb_antennas_rx>1) && (PHY_vars_eNB->lte_frame_parms.nb_antennas_tx>1)) {
|
||||
sprintf(fname,"dlsch11_r%d.m",round);
|
||||
sprintf(vname,"dl11_r%d",round);
|
||||
write_output(fname,vname,
|
||||
&(PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[eNB_id][3][0]),
|
||||
PHY_vars_UE->lte_frame_parms.ofdm_symbol_size*nsymb/2,1,1);
|
||||
PHY_vars_UE->lte_frame_parms.ofdm_symbol_size*nsymb,1,1);
|
||||
}
|
||||
//pdsch_vars
|
||||
dump_dlsch2(PHY_vars_UE,eNB_id,coded_bits_per_codeword,round,PHY_vars_UE->dlsch_ue[0][0]->current_harq_pid);
|
||||
@@ -3799,6 +3749,14 @@ n(tikz_fname,"w");
|
||||
write_output("dlsch_eNB_w.m","w",PHY_vars_eNB->dlsch_eNB[0][0]->harq_processes[0]->w[0],3*(tbs+64),1,4);
|
||||
write_output("dlsch_UE_w.m","w",PHY_vars_UE->dlsch_ue[0][0]->harq_processes[0]->w[0],3*(tbs+64),1,0);
|
||||
*/
|
||||
|
||||
//pdcch_vars
|
||||
write_output("pdcchF0_ext.m","pdcchF_ext", PHY_vars_UE->lte_ue_pdcch_vars[eNB_id]->rxdataF_ext[0],2*3*PHY_vars_UE->lte_frame_parms.ofdm_symbol_size,1,1);
|
||||
write_output("pdcch00_ch0_ext.m","pdcch00_ch0_ext",PHY_vars_UE->lte_ue_pdcch_vars[eNB_id]->dl_ch_estimates_ext[0],300*3,1,1);
|
||||
|
||||
write_output("pdcch_rxF_comp0.m","pdcch0_rxF_comp0",PHY_vars_UE->lte_ue_pdcch_vars[eNB_id]->rxdataF_comp[0],4*300,1,1);
|
||||
write_output("pdcch_rxF_llr.m","pdcch_llr",PHY_vars_UE->lte_ue_pdcch_vars[eNB_id]->llr,2400,1,4);
|
||||
|
||||
|
||||
if (round == 3) exit(-1);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user