● (No.1203) HADES-SA SSDV 画像復号への新展開 (2026年11月10日)
------------------------------------------------------------
#1, #2, #3
第一回
HADESx Generic Decoder
[HADESx Generic Decoder @N6RFM]
公式ページ: HADESx-Decoder GitHub
リリース一覧: HADESx Releases
- UNNE-1B だけでなく、HADES-SA、HADES-Lにも対応
- SDR のI/Q録音や音声WAVファイルから直接処理可能
- CODEC2 音声の復元に対応
- 従来のGNU Radio方式で問題になりやすかったビットタイミングのずれを改善
従来のビットタイミング回復処理の問題と改善
従来のビットタイミング回復処理では、次のような問題が発生することがあった。
スクランブルされていないデータでは、シンボルクロックが最大3%ずれることがあった。
同期語の直後で数ビット分の位置ずれが発生し、フレームを正しく切り出せなくなる場合
があった。この問題に対しては、バースト開始時にクロックをリセットし、トレーニング
パターンからタイミングを学習する方式を導入して改善した。
Decoder v1.7.2 の主な変更点
- 各受信フレームの受信時刻を記録
コンソール表示と .tlm ファイルに、UTCの受信時刻を追加した。
- 衛星時計との時刻照合
UNNE-1Bの起動後経過秒数と録音時刻を照合し、時刻設定の誤りなどを警告表示した。
- フレームの生データ表示
フィールド別デコーダーが用意されていない UNNE-1B のテレメトリーについても、
SoundModem, Direwolf と同様に、フレーム全体のHEXデータを表示するようにした。
第二回
HADESx Generic Decoder 導入・動作確認記録
1. [HADESx Generic Decoder のインストール]
今回、HADES-SA / HADES-L などの復号に対応した "HADESx Generic Decoder v1.7.2" を、
Windows 11 にインストールして動作確認を行った。
インストール環境
項目 内容
--------------------------
OS Windows 11
Python 3.14.3
HADESx v1.7.2
インストール先 C:\Program Files\hadesx\HADESx-Decoder-1.7.2
------------------------------------------------------------
* インストールに先立ち、"C:\Program Files\hadesx"フォルダーへのアクセス権限を設定した。
アクセス権限の設定手順
(1) hadesxフォルダーを右クリックし、「プロパティ」 を開く。
(2) 「セキュリティ」 タブを選択する。
(3) 「グループ名またはユーザー名」 から "User" を選択する。
(4) 下半分のアクセス許可欄で、読み取りと書き込みの許可欄にチェックを入れる。
(5) 「適用」 → 「OK」 で確定する。
この設定後、HADESx のインストールコマンドが正常に実行できた。
2. [公式サンプルによる復号テスト]
インストール後、HADESx に付属する公式サンプルを使用して、実際に復号できることを確認
した。このファイルは、HADES-SA の受信データを収録したステレオ I/Q WAV ファイルである。
使用ファイル:
"C:\Program Files\hadesx\HADESx-Decoder-1.7.2\examples\iq\hades_sa_ssdv_pass.wav"
3. [CMD で実行したコマンド]
以下の手順で、Pythonの確認からサンプルWAVの復号までを実施した。
(1) Pythonのバージョン確認
py --version
(2) Pythonの実行ファイル確認
py -c "import sys; print(sys.executable)"
(3) HADESxフォルダーへ移動
cd /d "C:\Program Files\hadesx\HADESx-Decoder-1.7.2"
(4) HADESxのインストール
py -m pip install -e .
(5) HADESxのヘルプ表示
py -m hadesx --help
(6) サンプルフォルダーの確認
dir examples
(7) サンプルIQフォルダーの確認
dir examples\iq
(8) サンプルのREADME表示
type examples\iq\README.md
(9) HADES-SAサンプルWAVの復号
py -m hadesx examples\iq\hades_sa_ssdv_pass.wav
以上のコマンドを実行し、HADESx の起動とサンプルデータの読み込み・復号が
正常に行われることを確認した。
4. [HADES-SA公式サンプルの復号結果]
公式サンプルWAVから、5個のSSDVパケットを正常に復号することができた。
項目 実行結果
---------------------------------------
衛星 SpinnyONE HADES-SA
変調方式・ボーレート FSK / 800 baud
受信形式 ステレオ I/Q WAV
サンプルレート 50,000 samples/s
パケット種別 Type 10 (SSDV画像)
CRC 5個すべて OK
有効フレーム 5 frames
---------------------------------------
今回のテストにより、Windows 11/Python 3.14.3 の環境で、"HADESx Generic Decoder v1.7.2"
が動作し、HADES-SA SSDVパケットを復号できることを確認した。今回確認できたのは、パケット
の復号までであり、JPEG画像ファイルの再構成については、別途、"hadesx-ssdv" および "ssdv"
を使用した確認が必要である。次回は、復号した 5個のSSDVパケットからJPEG画像を再構成する
実験を行う。
第三回
HADESx によるSSDVパケットのJPEG画像再構成
前回は、"HADESx Generic Decoder v1.7.2" を Windows 11 にインストールし、公式サンプルWAVから
5個の HADES-SA SSDVパケットを正常に復号できることを確認した。今回は、その5 個のSSDVパケット
を結合し、JPEG画像ファイルを生成する実験を行った。
1. [HADESx Decoder によるSSDVパケットの復号]
使用したファイルは、HADESx に付属する公式WAVサンプルである。
"C:\Program Files\hadesx\HADESx-Decoder-1.7.2\examples\iq\hades_sa_ssdv_pass.wav"
CMDを起動し、HADESxのインストールフォルダーに移動する。
cd /d "C:\Program Files\hadesx\HADESx-Decoder-1.7.2"
公式サンプルを復号する。
py -m hadesx examples\iq\hades_sa_ssdv_pass.wav
実行結果:
- 衛星:SpinnyONE HADES-SA
- 変調方式:FSK 800 baud
- パケット種別:Type 10 (SSDV image packet)
- 画像ID:0
- 画像サイズ:320 x 240
- 受信パケット:2,3,4,5,6
- CRC:5個すべて OK
- 5 valid frame(s)
2. [SSDVパケットをファイルに保存]
次に、復号したパケットをファイルに保存するため、出力フォルダーを指定して再実行した。
py -m hadesx examples\iq\hades_sa_ssdv_pass.wav --outdir ssdv_result
今回は 5個のSSDVパケットが、個別のBINファイルとして保存された。
ファイル名の例: 各ファイルは256 bytesである。
sat_03_type_10_ssdv_img_000_packet_0002.bin
sat_03_type_10_ssdv_img_000_packet_0003.bin
sat_03_type_10_ssdv_img_000_packet_0004.bin
sat_03_type_10_ssdv_img_000_packet_0005.bin
sat_03_type_10_ssdv_img_000_packet_0006.bin
出力フォルダーの内容を確認する。
dir ssdv_result
3. [hadesx-ssdv.exe の確認]
HADESx には、出力されたSSDVパケットを結合してJPEG画像化するための "hadesx-ssdv.exe" が
用意されている。次に、実行ファイルの場所を確認する。
dir "C:\Users\user\AppData\Local\Programs\Python\Python314\Scripts\hadesx-ssdv*"
次のファイルが確認できた。
"C:\Users\user\AppData\Local\Programs\Python\Python314\Scripts\hadesx-ssdv.exe"
"hadesx-ssdv.exe" のヘルプを表示する。
"C:\Users\user\AppData\Local\Programs\Python\Python314\Scripts\hadesx-ssdv.exe" --help
この hadesx-ssdv.exeプログラムは、HADESx Decoder の出力フォルダーを指定し、画像IDごとにSSDV
パケットを結合して、指定した出力フォルダー内に、SSDVファイルとJPEG画像ファイルを自動生成する。
4. [SSDVパケットの結合とJPEG生成]
画像再構成には、今回新たに HADESx に付属する "hadesx-ssdv.exe" を利用した。このプログラムは
内部処理で、以前HADES-SA用に使用していた "ssdv.exe" を利用する。他の3ファイルは実際には使用
していないが、念のため以下の4ファイルを HADESx のインストールフォルダーにコピーした。
run_ssdv.bat
ssdv.exe
ssdv-x86.exe
ssdv-merge-windows-x86.exe
コピー元:
"C:\Program Files\hadesa\SSDV-minimodem\SSDVs\ssdv.exe"
"C:\Program Files\hadesa\AMSAT-EA_HADES-SA_SpinnyONE_SSDV_utilities\run_ssdv.bat"
"C:\Program Files\hadesa\AMSAT-EA_HADES-SA_SpinnyONE_SSDV_utilities\ssdv-x86.exe"
"C:\Program Files\hadesa\AMSAT-EA_HADES-SA_SpinnyONE_SSDV_utilities\ssdv-merge-windows-x86.exe"
画像ID "0" を指定して、JPEG画像を生成する。
"C:\Users\user\AppData\Local\Programs\Python\Python314\Scripts\hadesx-ssdv.exe" ssdv_result --image 0 --ssdv "C:\Program Files\hadesx\HADESx-Decoder-1.7.2\ssdv.exe"
実行結果:
image 0: 5 packet(s), highest number 6, 2 missing -> ssdv_result\hades_sa_image_000.ssdv
packets: ..#####?
missing: 0-1
packet 0-1: about 0 % to 2 % down the picture (rows 0-6 of 240)
after packet 6: not received (the end of the image has not arrived): from about 8 % down, rows 20-240 of 240
picture: ssdv_result\hades_sa_image_000.jpg
5. [生成されたJPEG画像ファイルの確認]
dir ssdv_result\*.jpg
実行結果:
2026/11/10 14:35 2,831 hades_sa_image_000.jpg
1個のファイル 2,831 バイト
生成されたファイル:
C:\Program Files\hadesx\HADESx-Decoder-1.7.2\ssdv_result\hades_sa_image_000.jpg
実際にこのJPEG画像を開いてみると、画像上部に一部の映像が現れ、その下は未復元部分となっていた。
画像サイズは 320 x 240 pixel で、受信できたのはパケット2~6 の5個であり、パケット0, 1 および、
パケット7以降のデータは未受信である。そのため、画像全体の約8%に相当する部分だけが表示された。
完全な画像復元には至っていないが、SSDVパケットからJPEG画像ファイルを実際に生成できた。
6. [過去の画像復元方法との比較]
これまでの No.1182, No.1183では、SoundModem や SatNOGS のCSVデータから SSDVパケットを取り出し、
画像を再構成していた。今回の HADESx による方法は、I/Q WAVファイルから直接SSDVパケットを復号し、
画像再構成まで進めるものである。
項目 No.1182 / No.1183 今回 No.1203
----------------------------------------------------------------------
入力データ SDR受信 / SatNOGS CSV I/Q WAV
パケット抽出 SoundModem / CSV解析ツール HADESx v1.7.2
パケット保存 個別の.binファイル 個別の.binファイル
パケット結合 cat等による番号順結合 hadesx-ssdv.exe
JPEG変換 ssdv.exe ssdv.exe
----------------------------------------------------------------------
No.1182, No.1183, No.1203
No.1183では、SatNOGS のCSVファイルから専用ツールで .binファイルを抽出し、次のコマンドで
結合していた。
cat *.bin > combined.bin
ssdv -d combined.bin output.jpg
今回は、HADESxがパケット抽出を担当し、"hadesx-ssdv.exe" が結合と画像再構成を担当する。
"C:\Users\user\AppData\Local\Programs\Python\Python314\Scripts\hadesx-ssdv.exe"
7. [今回の実験結果]
今回の実験により、Windows 11 / Python 3.14.3 / HADESx Generic Decoder v1.7.2 の環境で、
次の一連の処理が正常に動作することを確認した。
(1) I/Q WAVファイルからHADES-SAのSSDVパケットを復号
(2) CRCが正常な5個のパケットを ".bin" ファイルとして保存
(3) "hadesx-ssdv.exe" でパケットを結合
(4) 内部で "ssdv.exe" を使用してJPEG画像ファイルを生成
(5) 生成されたJPEG画像を実際に表示
今回の公式サンプルでは、受信できたパケットが 5個だけだったため、画像全体の約8%の復元に
とどまった。しかし、HADESxを利用して I/Q WAV からSSDV画像をJPEG化する一連の処理が実現で
きたことは大きな成果である。今後は、実際の衛星受信データから、より多くの SSDVパケットを
収集し、画像全体の復元に挑戦したい。
トップ へ戻る.
前のページ へ戻る.
次のページ へ移る.(編集中)
ホームページ(目次) へ戻る.