Open method · Extensible configuration
DeepTelecom Data Generation Method
The reference generator uses Sionna RT to model the scene's propagation channel. The UAV body and rotors are discretized as moving point scatterers; the channel is solved snapshot by snapshot and used to construct a monostatic echo approximation, producing tensors, spectrograms, and run metadata.
01 · Model
From scene propagation to micro-Doppler samples
This is a Sionna RT-based point-scatterer monostatic echo approximation. It is neither a full-wave electromagnetic simulation with a physical UAV mesh and RCS nor measured data. Understanding that boundary is essential for using the results correctly.
The primary v1 configuration uses a 28 GHz carrier, a 20 kHz sampling rate, and 2,048 snapshots. The three full-model classes use one body point plus 24 radial blade points, while the isolated-blade baseline keeps one rotating blade-tip point. Ray tracing enables LoS and specular paths with a maximum depth of 2.
02 · Open-source scope
Scope of the public generator
The public repository's generator/ directory contains only reusable motion models, Sionna RT solving, STFT processing, metadata code, configuration, and smoke tests. Tens of gigabytes of outputs, run logs, legacy ID inventories, device scheduling state, and server-specific absolute paths do not belong in Git history.
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
The Étoile scene references the Apache-2.0 assets bundled with Sionna RT 2.0.1 instead of recommitting 566 third-party scene files. Public metadata uses a logical scene ID rather than machine-specific absolute paths.
The repository's Apache-2.0 license covers the code and documentation we publish. The dataset payload remains governed by the terms stated on the dataset page.
03 · Run it
Start with an eight-snapshot smoke test
We recommend Linux, an NVIDIA GPU, working CUDA/OptiX support, and Python 3.11. A full sample performs ray tracing snapshot by snapshot and costs substantially more than ordinary NumPy data generation, so begin with the small 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.pyDEEPTELECOM_PYTHON="$PWD/.conda-env/bin/python" \
./scripts/run_smoke_test.shThe smoke test writes to the Git-ignored local directory generator/run/smoke_test and uses eight snapshots plus a larger RT stride. It only checks dependencies, scene loading, solving, output, and the kinematics contract; its output must not be mixed into the formal dataset.
Generate one full sample from a class
.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 --resume04 · Extend the scatterer model
Add blade scatterers without editing Python
For the three full-model conditions, the scatterer count is:
The default is 1 + 4 × 2 × 3 = 25. Increasing points per blade from 3 to 5 produces 41 total scatterers.
cp config/etoile.yaml config/my_dense_blades.yaml
# In config/my_dense_blades.yaml, keep:
# num_rotors: 4
# num_blades_per_rotor: 2
# and change points_per_blade: 3 to:
points_per_blade: 5- Points are spaced uniformly along each blade radius. Adding points increases the number of probes, ray-tracing cost, and NPZ size.
single_blade_v0is a fixed, single-tip control class and is unaffected bypoints_per_blade.- The current generator supports quadrotor topology only; changing
num_rotorsby itself is rejected. num_blades_per_rotorcan change, but rigorous comparisons should also review scatterer-weight normalization so blade-count changes are not confounded with total echo-strength changes.
05 · Extend the trajectory
Linear motion or a four-control-point Bézier path
Linear trajectory
In linear mode, motion starts from the configured initial position and follows the simulation +x direction. Speed still comes from the class: v0 means 0 m/s, while v10 means 10 m/s.
body_trajectory_model: linear
body_position_x: 146.0
body_position_y: -52.0
body_position_z: 70.0Custom single-segment cubic Bézier
Four 3D control points define the spatial curve. The generator first builds an arc-length lookup table and then samples the path at the class speed, keeping position and velocity direction consistent.
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.90A complex route requires coordinated changes to path construction, the path-attachment branch in generate_case(), and the full trajectory-metadata contract, plus tests for position continuity, velocity continuity, and path-length bounds. Replacing positions alone would leave velocities or labels inconsistent.
06 · Primary configuration
Key generation parameters for v1
| Setting | Primary v1 value | Purpose |
|---|---|---|
carrier_frequency_hz | 28e9 | Carrier used for ray tracing and Doppler calculations |
sampling_rate_hz | 20,000 | Echo time-domain sampling rate |
num_snapshots | 2,048 | RT/echo time points per sample |
rotor_frequency_hz | 25 ± 10% | Per-sample random perturbation of rotor frequency |
blade_radius_m | 0.02 ± 10% | Per-sample random perturbation of blade radius |
noise_snr_min/max_db | 20 / 40 | AWGN SNR sampling range |
stft_window_size | 48 | Hann-window length |
stft_overlap | 36 | 75% overlap |
stft_nfft | 512 | STFT frequency grid |
rt_max_depth | 2 | Maximum PathSolver propagation depth |
07 · Reproducibility and limits
Reproducibility and implementation boundaries
- Public configuration, random seeds, code version, and parameter paths are reproducible. Different GPUs, drivers, and underlying floating-point implementations are not guaranteed to produce byte-identical NPZ files.
- The generator output is a research simulation approximation and should not be treated as measured ground truth from a physical aircraft.
- After changing scatterers, blades, or trajectories, use a new experiment namespace and manifest; never write into the frozen v1.0.0 shards.
- Absolute run directories, logs, and scheduling state are not scientific sample content. Remove them before release or replace them with logical identifiers.
This generator is curated and released by a project team at the College of Information Science and Electronic Engineering (ISEE), Zhejiang University. If you add a new trajectory backend, scatterer-weighting model, or scene adapter, we welcome discussion through a GitHub issue or pull request.