Replace from dB_fixed_times10 function to dB_fixed_x10.
(cherry picked from commit de93d8f0aa9e6d7380bd159901a41aa36f257298)
This commit is contained in:
committed by
shono.takafumi
parent
9ad810bab4
commit
029c08b9d5
@@ -625,7 +625,7 @@ void rx_prach0(PHY_VARS_eNB *eNB,
|
||||
for (i=0; i<NCS2; i++) {
|
||||
lev = (int32_t)prach_ifft[(preamble_shift2+i)];
|
||||
avg_en += lev;
|
||||
levdB = dB_fixed_times10(lev);
|
||||
levdB = dB_fixed_x10(lev);
|
||||
|
||||
if (levdB>*max_preamble_energy) {
|
||||
*max_preamble_energy = levdB;
|
||||
|
||||
@@ -1097,7 +1097,7 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
|
||||
if(pusch_vars->ulsch_interference_power[i]<1)pusch_vars->ulsch_interference_power[i] = 1;
|
||||
}
|
||||
|
||||
LOG_D(PHY,"%4.4d.%d power harq_pid %d rb %2.2d TBS %2.2d (MPR_times_Ks %d correction %d) power %d dBtimes10\n", proc->frame_rx, proc->subframe_rx, harq_pid, ulsch[UE_id]->harq_processes[harq_pid]->nb_rb, ulsch[UE_id]->harq_processes[harq_pid]->TBS,MPR_times_100Ks,correction_factor,dB_fixed_times10(pusch_vars->ulsch_power[i]));
|
||||
LOG_D(PHY,"%4.4d.%d power harq_pid %d rb %2.2d TBS %2.2d (MPR_times_Ks %d correction %d) power %d dBtimes10\n", proc->frame_rx, proc->subframe_rx, harq_pid, ulsch[UE_id]->harq_processes[harq_pid]->nb_rb, ulsch[UE_id]->harq_processes[harq_pid]->TBS,MPR_times_100Ks,correction_factor,dB_fixed_x10(pusch_vars->ulsch_power[i]));
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -540,6 +540,289 @@ int16_t dB_table_times10[256] = {
|
||||
240,
|
||||
240
|
||||
};
|
||||
|
||||
|
||||
uint32_t bit_seach_mask[32] = {
|
||||
0x80000000, 0x40000000, 0x20000000, 0x10000000,
|
||||
0x08000000, 0x04000000, 0x02000000, 0x01000000,
|
||||
0x00800000, 0x00400000, 0x00200000, 0x00100000,
|
||||
0x00080000, 0x00040000, 0x00020000, 0x00010000,
|
||||
0x00008000, 0x00004000, 0x00002000, 0x00001000,
|
||||
0x00000800, 0x00000400, 0x00000200, 0x00000100,
|
||||
0x00000080, 0x00000040, 0x00000020, 0x00000010,
|
||||
0x00000008, 0x00000004, 0x00000002, 0x00000001
|
||||
};
|
||||
uint32_t bit_seach_res[32] = {
|
||||
31, 30, 29, 28,
|
||||
27, 26, 25, 24,
|
||||
23, 22, 21, 20,
|
||||
19, 18, 17, 16,
|
||||
15, 14, 13, 12,
|
||||
11, 10, 9, 8,
|
||||
7, 6, 5, 4,
|
||||
3, 2, 1, 0
|
||||
};
|
||||
uint32_t dB_fix_x10_tbl[128] = {
|
||||
0 ,
|
||||
0 ,
|
||||
1 ,
|
||||
1 ,
|
||||
1 ,
|
||||
2 ,
|
||||
2 ,
|
||||
2 ,
|
||||
3 ,
|
||||
3 ,
|
||||
3 ,
|
||||
4 ,
|
||||
4 ,
|
||||
4 ,
|
||||
5 ,
|
||||
5 ,
|
||||
5 ,
|
||||
5 ,
|
||||
6 ,
|
||||
6 ,
|
||||
6 ,
|
||||
7 ,
|
||||
7 ,
|
||||
7 ,
|
||||
7 ,
|
||||
8 ,
|
||||
8 ,
|
||||
8 ,
|
||||
9 ,
|
||||
9 ,
|
||||
9 ,
|
||||
9 ,
|
||||
10 ,
|
||||
10 ,
|
||||
10 ,
|
||||
10 ,
|
||||
11 ,
|
||||
11 ,
|
||||
11 ,
|
||||
12 ,
|
||||
12 ,
|
||||
12 ,
|
||||
12 ,
|
||||
13 ,
|
||||
13 ,
|
||||
13 ,
|
||||
13 ,
|
||||
14 ,
|
||||
14 ,
|
||||
14 ,
|
||||
14 ,
|
||||
15 ,
|
||||
15 ,
|
||||
15 ,
|
||||
15 ,
|
||||
16 ,
|
||||
16 ,
|
||||
16 ,
|
||||
16 ,
|
||||
16 ,
|
||||
17 ,
|
||||
17 ,
|
||||
17 ,
|
||||
17 ,
|
||||
18 ,
|
||||
18 ,
|
||||
18 ,
|
||||
18 ,
|
||||
19 ,
|
||||
19 ,
|
||||
19 ,
|
||||
19 ,
|
||||
19 ,
|
||||
20 ,
|
||||
20 ,
|
||||
20 ,
|
||||
20 ,
|
||||
20 ,
|
||||
21 ,
|
||||
21 ,
|
||||
21 ,
|
||||
21 ,
|
||||
22 ,
|
||||
22 ,
|
||||
22 ,
|
||||
22 ,
|
||||
22 ,
|
||||
23 ,
|
||||
23 ,
|
||||
23 ,
|
||||
23 ,
|
||||
23 ,
|
||||
24 ,
|
||||
24 ,
|
||||
24 ,
|
||||
24 ,
|
||||
24 ,
|
||||
24 ,
|
||||
25 ,
|
||||
25 ,
|
||||
25 ,
|
||||
25 ,
|
||||
25 ,
|
||||
26 ,
|
||||
26 ,
|
||||
26 ,
|
||||
26 ,
|
||||
26 ,
|
||||
27 ,
|
||||
27 ,
|
||||
27 ,
|
||||
27 ,
|
||||
27 ,
|
||||
27 ,
|
||||
28 ,
|
||||
28 ,
|
||||
28 ,
|
||||
28 ,
|
||||
28 ,
|
||||
29 ,
|
||||
29 ,
|
||||
29 ,
|
||||
29 ,
|
||||
29 ,
|
||||
29 ,
|
||||
30 ,
|
||||
30 ,
|
||||
30
|
||||
};
|
||||
uint32_t dB_fix_x10_tbl_low[128] = {
|
||||
0 ,
|
||||
0 ,
|
||||
30 ,
|
||||
48 ,
|
||||
60 ,
|
||||
70 ,
|
||||
78 ,
|
||||
85 ,
|
||||
90 ,
|
||||
95 ,
|
||||
100 ,
|
||||
104 ,
|
||||
108 ,
|
||||
111 ,
|
||||
115 ,
|
||||
118 ,
|
||||
120 ,
|
||||
123 ,
|
||||
126 ,
|
||||
128 ,
|
||||
130 ,
|
||||
132 ,
|
||||
134 ,
|
||||
136 ,
|
||||
138 ,
|
||||
140 ,
|
||||
141 ,
|
||||
143 ,
|
||||
145 ,
|
||||
146 ,
|
||||
148 ,
|
||||
149 ,
|
||||
151 ,
|
||||
152 ,
|
||||
153 ,
|
||||
154 ,
|
||||
156 ,
|
||||
157 ,
|
||||
158 ,
|
||||
159 ,
|
||||
160 ,
|
||||
161 ,
|
||||
162 ,
|
||||
163 ,
|
||||
164 ,
|
||||
165 ,
|
||||
166 ,
|
||||
167 ,
|
||||
168 ,
|
||||
169 ,
|
||||
170 ,
|
||||
171 ,
|
||||
172 ,
|
||||
172 ,
|
||||
173 ,
|
||||
174 ,
|
||||
175 ,
|
||||
176 ,
|
||||
176 ,
|
||||
177 ,
|
||||
178 ,
|
||||
179 ,
|
||||
179 ,
|
||||
180 ,
|
||||
181 ,
|
||||
181 ,
|
||||
182 ,
|
||||
183 ,
|
||||
183 ,
|
||||
184 ,
|
||||
185 ,
|
||||
185 ,
|
||||
186 ,
|
||||
186 ,
|
||||
187 ,
|
||||
188 ,
|
||||
188 ,
|
||||
189 ,
|
||||
189 ,
|
||||
190 ,
|
||||
190 ,
|
||||
191 ,
|
||||
191 ,
|
||||
192 ,
|
||||
192 ,
|
||||
193 ,
|
||||
193 ,
|
||||
194 ,
|
||||
194 ,
|
||||
195 ,
|
||||
195 ,
|
||||
196 ,
|
||||
196 ,
|
||||
197 ,
|
||||
197 ,
|
||||
198 ,
|
||||
198 ,
|
||||
199 ,
|
||||
199 ,
|
||||
200 ,
|
||||
200 ,
|
||||
200 ,
|
||||
201 ,
|
||||
201 ,
|
||||
202 ,
|
||||
202 ,
|
||||
203 ,
|
||||
203 ,
|
||||
203 ,
|
||||
204 ,
|
||||
204 ,
|
||||
205 ,
|
||||
205 ,
|
||||
205 ,
|
||||
206 ,
|
||||
206 ,
|
||||
206 ,
|
||||
207 ,
|
||||
207 ,
|
||||
208 ,
|
||||
208 ,
|
||||
208 ,
|
||||
209 ,
|
||||
209 ,
|
||||
209 ,
|
||||
210 ,
|
||||
210 ,
|
||||
210
|
||||
};
|
||||
|
||||
/*
|
||||
int8_t dB_fixed(int x) {
|
||||
|
||||
@@ -571,6 +854,38 @@ int8_t dB_fixed(int x) {
|
||||
}
|
||||
*/
|
||||
|
||||
int16_t dB_fixed_x10(uint32_t x) {
|
||||
int16_t dB_power = 0;
|
||||
|
||||
//for new algorithm
|
||||
uint32_t cnt;
|
||||
uint32_t Exponent;
|
||||
uint32_t Mantissa;
|
||||
uint32_t shift_right;
|
||||
uint32_t tbl_resolution = 7;
|
||||
uint32_t tbl_addr_mask;
|
||||
|
||||
if (x < 128){ //OAI alogrithm
|
||||
dB_power = dB_fix_x10_tbl_low[x];
|
||||
}
|
||||
else { //new algorithm
|
||||
tbl_addr_mask = 0x0000007Fu; // (1 << tbl_resolution) - 1;//i.e. 0x0000007F
|
||||
Mantissa = 0;
|
||||
Exponent = 0;
|
||||
for (cnt = 0; cnt < 32; cnt++) {
|
||||
if ((bit_seach_mask[cnt] & x) != 0) {
|
||||
Exponent = bit_seach_res[cnt];
|
||||
Mantissa = x & (~bit_seach_mask[cnt]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
shift_right = Exponent - tbl_resolution;
|
||||
Mantissa = (Mantissa >> shift_right) & tbl_addr_mask;
|
||||
dB_power = dB_fix_x10_tbl[Mantissa] + Exponent * 30u;
|
||||
}
|
||||
return dB_power;
|
||||
}
|
||||
|
||||
int16_t dB_fixed_times10(uint32_t x)
|
||||
{
|
||||
int16_t dB_power=0;
|
||||
|
||||
@@ -30,5 +30,6 @@
|
||||
#define DB_ROUTINES_H_
|
||||
|
||||
int16_t dB_fixed_times10(uint32_t x);
|
||||
int16_t dB_fixed_x10(uint32_t x);
|
||||
|
||||
#endif /* DB_ROUTINES_H_ */
|
||||
|
||||
@@ -472,6 +472,7 @@ uint8_t dB_fixed64(uint64_t x);
|
||||
int8_t dB_fixed2(uint32_t x,uint32_t y);
|
||||
|
||||
int16_t dB_fixed_times10(uint32_t x);
|
||||
int16_t dB_fixed_x10(uint32_t x);
|
||||
|
||||
int32_t phy_phase_compensation_top(uint32_t pilot_type,
|
||||
uint32_t initial_pilot,
|
||||
|
||||
@@ -1146,7 +1146,7 @@ int16_t estimate_ue_tx_power(uint32_t tbs, uint32_t nb_rb, uint8_t control_only,
|
||||
//(beta_offset_pusch_x8=ue->ulsch[eNB_id]->harq_processes[harq_pid]->control_only == 1) ? ue->ulsch[eNB_id]->beta_offset_cqi_times8:8;
|
||||
|
||||
// if deltamcs_enabledm
|
||||
delta_mcs = ((hundred_times_delta_TF[MPR_x100/6]+10*dB_fixed_times10((beta_offset_pusch_x8)>>3))/100.0);
|
||||
delta_mcs = ((hundred_times_delta_TF[MPR_x100/6]+10*dB_fixed_x10((beta_offset_pusch_x8)>>3))/100.0);
|
||||
bw_factor = (hundred_times_log10_NPRB[nb_rb-1]/100.0);
|
||||
#ifdef DEBUG_SEGMENTATION
|
||||
printf("estimated ue tx power %d (num_re %d, sumKr %d, mpr_x100 %d, delta_mcs %f, bw_factor %f)\n",
|
||||
|
||||
@@ -87,9 +87,9 @@ int16_t get_hundred_times_delta_IF_eNB(PHY_VARS_eNB *eNB,uint16_t UE_id,uint8_t
|
||||
// This is the formula from Section 5.1.1.1 in 36.213 10*log10(deltaIF_PUSCH = (2^(MPR*Ks)-1)*beta_offset_pusch)
|
||||
if (bw_factor == 1) {
|
||||
uint8_t nb_rb = eNB->ulsch[UE_id]->harq_processes[harq_pid]->nb_rb;
|
||||
return(hundred_times_delta_TF[MPR_x100/6]+10*dB_fixed_times10((beta_offset_pusch)>>3)) + hundred_times_log10_NPRB[nb_rb-1];
|
||||
return(hundred_times_delta_TF[MPR_x100/6]+10*dB_fixed_x10((beta_offset_pusch)>>3)) + hundred_times_log10_NPRB[nb_rb-1];
|
||||
} else
|
||||
return(hundred_times_delta_TF[MPR_x100/6]+10*dB_fixed_times10((beta_offset_pusch)>>3));
|
||||
return(hundred_times_delta_TF[MPR_x100/6]+10*dB_fixed_x10((beta_offset_pusch)>>3));
|
||||
} else {
|
||||
return(0);
|
||||
}
|
||||
@@ -757,7 +757,7 @@ void fill_sr_indication(int UEid, PHY_VARS_eNB *eNB,uint16_t rnti,int frame,int
|
||||
// pdu->rx_ue_information.handle = handle;
|
||||
pdu->rx_ue_information.tl.tag = NFAPI_RX_UE_INFORMATION_TAG;
|
||||
pdu->rx_ue_information.rnti = rnti;
|
||||
int SNRtimes10 = dB_fixed_times10(stat) - 10 * eNB->measurements.n0_subband_power_dB[0][0];
|
||||
int SNRtimes10 = dB_fixed_x10(stat) - 10 * eNB->measurements.n0_subband_power_dB[0][0];
|
||||
LOG_D(PHY,"stat %d subbandpower %d, SNRtimes10 %d\n", stat, eNB->measurements.n0_subband_power_dB[0][0], SNRtimes10);
|
||||
pdu->ul_cqi_information.tl.tag = NFAPI_UL_CQI_INFORMATION_TAG;
|
||||
|
||||
@@ -1605,9 +1605,9 @@ void fill_rx_indication(PHY_VARS_eNB *eNB,
|
||||
|
||||
pdu->rx_indication_rel8.timing_advance = timing_advance_update;
|
||||
// estimate UL_CQI for MAC (from antenna port 0 only)
|
||||
int SNRtimes10 = dB_fixed_times10(eNB->pusch_vars[UE_id]->ulsch_power[0]) - dB_fixed_times10(eNB->pusch_vars[UE_id]->ulsch_interference_power[0]);
|
||||
int SNRtimes10 = dB_fixed_x10(eNB->pusch_vars[UE_id]->ulsch_power[0]) - dB_fixed_x10(eNB->pusch_vars[UE_id]->ulsch_interference_power[0]);
|
||||
|
||||
if(dB_fixed_times10(eNB->pusch_vars[UE_id]->ulsch_power[0]) > eNB->pusch_signal_threshold) {
|
||||
if(dB_fixed_x10(eNB->pusch_vars[UE_id]->ulsch_power[0]) > eNB->pusch_signal_threshold) {
|
||||
SNRtimes10 = 300;
|
||||
}
|
||||
|
||||
@@ -1618,8 +1618,8 @@ void fill_rx_indication(PHY_VARS_eNB *eNB,
|
||||
else
|
||||
pdu->rx_indication_rel8.ul_cqi = (640 + SNRtimes10) / 5;
|
||||
|
||||
LOG_D(PHY,"[PUSCH %d] Frame %d Subframe %d Filling RX_indication with SNR %d (%d), timing_advance %d (update %d)\n",
|
||||
harq_pid,frame,subframe,SNRtimes10,pdu->rx_indication_rel8.ul_cqi,pdu->rx_indication_rel8.timing_advance,
|
||||
LOG_D(PHY,"[PUSCH %d] Frame %d Subframe %d Filling RX_indication with SNR %d (%d) signal %d noise %d, timing_advance %d (update %d)\n",
|
||||
harq_pid,frame,subframe,SNRtimes10,pdu->rx_indication_rel8.ul_cqi,dB_fixed_x10(eNB->pusch_vars[UE_id]->ulsch_power[0]),dB_fixed_x10(eNB->pusch_vars[UE_id]->ulsch_interference_power[0]),pdu->rx_indication_rel8.timing_advance,
|
||||
timing_advance_update);
|
||||
eNB->UL_INFO.rx_ind.rx_indication_body.number_of_pdus++;
|
||||
eNB->UL_INFO.rx_ind.sfn_sf = frame<<4 | subframe;
|
||||
@@ -1923,7 +1923,7 @@ void fill_uci_harq_indication (int UEid, PHY_VARS_eNB *eNB, LTE_eNB_UCI *uci, in
|
||||
pdu->rx_ue_information.rnti = uci->rnti;
|
||||
// estimate UL_CQI for MAC (from antenna port 0 only)
|
||||
pdu->ul_cqi_information.tl.tag = NFAPI_UL_CQI_INFORMATION_TAG;
|
||||
int SNRtimes10 = dB_fixed_times10(uci->stat) - 10 * eNB->measurements.n0_subband_power_dB[0][0];
|
||||
int SNRtimes10 = dB_fixed_x10(uci->stat) - 10 * eNB->measurements.n0_subband_power_dB[0][0];
|
||||
|
||||
if (SNRtimes10 < -100)
|
||||
LOG_I (PHY, "uci->stat %d \n", uci->stat);
|
||||
|
||||
Reference in New Issue
Block a user