前回までで、自作のSDR(Software Defined Radio)ソフト「AF-SDR」は、FMラジオとして使えるようになりました。室内アンテナで放送を聞き、表示や操作を整え、設定も保存できます。
ラジオとしての機能は、もう十分になってきました。では、この受信データで、デジタル変調信号も見られないか。
ここからは、放送を聞くための機能追加とは少し違います。信号そのものの様子を観察したくなったのです。今回は、その入口となった1.8.0と1.9.0の話です。
※Codexは、コードの実装やテストをAIに任せられるOpenAIの開発ツールです。制作環境は準備編にまとめています。
最初の依頼は、一文だった
Codexへ渡した指示は、これだけでした。
デジタル変調信号を受信してコンスタレーション表示できるようにして。
コンスタレーションは、信号のIとQという二つの成分を平面上の点として見る表示です。スペクトラムが周波数ごとの強さを見るのに対し、こちらでは信号の振幅や位相の状態が見えてきます。
たとえばQPSKなら、条件が合って同期できると、点が四つの位置の周辺に集まります。今回は、そのような信号の姿を見たくなりました。
ただ、最初の一文では、扱う方式も、同期の方法も指定していません。
Codexは1.8.0として、BPSKとQPSKを対象にした表示を返してきました。主画面へ全部を詰め込まず、「コンスタレーション…」から別ウィンドウを開く形です。
追加された画面です。この画像では表示はOFFで、方式の選択肢を開いています。この時点では、別画面と方式・設定欄ができたところです。
方式だけでなく、baudとRRC αという設定欄もあります。baudは、信号のシンボルが切り替わる速さ。RRC αは、信号を整えるフィルターの特性に関係する値です。表示したい信号の条件に合わせて指定します。
一文の依頼から、対象方式と必要な設定、別画面の操作まで補われました。
点を描くまでにも、処理がある
完了報告には、こうありました。
タイミング・搬送波同期後の点群を表示します。同期なしのI/Q表示にも切り替えられます。
単に受信データを横と縦へ並べただけではありません。信号を整え、どのタイミングで点を見るかを合わせ、位相や周波数のずれを追いかける処理が入っています。
手法は何も指定していないのに、この分野で定番のRRCフィルター、Gardnerタイミング同期、Costas搬送波同期を選んで組み合わせてきました。名前を覚える必要はありませんが、「点を四つ描く」のと「受信信号から四つに集まる点を取り出す」の間には、これだけ処理があります。
しかも、前回までのスペクトラムとFM音声は維持しています。デジタル表示には別の処理タスクが追加され、デジタル側の設定を変えるだけで既存の表示や音声をリセットしない構成でした。
ラジオの画面に機能を足し続けてきたところへ、新しい信号処理の経路まで増えてきました。
頼む前に、まずBPSKとQPSKが返ってきた
こちらとしては、もう少し広い範囲を扱わせるつもりでした。外部チャットには、BPSK、QPSK、QAM、π/4 Shift QPSKに加え、ASKやFSK、MSKも対象にしたい、という話を残しています。
その詳細を最初の依頼に入れる前に、BPSKとQPSKの実装が返ってきた形です。
そこで次の指示で、対象を広げました。あわせて、目的も明確にしています。
目的は受信した変調信号を視覚的に確認することであり、 データの復号機能は不要。
信号が運んでいるメッセージを読みたいのではなく、変調された信号を見たい。ここは、同じデジタル信号の処理でも、作るものを分ける大事な部分でした。
そして、各方式をどう見せるかは、またCodexに任せました。
各変調方式について、信号の性質に適した表示・同期・設定方法を判断して実装すること。
方式名を増やしただけの同じ画面になるのか。それぞれの信号に合わせて違う見せ方をするのか。返ってくるものを見ます。
方式が変わると、見るものも変わった
1.9.0では、QAMやπ/4 Shift QPSK、ASK/OOK、FSK、MSKへ対象が広がりました。追加された表示を大きく分けると、こうなります。
| 信号の方式 | AF-SDRで見るもの |
|---|---|
| BPSK・QPSK・16/64QAM | 同期処理後のI/Qの点群 |
| π/4 Shift QPSK | 隣り合うシンボル間で位相がどれだけ変わったか |
| ASK/OOK | 振幅の分布と、その時間変化 |
| FSK・MSK | 周波数のずれの分布と、その時間変化 |
方式名を全部覚えなくても、「振幅を見るもの」「位相を見るもの」「周波数を見るもの」がある、と考えると読みやすいと思います。
点の位置と、そこから次に移れる先を整理した補足図です。矢印は遷移の関係を示し、実際の信号が通る軌跡を描いたものではありません。中央の8PSKは比較用で、この段階のAF-SDRに専用解析を追加した方式ではありません。
QPSKは四つの位置を使います。π/4 Shift QPSKは、四点の組を交互に切り替えるので、重ねると八つの位置に見えます。同じ八点でも、8PSKとは次に移れる先が違います。点の数だけでなく、その間の変化も見たくなる理由が、この図にあります。
ここで面白かったのは、すべてを同じI/Q平面の点群へ押し込まなかったことです。ASKなら強さ、FSKなら周波数の変化が見える表示にしてきました。
π/4 Shift QPSKも、隣のシンボルとの位相差を四つの位置として表示する実装です。この選び方は、後で私が別の見え方を欲しくなるところにつながります。この時点では、方式に応じた観察の入り口が用意されました。
また、画面には実際の処理結果と参考位置を別に描きます。受信した点を、きれいに見えるよう理想位置へ丸めているわけではありません。
Codexが何を作ったかを読むと、単に「対応しました」という報告より、どのような表示を選んだかの方が気になってきます。
今度は、何を入れて確かめるか
ここで、FMラジオのときとは違う問題が出てきます。
FMなら、受信できる放送局へ合わせて、音が聞こえるかを試せました。一方、デジタル表示は、方式やシンボルレートなどの条件を合わせる必要があります。受信した何かを表示すれば、自動で方式を見つけてきれいな点群にしてくれるソフトではありません。
Codexは、周波数やクロックのずれ、雑音を含めた合成信号で各方式を検証していました。ただし、完了報告では実際のデジタル無線信号での確認は未実施です。
この時点で確かめられていたのは、表示と処理が実装され、合成信号で検証されたことまでです。手元の無線信号を一通り解析できた、という話にはまだなりません。
そこで、以前SDR#(SDRSharp)で保存していたIQ WAVを掘り出しました。受信時のI/Qデータを保存したファイルです。これをAF-SDRへ入力できれば、同じ信号を繰り返し見られます。
外部チャットへは、こう書いていました。
昔保存したもの掘ってきた。wavファイルヘッダー覗いたり出来るか?
「聞く」から「信号を見る」へ
1.8.0と1.9.0で増えたのは、設定欄やグラフだけではありませんでした。欲しいものが、ラジオの使い勝手から、通信信号を観察する方法へ変わっています。
短い指示で入口ができたので、こちらも方式や見たい内容を追加しました。そして実装がそろうと、今度はそれを試すための入力が欲しくなります。
次回は、掘り出したIQ WAVを読み込ませるところから始めます。そこからさらに、条件の分かった信号を自分で用意するため、もう一本のソフトを作ることになりました。
ソース一式と最新バイナリー
AF-SDRとAF-SignalGeneratorのソース一式、現在の公開版はGitHubから利用できます。この記事は制作当時の記録で、最新バイナリーの内容とは異なる場合があります。導入条件と起動方法は最終回の配布案内をご覧ください。





コメント