Commit 2f654535 authored by Francesco Mani's avatar Francesco Mani

improved threshold for pucch0 detection

parent 09344667
...@@ -340,6 +340,7 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB, ...@@ -340,6 +340,7 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB,
} }
} }
int32_t corr_re,corr_im,temp,no_corr=0; int32_t corr_re,corr_im,temp,no_corr=0;
int32_t av_corr=0;
int seq_index; int seq_index;
for(i=0;i<nr_sequences;i++){ for(i=0;i<nr_sequences;i++){
...@@ -360,15 +361,15 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB, ...@@ -360,15 +361,15 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB,
printf("PUCCH IDFT[%d/%d] = (%d,%d)=>%f\n",mcs[i],seq_index,corr_re,corr_im,10*log10(corr_re*corr_re + corr_im*corr_im)); printf("PUCCH IDFT[%d/%d] = (%d,%d)=>%f\n",mcs[i],seq_index,corr_re,corr_im,10*log10(corr_re*corr_re + corr_im*corr_im));
#endif #endif
temp=corr_re*corr_re + corr_im*corr_im; temp=corr_re*corr_re + corr_im*corr_im;
no_corr+=temp; av_corr+=temp;
if (temp>xrtmag) { if (temp>xrtmag) {
xrtmag=temp; xrtmag=temp;
maxpos=i; maxpos=i;
} }
} }
no_corr-=xrtmag; if(nr_sequences>1)
if (nr_sequences>1) no_corr=(av_corr-xrtmag)/(nr_sequences-1);
no_corr/=(nr_sequences-1); av_corr/=nr_sequences;
uint8_t xrtmag_dB = dB_fixed(xrtmag); uint8_t xrtmag_dB = dB_fixed(xrtmag);
...@@ -386,6 +387,11 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB, ...@@ -386,6 +387,11 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB,
else if (SNRtimes10 > 635) cqi=255; else if (SNRtimes10 > 635) cqi=255;
else cqi=(640+SNRtimes10)/5; else cqi=(640+SNRtimes10)/5;
bool no_conf=false;
if (nr_sequences>1) {
if ((xrtmag_dB<(11+dB_fixed(no_corr))) || (dB_fixed(av_corr)<(13+gNB->measurements.n0_power_tot_dB))) //TODO these are temporary threshold based on measurments with the phone
no_conf=true;
}
// first bit of bitmap for sr presence and second bit for acknack presence // first bit of bitmap for sr presence and second bit for acknack presence
uci_pdu->pduBitmap = pucch_pdu->sr_flag | ((pucch_pdu->bit_len_harq>0)<<1); uci_pdu->pduBitmap = pucch_pdu->sr_flag | ((pucch_pdu->bit_len_harq>0)<<1);
uci_pdu->pucch_format = 0; // format 0 uci_pdu->pucch_format = 0; // format 0
...@@ -396,7 +402,7 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB, ...@@ -396,7 +402,7 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB,
if (pucch_pdu->bit_len_harq==0) { if (pucch_pdu->bit_len_harq==0) {
uci_pdu->harq = NULL; uci_pdu->harq = NULL;
uci_pdu->sr = calloc(1,sizeof(*uci_pdu->sr)); uci_pdu->sr = calloc(1,sizeof(*uci_pdu->sr));
uci_pdu->sr->sr_confidence_level = (xrtmag_dB<(11+gNB->measurements.n0_power_tot_dB)) ? 1 : 0; uci_pdu->sr->sr_confidence_level = (xrtmag_dB<(13+gNB->measurements.n0_power_tot_dB)) ? 1 : 0;
if (xrtmag_dB>(gNB->measurements.n0_power_tot_dB)) { if (xrtmag_dB>(gNB->measurements.n0_power_tot_dB)) {
uci_pdu->sr->sr_indication = 1; uci_pdu->sr->sr_indication = 1;
} else { } else {
...@@ -406,7 +412,7 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB, ...@@ -406,7 +412,7 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB,
else if (pucch_pdu->bit_len_harq==1) { else if (pucch_pdu->bit_len_harq==1) {
uci_pdu->harq = calloc(1,sizeof(*uci_pdu->harq)); uci_pdu->harq = calloc(1,sizeof(*uci_pdu->harq));
uci_pdu->harq->num_harq = 1; uci_pdu->harq->num_harq = 1;
uci_pdu->harq->harq_confidence_level = (xrtmag_dB<(11+dB_fixed(no_corr))) ? 1 : 0; uci_pdu->harq->harq_confidence_level = (no_conf) ? 1 : 0;
uci_pdu->harq->harq_list = (nfapi_nr_harq_t*)malloc(1); uci_pdu->harq->harq_list = (nfapi_nr_harq_t*)malloc(1);
uci_pdu->harq->harq_list[0].harq_value = index&0x01; uci_pdu->harq->harq_list[0].harq_value = index&0x01;
LOG_I(PHY, "HARQ value %d with confidence level (0 is good, 1 is bad) %d\n", LOG_I(PHY, "HARQ value %d with confidence level (0 is good, 1 is bad) %d\n",
...@@ -414,13 +420,13 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB, ...@@ -414,13 +420,13 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB,
if (pucch_pdu->sr_flag == 1) { if (pucch_pdu->sr_flag == 1) {
uci_pdu->sr = calloc(1,sizeof(*uci_pdu->sr)); uci_pdu->sr = calloc(1,sizeof(*uci_pdu->sr));
uci_pdu->sr->sr_indication = (index>1) ? 1 : 0; uci_pdu->sr->sr_indication = (index>1) ? 1 : 0;
uci_pdu->sr->sr_confidence_level = (xrtmag_dB<(11+dB_fixed(no_corr))) ? 1 : 0; uci_pdu->sr->sr_confidence_level = (no_conf) ? 1 : 0;
} }
} }
else { else {
uci_pdu->harq = calloc(1,sizeof(*uci_pdu->harq)); uci_pdu->harq = calloc(1,sizeof(*uci_pdu->harq));
uci_pdu->harq->num_harq = 2; uci_pdu->harq->num_harq = 2;
uci_pdu->harq->harq_confidence_level = (xrtmag_dB<(11+dB_fixed(no_corr))) ? 1 : 0; uci_pdu->harq->harq_confidence_level = (no_conf) ? 1 : 0;
uci_pdu->harq->harq_list = (nfapi_nr_harq_t*)malloc(2); uci_pdu->harq->harq_list = (nfapi_nr_harq_t*)malloc(2);
uci_pdu->harq->harq_list[1].harq_value = index&0x01; uci_pdu->harq->harq_list[1].harq_value = index&0x01;
uci_pdu->harq->harq_list[0].harq_value = (index>>1)&0x01; uci_pdu->harq->harq_list[0].harq_value = (index>>1)&0x01;
...@@ -429,7 +435,7 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB, ...@@ -429,7 +435,7 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB,
if (pucch_pdu->sr_flag == 1) { if (pucch_pdu->sr_flag == 1) {
uci_pdu->sr = calloc(1,sizeof(*uci_pdu->sr)); uci_pdu->sr = calloc(1,sizeof(*uci_pdu->sr));
uci_pdu->sr->sr_indication = (index>3) ? 1 : 0; uci_pdu->sr->sr_indication = (index>3) ? 1 : 0;
uci_pdu->sr->sr_confidence_level = (xrtmag_dB<(11+dB_fixed(no_corr))) ? 1 : 0; uci_pdu->sr->sr_confidence_level = (no_conf) ? 1 : 0;
} }
} }
} }
......
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