πŸ“‘ RF Signal Classification Model

A Transformer-based model for Radio Frequency (RF) signal classification using spectrogram representations of SDR (Software Defined Radio) recordings.

This model leverages Hugging Face Transformers and the ASTForAudioClassification architecture (Audio Spectrogram Transformer – AST) to classify RF signals directly from audio recordings.

πŸš€ Model Overview

  • Architecture: ASTForAudioClassification
  • Input: SDR audio recordings (e.g., .wav, .mp3)
  • Feature Extraction: AutoFeatureExtractor
  • Framework: Hugging Face Transformers
  • Task: RF signal classification The model expects audio sampled at 16 kHz and processes waveform inputs into spectrogram features internally.

USAGE EXAMPLE

Example signal: ACARS zip_file

from transformers import AutoFeatureExtractor, ASTForAudioClassification
from datasets import Dataset, Audio
import torch
import matplotlib.pyplot as plt

# Load feature extractor and model
feature_extractor = AutoFeatureExtractor.from_pretrained("Neo111x/rf_classifier")
model = ASTForAudioClassification.from_pretrained("Neo111x/rf_classifier")

# Use the path to your SDR record file
data = {"audio": ["./ACARS_sound.mp3"]}

# Create dataset and cast to Audio feature (16kHz expected)
dataset = Dataset.from_dict(data).cast_column("audio", Audio(sampling_rate=16000))

# Decode audio
audio_data = dataset[0]["audio"]
audio_array = audio_data["array"]
sampling_rate = audio_data["sampling_rate"]

# Extract features
inputs = feature_extractor(audio_array, sampling_rate=sampling_rate, return_tensors="pt")

# Run inference
with torch.no_grad():
    logits = model(**inputs).logits

predicted_class_ids = torch.argmax(logits, dim=-1).item()
predicted_label = model.config.id2label[predicted_class_ids]
print("Predicted Label:", predicted_label)

# Compute loss (example with target label)
target_label = model.config.id2label[0]
inputs["labels"] = torch.tensor([model.config.label2id[target_label]])
loss = model(**inputs).loss
print("Loss:", round(loss.item(), 2))

# Plot spectrogram (waterfall)
plt.figure(figsize=(12, 6))
plt.specgram(audio_array, NFFT=1024, Fs=sampling_rate, cmap='viridis')
plt.title("SDR Waterfall Plot")
plt.xlabel("Time (s)")
plt.ylabel("Frequency (Hz)")
plt.colorbar(label="Intensity (dB)")
plt.show()

πŸ“Š Input Requirements

  • Audio format: .wav, .mp3, or other supported formats
  • Sampling rate: 16,000 Hz
  • Mono audio preferred
  • SDR recordings converted to baseband audio

πŸ“ˆ Output

The model outputs: Predicted label (RF signal class) Logits for each class Optional loss value (if labels are provided) Example output:

Predicted Label: ACARS
Loss: 0.12

image

Supported classes

* 4G LTE Network
* 5G "New Radio" cellular network - Downlink
* Aircraft Communications Addressing and Reporting System (ACARS)
* Amplitude Modulation (AM)
* Automatic Identification System (AIS)
* Automatic Link Set-up (ALIS)
* Automatic Picture Transmission (APT)
* Bluetooth
* Differential Global Positioning System (DGPS)
* Digital Audio Broadcasting Plus (DAB+)
* Digital Mobile Radio (DMR)
* Digital Video Broadcasting β€” Terrestrial (DVB-T)
* High Frequency Data Link (HFDL)
* Instrument Landing System
* M20 Radiosonde
* Morse Code (CW)
* Non-Directional Beacon (NDB)
* Radar altimeter
* STANAG 5065
* Secondary surveillance radar (SSR)
* Single Sideband Voice
* Tetrapol
* VHF Data Link - Mode 2 (VDL-M2)
* VHF Omnidirectional Range (VOR)
Downloads last month
46
Safetensors
Model size
86.2M params
Tensor type
F32
Β·
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support