{"id":46391625,"url":"https://github.com/ukratic/siganto","last_synced_at":"2026-03-05T09:01:44.300Z","repository":{"id":270244091,"uuid":"909741323","full_name":"Ukratic/Siganto","owner":"Ukratic","description":"GUI for signal analysis in Python","archived":false,"fork":false,"pushed_at":"2025-12-30T10:46:47.000Z","size":285352,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-03T00:26:53.722Z","etag":null,"topics":["demodulation","dsp","python","signal-analysis","signal-processing","time-frequency-analysis"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Ukratic.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-12-29T16:37:24.000Z","updated_at":"2025-12-30T10:38:23.000Z","dependencies_parsed_at":"2024-12-29T17:32:38.852Z","dependency_job_id":"3829d730-a959-43b7-9dfd-064d1957078b","html_url":"https://github.com/Ukratic/Siganto","commit_stats":null,"previous_names":["ukratic/siganto"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/Ukratic/Siganto","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ukratic%2FSiganto","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ukratic%2FSiganto/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ukratic%2FSiganto/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ukratic%2FSiganto/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Ukratic","download_url":"https://codeload.github.com/Ukratic/Siganto/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ukratic%2FSiganto/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30117479,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-05T08:19:04.902Z","status":"ssl_error","status_checked_at":"2026-03-05T08:17:37.148Z","response_time":93,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["demodulation","dsp","python","signal-analysis","signal-processing","time-frequency-analysis"],"created_at":"2026-03-05T09:01:43.430Z","updated_at":"2026-03-05T09:01:44.284Z","avatar_url":"https://github.com/Ukratic.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"## SigAnTo\n\nSignal Analysis Toolbox : a free \u0026 open-source digital signal analyzer.\u003cbr\u003e\n\nRead .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. \nFSK \u0026 PSK demodulation is also available, with more to come later.\u003cbr\u003e\nReal-time applications such as dealing with incoming streams are outside the scope of this tool.\u003cbr\u003e\n\nBe 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.\u003cbr\u003e\n\n\u003cimg src=\"https://github.com/Ukratic/Siganto/blob/main/images/pic_1.png\" alt=\"Main\"/\u003e\n\n### Available functions\n#### 1. Display \u0026 Settings\n- 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.\u003cbr\u003e\nSpectrogram \u0026 PSD shown when a file is loaded. With the V1.09 dependency, loading a wav file can be done by drag \u0026 drop.\n- 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).\n- Change language (English and French available)\n- Display frequency \u0026 power information of the signal file (Estimated BW, dB level, symbol rate \u0026 ACF)\n- Advanced Settings : Modify parameters not directly available on each graph/function.\n#### 2. Signal modification\n- Change FFT parameters :\u003cbr\u003e\nWindow size (default based on number of samples), \u003cbr\u003e\nWindow function (Kaiser, Hann, Hamming, Blackman, Bartlett, Flattop, Rectangular), \u003cbr\u003e\nOverlap.\n- Central Frequency offset (enter a value, cursor selection or fine-tuning with arrow keys ; last option available only on tri-graph group for now)\n- Coarse doppler correction (essentially a diagonal frequency shift)\n- Down or Up Sampling (by ratio of an integer \u003e1)\n- Polyphase resampling (target sample rate)\n- Cut part of the signal in time (enter a value or by cursor selection ; the latter only works reliably on spectrogram)\n- Modify parameters for transition smoothing (phase, frequency) \u0026 persistence bins\n- Save as a new .wav file\n#### 4. Filters\n- Low/High/Band Pass\n- FIR, Wiener, Median, Moving average, Mean\n- Matched Filter : Gaussian, Raised Cosine, Root Raised Cosine, Sinc, Rsinc, Rectangular\n#### 4. Spectrograms\n- Group : Spectrogram \u0026 DSP\n- 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\n- 3D spectrogram\n- Spectrogram\n#### 5. Power Metrics\n- Power Spectral Density\n- Peak Power Spectrum\n- Time Domain / Amplitude\n#### 6. Frequency Metrics\n- Persistence Spectrum\n- Frequency Distribution\n- Frequency Transitions\n- Morlet CWT Scalogram\n#### 7. Phase Metrics\n- Constellation\n- Phase Distribution\n- Phase Transitions\n- Eye Diagram (not synchronized)\n#### 8. Symbol Rate Metrics\n- Envelope Power Specturm\n- Power Envelope Spectrum\n- Clock Transition Spectrum\n- Power Order (2 \u0026 4) Spectrum\n- Cyclospectrum\n#### 9. Cyclostationarity Metrics\n- Autocorrelation function (FFT-based fast variant or complete)\n- Spectral Correlation function\n#### 10. OFDM Metrics\n- Estimation of : OFDM symbol duration, guard interval, subcarrier spacing\n#### 11. Demodulation\n- 2 or 4 CPM/FSK \u0026 PSK Demodulation (with optional baud rate estimation)\n- AM, FM \u0026 SSB Demodulation (visual output and result signal saved for audio playback, further analysis or demodulation)\n- MFSK Demodulation (2 methods : tone detection or from smoothed frequency transitions)\n#### 12. Audio\n- Audio playback (first pick the appropriate demodulation in the corresponding tab prior to audio playback, depending on how that signal was sourced and recorded)\n\n### Examples :\n- Spectrogram of a Chinese 4+4 \u003cbr\u003e\n\u003cimg src=\"https://github.com/Ukratic/Siganto/blob/main/images/pic_2.png\" alt=\"Spectrogram\"/\u003e\n- dPMR Constellation \u003cbr\u003e\n\u003cimg src=\"https://github.com/Ukratic/Siganto/blob/main/images/pic_3.png\" alt=\"Constellation\"/\u003e\n- PSD of CIS-FTM4 \u003cbr\u003e\n\u003cimg src=\"https://github.com/Ukratic/Siganto/blob/main/images/pic_4.png\" alt=\"PSD\"/\u003e\n- TETRA Symbol rate \u003cbr\u003e\n\u003cimg src=\"https://github.com/Ukratic/Siganto/blob/main/images/pic_5.png\" alt=\"Symbol_rate\"/\u003e\n- TETRAPOL Autocorrelation Function \u003cbr\u003e\n\u003cimg src=\"https://github.com/Ukratic/Siganto/blob/main/images/pic_6.png\" alt=\"ACF\"/\u003e\n- CIS-45 OFDM Parameters \u003cbr\u003e\n\u003cimg src=\"https://github.com/Ukratic/Siganto/blob/main/images/pic_7.png\" alt=\"OFDM_params\"/\u003e\n- EDACS Frequency transitions \u003cbr\u003e\n\u003cimg src=\"https://github.com/Ukratic/Siganto/blob/main/images/pic_8.png\" alt=\"FSK_transitions\"/\u003e\n- AIS Demodulation \u003cbr\u003e\n\u003cimg src=\"https://github.com/Ukratic/Siganto/blob/main/images/pic_9.png\" alt=\"FSK_demod\"/\u003e\n\n### Changelog :\n- *V1.08* : \u003cbr\u003e\n-- More filtering options (median, moving average, gaussian, Wiener, FIR). Some tweaking needed to make them user-friendly.\u003cbr\u003e\n-- 4-FSK demodulation now actually functional.\u003cbr\u003e\n-- MFSK demodulation to handle multi-tone signals including non binary orders.\u003cbr\u003e\n-- Handling of various WAV encodings made more robust (PCM \u0026 IEEE float).\u003cbr\u003e\n-- Bug fixes on existing features (transitions smoothing \u0026 frequency distribution).\u003cbr\u003e\n\n- *V1.09* :\u003cbr\u003e\n-- Windowing options also used on PSD, phase \u0026 frequency transitions (previously only spectrogram). \u003cbr\u003e\n-- Streamlining filtering options and added Matched Filter.\u003cbr\u003e\n-- Added Cyclospectrum. Tweaked symbol rate estimation in the information window.\u003cbr\u003e\n-- Drag \u0026 drop files instead of opening a file dialog (optional feature adding the tkinterdnd2 library as a dependency).\u003cbr\u003e\n-- Eye Diagram added to Phase Metrics.\u003cbr\u003e\n-- Morlet CWT Scalogram added to Frequency Metrics.\u003cbr\u003e\n-- 2 \u0026 4 PSK demodulation.\u003cbr\u003e\n-- Fixed MFSK demodulation.\u003cbr\u003e\n-- SCF in Cyclostationarity Metrics.\u003cbr\u003e\n\n- *V1.10* :\u003cbr\u003e\n-- Fixed power scaling on various graphs. Normalized when exact values are not relevant.\u003cbr\u003e\n-- Added polyphase resampling.\u003cbr\u003e\n-- Added Envelope Spectrum \u0026 renamed some symbol rate graphs with a clearer title.\u003cbr\u003e\n-- Automatic symbol rate estimation now has a confidence level.\u003cbr\u003e\n\n- *V1.10b-d* :\u003cbr\u003e\n-- Almost all parameters now accessible (options tab), no longer hardcoded.\u003cbr\u003e\n-- SSB demod .\u003cbr\u003e\n\n### Using the app\n1. 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.\u003cbr\u003e\nBuilt on top of base Python (\u003e=3.9 with Tkinter), Numpy, Matplotlib and Scipy. Sounddevice \u0026 tkinterdnd2 are optional.\u003cbr\u003e\nIts low list of dependencies will hopefully allow most people to run it without too much hassle in university, industry or government environments.\u003cbr\u003e\n\n2. Download and use the executable from the releases tab (language can still be swapped after launch).\n\n### Supported file format :\nWAV 8-bit, 16-bit, 32-bit, 64-bit, encoding PCM \u0026 IEEE floats, IQ or real.\u003cbr\u003e\n\nScripts to convert from SigMF \u0026 MP3 are available in this repo.\u003cbr\u003e\nSigMF conversion should work fine (though not maintained if the format evolves) but most of the metadata will be lost.\nMP3 conversion requires ffmpeg and might also be a little sketchy depending on how the file was recorded \u0026 encoded ; the result should be considered carefully.\n\n### Useful resources :\n- Information on signals and some example .wav files and/or analysis available : \u003cbr\u003e\n[Signal Identification Guide](https://www.sigidwiki.com/)\u003cbr\u003e\n[RadioReference Wiki](https://wiki.radioreference.com/index.php/)\u003cbr\u003e\n[Priyom.org](https://priyom.org/)\u003cbr\u003e\n[Tony Anselmi's blog](https://i56578-swl.blogspot.com/)\n\n### Credits :\n- Drs. FX Socheleau \u0026 S Houcke on OFDM blind analysis\n- Dr. M Lichtman on a great starter for Python DSP : [PySDR](https://pysdr.org/index.html)\n- Michael Ossmann on Clock Recovery","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fukratic%2Fsiganto","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fukratic%2Fsiganto","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fukratic%2Fsiganto/lists"}