接收机算法#

此模块包含 cuPHY 中实现的多种接收机算法,因此使用了 GPU 加速。

class aerial.phy5g.algorithms.channel_estimator.ChannelEstimator#

信道估计器类。

此类在接收到的时隙信号的 DMRS 符号上实现基于传统 MMSE 的信道估计。它输出 DMRS 符号中所有资源元素的信道估计。与 pyAerial 中的许多其他类类似,此类在一个调用中处理共享相同时频资源的 UE 组,即它支持 MU-MIMO。

__init__(
num_rx_ant,
ch_est_algo=1,
enable_per_prg_chest=0,
enable_ul_rx_bf=0,
cuda_stream=None,
chest_filter_h5=None,
w_freq_array=None,
w_freq4_array=None,
w_freq_small_array=None,
shift_seq_array=None,
unshift_seq_array=None,
shift_seq4_array=None,
unshift_seq4_array=None,
)#

初始化 ChannelEstimator。

信道估计滤波器可以作为 H5 文件给出,也可以直接作为 Numpy 数组给出。如果两者都没有给出,则信道估计器将使用默认滤波器。

参数:
  • num_rx_ant (int) – 接收天线数量。

  • ch_est_algo (int) – 信道估计算法。

  • MMSE (- 0 -)

  • estimation (- 1 - 带延迟的多阶段 MMSE)

  • yet (- 2 - pyAerial 不支持 RKHS)

  • only (- 3 - LS 信道估计)

  • enable_per_prg_chest (int) – 启用/禁用 PUSCH 每 PRG 信道估计。

  • 0 (-) – 禁用(默认)。

  • 1 (-) – 启用。

  • enable_ul_rx_bf (int) – 启用/禁用 PUSCH 的波束赋形。

  • 0 – 禁用(默认)。

  • 1 – 启用。

  • cuda_stream (int) – CUDA 流。如果未给出,将创建一个。

  • chest_filter_h5 (str) – 包含信道估计滤波器的 HDF5 文件的文件名。

  • w_freq_array (np.ndarray)

  • w_freq4_array (np.ndarray)

  • w_freq_small_array (np.ndarray)

  • shift_seq_array (np.ndarray)

  • unshift_seq_array (np.ndarray)

  • shift_seq4_array (np.ndarray)

  • unshift_seq4_array (np.ndarray)

返回类型:

None

estimate(
*,
rx_slot,
slot,
pusch_configs=None,
num_ues=None,
num_dmrs_cdm_grps_no_data=None,
dmrs_scrm_id=None,
start_prb=None,
num_prbs=None,
prg_size=None,
num_ul_streams=None,
dmrs_syms=None,
dmrs_max_len=None,
dmrs_add_ln_pos=None,
start_sym=None,
num_symbols=None,
scids=None,
layers=None,
dmrs_ports=None,
)#

为多个 UE 组运行信道估计。

这为 pusch_configs 中包含的所有 UE 组运行 cuPHY 信道估计。如果未给出此参数,则需要给出所有其他参数,并且 cuPHY 信道估计仅针对共享相同时频资源的单个 UE 组运行,即具有相同的 PRB 分配以及相同的起始符号和分配的符号数。此单个 UE 组由所有其他参数参数化。

可以使用 Numpy 或 CuPy 数组调用该方法。如果输入数组位于 GPU (CuPy) 上,则输出将在 GPU (CuPy) 上。因此,返回类型应与调用该方法时用于 rx_slot 的类型相同。

