HADES-SA SSDV 画像復号への新展開


● (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パケットを
収集し、画像全体の復元に挑戦したい。



トップ へ戻る.
前のページ へ戻る.
次のページ へ移る.(編集中)
ホームページ(目次) へ戻る.