先日ADF4351を使ったPLLシンセサイザについて書きましたが、これを作った理由はRTLドングルと組み合わせてスカラーネットワークアナライザ(SNA)を作れないか、と考えたからです。ADF4351Fによるシンセサイザは、35M-4.4GHzの任意の周波数信号を生成できます。一方RTLドングルは、30M-1.5G程度まで任意の周波数を受信することができます。これらを組み合わせれば、周波数特性を計測する系を構成できそうな気がします。
これを思いついたまましばらく放置していたのですが、ようやく試してみました。最初に結論を言ってしまうまくいっていません。以下はその首尾についてのメモです。
まずは直結でどのような測定ができるのか試してみました。PLLシンセサイザからは0dBmくらいの信号が出ていますが、さすがにこれは受信機には強すぎるので、ATT(アッネイッ)を通してからRTLドングルに接続します。ATTはとりあえず2つ重ねて26dBです。
$ pip install pyrtlsdr
400MHzから500MHzまで1MHzステップでスイープさせてみた結果がこんな感じです。グラフはmatplotlibで描画しています。
カーブを見るとなめらかではなくぎざぎざになっている部分があります。よく見ると-10dB付近の一定の位置になるよう、もともとなめらかだった曲線が段階的に押しつぶされているように見えます。どうも受信機としてAGCが効いてしまっているようです。ライブラリの呼び出しで、ゲイン設定は固定にしており、コード上はこの状態でAGCはディセーブルになるはずのようですが、期待通りには動作してくれていません。いろいろ調べたり、試行錯誤してみたのですがどうも効果が見られませんでした。
このような動作をしているのは、おそらくRTLドングルの量子化ビット数の少なさからくるダイナミックレンジの狭さをカバーするために出力の段階で有効桁数が取れるよう操作されているのだと想像しています。
もっと広く100MHz-1GHzでスイープさせてみた結果です。800MHz以上では受信機の感度の低下(あるいはミスマッチ)もしくはPLLからの出力の低下のせいか、なめらかなカーブが得られています。
ということは、もっとATTで信号を減衰させればAGCの効かない範囲で動作させられるかもしれません。が、手持ちのATTに限りがあるのでまだ試せていません。
以上のように、SNAをドングルで作るという目論見は、最初からつまづいてしまいました。もう少し試行錯誤してみたいと思います。
- pythonのコード https://gist.github.com/edy555/7643605