CoolFace
Datasetpublic

weswebunited/rtl-ml-dataset

RTL-ML Dataset Dataset Summary This dataset contains 240 validated RF signal samples captured using an RTL-SDR Blog V4 dongle. It's designed for training machine learning models to classify common RF signals. Total Size: 1.9 GBSamples: 240 (30 samples × 8 classes)Format: NumPy arrays (.npy files)Sample Rate: 1.024 MSPSSample Duration: 1 second per capture Signal Classes Class Frequency Count Description ADS_B 1090 MHz 30 Aircraft… See the full description on the dataset page: https://huggingface.co/datasets/weswebunited/rtl-ml-dataset.

sourceHugging Facemitupdated 6mo agoView on Hugging Face
0likes1kdownloads
Dataset Card

RTL-ML Dataset

Dataset Summary

This dataset contains 240 validated RF signal samples captured using an RTL-SDR Blog V4 dongle. It's designed for training machine learning models to classify common RF signals.

Total Size: 1.9 GB Samples: 240 (30 samples × 8 classes) Format: NumPy arrays (.npy files) Sample Rate: 1.024 MSPS Sample Duration: 1 second per capture

Signal Classes

ClassFrequencyCountDescription
ADS_B1090 MHz30Aircraft transponder signals
APRS144.39 MHz30Amateur radio position reporting
FM_broadcast88-108 MHz30Commercial FM radio stations
ISM_sensors433.92 MHz30Wireless sensors & remote controls
NOAA_APT137.5 MHz30Weather satellite imagery
NOAA_weather162.4 MHz30Weather radio broadcasts
noiseVarious30Background RF noise baseline
pager931.9375 MHz30POCSAG pager transmissions

Validation Metrics

  • —ISM Sensors: 20.6x burst ratio (strong on/off keying)
  • —NOAA Weather: 14.4 dB SNR (clear signal)
  • —Pager/APRS: 12.7 dB SNR (good quality)
  • —Model Accuracy: 87.5% on test set

Usage

python
from huggingface_hub import snapshot_download
import numpy as np

# Download entire dataset
dataset_path = snapshot_download(
    repo_id="TrevTron/rtl-ml-dataset",
    repo_type="dataset"
)

# Load a sample
sample = np.load(f"{dataset_path}/datasets_validated/ADS_B_0.npy")
print(f"Signal shape: {sample.shape}")  # (1048576,) complex64

Dataset Structure

rtl-ml-dataset/
└── datasets_validated/
    ├── ADS_B_0.npy ... ADS_B_29.npy       (30 files)
    ├── APRS_0.npy ... APRS_29.npy         (30 files)
    ├── FM_broadcast_0.npy ... _29.npy     (30 files)
    ├── ISM_sensors_0.npy ... _29.npy      (30 files)
    ├── NOAA_APT_0.npy ... NOAA_APT_29.npy (30 files)
    ├── NOAA_weather_0.npy ... _29.npy     (30 files)
    ├── noise_0.npy ... noise_29.npy       (30 files)
    └── pager_0.npy ... pager_29.npy       (30 files)

Each .npy file contains:

  • —Shape: (1048576,) - 1 second @ 1.024 MSPS
  • —Dtype: complex64 (I/Q samples)
  • —Size: ~8.4 MB per file

Hardware

  • —SDR: RTL-SDR Blog V4 ($39.95)
  • —Computer: Indiedroid Nova 16GB ($179.95)
  • —Antenna: Telescopic dipole (included)

Model Performance

When trained with Random Forest (100 trees):

  • —Overall Accuracy: 87.5%
  • —Perfect Classes: ADS-B, FM, ISM, NOAA APT, Weather, Pager (100%)
  • —Challenging: APRS ↔ Noise confusion (sparse packets)

Citation

bibtex
@misc{rtl-ml-dataset,
  author = {TrevTron},
  title = {RTL-ML Dataset: Validated RF Signal Captures},
  year = {2026},
  publisher = {Hugging Face},
  howpublished = {\url{https://huggingface.co/datasets/TrevTron/rtl-ml-dataset}}
}

License

MIT License - Free for commercial and non-commercial use.

Related

Contributions

Captured in Temecula, CA (Southern California) using:

  • —Clear line of sight to multiple signal sources
  • —Validated with spectral analysis and manual inspection
  • —All samples meet minimum SNR requirements (>10 dB for modulated signals)

For questions or improvements, see the GitHub repository.