参数:
  • rx_slot (Array) – 输入接收数据,类型为 complex64 条目的频率 x 时间 x Rx 天线 Numpy 或 CuPy 数组。

  • slot (int) – 时隙号。

  • pusch_configs (List[PuschConfig]) – PUSCH 配置对象列表,每个 UE 组一个。如果给出此参数,则其余参数将被忽略。如果未给出,则需要给出所有其他参数(在这种情况下仅支持一个 UE 组)。

  • num_ues (int) – 单个 UE 组中的 UE 数量。

  • num_dmrs_cdm_grps_no_data (int) – 没有数据的 DMRS CDM 组的数量 [3GPP TS 38.212, sec 7.3.1.1]。值:1->3。

  • dmrs_scrm_id (int) – DMRS 加扰 ID。

  • start_prb (int) – UE 分配的起始 PRB 索引。

  • num_prbs (int) – UE 组分配的 PRB 数量。

  • prg_size (int) – PUSCH 每 PRG 信道估计的 PRG 大小(以 PRB 为单位)。

  • num_ul_streams (int) – 此 PUSCH 的活动流数量。

  • dmrs_syms (List[int]) – 对于 UE 组,二进制数列表,每个二进制数指示相应的符号是否为 DMRS 符号。列表的长度等于时隙中符号的数量。0 表示符号中没有 DMRS,1 表示符号是 DMRS 符号。

  • dmrs_max_len (int) – maxLength 参数,值为 1 或 2,表示 DMRS 是单符号 DMRS 还是单符号或双符号 DMRS。

  • dmrs_add_ln_pos (int) – 额外的 DMRS 位置的数量。

  • start_sym (int) – UE 组分配的起始符号索引。

  • num_symbols (int) – UE 组分配中的符号数量。

  • scids (List[int]) – UE 组中每个 UE 的 DMRS 序列初始化 SCID [TS38.211, sec 7.4.1.1.2]。值为 0 或 1。

  • layers (List[int]) – UE 组中每个 UE 的层数。列表的长度等于 UE 的数量。

  • dmrs_ports (List[int]) – UE 组中每个 UE 的 DMRS 端口。每个条目的格式均为 SCF FAPI 格式,如下所示:从 LSB 开始的位图(掩码),其中每个位指示是否使用相应的 DMRS 端口索引。

返回值:

信道估计,作为每个 UE 组的 Rx 天线 x 层 x 频率 x 时间 Numpy 或 CuPy 数组。

返回类型:

List[Array]

class aerial.phy5g.algorithms.noise_intf_estimator.NoiseIntfEstimator#

噪声和干扰估计器类。

此类实现用于噪声和干扰估计的算法。它调用相应的 cuPHY 算法,并提供 cuPHY 均衡和软解映射所需的估计值。

它需要信道估计以及接收到的数据符号作为输入。

__init__(
num_rx_ant,
eq_coeff_algo,
cuda_stream=None,
)#

初始化 NoiseIntfEstimator。

参数:
  • num_rx_ant (int) – 接收天线数量。

  • eq_coeff_algo (int) –

    用于计算均衡器系数的算法。

    • 0:迫零均衡器。

    • 1:仅使用噪声方差的 MMSE。

    • 2:MMSE-IRC。

  • cuda_stream (int) – CUDA 流。如果未给出,将创建一个。

返回类型:

None

estimate(
*,
rx_slot,
channel_est,
slot,
pusch_configs=None,
num_ues=None,
num_dmrs_cdm_grps_no_data=None,
dmrs_scrm_id=None,
start_prb=None,
num_prbs=None,
dmrs_syms=None,
dmrs_max_len=None,
dmrs_add_ln_pos=None,
start_sym=None,
num_symbols=None,
scids=None,
layers=None,
dmrs_ports=None,
)#

估计噪声和干扰。

这为 pusch_configs 中包含的所有 UE 组运行 cuPHY 噪声和干扰估计。如果未给出此参数,则需要给出所有其他参数,并且 cuPHY 噪声和干扰估计仅针对共享相同时频资源的单个 UE 组运行,即具有相同的 PRB 分配以及相同的起始符号和分配的符号数。

可以使用 Numpy 或 CuPy 数组调用该方法。如果输入数组位于 GPU (CuPy) 上,则输出将在 GPU (CuPy) 上。因此,返回类型应与调用该方法时用于 rx_slot 的类型相同。

