Repository navigation
Releases: N6RFM/HADESx-Decoder
Release list
HADESx Decoder 1.5.0: SatNOGS upload, ready for everyday use
HADESx Decoder 1.5.0: SatNOGS upload, ready for everyday use
Better: the SatNOGS DB upload (hadesx pass.wav --satnogs, off by default) now sends only frames whose CRC was verified. The PN9 link-test packets (random test data without a CRC) are no longer sent. Voice and picture (SSDV) frames still stay out unless you set include = all. --satnogs-dry-run shows exactly what would be sent. Details.
New in the documentation: the SatNOGS DB page lists the temporary NORAD IDs of UNNE-1B (98205) and HADES-L (98206) next to HADES-SA's 68446, and explains what is sent and what is not. Copy them into the [norad] section of your settings file; SatNOGS may replace temporary IDs later. The recorder_time setting (UTC, local, or hours from UTC) is explained next to the time-zone notes, README, Windows page and NOTICE.md now mention the upload.
Update: git pull (or download the zip). Install: sh tools/install.sh, or see the README. hadesx_standalone.py is the single-file decoder (it does not include hadesx, hadesx-report, hadesx-ssdv or the upload).
HADESx Decoder 1.4.0: send your frames to SatNOGS DB
HADESx Decoder 1.4.0: send your frames to SatNOGS DB
New: upload to SatNOGS DB (optional, off by default). hadesx pass.wav --satnogs sends the CRC-verified frames of a recording to db.satnogs.org in the format it accepts (callsign, station position and the satellite's NORAD ID). --satnogs-dry-run shows exactly what would be sent and sends nothing. Each frame is sent once, only when the recording's start time is known, and voice and picture frames only if you ask. Set your callsign and position in the new [satnogs] section of the settings file. Details.
New: recorder_time setting (and --recorder-time): say whether your recording program writes UTC, local time or a fixed offset in its file names; the start is converted to UTC before anything is stored or sent.
Please note: the upload follows SatNOGS's documented format; start with --satnogs-dry-run and check the printed timestamp=. Only HADES-SA's NORAD ID (68446) is built in; add the others under [norad].
Update: git pull (or download the zip). Install: sh tools/install.sh, or see the README. hadesx_standalone.py is the single-file decoder (it does not include hadesx, hadesx-report, hadesx-ssdv or the upload).
HADESx Decoder 1.3.0: one command, one folder per satellite
HADESx Decoder 1.3.0: one command, one folder per satellite
New: hadesx pass.wav. One command decodes a recording and keeps each satellite in its own folder (unne-1b, hades-sa, hades-l) with its telemetry, its voice WAV and its pictures. Run more passes and the voice and the pictures fill in, because both are rebuilt from everything stored. A small settings file (hadesx --init) remembers the output folder, the sample rate for raw files, the voice speed and the paths of the ssdv program and hadesr.dll, so you type the recording and little else. Details.
New: sh tools/install.sh (Linux, macOS) installs the commands so they work from any folder, for example the one where your recordings are: a private environment, nothing to activate, no sudo. git pull updates it.
Better: hadesx-report reads the whole results folder at once and now includes the voice and picture packets by default (--no-voice and --no-images leave them out).
Also: authors and licence in the header of every code file, a new SSDV section in NOTICE.md, and updated documentation throughout (README, installing, Windows, voice, troubleshooting).
Update: git pull (or download the zip). Install: sh tools/install.sh, or see the README. hadesx_standalone.py is the single-file decoder (it does not include hadesx, hadesx-report and hadesx-ssdv).
Developed by N6RFM with the help of Claude (Anthropic). Packet formats, the Windows tool and the satellites: AMSAT-EA. The SSDV picture format: Philip Heron (github.com/fsphil/ssdv).
HADESx Decoder 1.2.0: HADES-SA pictures
HADESx Decoder 1.2.0: HADES-SA pictures
New: image packets (SSDV) from HADES-SA are decoded off the air. From one real pass (5 October 2026) the decoder recovers 29 packets of the satellite's internal picture (320 x 240), each checked by its own CRC-32 and, if damaged, repaired with the packets' Reed-Solomon code. The new command hadesx-ssdv puts the packets of an image together into the .ssdv file and the JPEG, the way AMSAT-EA's run_ssdv.bat does (it needs Philip Heron's ssdv program for the JPEG). The packets are sent without the scrambler.
Fixed: a bit-clock problem. The symbol clock used to drift by up to 3 % on unscrambled data (image packets, PN9), so frames came out misaligned a few bits after the sync word even though the signal was strong. The clock is now reset at the start of every burst and learned from the training pattern. The same HADES-SA recording goes from 12 to 43 valid frames; HADES-L (39 frames) and UNNE-1B (45 frames) are unchanged; --fs guess is more reliable.
Also new: docs/installing.md, a step-by-step installation guide (virtual environment, regular install without pip, single file), and examples/iq/hades_sa_ssdv_pass.wav, a 21 s excerpt of the pass with five image packets.
Update: git pull (or download the zip). Install: see the README. hadesx_standalone.py is the single-file decoder (it does not include hadesx-report and hadesx-ssdv).
Recording of the HADES-SA pass: N6RFM. Packet formats and the Windows tool: AMSAT-EA. The HADES-SA SSDV picture format is Philip Heron's SSDV (github.com/fsphil/ssdv).
HADESx Decoder 1.1.0
HADESx Decoder 1.1.0
HADESx Decoder 1.1.0 (the project was called UNNE-1B Decoder) decodes the amateur-radio satellites of AMSAT-EA's HADES family: UNNE-1B (HADES-E2), HADES-SA and HADES-L. The rename, WAV recordings at any sample rate, native HADES-SA and HADES-L decoders checked against AMSAT-EA's own decoders, the per-type folder and its report, and tools to inspect recordings are the main changes. The old command and module names keep working.
Install: see the README, or docs/windows.md (also in the zip as START-HERE-WINDOWS.txt).
Changes
HADESx Decoder 1.1.0 (the project was called UNNE-1B Decoder) decodes the amateur-radio satellites of AMSAT-EA's HADES family: UNNE-1B (HADES-E2), HADES-SA and HADES-L. The rename, WAV recordings at any sample rate, native HADES-SA and HADES-L decoders checked against AMSAT-EA's own decoders, the per-type folder and its report, and tools to inspect recordings are the main changes. The old command and module names keep working.
- README rewritten for the three satellites: the HADES family opening, a comparison table, a Quick start that decodes the two-satellite SDR Console example, one section per satellite, updated status notes.
- Renamed to HADESx Decoder (it covers UNNE-1B / HADES-E2, HADES-SA and HADES-L): package
hadesx, commandshadesx-decode,hadesx-voice,hadesx-report,grc/hadesx_decoder.grc,dist/hadesx_standalone.py. The oldunne1b-*commands,import unne1bandpython3 -m unne1bkeep working (deprecated), and folders made before the rename keep their.unne1b_ingested.jsonmemory. - Documentation brought up to date (layout and tests, limitations and roadmap, the signal chain at any sample rate, README introduction) and
tests/test_docs.py, which keeps every option, tool, module and link documented. unne1b-report FOLDER: print the telemetry of a per-type output folder on the console, oldest first (--summary,--brief,--sat,--type,--since,--until;--dllrenders UNNE-1B packets with all their fields from the saved data).- Example:
examples/iq/sdrconsole_two_satellites.wav, an excerpt of an SDR Console recording of UNNE-1B and HADES-L shared by José Elías Díaz, EB1AO (WAV, two satellites, two baud rates), with a test. tools/cut_excerpt.py: cut a small excerpt (segments, filtering to a lower rate, frequency shift for two distant satellites) out of a big recording as a labelled I/Q WAV;unne1b.iqfile.write_iq_wav.- File names of SDR Console, SDR# and HDSDR give the start time and frequency; a WAV with a zero rate field is read from its byte rate; SDR Console's own
auxichunk is ignored;--guess-samples;tools/wav_probe.pyand a separatetools/README.mddocumenting the recording survey and probe. - WAV I/Q recordings (sample rate, format, centre frequency and start time from the header), any sample rate from 48 kHz to several MHz,
--swap-iq, rate and frequency from a raw file's name,tools/iq_survey.py; the single-file build includes all modules again. - Console output shows the decoded fields of HADES-SA and HADES-L frames; PN9 packets are labelled "no CRC in this packet type" instead of "CRC FAIL - unverified".
- HADES-L: Lofith (type 7) and ICM message (type 15) decoders, HADES-L status and time-series variants, per-Lofith-frame files; HADES-SA and HADES-L decoders verified against each package's own decoder DLL (golden data,
tools/dll_oracle.py,tools/compare_with_dll.py); times are 32-bit and NaN prints asnan, like the Windows tool; docs distinguish the three packages. - Voice WAVs are identified by satellite (file name and tags inside the file) and never mix satellites;
unne1b-voice FOLDERbuilds the WAV from a per-type output folder (best pass,--list-passes,--pass,--combine,--pick); isolated corrupted frame numbers are dropped;--voice-wavoutput names now end in the satellite name. - First real HADES-L and HADES-SA recordings: PN9 (and SSDV) packets are taken as received, not descrambled (verified on HADES-L); frames that failed their CRC are never written to the
--outdirfolder; tests with real HADES-L frames. - Documentation updated after AMSAT-EA's reply (October 2026): attribution and the UNNE-1B document's CC BY 4.0 licence confirmed; the 1125 Hz tone spacing in document v1.01 was an error (about 1.64 kHz is right).
- Per-type output folder (
--outdir, flowgraph variableout_dir): the files of AMSAT-EA's Windows tool, updated in place with unique additions; HADES-SA decoders ported from AMSAT-EA's source and checked on about 7 800 frames against the compiled original; SSDV image packets (CRC-32 checked) and PN9 link tests are recognised. - HADES-SA / HADES-L frame support: length-byte layout, automatic 200 + 800 baud detection (
--baud), per-satellite packet type names,--emit-unverified; frames of satellites the DLL does not know are shown as raw bytes. Tested with AMSAT-EA's sample frames and synthetic signals only. - Optional time stamp on the deframer's
hexport (hex_time: none, utc, local, unix, stream;rec_startfor recordings). - New
hexmessage port on the deframer block: one hex string per decoded frame (the same bytes as theframesPDU payload). - Notes on the origin of
hadesr.dll(AMSAT-EA's, not Andy UZ7HO's; SoundModem is his) and the tested DLL version (1.08, compiled 5 January 2025). - Authorship statement added (developed by N6RFM with the help of Claude); copyright holder in LICENSE set to N6RFM.
UNNE-1B Decoder 1.0.1
Attribution to AMSAT-EA expanded; voice message identified (opening of Don Quijote). See CHANGELOG.md.
UNNE-1B Decoder 1.0.0
First public version. See CHANGELOG.md.