ADALM2000でSDRの実験③ 直交ミキサ編

ADALM2000を活用したSDR実験のシリーズ記事で、前回まではダイレクトサンプリング方式のSDRを紹介した。

ダイレクトサンプリング方式はRF信号を直接サンプリングするため、受信できる周波数の範囲がサンプリング周波数の範囲内に限られてしまう。そこで今回は、直交ミキサによる周波数変換回路とADALM2000を組み合わせて、広い周波数範囲を受信可能なSDRの自作に挑戦する。

スポンサーリンク

制作するSDRの方式

周波数変換回路として下記の記事で取り上げたCMOSアナログスイッチを用いた直交ミキサを利用する。

直交ミキサを用いるとRF信号を直接オーディオ帯域の信号に周波数変換するダイレクトコンバージョン方式と呼ばれるSDRを作ることも可能だ。しかしADALM2000には広い帯域幅で信号をキャプチャする能力があり、今回はこの帯域幅を活用するべく2段階のチューニングを行う以下の方式を採ることにする。

  1. 直交ミキサで-1MHzの周波数シフトを行い、500kHz〜1.5MHzのRF信号を-500kHz〜500kHzのIQ信号に変換
  2. 直交ミキサから出力されたIQ信号をADALM2000でサンプリング周波数1MHzにてA/D変換を行い、GNURadioで処理する

この方式では受信周波数の範囲は500kHz〜1.5MHzとなり、自宅から受信できる主要なAM放送局を全てカバー出来るようになる。また直交ミキサで1MHzの周波数シフトを行うために必要な4MHzのクロックはADALM2000の付属ソフトScopyのSignal Generatorを使って供給する。

直交ミキサの回路図

今回制作した直交ミキサの回路図は以下の通り。

以前の記事でLTSpice上で組んだ回路とほぼ同じだが、以下の点が異なる。

  • 電源電圧を±2.5Vから±5Vとし、デジタルICを正側電源で駆動
  • オペアンプのゲインを少し上げるためR1,R2を10kΩ→47kΩに変更
  • オペアンプの発振防止用にコンデンサC5,C6を追加
  • アナログスイッチ74HC4052のVEE端子に-5Vを接続

アナログスイッチは通常0V〜VDDの範囲の電圧しか通せないのだが、74HC4052には負電圧も通せるようVEE端子が付いており、VEEを-5Vに接続して±5Vの範囲の信号を通せるようにしている。

アンテナのインピーダンス変換用トランスT1の仕様は前回記事とほぼ同様だが、今回は中点タップが必要となるため2次側として8回巻きを2つ直列接続して合計16回巻きとし、1次側は3回巻きとした(巻線数は適当に決めたので、もっと性能の出る巻線比があるかもしれない)。

Scopyで直交ミキサの動作確認をする

以下、ブレッドボード上に組んだ直交ミキサ回路の動作確認をADALM2000のバンドルソフトScopyを使って行う。

前回記事で制作した壁面ループアンテナを回路に接続したうえで、ADALM2000と回路を以下のように接続する。

  • V+とV-を+5Vと-5Vへ
  • W1を74HC74のCLK端子へ
  • 1+,1-をI outへ、2+,2-をQ outへ

電源投入

Scopyの左側のバーからPower Supplyメニューを選択し、回路に電源を投入する。この時、正電源と負電源をバラバラに入れると過大電流が流れてオペアンプを壊す場合があるので、右上のTrackingを選択してからEnableボタンを押すようにする。

クロックの供給

Signal Generatorメニューを選択し、以下のようにパラメータを設定したうえでRunボタンを押して回路へのクロック供給を行う。

  • WaveformタブでドロップダウンからSquareを選択
  • Amplitudeは5Volts p-pに設定
  • Frequencyは4MHzに設定
  • Offsetは2.5Voltsに設定

スペアナで動作確認

電源とクロックの供給を行うと周波数変換された信号が確認出来る。下の図は1MHzまでの周波数をスペアナ表示しているが、線状のスペクトルは500kHz以内の周波数に集まっている。以前の記事で掲載したLTSpiceのFFT表示と同様、今回のScopyのスペアナでも500kHzの帯域幅しか無いように見えるが、IQ信号には実際には倍の±500kHzの範囲の信号が含まれ1MHzの帯域幅を持っている。つまり周波数の符号が反転した状態で表示されている成分も含まれており、正しい周波数はGNURadioで複素FFTによるwaterfall表示などしない限りわからない。この点については後ほどGNURadioを動かした際に解説する。

