【WAV作成改良点・総まとめ @ChatGPT】
① AX.25フレームを正しく作った
Destination : SLEDGE-0
Source : TEST-0
Control : 03
PID : F0
Payload : SLEDGE TEST 19200 G3RUH
FCS : 50B5
② FCSを正しく付加した。
AX.25の CRC/FCS を計算し、B5 50 をフレーム末尾に付加した。
③ AX.25のbit stuffingを実装した。
5個連続する 1 の後に、0 を挿入。11111 → 111110
これをフレーム部分だけに適用し、0x7E のFlagには適用しないようにした。
④ AX.25のFlagを正しく配置した。
今回のテストでは、128 × 0x7E → AX.25 frame → 160 × 0x7E
という構造にした。そのため SoundModem.exe が十分な同期時間を取れた。
⑤ NRZIを正しく実装した。
つまり、AX.25 bit → NRZI として、
0 = transition
1 = no transition にした。
さらに、NRZI初期状態を 0 に修正した。
⑥ G3RUHスクランブラの位置を修正した。
最終的には、AX.25 → bit stuffing → NRZI → G3RUH scrambling → 波形
という順序にした。G3RUHの多項式は、1 + x^12 + x^17
⑦ 19,200 baud / 96 kHz を正しく対応した。
96 kHz ÷ 19.2 kHz = 5 samples / symbol
つまり、1 bit = 5 samples という非常にきれいな関係にした。
⑧ G3RUH波形を単純な矩形波にしなかった。
最終的には、Dire Wolf系の G3RUH直接波形生成方式を参考にして、
G3RUH → 位相制御 → 直接sin波形に変更した。Dire Wolfでは、
NRZI出力の初期値が 0 で、その後 0 = transition / 1 = no transition。
さらにG3RUHスクランブルは、そのNRZI出力に対して行われる。
これで Audacity でも、自然なGFSK音になった。
⑨ DC偏りを修正した。
fixed5c では波形に大きなDC偏りがあった。その後、fixed5d.wav では、
平均値 = +44 まで改善し、RMSは 約28,359 となった。
⑩ そして最終的に、
fixed5d.wav → Audacity → SoundModem FSK G3RUH 19200bd
→ SLEDGE TEST 19200 G3RUH 成功★
と、実際のデコード成功まで到達した。
【現在】
Python で正しい G3RUH WAV を生成 → SoundModem → AX.25 decode → 成功★
SLEDGE_AX25_GFSK_19200_test_fixed5b_float32.dat
SLEDGE_AX25_GFSK_19200_test_fixed5d.wav
【本来の目標】
AX.25 bits → GNU Radio → G3RUH modulation → WAV → SoundModem → AX.25 decode → 成功★
今後、GNU Radioで何か変更するたびに、
GNU Radioが作ったWAVを、同じSoundModemに入れて、fixed5d.wavと同じようにデコードできるか?
だけを判定基準にできる。