https://github.com/ukratic/siganto
GUI for signal analysis in Python
https://github.com/ukratic/siganto
demodulation dsp python signal-analysis signal-processing time-frequency-analysis
Last synced: 3 months ago
JSON representation
GUI for signal analysis in Python
- Host: GitHub
- URL: https://github.com/ukratic/siganto
- Owner: Ukratic
- License: mit
- Created: 2024-12-29T16:37:24.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-12-30T10:46:47.000Z (5 months ago)
- Last Synced: 2026-01-03T00:26:53.722Z (5 months ago)
- Topics: demodulation, dsp, python, signal-analysis, signal-processing, time-frequency-analysis
- Language: Python
- Homepage:
- Size: 272 MB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
## SigAnTo
Signal Analysis Toolbox : a free & open-source digital signal analyzer.
Read .wav files (recorded from SDR tools, obtained from somewhere, simulated...) and identify the signal parameters (modulation scheme, symbol rate, ACF...) through various graphs, measurements and modifications. Some of the analysis is automated (see some examples with screenshots below) but should always be confirmed manually.
FSK & PSK demodulation is also available, with more to come later.
Real-time applications such as dealing with incoming streams are outside the scope of this tool.
Be aware that the entire file is displayed, not looped over in chunks as many other SDR tools do, especially when they are meant to handle real-time display. Therefore, this tool is not meant to work with very long recordings. You may experience some acceptable sluggishness if your file contains samples in the order of a few millions, but the GUI will likely become downright painful to use with a file containing several tens or hundreds of millions of samples or more. Warnings are in place for a few potentially breaking actions with large files.

### Available functions
#### 1. Display & Settings
- Load a .wav file. The button reloads the same file if clicked again. Select the button next to it to close the .wav file before loading another.
Spectrogram & PSD shown when a file is loaded. With the V1.09 dependency, loading a wav file can be done by drag & drop.
- Activate measuring cursors (deactivated by default upon loading a new graph). Distance between 2 cursors is shown and you can also jump to a nearby peak (button in bottom right).
- Change language (English and French available)
- Display frequency & power information of the signal file (Estimated BW, dB level, symbol rate & ACF)
- Advanced Settings : Modify parameters not directly available on each graph/function.
#### 2. Signal modification
- Change FFT parameters :
Window size (default based on number of samples),
Window function (Kaiser, Hann, Hamming, Blackman, Bartlett, Flattop, Rectangular),
Overlap.
- Central Frequency offset (enter a value, cursor selection or fine-tuning with arrow keys ; last option available only on tri-graph group for now)
- Coarse doppler correction (essentially a diagonal frequency shift)
- Down or Up Sampling (by ratio of an integer >1)
- Polyphase resampling (target sample rate)
- Cut part of the signal in time (enter a value or by cursor selection ; the latter only works reliably on spectrogram)
- Modify parameters for transition smoothing (phase, frequency) & persistence bins
- Save as a new .wav file
#### 4. Filters
- Low/High/Band Pass
- FIR, Wiener, Median, Moving average, Mean
- Matched Filter : Gaussian, Raised Cosine, Root Raised Cosine, Sinc, Rsinc, Rectangular
#### 4. Spectrograms
- Group : Spectrogram & DSP
- Group : Spectrogram, Constellation and Peak power spectrum. Frequency fine-tuning: Left/right arrows on keyboard for 1Hz step, clickable GUI arrows for 0.01Hz step
- 3D spectrogram
- Spectrogram
#### 5. Power Metrics
- Power Spectral Density
- Peak Power Spectrum
- Time Domain / Amplitude
#### 6. Frequency Metrics
- Persistence Spectrum
- Frequency Distribution
- Frequency Transitions
- Morlet CWT Scalogram
#### 7. Phase Metrics
- Constellation
- Phase Distribution
- Phase Transitions
- Eye Diagram (not synchronized)
#### 8. Symbol Rate Metrics
- Envelope Power Specturm
- Power Envelope Spectrum
- Clock Transition Spectrum
- Power Order (2 & 4) Spectrum
- Cyclospectrum
#### 9. Cyclostationarity Metrics
- Autocorrelation function (FFT-based fast variant or complete)
- Spectral Correlation function
#### 10. OFDM Metrics
- Estimation of : OFDM symbol duration, guard interval, subcarrier spacing
#### 11. Demodulation
- 2 or 4 CPM/FSK & PSK Demodulation (with optional baud rate estimation)
- AM, FM & SSB Demodulation (visual output and result signal saved for audio playback, further analysis or demodulation)
- MFSK Demodulation (2 methods : tone detection or from smoothed frequency transitions)
#### 12. Audio
- Audio playback (first pick the appropriate demodulation in the corresponding tab prior to audio playback, depending on how that signal was sourced and recorded)
### Examples :
- Spectrogram of a Chinese 4+4
- dPMR Constellation
- PSD of CIS-FTM4
- TETRA Symbol rate
- TETRAPOL Autocorrelation Function
- CIS-45 OFDM Parameters
- EDACS Frequency transitions
- AIS Demodulation

