Computer & RF Technology

DDS AD9859とGNURadioでVNAを作ってみる(5.周波数レンジ拡大2GHz編)

さて、RX部が想定内の動作をしていることが確認できたので、次はサブナイキストレンジでの挙動を見てみます。サブナイキスト動作をさせる場合に、どのように二つのDDSの周波数を設定したら良いのでしょうか。実はしばらくこれで悩んでいたのですが、実際動作させながら動作を観察して考えたところ、実に簡単に済むことがわかりました。

AD9859の周波数設定は、32ビットのチューニングワードで行います。DDSから出力される周波数は、

  • Fout = Fsysclk * N / 2^32

ですので、特定の周波数Foutを出力したい場合、

  • N = 2^32 * Fout / Fsysclk

となります。通常のDDSの使い方ですと、Nが2^32 / 2 を超えないようにするわけです。

なんと、サブナイキスト周波数で動作させる場合は、Nについてこの上限を気にせず、2^32の剰余すなわち下位32ビット分をそのまま使うだけでOKでした。Fsysclkを超えた周波数でも、計算から出てきたNの下位32ビット分を使うだけで、出力される信号にはちゃんとその周波数成分が含まれています。もちろんFsysclkを超える周波数を得ようとした場合には、それより強力な第一ナイキストの信号がありますが、弱いながらもFsysclkを超えるサブナイキストの周波数成分がちゃんと存在しています。このVNAではそれを積極的に使うわけです。

以前説明したように、このVNAは、二つのDDSについて、Fsysclkをずらしておいたうえで、発生させる信号の周波数を一定に保ち、ミキサを通してサブナイキストの成分を選択的に取り出すというのが原理です。結局必要な処理は、それぞれのDDSのFsysclkから普通にNを計算し、DDSに指定するチューニングワードとして下位32ビットを使うだけです。これはごく簡単な処理です。

というわけで、前回の説明では0-200MHzをスイープさせてみたわけですが、今回はサブナイキスト領域での挙動観察が目的ですので0-2GHzをスイープさせてみます。それから、RXを実装したので観察対象はS21にします。2Gまで測ってみるので、一応気を使ってセミリジッドケーブルでTX-RXを直結しました。短いとはいえ若干の長さがありますので少し位相は回ることになります。

image

DDSのクロックは、40MHzのクリスタルからPLLで逓倍し、さらにオーバークロックさせますが、800MHzで動作させようとすると信号が暴れてしまいました。760MHzだと安定しましたので、これを上限とすることにしました。二つのDDSのFsysclkはそれぞれ720MHzと760MHzなります。0-2GHzをスイープさせてGNUPlotでグラフ化したものを示します。参照信号(ref)が青線、通過信号(mag)が緑線、位相(arg)が赤線です。

$ ./vnaplot -s 1e6 -e 1980e6 -n 200 -t

image

通過信号のグラフ(緑線)はそれっぽいグラフになっています。DDSの出力は矩形波ですのでその信号強度はFsysclkと出力周波数の関係でsinc関数になりますが、その形が現れています。一方、位相(赤線)の方ですが、ちょっと気になる感じです。700MHz程度まではそれなりに一定の位相回転の挙動ですが、それ以上になると暴れてしまっています。原因はブリッジの出来具合だと考えています。またsincの落ち込みの部分では信号が弱いので位相差の計算結果が乱れています。これはノイズの影響です。

グラフの縦軸は対数値そのままなので、dBにするには20を乗じます。位相はラジアンで+3.14〜-3.14が+180°〜-180°に相当します。位相のグラフで上下端に飛んでいるように見えるところは実際には連続しています。

下はQEX誌のDQ8SGの記事(Jan/Feb 2009 p33)にあるFigure3です。これのTrace2と似たグラフが得られていると思います。

image

グラフ(緑線)ではFsysclk付近に落ち込みがあります。これは原理的なsincカーブです。VNWAでは周波数によってFsysclkを切り替えることでこれをカバーしています。というわけで、二つのDDSのFsysclkを520MHz, 560MHzに変更して動作させてみました。するとこんな感じになりました。

image

グラフが全体に左に縮小するようにズレて、最初のグラフの落ち込み部分に信号が出ていることがわかります。ついでに最初のグラフの1.5GHz付近(2x Fsysclk)の落ち込みをカバーするように、二つのDDSのFsysclkを600MHz, 640MHzにしてみました。

image

1.6G付近にピークがあるので、このあたりもカバーできそうです。

これらを周波数に応じて自動的に切り替えるようにしてみるとこのようなグラフが得られました。RX信号(緑線)が繋がるように切り替えをしています。ギャップを相互に埋めることで、レベルの極端な落ち込みは無くせました。ところが、位相(赤線)は切り替え箇所で若干飛んでしまっています(600MHz, 850MHz, 1350MHz 1700MHz)。位相が連続にならず飛んでしまう理由はよくわかりません。また、1.2GHz以上はさすがにレベルが低下していますので、計測に使うのは厳しそうです。VNWAでは〜1.3GHzがカバー範囲になっていましたので、まぁ近い結果だと思います。

image

ちなみに、RX-TXの接続を外してオープンにした場合はこうなります。基本的に信号が無いはずなのでノイズのみのはずですが、周波数が低い領域では一定の位相が出ているので残念ながらリークがあるようです。上のグラフとの差がダイナミックレンジになります。最大で60dB程度にとどまっています。image

一方、TX側の反射です。オープン(全反射)とターミネートした場合です。これも同様に緑線の差がダイナミックレンジと方向性(directivity)を示しています。低い周波数ではそれなりに50dBですが400MHz付近で30dB程度、1G以上では20dBを下回るところもあります。ブリッジの性能そのものですのである程度は仕方ないところです。

image

image

それぞれのグラフを一見みてわかるように生データはぐねぐねです。これを校正(キャリブレーション)操作をすることで、まっすぐに引き延ばすわけです。ただし生データの段階でどれだけダイナミックレンジが確保できているかが勝負ですので、もうしばらくこの状態で観察を続けます。

以上サブナイキスト領域でもそれっぽく動作しているようです。QEX誌記事と似たグラフが再現できているのは嬉しいところです。ほんとうなら1GHz程度のBPFなどで特性を取ってみたいのですが、適当なサンプルが見つからないのでこれはまたの機会にしたいと思います。

次回は校正の実験もしくは極座標表示を試してみたいと思います。これまで操作はすべてコマンドラインでやってきましたが、さすがに面倒になってきたのでそろそろGUIも作りたいなと考えています。

リファレンス

comments powered by Disqus