rf-datagen
收藏资源简介:
rf-datagen是一个用于生成RF信号IQ数据集的工具,旨在为机器学习训练提供复杂IQ基带样本。它支持三个采样率域(窄带12 kHz、中等1 MHz、宽带20 MHz),每个域具有自己的窗口长度、数据类型和合成器注册表。输出存储为NumPy数组,每个窗口包含信号类别、SNR、场景和域等元数据。该生成器应用可配置的传播/接收器损伤场景,使模型能够针对现实信道条件进行训练。此外,rf-datagen还提供多层验证系统,包括结构验证、频谱指纹验证、往返解码验证和ML分类验证。
rf-datagen is a utility for generating RF signal IQ datasets, designed to provide complex IQ baseband samples for machine learning training. It supports three sample rate domains: narrowband (12 kHz), medium-band (1 MHz), and wideband (20 MHz), each with its own window length, data type, and synthesizer registry. Outputs are stored as NumPy arrays, with each window containing metadata such as signal category, SNR, scenario, and domain. This generator applies configurable propagation and receiver impairment scenarios, enabling models to be trained under realistic channel conditions. Additionally, rf-datagen provides a multi-layer validation system including structural validation, spectral fingerprint validation, round-trip decoding validation, and ML classification validation.
rf-datagen 数据集概述
数据集简介
rf-datagen 是一个用于机器学习训练的射频信号IQ数据集生成器,可合成39种业余无线电信号类别的复杂IQ基带样本,并包含现实的信道损伤。
信号类别(39种)
| 类别 | 模式 |
|---|---|
| 数字文本 | CW, PSK31, PSK63, QPSK, PSK125, 8PSK, RTTY, OLIVIA, JS8, DOMINOEX, MT63, HELLSCHREIBER, MFSK16, MFSK32, CONTESTIA, THOR, FSQ, IFKP, THROB |
| WSJT-X | FT8, FT4, WSPR, JT65, JT9 |
| 模拟语音 | SSB, AM, FM |
| 图像 | SSTV, FAX |
| 数据 | NAVTEX, PACKET |
| 数字语音 | FREEDV, M17, DMR, DSTAR, YSF, P25, NXDN |
| 其他 | NOISE |
损伤场景
样本分布在可配置的传播/接收器场景中,包括:HF clean, HF good/poor, VHF mobile, UHF urban, SDR desktop, contest crowded, overdriven, poorly operated, vintage, near-far, auroral。信噪比水平和相对权重可配置。
先决条件
- Python >= 3.11
- NumPy, SciPy, Pillow, PySSTV(自动安装)
- 可选外部工具(按生成器需求):
- fldigi —
fldigi(用于真实的fldigi编码数字模式) - wsjtx —
wsjtx工具(jt9,wsprd等) - analog/digivoice —
piperTTS引擎 + 语音模型 - packet —
direwolf(用于AX.25数据包编码)
- fldigi —
安装方法
pip(仅Python)
bash pip install -e .
此方法安装Python包,但不安装外部CLI工具。需要单独提供这些工具,缺少工具的生成器会自动跳过。
Nix flake(推荐)
该flake提供了一个完整的开发环境,包含所有Python依赖项和外部CLI工具: bash nix develop
Nix flake + direnv
仓库包含一个.envrc文件,进入目录时环境会自动激活:
bash
direnv allow
devenv
如果使用devenv,可以直接使用该flake。在项目根目录创建devenv.nix或在devenv.yaml中指向该flake,然后激活:
bash
devenv shell
或使用direnv集成: bash direnv allow
使用方法
生成数据集
bash rf-datagen generate -c config.toml
列出信号类别
bash rf-datagen list
验证数据集
bash rf-datagen validate ./output
往返验证
bash rf-datagen validate-roundtrip # 所有模式 rf-datagen validate-roundtrip --clean-only --trials 3 # 快速检查
检查信号类别(从现有数据集)
bash rf-datagen inspect ./output --class FT8
质量控制检查工具
qc子命令可生成实时可视化和自包含的HTML报告,用于检查流水线阶段,无需预生成数据集。需要matplotlib。
bash
显示每种生成器类型的生成文本内容
rf-datagen qc text --generator analog --count 10 rf-datagen qc text --generator fldigi --mode PSK31
将TTS语音音频导出为WAV文件
rf-datagen qc audio --count 5 --output /tmp/qc/audio
可视化干净的调制信号(频谱图、波形、PSD)
rf-datagen qc modulated --mode FT8 CW --output /tmp/qc/modulated rf-datagen qc modulated --all-modes --snr-grid
可视化经过信道损伤后的信号
rf-datagen qc impaired --mode CW --all-snr --output /tmp/qc/impaired rf-datagen qc impaired --mode DMR --scenario hf_poor --snr 5
检查磁盘上现有的.npy数据集(类别分布、样本图)
rf-datagen qc dataset --path ./output --mode FT8 --output /tmp/qc/dataset
单一模式的完整自包含HTML报告(频谱图、音频、SNR网格、所有12种损伤场景、信号统计)
rf-datagen qc report --mode FT8 --output /tmp/qc/reports
配置
完整选项请参见config.toml。关键部分包括:
[dataset]— 采样率、窗口长度、输出目录、种子、工作线程数[impairments]— 信噪比水平、频率偏移、场景权重[generators.*]— 每个生成器的启用/禁用、每类样本数以及生成器特定调优
输出格式
| 文件 | 描述 |
|---|---|
rf_datagen_iq.npy |
(N, window_length) complex64数组 — 每行一个窗口 |
rf_datagen_tags.csv |
每窗口元数据:模式、SNR、场景等 |
Flake输出
| 输出 | 描述 |
|---|---|
packages.*.default |
包含所有外部工具(fldigi, wsjtx, piper等)在PATH中的CLI应用程序 |
packages.*.pythonPackage |
用于下游flake中import rf_datagen的Python库包 |
devShells.*.default |
包含Python依赖项和CLI工具的开发环境 |
Make目标
make generate # 运行完整生成 make validate # 验证数据集完整性 make validate-roundtrip # 往返编码/解码验证 make validate-quick # 快速验证(仅clean,3次试验) make validate-all # 所有模式(包括STT) make qc-report # HTML质量控制报告(默认:FT8;覆盖:make qc-report MODE=CW) make qc-modulated # 所有模式的频谱图/波形/PSD make qc-text # 显示所有生成器的文本内容 make clean # 删除生成的输出
许可证
MIT — 参见 https://github.com/Quantum-Serendipity/rf-datagen/blob/main/LICENSE




