qmx-birdie-scanner is an experimental Python project designed to detect birdies in QMX and QMX+ transmitters manufactured by QRP Labs. The project consists of two scripts: one for capturing audio FFT data and another for analyzing it to identify narrowband energy peaks.
This script performs a frequency scan over the transmitter, controlled via CAT over a serial port. For each frequency step, it records the audio output and computes an FFT, storing the results in an HDF5 (.h5
) file for later analysis.
usage: fft_collector.py [-h] [--serial-port SERIAL_PORT] start_freq end_freq output_file
QMX FFT Frequency Scanner
positional arguments:
start_freq Start frequency in Hz
end_freq End frequency in Hz
output_file Output H5 filename
options:
-h, --help Show this help message and exit
--serial-port SERIAL_PORT
Serial port for CAT control (default: /dev/ttyACM0)
python3 fft_collector.py --serial-port /dev/ttyACM0 14000000 14350000 scan_20m.h5
This will scan from 14.000 MHz to 14.350 MHz and store the FFT results in scan_20m.h5
.
This script analyzes the .h5
file generated by fft_collector.py
. It scans each FFT to detect birdies by identifying narrowband energy peaks that exceed the noise floor. It supports different plotting modes for analysis and debugging.
usage: birdie_detector.py [-h] [--output-dir OUTPUT_DIR] [--plot-mode {none,birdie,all}] h5_file
QMX Birdie Detection Analysis
positional arguments:
h5_file Input H5 file with FFT data to analyze
options:
-h, --help Show this help message and exit
--output-dir OUTPUT_DIR
Output directory for FFT plots (default: current directory)
--plot-mode {none,birdie,all}
Plot generation mode: none=no plots, birdie=only frequencies with birdies,
all=all frequencies (WARNING: creates many files)
Basic analysis (no plots):
python3 birdie_detector.py scan_20m.h5
Generate plots only for frequencies with detected birdies:
python3 birdie_detector.py --output-dir plots --plot-mode birdie scan_20m.h5
Generate plots for all frequencies (debugging):
python3 birdie_detector.py --output-dir plots --plot-mode all scan_20m.h5
- Python 3.7+
- Python packages:
numpy
,matplotlib
,h5py
,scipy
,sounddevice
,argparse
This is an experimental project
MIT