参数:
  • rx_slot (Array) – 输入接收数据,类型为 complex64 条目的频率 x 时间 x Rx 天线 Numpy 或 CuPy 数组。

  • channel_est (List[Array]) – 信道估计,作为每个 UE 组的 Rx 天线 x 层 x 频率 x 时间 Numpy 或 CuPy 数组。

  • slot (int) – 时隙号。

  • pusch_configs (List[PuschConfig]) – PUSCH 配置对象列表,每个 UE 组一个。如果给出此参数,则其余参数将被忽略。如果未给出,则需要给出所有其他参数(在这种情况下仅支持一个 UE 组)。

  • num_ues (int) – UE 组中的 UE 数量。

  • num_dmrs_cdm_grps_no_data (int) – 没有数据的 DMRS CDM 组的数量 [3GPP TS 38.212, sec 7.3.1.1]。值:1->3。

  • dmrs_scrm_id (int) – DMRS 加扰 ID。

  • start_prb (int) – UE 分配的起始 PRB 索引。

  • num_prbs (int) – UE 组分配的 PRB 数量。

  • dmrs_syms (List[int]) – 对于 UE 组,二进制数列表,每个二进制数指示相应的符号是否为 DMRS 符号。列表的长度等于时隙中符号的数量。0 表示符号中没有 DMRS,1 表示符号是 DMRS 符号。

  • dmrs_max_len (int) – maxLength 参数,值为 1 或 2,表示 DMRS 是单符号 DMRS 还是单符号或双符号 DMRS。

  • dmrs_add_ln_pos (int) – 额外的 DMRS 位置的数量。

  • start_sym (int) – UE 组分配的起始符号索引。

  • num_symbols (int) – UE 组分配中的符号数量。

  • scids (List[int]) – 每个 UE 的 DMRS 序列初始化 SCID [TS38.211, sec 7.4.1.1.2]。值为 0 或 1。

  • layers (List[int]) – 每个 UE 的层数。列表的长度等于 UE 的数量。

  • dmrs_ports (List[int]) – 每个 UE 的 DMRS 端口。每个条目的格式均为 SCF FAPI 格式,如下所示:从 LSB 开始的位图(掩码),其中每个位指示是否使用相应的 DMRS 端口索引。

返回值:

包含以下内容的元组

  • List[Array]:每个 PRB、每个 UE 组的噪声/干扰协方差矩阵的 Cholesky 分解的逆矩阵。此列表中的每个条目的大小为接收天线数量 x 接收天线数量 x PRB 数量。

  • Array:每个 UE 的预均衡宽带噪声方差估计,即每个 UE 一个值,在整个频率分配上取平均值。此值的单位为 dB。

返回类型:

List[Array], Array

class aerial.phy5g.algorithms.channel_equalizer.ChannelEqualizer#

信道均衡器类。

此类实现基于 MMSE 的信道均衡以及软解映射,以获得用于信道解码的对数似然比。

它需要信道估计和噪声及干扰估计作为输入,以及接收到的数据符号。

__init__(
num_rx_ant,
eq_coeff_algo,
enable_pusch_tdi,
cuda_stream=None,
)#

初始化 ChannelEqualizer。

参数:
  • num_rx_ant (int) – 接收天线数量。

  • eq_coeff_algo (int) –

    用于计算均衡器系数的算法。

    • 0:迫零均衡器。

    • 1:仅使用噪声方差的 MMSE。

    • 2:MMSE-IRC。

  • enable_pusch_tdi (int) – 是否使用时域插值。

  • cuda_stream (int) – CUDA 流。如果未给出,将创建一个。

返回类型:

None

equalize(
*,
rx_slot,
channel_est,
lw_inv,
noise_var_pre_eq,
pusch_configs=None,
num_ues=None,
num_dmrs_cdm_grps_no_data=None,
start_prb=None,
num_prbs=None,
dmrs_syms=None,
dmrs_max_len=None,
dmrs_add_ln_pos=None,
start_sym=None,
num_symbols=None,
layers=None,
mod_orders=None,
)#

运行均衡和软解映射。

这为 pusch_configs 中包含的所有 UE 组运行 cuPHY 均衡。如果未给出此参数,则需要给出所有其他参数,并且 cuPHY 均衡仅针对共享相同时频资源的单个 UE 组运行,即具有相同的 PRB 分配以及相同的起始符号和分配的符号数。

