Computer & RF Technology

RTLドングルとPLLシンセサイザで周波数特性測定を試みる(失敗)

先日ADF4351を使ったPLLシンセサイザについて書きましたが、これを作った理由はRTLドングルと組み合わせてスカラーネットワークアナライザ(SNA)を作れないか、と考えたからです。ADF4351Fによるシンセサイザは、35M-4.4GHzの任意の周波数信号を生成できます。一方RTLドングルは、30M-1.5G程度まで任意の周波数を受信することができます。これらを組み合わせれば、周波数特性を計測する系を構成できそうな気がします。

これを思いついたまましばらく放置していたのですが、ようやく試してみました。最初に結論を言ってしまうまくいっていません。以下はその首尾についてのメモです。

まずは直結でどのような測定ができるのか試してみました。PLLシンセサイザからは0dBmくらいの信号が出ていますが、さすがにこれは受信機には強すぎるので、ATT(アッネイッ)を通してからRTLドングルに接続します。ATTはとりあえず2つ重ねて26dBです。

imagePLLで周波数をスイープしながら、同じ周波数を受信するようRTLドングルを動作させます。これを行うようにpythonによるスクリプトで制御します。先日書いたようにPLLはpythonで制御できるようにしていましたので、若干のコードの追加でスイープを実現することができます。一方RTLドングルのほうはpythonモジュールが提供されているのでこれを使います。pipで簡単にインストールすることができます。RTLSDR-Scannerで使われていたものと同じです。

$ pip install pyrtlsdr

400MHzから500MHzまで1MHzステップでスイープさせてみた結果がこんな感じです。グラフはmatplotlibで描画しています。

カーブを見るとなめらかではなくぎざぎざになっている部分があります。よく見ると-10dB付近の一定の位置になるよう、もともとなめらかだった曲線が段階的に押しつぶされているように見えます。どうも受信機としてAGCが効いてしまっているようです。ライブラリの呼び出しで、ゲイン設定は固定にしており、コード上はこの状態でAGCはディセーブルになるはずのようですが、期待通りには動作してくれていません。いろいろ調べたり、試行錯誤してみたのですがどうも効果が見られませんでした。

このような動作をしているのは、おそらくRTLドングルの量子化ビット数の少なさからくるダイナミックレンジの狭さをカバーするために出力の段階で有効桁数が取れるよう操作されているのだと想像しています。

image

もっと広く100MHz-1GHzでスイープさせてみた結果です。800MHz以上では受信機の感度の低下(あるいはミスマッチ)もしくはPLLからの出力の低下のせいか、なめらかなカーブが得られています。

ということは、もっとATTで信号を減衰させればAGCの効かない範囲で動作させられるかもしれません。が、手持ちのATTに限りがあるのでまだ試せていません。image

以上のように、SNAをドングルで作るという目論見は、最初からつまづいてしまいました。もう少し試行錯誤してみたいと思います。

comments powered by Disqus