CVNet-RF compares two neural network approaches for Automatic Modulation Classification (AMC) — the task of identifying a radio signal's modulation scheme directly from raw I/Q samples, with no demodulation or hand-crafted features.
Model
Parameters
Best Val Acc
Acc / M params
ComplexCNN
379K
50.3%
132
RealCNN (baseline)
934K
54.4%
58
Key finding: ComplexCNN achieves comparable accuracy with 2.5× fewer parameters — delivering 2.3× better parameter efficiency. For edge deployment on FPGAs, UAVs, and embedded sensors, this difference is significant.
What is Automatic Modulation Classification?
Every wireless signal — WiFi, LTE, radar, satellite — uses a modulation scheme to encode information onto a radio wave. AMC is the task of identifying that scheme from raw I/Q samples alone. Applications include:
SIGINT triage — automated first-stage sorting of intercepted signals
Spectrum monitoring — real-time emitter cataloging across wideband spectrum
Electronic warfare — rapid classification for jamming prioritization
Cognitive radio — adaptive waveform selection and coexistence
RF device fingerprinting — extending AMC to emitter-level identification
Dataset
RadioML 2018.01A by DeepSig / GNU Radio
2.56 million samples
24 modulation classes
SNR range: −20 to +30 dB
Input shape: (2, 1024) — I and Q channels × 1024 timesteps
Treats I/Q as a true complex number I + jQ. Uses Wirtinger calculus for backpropagation through complex operations, preserving phase relationships that real-valued networks fundamentally discard.
1from huggingface_hub import hf_hub_download
2import torch
3import numpy as np
45# Download model6ckpt_path = hf_hub_download(repo_id="sohelimi/cvnet-rf", filename="complex_best.pt")78# Load and run inference9# See inference.py for full example
Or use the included inference script
bash
1# Clone the repo2git clone https://huggingface.co/sohelimi/cvnet-rf
3cd cvnet-rf
45# Run on a demo synthetic signal6python inference.py --model complex
78# Run on your own I/Q data (numpy array, shape (2,1024) or (1024,2))9python inference.py --model complex --iq your_signal.npy