可以使用 Numpy 或 CuPy 数组调用该方法。如果输入数组位于 GPU (CuPy) 上,则输出将在 GPU (CuPy) 上。因此,返回类型应与调用该方法时用于 rx_slot 的类型相同。

参数:
  • rx_slot (Array) – 输入接收数据,类型为 np.complex64 条目的频率 x 时间 x Rx 天线 Numpy 或 CuPy 数组。

  • channel_est (List[Array]) – 信道估计,作为每个 UE 组的 Rx 天线 x 层 x 频率 x 时间 Numpy 或 Cupy 数组。

  • lw_inv (List[Array]) – 每个 PRB、每个 UE 组的噪声/干扰协方差矩阵的 Cholesky 分解的逆矩阵。此列表中的每个条目的大小为接收天线数量 x 接收天线数量 x PRB 数量。

  • noise_var_pre_eq (Array) – 平均预均衡器噪声方差,单位为 dB。每个 UE 组一个值。

  • pusch_configs (List[PuschConfig]) – PUSCH 配置对象列表,每个 UE 组一个。如果给出此参数,则其余参数将被忽略。如果未给出,则需要给出所有其他参数(在这种情况下仅支持一个 UE 组)。

  • num_ues (int) – UE 组中的 UE 数量。

  • num_dmrs_cdm_grps_no_data (int) – 没有数据的 DMRS CDM 组的数量 [3GPP TS 38.212, sec 7.3.1.1]。值:1->3。

  • start_prb (int) – UE 分配的起始 PRB 索引。

  • num_prbs (int) – UE 组分配的 PRB 数量。

  • dmrs_syms (List[int]) – 对于 UE 组,二进制数列表,每个二进制数指示相应的符号是否为 DMRS 符号。列表的长度等于时隙中符号的数量。0 表示符号中没有 DMRS,1 表示符号是 DMRS 符号。

  • dmrs_max_len (int) – maxLength 参数,值为 1 或 2,表示 DMRS 是单符号 DMRS 还是单符号或双符号 DMRS。

  • dmrs_add_ln_pos (int) – 额外的 DMRS 位置的数量。

  • start_sym (int) – UE 组分配的起始符号索引。

  • num_symbols (int) – UE 组分配中的符号数量。

  • layers (List[int]) – 每个 UE 的层数。

  • mod_orders (List[int]) – 每个 UE 的 QAM 调制阶数。

返回值:

包含以下内容的元组

  • List[Array]:要馈送到解码(速率匹配)的接收比特的对数似然比。每个 UE 组一个 Numpy 数组,每个 Numpy 数组的大小为 8 x 层数 x 子载波数 x 数据符号数。第一维的大小固定为 8,因为支持高达 256QAM 的调制,并且 cuPHY 返回的大小与调制无关。仅使用与实际比特数对应的第一个条目。

  • List[Array]:均衡后的符号,每个 UE 组一个 Numpy 数组。每个 Numpy 数组的大小等于层数 x 子载波数 x 数据符号数。

返回类型:

List[Array], List[Array]

class aerial.phy5g.algorithms.rsrp_estimator.RsrpEstimator#

RSRP、后均衡器和预均衡器 SINR 估计器类。

此类实现 RSRP 估计以及 PUSCH 接收机管道的后均衡器和预均衡器 SINR 估计。

__init__(num_rx_ant, enable_pusch_tdi, cuda_stream=None)#

初始化 RsrpEstimator。

参数:
  • num_rx_ant (int) – 接收天线数量。

  • enable_pusch_tdi (int) – 均衡器系数计算中是否使用时间插值。这会影响后均衡器 SINR。

  • cuda_stream (int) – CUDA 流。如果未给出,将创建一个。

返回类型:

None

estimate(
channel_est,
ree_diag_inv,
noise_var_pre_eq,
pusch_configs=None,
num_ues=None,
num_prbs=None,
dmrs_add_ln_pos=None,
layers=None,
)#

运行 RSRP 以及后均衡器和预均衡器 SINR 估计。

