AI Signal Identification

Pycom helps you detect and identify signals visible on the waterfall display. The system has two layers:

  1. Signal Detection — automatically finds signals that stand out above the noise, using statistical analysis (no machine learning required)
  2. Signal Identification (AI) — classifies detected signals by type (CW, FT8, FM, etc.), using a trained neural network model — this page

AI Signal Identification

Detected signals can be classified by the AI signal identifier, which analyzes the shape and timing patterns visible around each signal on the waterfall, plus contextual information (frequency span, noise floor, bandwidth, SNR, etc.).

The classifier outputs a confidence score for each signal type. Results below 50% confidence are displayed as "Unknown". The default model recognizes 15 signal types (although there is minimal training data in the distributed base model for some of the signal types presently; this will improve in time):

Recognized Signal Types
CWFMAMSSBRTTY
FT8FT4FT2Q65JT65
AFSKPSKFSKMFSKMSK

The bundled model achieves 81% validation accuracy. After fine-tuning with your own captures, you may have additional types. See the Signal Mode Reference for detailed modulation characteristics, bandwidths, and typical uses of each mode.

Capture Window

The Capture button (camera icon) on the waterfall display opens a capture window with a frozen snapshot of the current waterfall and equalizer. This is where you review, label, and save signals for training.

How Labels Work

Labels are stored in capture metadata. During training, the script reads each capture's metadata and chooses the label in this priority order:

  1. user_label — if you manually selected a label, that label is always used
  2. ai_label — if the AI classified the signal with high confidence that classification is used

Browsing Saved Captures

ButtonAction
Prev / NextNavigate through previously saved captures
UpdateSave label or note changes to an existing capture
DeletePermanently remove a capture from disk

Model Training

To improve signal classification accuracy or add new signal types, train the model on your own labeled captures. The more labeled captures you have across different signal types, the better the classifier performs.

Prerequisites

Getting the Training Scripts

  1. Open Configuration → Signal Detection tab
  2. Click Download Training Resources
  3. Existing scripts will be overwritten — back up any custom changes first
  4. Scripts are deployed to ~/Pycom/signals/scripts/

Training from Scratch

Train a new model with random initial weights:

macOS/Linux:

cd ~/Pycom/signals/scripts
python3 retrain_model.py

Windows:

cd %USERPROFILE%\Pycom\signals\scripts
python retrain_model.py

Fine-Tuning from the Base Model

Fine-tune when you want to add your signal captures to the distributed base model. This preserves the base model's existing knowledge while adapting it for your signals.

macOS/Linux:

cd ~/Pycom/signals/scripts
python3 retrain_model.py --fine-tune --freeze-classifier-input

Windows:

cd %USERPROFILE%\Pycom\signals\scripts
python retrain_model.py --fine-tune --freeze-classifier-input

The --fine-tune flag always loads from the protected factory default model, ensuring consistent results regardless of any previous training.

Training Flags

FlagWhat It Does
--fine-tuneFine-tune from the distributed base model. Always loads the protected .default model and labels.
--freeze-classifier-inputFreezes nearly all of the model, training only the new-class rows of the final classification layer. Best for small datasets with new classes.
--freeze-featuresFreezes only the early visual analysis layers. Use only with large datasets.
--checkpointSaves an additional .pt file for future training with train_signal_classifier.py --resume.
--epochs NTraining epochs (default: 30).
--lr VALUELearning rate override.

Quality Warnings

The retrain script checks your training data and warns about:

Validation accuracy warnings appear when trained on fewer than 10 samples, indicating results may not generalize reliably.

Protected Default Model

When the app first deploys the bundled default model, it also creates protected copies:

These copies are never overwritten by training scripts. If a bad training run degrades the model, you can always recover by fine-tuning again from the defaults. The --fine-tune flag always uses these files.

File Locations

ItemLocationPurpose
AI model~/Pycom/signals/model/signal_classifier.onnxThe trained model file
Labels + metadata~/Pycom/signals/model/signal_labels.jsonSignal type names, training metadata, and model config
Protected defaults~/Pycom/signals/model/*.defaultFactory default model + labels (never overwritten by training)
Captures~/Pycom/signals/captures/*.npzYour saved signal captures
Training scripts~/Pycom/signals/scripts/Training, model definition, and retrain scripts

If no user-trained model exists, the app deploys the bundled default model on start up. User-trained models are never overwritten by this process.