Jetson nano上でGNURadio 3.7を使って実験した記録。今回は、AM変調。
GNURadioでのAM変調はとてもシンプル。最大振幅でも過変調にならないようオーディオ信号を半分にしてキャリア成分に相当する定数 0.5 を加え、複素信号に変換するだけ。アナログ回路だと、トロ活に「DBMでAM変調できることはあまり知られていませんが...」(*1)と紹介されている方法に相当する。
Flow graphは次のとおり。なお、44.1KHzサンプリングのオーディオ信号をPlutoSDR Sinkに渡す2.205MHzサンプリングに Rational Resamplerで変換しなければならないが、Complexの変換よりFloatでの変換の方が処理が軽いだろうと考えてここに置いている。
アナログ回路の場合、DSB信号を作ってそこにキャリアを加える方法もある。キャリアが0Hzだから、DSBを作ったあとに定数を足しこむ順番になる。Flow graphにすると次のとおり。
アナログ回路だと両手法でだいぶ実装が異なるが、GRC上で実現する分にはブロックの順序が入れ替わった程度の違いでしかない。
AM 送受信の全体のflow graphはこのとおり。上半分はAM変調波を作ってPlutoSDR Sinkに流し込める複素信号を作る部分。下半分はPlutoSDR Sourceからの複素信号からAMの復調をする部分で、左下で正弦波をかけている部分はTx Rxでのチューニングのずれを模擬している。
AMの復調は、複素信号の絶対値を取ったあとキャリアによる直流成分をローカットフィルタで取り除く方法にした。こうやって、flow graphのロジックが正しいこと、実時間で動作可能なことを確かめてからPlutoを使った実験にうつった。図の最下部のログに aU とうのがいくつか並んでいる。これが、オーディオ信号の出力に対して処理が追い付かずにアンダーランが起きた記録。それぞれのブロックの初期化やらなにやらで処理が渋滞するのだろうか、フローをスタートさせた直後が少しアンダーランが発生するのは致し方ないようだ。
1) 山村英穂, 改訂新版 定本 トロイダル・コア活用百科, p285, 2006 CQ出版株式会社, ISBN4-7898-3067-5