Commit d26d6030 authored by Raymond Knopp's avatar Raymond Knopp

added a PRB-based channel estimation. It averages the 4/6 DMRS LS channel...

added a PRB-based channel estimation. It averages the 4/6 DMRS LS channel estimates and uses a single value per PRB. Improves performance of high MCS

PHY_VARS_NR_UE now has a flag fd_lin_interpolation which turns this on/off. By default it uses the "new" method.
parent e14786b3
...@@ -474,7 +474,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue, ...@@ -474,7 +474,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
for (aarx=0;aarx<frame_parms->nb_antennas_rx;aarx++) for (aarx=0;aarx<frame_parms->nb_antennas_rx;aarx++)
avgs = cmax(avgs,avg[(aatx<<1)+aarx]); avgs = cmax(avgs,avg[(aatx<<1)+aarx]);
pdsch_vars[gNB_id]->log2_maxh = (log2_approx(avgs)/2)+3; pdsch_vars[gNB_id]->log2_maxh = (log2_approx(avgs)/2)+1;
} }
else if (dlsch0_harq->mimo_mode == NR_DUALSTREAM) else if (dlsch0_harq->mimo_mode == NR_DUALSTREAM)
{ {
......
...@@ -852,6 +852,9 @@ typedef struct { ...@@ -852,6 +852,9 @@ typedef struct {
uint32_t high_speed_flag; uint32_t high_speed_flag;
uint32_t perfect_ce; uint32_t perfect_ce;
// flag to activate linear interpolation in frequency-domain channel estimation
// when off (default), this just averages channel on per-PRB basis
uint32_t fd_lin_interpolation;
int16_t ch_est_alpha; int16_t ch_est_alpha;
int generate_ul_signal[NUMBER_OF_CONNECTED_gNB_MAX]; int generate_ul_signal[NUMBER_OF_CONNECTED_gNB_MAX];
......
...@@ -1168,7 +1168,7 @@ int main(int argc, char **argv) ...@@ -1168,7 +1168,7 @@ int main(int argc, char **argv)
LOG_M("rxsig0.m","rxs0", UE->common_vars.rxdata[0], frame_length_complex_samples, 1, 1); LOG_M("rxsig0.m","rxs0", UE->common_vars.rxdata[0], frame_length_complex_samples, 1, 1);
if (UE->frame_parms.nb_antennas_rx>1) if (UE->frame_parms.nb_antennas_rx>1)
LOG_M("rxsig1.m","rxs1", UE->common_vars.rxdata[1], frame_length_complex_samples, 1, 1); LOG_M("rxsig1.m","rxs1", UE->common_vars.rxdata[1], frame_length_complex_samples, 1, 1);
LOG_M("chestF0.m","chF0",UE->pdsch_vars[0][0]->dl_ch_estimates_ext,N_RB_DL*12*14,1,1); LOG_M("chestF0.m","chF0",&UE->pdsch_vars[0][0]->dl_ch_estimates_ext[0][0],g_rbSize*12*14,1,1);
write_output("rxF_comp.m","rxFc",&UE->pdsch_vars[0][0]->rxdataF_comp0[0][0],N_RB_DL*12*14,1,1); write_output("rxF_comp.m","rxFc",&UE->pdsch_vars[0][0]->rxdataF_comp0[0][0],N_RB_DL*12*14,1,1);
LOG_M("rxF_llr.m","rxFllr",UE->pdsch_vars[UE_proc.thread_id][0]->llr[0],available_bits,1,0); LOG_M("rxF_llr.m","rxFllr",UE->pdsch_vars[UE_proc.thread_id][0]->llr[0],available_bits,1,0);
break; break;
......
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