π‘ 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
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
Inference Providers NEW
This model isn't deployed by any Inference Provider. π Ask for provider support