可以使用 Numpy 或 CuPy 数组调用该方法。如果输入数组位于 GPU (CuPy) 上,则输出将在 GPU (CuPy) 上。因此,返回类型应与调用该方法时用于 rx_slot 的类型相同。

参数:
  • channel_est (List[Array]) – 信道估计,作为每个 UE 组的 Rx 天线 x 层 x 频率 x 时间 Numpy 或 CuPy 数组。

  • ree_diag_inv (List[Array]) – 每个 UE 组的后均衡器残余误差协方差对角线的逆矩阵。

  • noise_var_pre_eq (Array) – 平均预均衡器噪声方差,单位为 dB。每个 UE 组一个值。

  • pusch_configs (List[PuschConfig]) – PUSCH 配置对象列表,每个 UE 组一个。如果给出此参数,则其余参数将被忽略。如果未给出,则需要给出所有其他参数(在这种情况下仅支持一个 UE 组)。

  • num_ues (int) – UE 组中的 UE 数量。

  • num_prbs (int) – UE 组分配的 PRB 数量。

  • dmrs_add_ln_pos (int) – 额外的 DMRS 位置的数量。这用于导出 DMRS 符号的总数。

  • layers (List[int]) – 每个 UE 的层数。

返回值:

包含以下内容的元组

  • Array:每个 UE 的 RSRP 值。

  • Array:每个 UE 的预均衡 SINR 值。

  • Array:每个 UE 的后均衡 SINR 值。

返回类型:

Array, Array, Array

class aerial.phy5g.algorithms.cfo_ta_estimator.CfoTaEstimator#

CFO 和 TA 估计器类。

此类实现用于载波频率偏移和定时提前估计的算法。它调用相应的 cuPHY 算法,并提供其他 cuPHY 算法所需的估计值。

它需要信道估计作为输入。

__init__(
num_rx_ant,
mu=1,
enable_cfo_correction=True,
enable_to_estimation=True,
cuda_stream=None,
)#

初始化 CfoTaEstimator。

参数:
  • num_rx_ant (int) – 接收天线数量。

  • mu (int) – 数值。值在 [0, 3] 中。默认值:1。

  • enable_cfo_correction (int) –

    启用/禁用 CFO 校正

    • 0:禁用。

    • 1:启用(默认)。

  • enable_to_estimation (int) –

    启用/禁用时间偏移估计

    • 0:禁用。

    • 1:启用(默认)。

  • cuda_stream (int) – CUDA 流。如果未给出,将创建一个。

返回类型:

None

estimate(
channel_est,
pusch_configs=None,
num_ues=None,
num_prbs=None,
dmrs_syms=None,
dmrs_max_len=None,
dmrs_add_ln_pos=None,
layers=None,
)#

估计载波频率偏移和定时提前。

参数:
  • channel_est (List[Array]) – 信道估计,作为每个 UE 组的 Rx 天线 x 层 x 频率 x 时间 Numpy 或 CuPy 数组。

  • pusch_configs (List[PuschConfig]) – PUSCH 配置对象列表,每个 UE 组一个。如果给出此参数,则其余参数将被忽略。如果未给出,则需要给出所有其他参数(在这种情况下仅支持一个 UE 组)。

  • num_ues (int) – UE 组中的 UE 数量。

  • num_prbs (int) – UE 组分配的 PRB 数量。

  • dmrs_syms (List[int]) – 对于 UE 组,二进制数列表,每个二进制数指示相应的符号是否为 DMRS 符号。列表的长度等于时隙中符号的数量。0 表示符号中没有 DMRS,1 表示符号是 DMRS 符号。

  • dmrs_max_len (int) – maxLength 参数,值为 1 或 2,表示 DMRS 是单符号 DMRS 还是单符号或双符号 DMRS。

  • dmrs_add_ln_pos (int) – 额外的 DMRS 位置的数量。

  • layers (List[int]) – 每个 UE 的层数。列表的长度等于 UE 的数量。

返回值:

包含以下内容的元组

  • Array:每个 UE 的载波频率偏移,单位为 Hz。

  • Array:每个 UE 的定时偏移,单位为微秒。

返回类型:

Array, Array

class aerial.phy5g.algorithms.demapper.Demapper#