信号の振幅は最大でも-20dBV(100mV)に届かない程度で、前回記事のトランジスタアンプより感度が若干落ちている。回路図の説明でも触れたとおり、これでもオペアンプの負帰還を減らしてゲインを少し上げているのだが、トランジスタのアンプで得られた40dBのゲインには及ばずせいぜい30dB程度のゲインしか得られていない。また、スペアナ上の周波数が高いとゲインが少し落ちてもいる。使用したオペアンプ5532のGB積が約10MHzなのでこのへんは致し方なく、ゲインを稼ぎたければもう少し高性能なオペアンプが必要だ。

GNURadioで動作させる

さて、Scopyで電源とクロックを供給させた状態でスペアナ表示だけOffし、GNURadioを起動する。

フローグラフの解説

直交ミキサによるIQ信号を入力とする今回のフローグラフは以下の通り。

前回記事のフローグラフと比べてみると実はあまり変わっていない。違う箇所は以下の通り。

  • IQ信号を複素信号に変換する”Float To Complex”の箱(前回記事では”Hilbert”だった)
  • ADALM2000のサンプリング周波数を2.5MHzから1MHzへ変更
  • 直交ミキサで変換する周波数(1MHz)を考慮してフローグラフ内で周波数変換を調整

サンプリング周波数や周波数変換以外で一番大きな違いはADALM2000のA/D変換出力を複素信号への変換する最初の箇所で、
今回はADALM2000からの2ch出力をそのまま複素信号として扱う形となっているが、
前回記事では”Hilbert”という箱だった。前回記事では詳しく触れなかったが、この”Hilbert”という箱はヒルベルト変換だ。ヒルベルト変換は正負の周波数成分を持つ実信号から正の周波数のみを持つ複素信号を生成する処理(詳細はWikipediaのヒルベルト変換の解説を参照)。

複素信号のwaterfall表示

waterfall表示設定の”Center Frequency”というフィールドに中心周波数として1MHzを設定し、複素信号であるIQ信号の持つ±500kHzの帯域成分を表示している。Scopyのスペアナ表示では0〜500kHzの周波数成分しか見えなかったが、1MHz±500kHz、つまり500kHz〜1500kHzの範囲の放送波が正しくwaterfall表示されている事が確認出来る。

放送波以外の周波数成分は図の下側に注釈を入れた。1000Hzのラベルの位置は直交ミキサ出力のIQ信号の周波数としては0Hz、つまり直流成分でADALM2000の入力段のオペアンプのオフセット電圧などが原因。そして1190kHzは非常に強力に受信できているAFN(810kHz)のゴースト成分で、IQ信号の0Hz(実際は1000Hz)を挟んで対称な周波数位置(1000-190kHz=810kHz, 1000+190kHz=1190kHz)に現れている。これらの2つの周波数はIQ信号による複素表現では周波数が±190kHzで周波数の絶対値が同じで符号が反転しており、実部は同じで虚部の符号が違うという関係にある。このような成分が出てしまうのは、直交ミキサの回路定数のバラツキによる誤差が原因だ。

夜間のwaterfall表示

前回記事同様、夜間に電離層反射によって遠方の放送局が受信可能か調べてみたところ、以下のwaterfall表示の通り沢山の放送波による縦縞が確認出来た。ただ上記Scopyで確認した通り感度は前回記事の物の方が良好だ。

まとめ

ブレッドボード上に自作した直交ミキサにADALM2000のSignal Generatorで生成したクロックを供給しで周波数変換を行う割と本格的なSDRを作ってみた。ADALM2000の広い帯域幅を活用するため周波数変換をハード的に行った後でチューニングをソフトウエア的に行う方式とし、受信可能な周波数帯域は500kHzから1500kHzで、日本の中波放送の周波数レンジである531kHzから1602kHzをほぼカバーすることが出来た。

今回自作したCMOSアナログスイッチを使った直交ミキサ回路はダイレクトコンバージョン方式のSDRでも使える筈だ。その場合は音声帯域がキャプチャ出来れば良いので、普通のオーディオインタフェースを使うGNURadioのAudio Sourceを使えば良いので、ADALM2000は不要で代わりにクロック発生IC等があれば実現出来るだろう。

また今回作ったSDRは、直交ミキサ回路にもっと高い周波数を供給すれば短波放送も受信出来る筈なのだが、うまく受信出来なかった。原因は不明だが、トロイダルコアを使ったトランスの周波数特性かアンテナそのものにあるのかもしれない。

コメント