pyAerial 使用示例#
我们提供了一些使用 NVIDIA pyAerial 进行 GPU 加速的 5G NR 信号处理和机器学习实验的示例。 这些示例采用 Jupyter notebook 格式。 此处的 notebook 已预先执行,但也可以按照pyAerial 入门指南中的说明以交互方式运行。
注意
请注意,当运行 notebook 时,异常并不总是像运行 python 脚本那样在 Jupyter notebook 中显示,因此在某些情况下,将 notebook 转换为脚本并运行可能会更容易。 这可以通过以下方式完成
jupyter nbconvert --to script <notebook_name>.ipynb
要与就地的数据和代码进行交互,可以通过内联添加 breakpoint() 来调试特定行。
运行 PUSCH 链路仿真#
第一个示例展示了如何使用 pyAerial 对符合 5G NR 标准的 PUSCH 传输和接收进行建模。 在此示例中,整个 PUSCH 管道在 pyAerial 中建模,使用 cuPHY 库作为 GPU 加速的后端。
该 notebook 展示了运行 PUSCH 接收器管道的两种方式:第一种方式中,用户只需使用 Python API 进行单次调用,即可运行整个 PUSCH 接收器。 在另一种方式中,PUSCH 接收器管道被拆分为不同的接收器组件,每个组件都使用 Python API 单独调用。 这种方法可以替换任何 PUSCH 接收器组件,例如使用 AI/ML 模型,并针对传统接收器进行基准测试。
NVIDIA Sionna 在示例中用于无线信道建模。
LDPC 编码-解码链#
第二个示例给出了通过 pyAerial Python API 使用 cuPHY 的 GPU 加速 5G NR LDPC 编码和解码链(包括速率匹配)模块的示例。 编码/解码模块有望在 AI/ML 模型验证中很有用,例如在使用机器学习实现接收器的某些部分时。
通过仿真生成数据集#
此 notebook 使用 pyAerial 生成完全符合 5G NR 标准的 PUSCH/PDSCH 数据集。 cuPHY 库通过其在 pyAerial 中的 Python 绑定用于 PUSCH/PDSCH 时隙生成,NVIDIA Sionna 用于无线信道建模。 PUSCH/PDSCH 时隙被生成并通过不同的无线信道传输。
该示例存储数据集,以便在后续的 LLRNet 示例中使用。 同样,数据也可以在仿真期间动态生成。
为 LLRNet 生成数据集#
在此示例中,pyAerial 用于基于上一个示例中生成的 PUSCH/PDSCH 数据集生成对数似然比数据集。 使用 pyAerial,形成完整的 PUSCH 接收器链,并在信道均衡器之后收集 LLR 数据。 对数似然比数据用于在下一个示例中训练 LLRNet 模型。 LLRNet 发表于
Shental, J. Hoydis, “‘Machine LLRning’: Learning to Softly Demodulate”, https://arxiv.org/abs/1907.01512
是一个简单的神经网络模型,它将均衡器输出,即复值均衡符号,作为其输入,并为每个比特输出相应的对数似然比 (LLR),基本上取代了接收器链中的传统软解映射器。
注意
此 notebook 需要首先运行通过仿真生成数据集中的前一个示例。
LLRNet 模型训练#
在此示例中,来自上一个示例的 LLR 数据用于训练和验证用于计算对数似然比的 LLRNet 模型。 训练后的 LLRNet 被插入 PUSCH 接收器链中,取代了传统的软解映射器,并验证了其性能。 该模型还被导出为 NVIDIA TensorRT 推理引擎使用的 ONNX 格式。
该示例主要展示了如何使用 pyAerial 验证 PUSCH 接收器链的组件,以及如何以可集成到实际系统中的格式导出模型。
注意
此 notebook 需要首先运行为 LLRNet 生成数据集中的前一个示例 - 该示例生成此 notebook 的数据。
神经接收器验证#
在此示例中,使用 pyAerial 验证了经过训练的基于神经网络的 PUSCH 接收器。 该模型基于以下论文
S. Cammerer, F. Aït Aoudia, J. Hoydis, A. Oeldemann, A. Roessler, T. Mayer 和 A. Keller, “A Neural Receiver for 5G NR Multi-user MIMO”, IEEE Globecom Workshops (GC Wkshps), Dec. 2023, https://arxiv.org/abs/2312.02601
使用 pyAerial 将神经接收器与传统 PUSCH 接收器进行比较。 为了运行推理,我们使用 pyAerial 对 cuPHY 的 TensorRT 封装器的绑定。
基于机器学习的 5G NR PUSCH 信道估计#
此 notebook 提供了另一个关于如何使用 pyAerial 验证机器学习模型的示例。 特别是,该模型使用 DMRS 导频实现 5G NR PUSCH 信道估计。 该模型使用 PyTorch 进行训练,并使用 pyAerial 针对 cuPHY 算法验证信道估计误差。
对使用 Aerial Data Lake 捕获的传输进行信道估计#
此示例展示了如何从 Aerial Data Lake 数据库查询 PUSCH 数据,并使用 pyAerial 对该 PUSCH 数据执行信道估计。
注意
此 notebook 需要运行 Aerial Data Lake 使用的 clickhouse 服务器,并且示例数据已导入数据库。 有关如何执行此操作,请参阅 Aerial Data Lake 安装文档。
有关更多信息,请参阅Aerial Data Lake 部分。
解码使用 Aerial Data Lake 捕获的 PUSCH 传输#
与上一个示例类似,此示例说明了在 Aerial Data Lake 上下文中使用 pyAerial。 在此示例中,从数据库查询的 PUSCH 数据通过使用 pyAerial API 实现的完整 PUSCH 接收器管道运行。 该示例还说明了 pyAerial PUSCH 组件如何实现从接收器管道获取中间结果。
注意
与上一个 notebook 类似,此 notebook 需要运行 Aerial Data Lake 使用的 clickhouse 服务器,并且示例数据已导入数据库。 有关如何执行此操作,请参阅 Aerial Data Lake 安装文档。
有关更多信息,请参阅Aerial Data Lake 部分。