此类提供符号到对数似然比的解映射。

使用的算法是精确的对数 MAP 映射,它在计算上是密集型的。另请注意,这目前纯粹是在 Python 中实现的,因此可能很慢。

__init__(mod_order)#

初始化解映射器。

参数:

mod_order (int) – 调制阶数。支持的值:2、4、6、8。

返回类型:

None

demap(syms, noise_var_inv)#

运行解映射。

参数:
  • syms (np.ndarray) – 调制符号数组。

  • noise_var_inv (np.ndarray) – 每个子载波的噪声方差的倒数。此数组的大小必须与 syms 广播。

返回值:

对数似然比。第一维是调制阶数,否则维度与 syms 的维度相同。

返回类型:

np.ndarray

class aerial.phy5g.algorithms.trt_engine.TrtTensorPrms#

用于保存 TRT 输入和输出张量参数的类。

property cuphy_data_type: aerial.pycuphy.DataType#

将数据类型转换为 cuPHY 数据类型格式。

__init__(name, dims, data_type=numpy.float32)#
参数:
  • name (str)

  • dims (List[int])

  • data_type (type)

返回类型:

None

class aerial.phy5g.algorithms.trt_engine.TrtEngine#

TensorRT 引擎类。

此类在 NVIDIA 的 TensorRT 及其 cuPHY API 周围实现了一个简单的包装器。它以 TRT 引擎文件作为输入,以及输入和输出张量的名称和维度。TRT 引擎文件可以使用 trtexec 工具从 .onnx 文件离线生成。

__init__(
trt_model_file,
max_batch_size,
input_tensors,
output_tensors,
cuda_stream=None,
)#

初始化 TrtEngine。

参数:
  • trt_model_file (str) – 这是 TRT 引擎(模型)文件。

  • max_batch_size (int) – 最大批次大小。

  • input_tensors (List[TrtTensorPrms]) – 从张量名称到输入张量维度的映射。名称是字符串,必须与 TRT 模型文件中找到的名称匹配,形状是整数的可迭代对象。批次维度被跳过。

  • output_tensors (List[TrtTensorPrms]) – 从张量名称到输出张量维度的映射。名称是字符串,必须与 TRT 模型文件中找到的名称匹配,形状是整数的可迭代对象。批次维度被跳过。

  • cuda_stream (int) – CUDA 流。如果未给出,将创建一个。

返回类型:

None

run(input_tensors)#

运行 TensorRT 模型。

这将使用 NVIDIA TensorRT 引擎运行模型。

参数:

input_tensors (dict) – 从输入张量名称到实际输入张量的映射。张量名称必须与初始化中给出的名称以及 TRT 模型中找到的名称匹配。实际批次大小从张量大小中读取。张量可以是 Numpy 或 CuPy 数组。

返回值:

从输出张量名称到实际输出张量的映射。

返回类型:

dict

class aerial.phy5g.algorithms.srs_channel_estimator.SrsCellPrms#

SRS 小区参数。

SRS 小区参数列表作为输入提供给 SRS 信道估计器,每个小区一个条目。

参数:
  • slot_num (np.uint16) – 时隙号。

  • frame_num (np.uint16) – 帧号。

  • srs_start_sym (np.uint8) – SRS 起始符号。

  • num_srs_sym (np.uint8) – SRS 符号数。

  • num_rx_ant_srs (np.uint16) – SRS Rx 天线数量。

  • mu (np.uint8) – 子载波间隔参数,请参阅 TS 38.211。

class aerial.phy5g.algorithms.srs_channel_estimator.UeSrsPrms#

UE SRS 参数。

UE SRS 参数列表作为输入提供给 SRS 信道估计器,每个 UE 一个条目。