### Changelog :
- *V1.08* :
-- More filtering options (median, moving average, gaussian, Wiener, FIR). Some tweaking needed to make them user-friendly.
-- 4-FSK demodulation now actually functional.
-- MFSK demodulation to handle multi-tone signals including non binary orders.
-- Handling of various WAV encodings made more robust (PCM & IEEE float).
-- Bug fixes on existing features (transitions smoothing & frequency distribution).
- *V1.09* :
-- Windowing options also used on PSD, phase & frequency transitions (previously only spectrogram).
-- Streamlining filtering options and added Matched Filter.
-- Added Cyclospectrum. Tweaked symbol rate estimation in the information window.
-- Drag & drop files instead of opening a file dialog (optional feature adding the tkinterdnd2 library as a dependency).
-- Eye Diagram added to Phase Metrics.
-- Morlet CWT Scalogram added to Frequency Metrics.
-- 2 & 4 PSK demodulation.
-- Fixed MFSK demodulation.
-- SCF in Cyclostationarity Metrics.
- *V1.10* :
-- Fixed power scaling on various graphs. Normalized when exact values are not relevant.
-- Added polyphase resampling.
-- Added Envelope Spectrum & renamed some symbol rate graphs with a clearer title.
-- Automatic symbol rate estimation now has a confidence level.
- *V1.10b-d* :
-- Almost all parameters now accessible (options tab), no longer hardcoded.
-- SSB demod .
### Using the app
1. Clone/download the code in this repo to modify the code as needed for your purposes, run the main file *gui_main.py* to launch.
Built on top of base Python (>=3.9 with Tkinter), Numpy, Matplotlib and Scipy. Sounddevice & tkinterdnd2 are optional.
Its low list of dependencies will hopefully allow most people to run it without too much hassle in university, industry or government environments.
2. Download and use the executable from the releases tab (language can still be swapped after launch).
### Supported file format :
WAV 8-bit, 16-bit, 32-bit, 64-bit, encoding PCM & IEEE floats, IQ or real.
Scripts to convert from SigMF & MP3 are available in this repo.
SigMF conversion should work fine (though not maintained if the format evolves) but most of the metadata will be lost.
MP3 conversion requires ffmpeg and might also be a little sketchy depending on how the file was recorded & encoded ; the result should be considered carefully.
### Useful resources :
- Information on signals and some example .wav files and/or analysis available :
[Signal Identification Guide](https://www.sigidwiki.com/)
[RadioReference Wiki](https://wiki.radioreference.com/index.php/)
[Priyom.org](https://priyom.org/)
[Tony Anselmi's blog](https://i56578-swl.blogspot.com/)
### Credits :
- Drs. FX Socheleau & S Houcke on OFDM blind analysis
- Dr. M Lichtman on a great starter for Python DSP : [PySDR](https://pysdr.org/index.html)
- Michael Ossmann on Clock Recovery