网页配置台
网页配置台把 build/BS.yaml 和 build/UE.yaml 转换为浏览器表单,便于查看嵌套参数、切换硬件或仿真后端,以及调整通信和感知资源。保存配置后,还可以直接启动或停止 BS、UE 进程。
在仓库根目录运行:
python3 scripts/config_web_editor.py --host 0.0.0.0 --port 8765随后在浏览器打开 http://<your-host>:8765。仅在本机使用时,建议保留默认监听地址 127.0.0.1。
- 配置编辑:分别管理 BS 和 UE,以“参数 / 值”表单编辑运行时 YAML,减少手工修改长 YAML 时的缩进和字段错误。
- 资源规划:在
Resource Planner中绘制 payload 与sensing_pilot资源块,在Sensing Resource Map中选择紧凑感知输出使用的 RE。绘制区域会自动吸附到整数 RE 边界。 - 进程控制:保存配置后,可从
build/目录启动或停止 BS、UE,并可选择 CPU/CUDA 预设或自定义命令。 - CPU 配置:按下行、上行、感知实时循环和主线程设置 CPU 绑核,并可启用 CPU 隔离或覆盖本次隔离列表。
- 常用预设:内置
Guard Band Grid,默认保留子载波1..489和535..N-1,再排除同步与梳状导频资源。
CPU LDPC 译码参数
Section titled “CPU LDPC 译码参数”BS 和 UE 选项卡的 LDPC decode 分组提供:
decoder_iterations:最大迭代次数,正整数,默认12。nms_normalization_factor:NMS 系数,有限值且在(0, 1]内,默认0.75。fixed_point:选择 Q16 定点译码;开启后显示fixed_point_scale。
默认使用 12 次最大迭代和 0.75 系数:
ldpc: decoder_iterations: 12 nms_normalization_factor: 0.75 fixed_point: false在 UE 侧保存到 build/UE.yaml 后重启 UE,作用于下行 CPU 译码;在 BS 侧保存到 build/BS.yaml 后重启 BS,作用于上行 CPU 译码。接收机可独立调节,发送端的码矩阵和帧结构保持匹配。
syndrome 提前结束保持开启,所以实际迭代次数可以少于设定的最大次数。增加最大次数通常增加弱信号下的译码负载;NMS 系数需要通过 BER/FER 或完整载荷校验评估,升级后已有 YAML 的显式值继续生效。Q16 支持的系数为 0.125、0.25、0.375、0.5、0.625、0.75、0.875、1.0。Web 保存和后端 YAML 加载都会检查范围,不合法设置会显示具体错误。
后端停止使用 SIGINT,以完成 UHD 收发和线程清理,再进行后续启动。
测量 CPU LDPC 吞吐
Section titled “测量 CPU LDPC 吞吐”构建公开 CPU 基准,并在 build/ 中运行。例如,绑定一个空闲 CPU,比较 6 次迭代、1.0 系数与当前默认参数:
cmake --build build --target LDPCFixedBench -j4cd buildtaskset -c 5 ./LDPCFixedBench 32768 32 4 6 1.0 2 7taskset -c 5 ./LDPCFixedBench 32768 32 4 12 0.75 2 7CPU 编号需按本机调整,避免与正在运行的实时线程共享物理核心。可选位置参数依次为 frames、q16_scale、q8_scale、iterations、nms、timing_esn0_db 和 reps,默认值为 8192 64 4 12 0.75 2 5。码字数必须是 64 的正整数倍。将计时信噪比 2 改为 -0.5 可比较弱信号场景。按待评估 YAML 填写迭代次数与系数;基准不会修改运行时 YAML。
基准采用固定随机种子、BPSK AWGN,以及相同的 (1008,504) 矩阵,比较 float32 与 Q16 NMS。先独立检查 BER/FER,再报告重复译码计时的信息位 Mbps 中位数,保持 syndrome 提前结束。这里 Es/N0 使用每个编码后 BPSK 比特的能量;对于该 1/2 码率,Eb/N0 比它高 3.01 dB。编码位吞吐为信息位吞吐的两倍。Q16 的 dec+quant_Mbps 由独立计时的量化和译码串行估算,不是接收机端到端实测。Q8 使用 MS,不应用 NMS 系数。结果仅衡量单核译码,不包含 OFDM 处理、SDR 收发和 UDP 有效吞吐。
- 默认启动命令为
./BS和./UE;需要 CUDA 版本时,可在下拉框中切换。 - 编辑器直接修改
build/中的运行时 YAML,因为 BS 和 UE 会从当前工作目录读取BS.yaml/UE.yaml。 Resource Planner用来编辑data_resource_blocks:它决定哪些 RE 承载 payload,哪些 RE 作为sensing_pilot保留给感知参考。Sensing Resource Map用来编辑mask_blocks:它决定output_mode=compact_mask时哪些 RE 会被送到感知输出。- 两个规划器都可以分别应用到发射端或接收端。调试时 TX 和 RX 配置可以暂时不同,但正常收发时两端的
data_resource_blocks应保持一致。 - 当 CPU 核心不足时,建议先给
main thread affinity预留一个专用核心,然后优先保证 TX/RX 线程,最后再保证调制/解调线程和感知/信号处理线程;这些计算线程通常对应更大的缓冲区,对瞬时抖动更耐受。 - CPU 绑核只配置实时流水线线程和主线程。非实时的服务、输出、辅助线程有意不做绑核。
- 使用
-1、[]或省略可选字段表示该模块不做显式绑核。 - 运行面板展示 Isolated / Bound / Process / System CPU 列表。默认 isolate 只覆盖最敏感线程(USRP 收发、main;BS sensing RX),不含 OFDM 调制/解调。
- 勾选 BS+UE (isolate both sides) 时合并两侧 YAML 的敏感核;不勾选则只 isolate 当前 tab。
- Save + Start / Apply Isolation 调用
scripts/isolate_cpus.py;该非交互路径不会主动修改网卡 IRQ,需另行通过 CLI 的--nic-irq isolate|split启用。保存状态启用网卡策略后,进程AllowedCPUs会排除专用 IRQ 核。 - Override isolated CPU list 可手动指定本次 isolate 列表。
- Reset Isolation 将系统 slice 恢复为可用全部 CPU。
- 安全提示:该控制台可以执行网页中填写的启动命令。请保持默认监听地址
127.0.0.1,或仅绑定到可信网络。