mirror of
https://gitlab.eurecom.fr/oai/openairinterface5g.git
synced 2026-07-13 04:30:28 +00:00
- all RAN code, CI code, configuration files, dockerfiles, in CSSL v1.0
- all deployment code (openshift, charts, ancillary files like shell
scripts), in MIT
- documentation in CC-BY-4.0
- exceptions might apply and are listed in NOTICE
- there is a new LICENSES folder with all licenses
- CONTRIBUTIONS.md has been updated accordingly
For automated changes based on OAI PL v1.1:
perl -i~ -0pe 's/\/\*.*Licensed to the OpenAirInterface.*openairinterface.org\n#?/\/*\n * SPDX-License-Identifier: LicenseRef-CSSL-1.0\n/s' **/*.{c,h,cpp}
perl -i~ -0pe 's/\/\*.*Licensed to the OpenAirInterface.*openairinterface.org\n#?/\/*\n * SPDX-License-Identifier: LicenseRef-CSSL-1.0\n/s' **/*.ts
perl -i~ -0pe 's/<!--.*Licensed to the OpenAirInterface.*openairinterface.org\n.*-->/<!-- SPDX-License-Identifier: LicenseRef-CSSL-1.0 -->/s' **/*.xml
The rest (cmake, files with missing license, cmake) manually.
83 lines
2.3 KiB
C
83 lines
2.3 KiB
C
/*
|
|
* SPDX-License-Identifier: LicenseRef-CSSL-1.0
|
|
*/
|
|
|
|
/*!
|
|
* \brief Routines to compute UE TX power according to 36.213
|
|
*/
|
|
|
|
#include <stdint.h>
|
|
#include <stdio.h>
|
|
#include "PHY/defs_eNB.h"
|
|
#include <openair1/PHY/TOOLS/tools_defs.h>
|
|
#include <openair1/SCHED/sched_common_extern.h>
|
|
|
|
int16_t estimate_ue_tx_power(int norm,uint32_t tbs, uint32_t nb_rb, uint8_t control_only, int ncp, uint8_t use_srs)
|
|
{
|
|
|
|
/// The payload + CRC size in bits, "B"
|
|
uint32_t B;
|
|
/// Number of code segments
|
|
uint32_t C;
|
|
/// Number of "small" code segments
|
|
uint32_t Cminus;
|
|
/// Number of "large" code segments
|
|
uint32_t Cplus;
|
|
/// Number of bits in "small" code segments (<6144)
|
|
uint32_t Kminus;
|
|
/// Number of bits in "large" code segments (<6144)
|
|
uint32_t Kplus;
|
|
/// Total number of bits across all segments
|
|
uint32_t sumKr;
|
|
/// Number of "Filler" bits
|
|
uint32_t F;
|
|
// num resource elements
|
|
uint32_t num_re=0.0;
|
|
// num symbols
|
|
uint32_t num_symb=0.0;
|
|
/// effective spectral efficiency of the PUSCH
|
|
uint32_t MPR_x100=0;
|
|
/// beta_offset
|
|
uint16_t beta_offset_pusch_x8=8;
|
|
/// delta mcs
|
|
float delta_mcs=0.0;
|
|
/// bandwidth factor
|
|
float bw_factor=0.0;
|
|
|
|
B= tbs+24;
|
|
lte_segmentation(NULL,
|
|
NULL,
|
|
B,
|
|
&C,
|
|
&Cplus,
|
|
&Cminus,
|
|
&Kplus,
|
|
&Kminus,
|
|
&F);
|
|
|
|
|
|
sumKr = Cminus*Kminus + Cplus*Kplus;
|
|
num_symb = 12-(ncp<<1)-(use_srs==0?0:1);
|
|
num_re = num_symb * nb_rb * 12;
|
|
|
|
if (num_re == 0)
|
|
return(0);
|
|
|
|
MPR_x100 = 100*sumKr/num_re;
|
|
|
|
if (control_only == 1 )
|
|
beta_offset_pusch_x8=8; // fixme
|
|
|
|
//(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);
|
|
|
|
bw_factor = (norm!=0) ? 0 : (hundred_times_log10_NPRB[nb_rb-1]/100.0);
|
|
LOG_D(PHY,"estimated ue tx power %d (num_re %d, sumKr %d, mpr_x100 %d, delta_mcs %f, bw_factor %f)\n",
|
|
(int16_t)ceil(delta_mcs + bw_factor), num_re, sumKr, MPR_x100, delta_mcs, bw_factor);
|
|
return (int16_t)ceil(delta_mcs + bw_factor);
|
|
|
|
}
|
|
|