Merge remote-tracking branch 'origin/some_fixes' into integration_2026_w16 (!4030)
Miscellaneous code improvements - A fix in a yaml config file as reported by @Abdo-Gaber - proper positioning of static functions in a couple of gNB scheduler files - some effort to split NR from LTE code in compilation - harmonization of macros for unused variables
This commit is contained in:
@@ -3,7 +3,6 @@
|
||||
*/
|
||||
|
||||
#include "PHY/phy_extern.h"
|
||||
#include "SCHED/sched_common.h"
|
||||
#include "assertions.h"
|
||||
#include <math.h>
|
||||
#include "openair1/PHY/defs_RU.h"
|
||||
|
||||
@@ -7,9 +7,7 @@
|
||||
*/
|
||||
#include "PHY/sse_intrin.h"
|
||||
#include "PHY/defs_eNB.h"
|
||||
//#include "PHY/phy_extern.h"
|
||||
//#include "prach.h"
|
||||
#include "PHY/LTE_TRANSPORT/if4_tools.h"
|
||||
#include "PHY/if4_tools.h"
|
||||
|
||||
#include "SCHED/sched_eNB.h"
|
||||
#include "common/utils/LOG/vcd_signal_dumper.h"
|
||||
|
||||
@@ -4255,7 +4255,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
|
||||
LOG_D(PHY,"Format 0 DCI :ulsch (ue): cshift %d\n",ulsch->harq_processes[harq_pid]->n_DMRS2);
|
||||
LOG_D(PHY,"Format 0 DCI :ulsch (ue): phich status %d\n",ulsch->harq_processes[harq_pid]->status);
|
||||
#else
|
||||
UNUSED_VARIABLE(dai);
|
||||
UNUSED(dai);
|
||||
#endif
|
||||
return(0);
|
||||
} else {
|
||||
@@ -4889,7 +4889,7 @@ int generate_eNB_ulsch_params_from_dci(PHY_VARS_eNB *eNB,
|
||||
printf("ulsch (eNB): Nsymb_pusch %d\n",ulsch->harq_processes[harq_pid]->Nsymb_pusch);
|
||||
printf("ulsch (eNB): cshift %d\n",ulsch->harq_processes[harq_pid]->n_DMRS2);
|
||||
#else
|
||||
UNUSED_VARIABLE(dai);
|
||||
UNUSED(dai);
|
||||
#endif
|
||||
return(0);
|
||||
} else {
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
#include "executables/lte-softmodem.h"
|
||||
#include "PHY/phy_extern_ue.h"
|
||||
//#include "prach.h"
|
||||
#include "PHY/LTE_TRANSPORT/if4_tools.h"
|
||||
#include "PHY/if4_tools.h"
|
||||
|
||||
#include "SCHED_UE/sched_UE.h"
|
||||
#include "SCHED/sched_common_extern.h"
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
#include "PHY/CODING/lte_interleaver_inline.h"
|
||||
#include "PHY/LTE_TRANSPORT/transport_eNB.h"
|
||||
#include "modulation_eNB.h"
|
||||
#include "nr_modulation.h"
|
||||
#include "common/utils/LOG/vcd_signal_dumper.h"
|
||||
|
||||
int beam_precoding(int32_t **txdataF,
|
||||
@@ -80,25 +79,3 @@ int beam_precoding_one_eNB(int32_t **txdataF,
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void nr_beam_precoding(c16_t **txdataF,
|
||||
c16_t **txdataF_BF,
|
||||
NR_DL_FRAME_PARMS *frame_parms,
|
||||
int32_t ***beam_weights,
|
||||
int symbol,
|
||||
int aa,
|
||||
int nb_antenna_ports,
|
||||
int offset)
|
||||
{
|
||||
// clear txdata_BF[aa][re] for each call of ue_spec_beamforming
|
||||
memset(&txdataF_BF[aa][symbol*frame_parms->ofdm_symbol_size], 0, sizeof(c16_t) *(frame_parms->ofdm_symbol_size));
|
||||
|
||||
for (int p = 0; p < nb_antenna_ports; p++) {
|
||||
multadd_cpx_vector((c16_t *)&txdataF[p][(symbol * frame_parms->ofdm_symbol_size) + offset],
|
||||
(c16_t *)beam_weights[p][aa],
|
||||
(c16_t *)&txdataF_BF[aa][symbol * frame_parms->ofdm_symbol_size],
|
||||
frame_parms->ofdm_symbol_size,
|
||||
15);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
/*
|
||||
* SPDX-License-Identifier: LicenseRef-CSSL-1.0
|
||||
*/
|
||||
|
||||
#include "nr_modulation.h"
|
||||
#include "openair1/PHY/TOOLS/tools_defs.h"
|
||||
|
||||
void nr_beam_precoding(c16_t **txdataF,
|
||||
c16_t **txdataF_BF,
|
||||
NR_DL_FRAME_PARMS *frame_parms,
|
||||
int32_t ***beam_weights,
|
||||
int symbol,
|
||||
int aa,
|
||||
int nb_antenna_ports,
|
||||
int offset)
|
||||
{
|
||||
// clear txdata_BF[aa][re] for each call of ue_spec_beamforming
|
||||
memset(&txdataF_BF[aa][symbol*frame_parms->ofdm_symbol_size], 0, sizeof(c16_t) *(frame_parms->ofdm_symbol_size));
|
||||
|
||||
for (int p = 0; p < nb_antenna_ports; p++) {
|
||||
multadd_cpx_vector((c16_t *)&txdataF[p][(symbol * frame_parms->ofdm_symbol_size) + offset],
|
||||
(c16_t *)beam_weights[p][aa],
|
||||
(c16_t *)&txdataF_BF[aa][symbol * frame_parms->ofdm_symbol_size],
|
||||
frame_parms->ofdm_symbol_size,
|
||||
15);
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,7 @@
|
||||
*/
|
||||
|
||||
#include "nr_modulation.h"
|
||||
#include "openair1/PHY/TOOLS/tools_defs.h"
|
||||
#include "PHY/NR_REFSIG/nr_mod_table.h"
|
||||
#include "executables/softmodem-common.h"
|
||||
#include <simde/x86/avx512.h>
|
||||
@@ -688,12 +689,12 @@ c16_t nr_layer_precoder_cm(int n_layers,
|
||||
int symSz,
|
||||
c16_t datatx_F_precoding[n_layers][symSz],
|
||||
int ap,
|
||||
nfapi_nr_pm_pdu_t *pmi_pdu,
|
||||
c16_t weights[NR_MAX_NB_LAYERS][NR_MAX_CSI_PORTS],
|
||||
int offset)
|
||||
{
|
||||
c16_t precodatatx_F = {0};
|
||||
for (int al = 0; al < n_layers; al++) {
|
||||
c16_t prec_weight = pmi_pdu->weights[al][ap];
|
||||
c16_t prec_weight = weights[al][ap];
|
||||
precodatatx_F = c16maddShift(datatx_F_precoding[al][offset], prec_weight, precodatatx_F, 15);
|
||||
}
|
||||
return precodatatx_F;
|
||||
@@ -803,15 +804,15 @@ static inline __attribute__((always_inline)) __m128i cmac_prec128(__m128i y, __m
|
||||
#endif
|
||||
|
||||
#define load_consts(Type, Instruct, Rank) \
|
||||
const Type w_c##Rank = Instruct(c16toI32(c16conj(pmi_pdu->weights[Rank][ant]))); \
|
||||
const Type w_s##Rank = Instruct(c16toI32(c16swap(pmi_pdu->weights[Rank][ant]))); \
|
||||
const Type w_c##Rank = Instruct(c16toI32(c16conj(weights[Rank][ant]))); \
|
||||
const Type w_s##Rank = Instruct(c16toI32(c16swap(weights[Rank][ant]))); \
|
||||
const Type *in##Rank = (Type *)(txdataF_res_mapped[Rank] + sc_offset + (out-beginning));
|
||||
|
||||
void nr_layer_precoder_simd(const int n_layers,
|
||||
const int symSz,
|
||||
const c16_t txdataF_res_mapped[n_layers][symSz],
|
||||
const int ant,
|
||||
const nfapi_nr_pm_pdu_t *pmi_pdu,
|
||||
c16_t weights[NR_MAX_NB_LAYERS][NR_MAX_CSI_PORTS],
|
||||
const int sc_offset,
|
||||
const int re_cnt,
|
||||
c16_t *txdataF_precoded)
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
|
||||
#include <stdint.h>
|
||||
#include "PHY/defs_nr_common.h"
|
||||
#include "PHY/defs_gNB.h"
|
||||
|
||||
#define DMRS_MOD_ORDER 2
|
||||
/*Precoding matices: W[pmi][antenna_port][layer]*/
|
||||
@@ -127,7 +126,7 @@ c16_t nr_layer_precoder_cm(int n_layers,
|
||||
int symSz,
|
||||
c16_t datatx_F_precoding[n_layers][symSz],
|
||||
int ap,
|
||||
nfapi_nr_pm_pdu_t *pmi_pdu,
|
||||
c16_t weights[NR_MAX_NB_LAYERS][NR_MAX_CSI_PORTS],
|
||||
int offset);
|
||||
|
||||
/*! \brief Precoding with SIMDe, txdataF_precoded[] = prec_matrix[] * txdataF_res_mapped[]
|
||||
@@ -140,7 +139,7 @@ void nr_layer_precoder_simd(const int n_layers,
|
||||
const int symSz,
|
||||
const c16_t txdataF_res_mapped[n_layers][symSz],
|
||||
const int ant,
|
||||
const nfapi_nr_pm_pdu_t *pmi_pdu,
|
||||
c16_t weights[NR_MAX_NB_LAYERS][NR_MAX_CSI_PORTS],
|
||||
const int sc_offset,
|
||||
const int re_cnt,
|
||||
c16_t *txdataF_precoded);
|
||||
|
||||
@@ -15,7 +15,6 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
#include "openair1/PHY/TOOLS/tools_defs.h" // c16_t
|
||||
#include "nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h" // nfapi_nr_pm_pdu_t
|
||||
#include "nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h" // fapi_nr_dl_config_dci_dl_pdu_rel15_t
|
||||
|
||||
//#include "openair1/PHY/MODULATION/nr_modulation.h" // nr_layer_precoder_simd_[cm, simd]
|
||||
@@ -25,7 +24,7 @@ c16_t nr_layer_precoder_cm(int n_layers,
|
||||
int symbol_size,
|
||||
c16_t (*dataF_in)[/*symbol_size*/], // c16_t dataF_in[n_layers][symbol_size]
|
||||
int ant,
|
||||
nfapi_nr_pm_pdu_t *pmi_pdu,
|
||||
c16_t weights[NR_MAX_NB_LAYERS][NR_MAX_CSI_PORTS],
|
||||
int offset);
|
||||
|
||||
// Forward declare the function but hide the Variable-Length Array (VLA) feature from C not available in C++
|
||||
@@ -33,7 +32,7 @@ void nr_layer_precoder_simd(int n_layers,
|
||||
int symbol_size,
|
||||
const c16_t (*dataF_in)[/*symbol_size*/], // c16_t dataF_in[n_layers][symbol_size]
|
||||
int ant,
|
||||
const nfapi_nr_pm_pdu_t *pmi_pdu,
|
||||
c16_t weights[NR_MAX_NB_LAYERS][NR_MAX_CSI_PORTS],
|
||||
int offset,
|
||||
int re_cnt,
|
||||
c16_t *dataF_out);
|
||||
@@ -65,15 +64,15 @@ TEST(NrLayerPrecoderTest, Basic)
|
||||
c16_t(*dataF_in)[symbol_size] = reinterpret_cast<c16_t(*)[symbol_size]>(buffer_in.data());
|
||||
c16_t(*dataF_out)[symbol_size] = reinterpret_cast<c16_t(*)[symbol_size]>(buffer_out.data());
|
||||
|
||||
// Create and populate the pmi_pdu structure
|
||||
nfapi_nr_pm_pdu_t pmi_pdu = {0};
|
||||
// Create and populate the weights
|
||||
c16_t weights[NR_MAX_NB_LAYERS][NR_MAX_CSI_PORTS];
|
||||
for (int layer = 0; layer < n_layers; ++layer) {
|
||||
pmi_pdu.weights[layer][ant] = (c16_t){-SHRT_MAX, 0};
|
||||
weights[layer][ant] = (c16_t){-SHRT_MAX, 0};
|
||||
}
|
||||
|
||||
// Call the C function
|
||||
for (int symbol = 0; symbol < re_cnt; symbol++)
|
||||
dataF_out[ant][symbol] = nr_layer_precoder_cm(n_layers, symbol_size, dataF_in, ant, &pmi_pdu, symbol);
|
||||
dataF_out[ant][symbol] = nr_layer_precoder_cm(n_layers, symbol_size, dataF_in, ant, weights, symbol);
|
||||
|
||||
// You can calculate the expected value manually or test rough correctness
|
||||
for (int symbol = 0; symbol < re_cnt; symbol++) {
|
||||
@@ -110,14 +109,14 @@ TEST(NrLayerPrecoderTest, SIMD)
|
||||
c16_t(*dataF_in)[symbol_size] = reinterpret_cast<c16_t(*)[symbol_size]>(buffer_in.data());
|
||||
c16_t(*dataF_out)[symbol_size] = reinterpret_cast<c16_t(*)[symbol_size]>(buffer_out.data());
|
||||
|
||||
// Create and populate the pmi_pdu structure
|
||||
nfapi_nr_pm_pdu_t pmi_pdu = {0};
|
||||
// Create and populate the weights
|
||||
c16_t weights[NR_MAX_NB_LAYERS][NR_MAX_CSI_PORTS];
|
||||
for (int layer = 0; layer < n_layers; ++layer) {
|
||||
pmi_pdu.weights[layer][ant] = (c16_t){-SHRT_MAX, 0};
|
||||
weights[layer][ant] = (c16_t){-SHRT_MAX, 0};
|
||||
}
|
||||
|
||||
// Call the C function
|
||||
nr_layer_precoder_simd(n_layers, symbol_size, dataF_in, ant, &pmi_pdu, 0, re_cnt, dataF_out[ant]);
|
||||
nr_layer_precoder_simd(n_layers, symbol_size, dataF_in, ant, weights, 0, re_cnt, dataF_out[ant]);
|
||||
|
||||
// You can calculate the expected value manually or test rough correctness
|
||||
for (int symbol = 0; symbol < re_cnt; symbol++) {
|
||||
@@ -156,15 +155,14 @@ TEST(NrLayerPrecoderTest, Compare_CM_SIMD)
|
||||
c16_t(*dataF_out_cm)[symbol_size] = reinterpret_cast<c16_t(*)[symbol_size]>(buffer_out_cm.data());
|
||||
c16_t(*dataF_out_simd)[symbol_size] = reinterpret_cast<c16_t(*)[symbol_size]>(buffer_out_simd.data());
|
||||
|
||||
// Create and populate the pmi_pdu structure
|
||||
nfapi_nr_pm_pdu_t pmi_pdu = {0};
|
||||
pmi_pdu.pm_idx = 4;
|
||||
// Create and populate the weights
|
||||
c16_t weights[NR_MAX_NB_LAYERS][NR_MAX_CSI_PORTS];
|
||||
for (int layer = 0; layer < n_layers; ++layer) {
|
||||
// Could not use convert_precoder_weight() as complex.h could not be used in googletest
|
||||
// Use the logic in convert_precoder_weight()
|
||||
// precoder [−1,−j]
|
||||
pmi_pdu.weights[layer][0] = (c16_t){-SHRT_MAX, 0};
|
||||
pmi_pdu.weights[layer][1] = (c16_t){0, -SHRT_MAX};
|
||||
weights[layer][0] = (c16_t){-SHRT_MAX, 0};
|
||||
weights[layer][1] = (c16_t){0, -SHRT_MAX};
|
||||
}
|
||||
|
||||
// Get the results for all the antenna
|
||||
@@ -172,10 +170,10 @@ TEST(NrLayerPrecoderTest, Compare_CM_SIMD)
|
||||
|
||||
// Call the C function
|
||||
for (int symbol = 0; symbol < re_cnt; symbol++)
|
||||
dataF_out_cm[ant][symbol] = nr_layer_precoder_cm(n_layers, symbol_size, dataF_in, ant, &pmi_pdu, symbol);
|
||||
dataF_out_cm[ant][symbol] = nr_layer_precoder_cm(n_layers, symbol_size, dataF_in, ant, weights, symbol);
|
||||
|
||||
// Call the C function
|
||||
nr_layer_precoder_simd(n_layers, symbol_size, dataF_in, ant, &pmi_pdu, 0, re_cnt, dataF_out_simd[ant]);
|
||||
nr_layer_precoder_simd(n_layers, symbol_size, dataF_in, ant, weights, 0, re_cnt, dataF_out_simd[ant]);
|
||||
|
||||
// Compare the result from both C function
|
||||
for (int symbol = 0; symbol < re_cnt; symbol++) {
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
* SPDX-License-Identifier: LicenseRef-CSSL-1.0
|
||||
*/
|
||||
|
||||
#include "PHY/defs_eNB.h"
|
||||
#include "PHY/sse_intrin.h"
|
||||
#include "PHY/NR_ESTIMATION/nr_ul_estimation.h"
|
||||
|
||||
|
||||
@@ -438,7 +438,7 @@ static inline void do_txdataF(c16_t **txdataF,
|
||||
symbol_sz,
|
||||
txdataF_precoding,
|
||||
ant,
|
||||
pmi_pdu,
|
||||
pmi_pdu->weights,
|
||||
subCarrier,
|
||||
re_cnt,
|
||||
&txdataF[ant][txdataF_offset_per_symbol]);
|
||||
|
||||
@@ -28,8 +28,8 @@
|
||||
#include "common_lib.h"
|
||||
#include "fapi_nr_ue_interface.h"
|
||||
#include "assertions.h"
|
||||
#include "barrier.h"
|
||||
#include "actor.h"
|
||||
#include "common/utils/barrier/barrier.h"
|
||||
#include "common/utils/actor/actor.h"
|
||||
//#include "openair1/SCHED_NR_UE/defs.h"
|
||||
|
||||
#define msg(aRGS...) LOG_D(PHY, ##aRGS)
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
//#include "PHY/defs_eNB.h"
|
||||
#include "PHY/defs_RU.h"
|
||||
#include "PHY/TOOLS/alaw_lut.h"
|
||||
//#include "PHY/phy_extern.h"
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
#ifndef __IF4_TOOLS_H__
|
||||
#define __IF4_TOOLS_H__
|
||||
#include "PHY/defs_eNB.h"
|
||||
#include "openair1/PHY/defs_RU.h"
|
||||
|
||||
/// Macro for IF4 packet type
|
||||
#define IF4p5_PACKET_TYPE 0x080A
|
||||
@@ -10,7 +10,7 @@
|
||||
#include "PHY/defs_eNB.h"
|
||||
#include "SCHED/sched_eNB.h"
|
||||
#include "PHY/MODULATION/modulation_eNB.h"
|
||||
#include "PHY/LTE_TRANSPORT/if4_tools.h"
|
||||
#include "PHY/if4_tools.h"
|
||||
#include "PHY/LTE_TRANSPORT/transport_common_proto.h"
|
||||
#include "PHY/LTE_TRANSPORT/transport_proto.h"
|
||||
#include "PHY/LTE_UE_TRANSPORT/transport_proto_ue.h"
|
||||
|
||||
@@ -256,9 +256,9 @@ void do_DL_sig(sim_t *sim,
|
||||
LOG_D(OCM,"[SIM][DL] UE %d : rx_pwr (ADC out) %f dB/RE (%d) for subframe %d, writing to %p, length %d\n",UE_id, 10*log10((double)rx_pwr2),rx_pwr2,subframe,rxdata,length<length_meas?length:length_meas);
|
||||
LOG_D(OCM,"[SIM][DL] UE %d : rx_pwr (ADC out) %f dB for subframe %d\n",UE_id,10*log10((double)rx_pwr2*12*frame_parms->N_RB_DL) ,subframe);
|
||||
#else
|
||||
UNUSED_VARIABLE(rx_pwr2);
|
||||
UNUSED_VARIABLE(tx_pwr);
|
||||
UNUSED_VARIABLE(rx_pwr);
|
||||
UNUSED(rx_pwr2);
|
||||
UNUSED(tx_pwr);
|
||||
UNUSED(rx_pwr);
|
||||
#endif
|
||||
|
||||
} // RU_output_mask
|
||||
@@ -434,8 +434,8 @@ void do_UL_sig(sim_t *sim, uint16_t subframe, uint8_t abstraction_flag, LTE_DL_F
|
||||
rx_pwr2 = signal_energy(rxdata[0]+sf_offset_tdd,frame_parms->samples_per_tti)*(double)frame_parms->ofdm_symbol_size/(12.0*frame_parms->N_RB_DL);
|
||||
LOG_D(OCM,"[SIM][UL] RU %d rx_pwr (ADC out) %f dB (%d) for subframe %d (offset %d) = %p\n",ru_id,10*log10((double)rx_pwr2),rx_pwr2,subframe,sf_offset,rxdata[0]+sf_offset_tdd);
|
||||
#else
|
||||
UNUSED_VARIABLE(tx_pwr);
|
||||
UNUSED_VARIABLE(rx_pwr);
|
||||
UNUSED_VARIABLE(rx_pwr2);
|
||||
UNUSED(tx_pwr);
|
||||
UNUSED(rx_pwr);
|
||||
UNUSED(rx_pwr2);
|
||||
#endif
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user