参数:
  • cell_idx (np.uint16) – 用户所属小区索引。

  • num_ant_ports (np.uint8) – SRS 天线端口数。1、2 或 4。

  • num_syms (np.uint8) – SRS 符号数。1、2 或 4。

  • num_repetitions (np.uint8) – 重复次数。1、2 或 4。

  • comb_size (np.uint8) – SRS 梳状大小。2 或 4。

  • start_sym (np.uint8) – 起始 SRS 符号。0 - 13。

  • sequence_id (np.uint16) – SRS 序列 ID。0 - 1023。

  • config_idx (np.uint8) – SRS 带宽配置索引。0 - 63。

  • bandwidth_idx (np.uint8) – SRS 带宽索引。0 - 3。

  • comb_offset (np.uint8) – SRS 梳状偏移。0 - 3。

  • cyclic_shift (np.uint8) – 循环移位。0 - 11。

  • frequency_position (np.uint8) – 频域位置。0 - 67。

  • frequency_shift (np.uint16) – 频域偏移。0 - 268。

  • frequency_hopping (np.uint8) – 频率跳频选项。0 - 3。

  • resource_type (np.uint8) – SRS 分配类型。0:非周期性。1:半持久性。2:周期性。

  • periodicity (np.uint16) – SRS 周期性(以时隙为单位)。0、2、3、5、8、10、16、20、32、40、64、80、160、320、640、1280、2560。

  • offset (np.uint16) – 时隙偏移值。0 - 2569。

  • group_or_sequence_hopping (np.uint8) – 跳频配置。 0: 无跳频。 1: 组跳频。 2: 序列跳频。

  • ch_est_buff_idx (np.uint16) – 存储SRS估计值的缓冲区索引。

  • srs_ant_port_to_ue_ant_map (np.ndarray) – SRS天线端口与UE天线在信道估计缓冲区中的映射:将SRS天线端口 i 的估计值存储在 srs_ant_port_to_ue_ant_map[i] 中。

  • prg_size (np.uint8) – 每个PRG的PRB数量。

class aerial.phy5g.algorithms.srs_channel_estimator.SrsReport#

SRS 输出报告。

此报告由 SRS 信道估计器返回。

参数:
  • to_est_micro_sec (np.float32) – 时间偏移估计,单位为微秒。

  • wideband_snr (np.float3) – 宽带 SNR。

  • wideband_noise_energy (np.float32) – 宽带噪声能量。

  • wideband_signal_energy (np.float32) – 宽带信号能量。

  • wideband_sc_corr (np.complex64) – 宽带子载波相关性。

  • wideband_cs_corr_ratio_db (np.float32)

  • wideband_cs_corr_use (np.float32)

  • wideband_cs_corr_not_use (np.float32)

class aerial.phy5g.algorithms.srs_channel_estimator.SrsChannelEstimator#

SrsChannelEstimator 类。

此类为 5G NR 实现 SRS 信道探测。

__init__(chest_params=None, cuda_stream=None)#

初始化 SrsChannelEstimator。

参数:
  • chest_params (dict) – 信道估计滤波器和参数字典。设置为 None 以使用默认值。

  • cuda_stream (int) – CUDA 流。如果未给出,将创建一个。

返回类型:

None

estimate(
rx_data,
num_srs_ues,
num_srs_cells,
num_prb_grps,
start_prb_grp,
srs_cell_prms,
srs_ue_prms,
)#

运行 SRS 信道估计。

参数:
  • rx_data (Array) – 输入 RX 数据,大小为 子载波数量 x num_srs_sym x 接收天线数量。

  • num_srs_ues (int) – UE 数量。

  • num_srs_cells (int) – SRS 小区数量。

  • num_prb_grps (int) – PRB 组数量。

  • start_prb_grp (int) – 起始 PRB 组。

  • srs_cell_prms (List[SrsCellPrms]) – SRS 小区参数列表,每个小区一个。

  • srs_ue_prms (List[UeSrsPrms]) – UE SRS 参数列表,每个 UE 一个。

返回值:

包含以下内容的元组

  • List[Array]: 信道估计列表,每个 UE 一个。信道估计是一个 PRB 组数量 x 接收天线数量 x 发射天线数量 的 numpy 数组。

  • Array: 每个 UE 每个 RB 的 SNR。

  • List[SrsReport]: SRS 宽带统计报告列表,每个 UE 一个。注意:这总是被复制到主机内存。

返回类型:

List[Array], Array, List[SrsReport]