/** * * \section COPYRIGHT * * Copyright 2013-2021 Software Radio Systems Limited * * By using this file, you agree to the terms and conditions set * forth in the LICENSE file which can be found at the top level of * the distribution. * */ #ifndef SRSRAN_CSI_RS_H_ #define SRSRAN_CSI_RS_H_ #include "csi_rs_cfg.h" #include "srsran/phy/phch/phch_cfg_nr.h" #include #include #include /** * @brief Number of frequency domain elements for Row 1 */ #define SRSRAN_CSI_RS_NOF_FREQ_DOMAIN_ALLOC_ROW1 4 /** * @brief Number of frequency domain elements for Row 2 */ #define SRSRAN_CSI_RS_NOF_FREQ_DOMAIN_ALLOC_ROW2 12 /** * @brief Number of frequency domain elements for Row 4 */ #define SRSRAN_CSI_RS_NOF_FREQ_DOMAIN_ALLOC_ROW4 3 /** * @brief Number of frequency domain elements for other rows */ #define SRSRAN_CSI_RS_NOF_FREQ_DOMAIN_ALLOC_OTHER 6 /** * @brief Calculates if the given periodicity implies a CSI-RS transmission in the given slot * @remark Described in TS 36.211 section 7.4.1.5.3 Mapping to physical resources * @param periodicity Periodicity configuration * @param slot_cfg Slot configuration * @return True if the periodicity configuration matches with the slot, false otherwise */ SRSRAN_API bool srsran_csi_rs_send(const srsran_csi_rs_period_and_offset_t* periodicity, const srsran_slot_cfg_t* slot_cfg); /** * @brief Adds to a RE pattern list the RE used in a CSI-RS resource for all CDM grops. This is intended for generating * reserved RE pattern for PDSCH transmission. * @param carrier Provides carrier configuration * @param resource Provides any CSI-RS resource mapping * @param nof_resources Provides the number of ZP-CSI-RS resources * @param l Symbol index in the slot * @param[out] rvd_mask Provides the reserved mask * @return SRSRAN_SUCCESS if the provided data is valid, and SRSRAN_ERROR code otherwise */ SRSRAN_API int srsran_csi_rs_append_resource_to_pattern(const srsran_carrier_nr_t* carrier, const srsran_csi_rs_resource_mapping_t* resource, srsran_re_pattern_list_t* re_pattern_list); /** * @brief Puts in the provided resource grid NZP-CSI-RS signals given by a NZP-CSI-RS resource * * @note it does not check if the provided slot matches with the periodicity of the provided NZP-CSI-RS resource * * @param carrier Provides carrier configuration * @param slot_cfg Provides current slot configuration * @param resource Provides a NZP-CSI-RS resource * @param[out] grid Resource grid * @return SRSRAN_SUCCESS if the arguments and the resource are valid. SRSRAN_ERROR code otherwise. */ SRSRAN_API int srsran_csi_rs_nzp_put_resource(const srsran_carrier_nr_t* carrier, const srsran_slot_cfg_t* slot_cfg, const srsran_csi_rs_nzp_resource_t* resource, cf_t* grid); /** * @brief Puts in the provided resource grid NZP-CSI-RS signals given by a NZP-CSI-RS resource set if their periodicity * configuration matches with the provided slot * * @param carrier Provides carrier configuration * @param slot_cfg Provides current slot configuration * @param set Provides a NZP-CSI-RS resource set * @param[out] grid Resource grid * @return The number of NZP-CSI-RS resources that have been scheduled for this slot if the arguments and the resource * are valid. SRSRAN_ERROR code otherwise. */ SRSRAN_API int srsran_csi_rs_nzp_put_set(const srsran_carrier_nr_t* carrier, const srsran_slot_cfg_t* slot_cfg, const srsran_csi_rs_nzp_set_t* set, cf_t* grid); SRSRAN_API int srsran_csi_rs_nzp_measure(const srsran_carrier_nr_t* carrier, const srsran_slot_cfg_t* slot_cfg, const srsran_csi_rs_nzp_resource_t* resource, const cf_t* grid, srsran_csi_trs_measurements_t* measure); /** * @brief Performs measurements of NZP-CSI-RS resource set flagged as TRS * * @attention It expects: * - The NZP-CSI-RS resource set shall be flagged as TRS; and * - at least a pair of active NZP-CSR-RS per measurement opportunity with their first transmission symbol in ascending * order. * * @note It performs the following wideband measurements: * - RSRP (linear and dB), * - EPRE (linear and dB), * - Noise (linear and dB), * - SNR (dB), * - average delay (microseconds), and * - CFO (Hz) * * @note It is intended for fine tracking of synchronization error (average delay) and carrier frequency error * * @param carrier Provides carrier configuration * @param slot_cfg Provides current slot * @param set Provides NZP-CSI-RS resource * @param grid Resource grid * @param measure Provides measurement * @return The number of NZP-CSI-RS resources scheduled for this TTI if the configuration is right, SRSRAN_ERROR code if * the configuration is invalid */ SRSRAN_API int srsran_csi_rs_nzp_measure_trs(const srsran_carrier_nr_t* carrier, const srsran_slot_cfg_t* slot_cfg, const srsran_csi_rs_nzp_set_t* set, const cf_t* grid, srsran_csi_trs_measurements_t* measure); SRSRAN_API uint32_t srsran_csi_rs_measure_info(const srsran_csi_trs_measurements_t* measure, char* str, uint32_t str_len); /** * @brief Performs channel measurements of NZP-CSI-RS resource set for CSI reports * * @note It performs the following wideband measurements: * - RSRP (dB), * - EPRE (dB), * - SNR (dB), * * @note It is intended for generating CSI wideband measurements that are used for generating CSI reporting * * @param carrier Provides carrier configuration * @param slot_cfg Provides current slot * @param set Provides NZP-CSI-RS resource * @param grid Resource grid * @param measure Provides CSI measurement * @return The number of NZP-CSI-RS resources scheduled for this slot if the configuration is right, SRSRAN_ERROR code * if the configuration is invalid */ SRSRAN_API int srsran_csi_rs_nzp_measure_channel(const srsran_carrier_nr_t* carrier, const srsran_slot_cfg_t* slot_cfg, const srsran_csi_rs_nzp_set_t* set, const cf_t* grid, srsran_csi_channel_measurements_t* measure); /** * @brief Performs measurements of ZP-CSI-RS resource set for CSI reports * * @note It performs the following wideband measurememnts: * - EPRE (dB) * * @note It is intended for measuring interference * * @param carrier Provides carrier configuration * @param slot_cfg Provides current slot * @param set Provides ZP-CSI-RS resource * @param grid Resource grid * @param measure Provides CSI measurement * @return The number of ZP-CSI-RS resources scheduled for this slot if the configuration is right, SRSRAN_ERROR code if * the configuration is invalid */ SRSRAN_API int srsran_csi_rs_zp_measure_channel(const srsran_carrier_nr_t* carrier, const srsran_slot_cfg_t* slot_cfg, const srsran_csi_rs_zp_set_t* set, const cf_t* grid, srsran_csi_channel_measurements_t* measure); #endif // SRSRAN_CSI_RS_H_