方法公开 · 配置可扩展

DeepTelecom 数据生成方法

参考生成器使用 Sionna RT 建立场景传播通道,将无人机机体与旋翼离散为运动点散射体,逐快照求解通道并构造单站回波近似,输出张量、频谱图和运行元数据。

Python 3.11Sionna RT 2.0.1配置驱动GPU 生成Apache-2.0 项目代码

01 · 原理

从场景传播到微多普勒样本

模型边界

这是“基于 Sionna RT 的点散射体单站回波近似”,不是带真实无人机网格与 RCS 的全波电磁仿真,也不是实测数据。明确模型边界,才能正确使用结果。

01类别与轨迹读取倾斜角、机体速度、初始状态与 Bézier 控制点。
02运动点散射体计算机体点、旋翼中心和叶片径向点的位置与速度。
03逐快照 RT每个散射点作为 passive receiver probe,求基站到探针的单程 CIR。
04回波与 STFT复信道平方近似双程回波,加权相干求和并加入 AWGN。
05样本输出保存 NPZ 数组、512×512 PNG 和结构化 metadata。

v1 主配置使用 28 GHz 载频、20 kHz 采样率和 2,048 个快照。普通三类用 1 个机体点加 24 个叶片径向点;单叶片基准只保留一个旋转叶尖点。射线求解开启 LoS 与镜面反射,最大深度为 2。

02 · 开源范围

公开生成器的代码范围

公开仓库中的 generator/ 只包含可复用的核心运动学、Sionna RT 求解、STFT、元数据、配置和冒烟测试。数十 GB 输出、运行日志、历史编号清单、设备调度状态与服务器绝对路径不会进入 Git 历史。

generator/
├── config/etoile.yaml
├── src/
│   ├── build_rt_uav_stft_dataset.py
│   ├── motion_utils.py
│   ├── stft_utils.py
│   ├── metadata_utils.py
│   └── verify_uav_kinematics.py
├── scripts/
│   ├── setup_env.sh
│   ├── preflight.py
│   └── run_smoke_test.sh
├── requirements.txt
├── README.zh-CN.md
└── README.en.md

Étoile 场景直接引用 Sionna RT 2.0.1 内置的 Apache-2.0 资产,不重复提交 566 个第三方场景文件。公开版元数据使用逻辑场景 ID,不写入本机绝对路径。

查看完整生成器、配置与许可证说明

主仓库 Apache-2.0 覆盖我们发布的代码与文档;数据 payload 的授权仍按数据集页面说明处理。

打开 generator/

03 · 开始运行

先用 8 个快照完成冒烟测试

推荐 Linux、NVIDIA GPU、可用的 CUDA/OptiX 与 Python 3.11。完整样本需要逐快照射线追踪,成本明显高于普通 NumPy 数据生成;第一次运行先做小型 smoke test。

安装固定依赖
git clone https://github.com/kygoyuan2004/DeepTelecom_Partial.git
cd DeepTelecom_Partial/generator
./scripts/setup_env.sh
DEEPTELECOM_PYTHON="$PWD/.conda-env/bin/python" ./scripts/preflight.py
生成 1 个小型测试样本
DEEPTELECOM_PYTHON="$PWD/.conda-env/bin/python" \
  ./scripts/run_smoke_test.sh

冒烟测试写入被 Git 忽略的本地目录 generator/run/smoke_test,使用 8 个 snapshot 和较大的 RT stride,只验证依赖、场景、求解、输出与运动学合同。它不应混入正式数据集。

生成一个完整类别样本

单样本教学命令
.conda-env/bin/python src/build_rt_uav_stft_dataset.py \
  --root outputs/demo \
  --config config/etoile.yaml \
  --classes pitch30_v10 \
  --start-index 0 --end-index 0 \
  --max-new-samples 1 --resume

04 · 扩展散射模型

增加叶片散射点,不需要改 Python

普通三类的散射点总数为:

总数 = 1 个机体点 + 旋翼数 × 每旋翼叶片数 × 每叶片采样点数

默认值为 1 + 4 × 2 × 3 = 25。将每叶片采样点从 3 调到 5 后,总数变为 41。

复制完整配置后修改
cp config/etoile.yaml config/my_dense_blades.yaml

# 在 config/my_dense_blades.yaml 中保持:
# num_rotors: 4
# num_blades_per_rotor: 2
# 并将 points_per_blade: 3 改为:
points_per_blade: 5
  • 这些点沿叶片半径均匀分布;增加点数会提高 probe 数量、RT 计算量和 NPZ 体积。
  • single_blade_v0 是固定的单叶尖控制类,不受 points_per_blade 影响。
  • 当前生成器只支持四旋翼拓扑;仅修改 num_rotors 会被拒绝。
  • 虽然可改变 num_blades_per_rotor,严谨对比前还应同步检查散射权重归一化,避免把叶片数变化和总回波强度变化混在一起。

05 · 扩展轨迹

直线或四控制点 Bézier 轨迹

直线轨迹

linear 模式从配置中的初始位置出发,沿仿真 +x 方向运动;速度仍由类别决定,因此 v0 为 0 m/s、v10 为 10 m/s。

直线模式
body_trajectory_model: linear
body_position_x: 146.0
body_position_y: -52.0
body_position_z: 70.0

自定义单段三次 Bézier

用四个三维控制点定义空间曲线。生成器先建立弧长查找表,再按类别速度沿曲线采样,以保持位置与速度方向一致。

一行 JSON 控制点
body_trajectory_model: etoile_bezier
etoile_trajectory_speed_mode: class_speed
etoile_control_points_json: "[[146,-52,70],[154,-18,72],[178,14,68],[204,-8,70]]"
etoile_start_fraction_min: 0.00
etoile_start_fraction_max: 0.90
当前还不支持任意 waypoint/CSV 或多段 Bézier

复杂航线需要同时扩展路径构建、generate_case() 中的路径附加分支以及完整轨迹元数据合同,并为位置连续性、速度连续性和路径长度边界补测试;不能只替换位置而保留不一致的速度或标签。

06 · 主配置

v1 的关键生成参数

配置v1 主值作用
carrier_frequency_hz28e9射线追踪与多普勒计算载频
sampling_rate_hz20,000回波时间采样率
num_snapshots2,048每个样本的 RT/回波时间点
rotor_frequency_hz25 ± 10%样本级旋翼转频随机扰动
blade_radius_m0.02 ± 10%样本级叶片半径随机扰动
noise_snr_min/max_db20 / 40AWGN 信噪比采样范围
stft_window_size48Hann 窗长度
stft_overlap3675% 重叠
stft_nfft512STFT 频率栅格
rt_max_depth2PathSolver 最大传播深度

07 · 可复现性与边界

可复现性与实现边界

  • 公开配置、随机种子、代码版本与参数路径可以复现;不同 GPU、驱动和底层浮点实现不保证生成字节级相同的 NPZ。
  • 生成器输出是研究用仿真近似,不应直接当作真实飞行器测量 ground truth。
  • 改变散射点、叶片或轨迹后,应使用新的实验命名空间和 manifest,不要写入 v1.0.0 的冻结分片。
  • 运行产生的绝对目录、日志和调度状态不属于科学样本,应在发布前清理或转为逻辑标识。

这套生成器由浙江大学信息与电子工程学院(ISEE)项目团队整理开源。若你扩展了新的轨迹后端、散射权重模型或场景适配器,欢迎通过 GitHub issue 或 pull request 讨论。