先日CentSDRにパワーメータを追加してみました。広帯域な設計ですが、はたしてどの程度の平坦性が得られれているのか。またどの程度の入力範囲をカバーできているのか計測してみました。簡単な仕組みの割には、まあまあの平坦度と直線性が得られていると思います。
計測ですが、SGをPCから制御、CentSDRも同様にPCから制御して、主にチューニング周波数を設定し、計測した電力値を読み取ります。これをスイープしながら自動計測しました。
まずは直線性の結果からです。SGから、-130dBm〜-20dBmの信号を2dBステップで設定しました。周波数は7.5MHzと47.5MHzの二箇所です。CentSDRの周波数応答0Hzの穴を避けるために、1kHzずらしてチューニングしています。
結果をグラフにすると下記のようになりました。周波数の違いで少しずれがありますが、いずれも-120dBm弱から応答があり、およそ-110dB〜-30dBの範囲で直線性が得られています。周波数による偏差はありますが、補正の範囲内です。
直線性は良さそうですので、それでは周波数応答はどうでしょうか。こちらもグラフにしてみました。今度は入力電力を一定として、周波数をスイープさせてプロットします。
入力電力を-80dBmとして500kHzから60MHzまで1MHzステップで、測定値を読み取ります。60MHz は、チューニング可能範囲を超えていますが、どこまでいけるか確認のため上限を超えて振ってみます。結果のプロットが下記です。
低い周波数で少しずれが生じるようです。20MHz以上は、おおむね平坦です。偏差の幅は5dB程度となりました。この程度なら補正が十分可能です。
一方周波数の上限は54MHz程度となり、それ以上では一気に感度がゼロとなります。これは2相クロックを生成している74LVC74が動作しなくなるためです。このときのD-FFへの入力は220MHz程度です。
一方、無入力の場合を確認してみます。-120dBm程度の計測値が得られますが、5MHz以下の部分では、少し持ち上がってます。
10MHz以下について、無入力の場合の応答をみてみます。5MHz以上では-120dBmがフロアですが、5MHz以下では-110dBmから-90dB付近までフロアが上がってきています。このあたりの周波数帯は、おそらくコーデックの動作周波数に近いので、ノイズを拾ってしまうようです。I2Sの接続方法にもうひと工夫が必要かもしれません。
広帯域な種は数特性は確認できましたので、今度は帯域付近の特性を確認してみます。48kHzのサンプリング周波数により、±24kHzの帯域がありますが、その前後を含めてもうすこし広く±40kHzの範囲をプロットしてみます。入力は-50dBmで、CentSDRのチューニングは一定のまま、入力の周波数をスイープします。
そうするとこんな形になりました。デシメーションフィルタの特性が両側の肩の形として見えています。けっこう急峻な特性を持っていることが確認できます。そして注目すべきは中央です。残念な0Hzの穴があります。
帯域内の拡大です。±20kHzで3dB程度下がっているようです。
逆にもっと広い帯域でみてみます。±200kHzだと、すこし離れたところ±100kHzの付近に跳ね返りがあるのがわかります。その内側では-125dBm程度と、減衰極になっているのか、まわりより低いレベルにまで下がっています。
今度は中央0Hzの穴の拡大です。±100Hzの拡大です。ふらつきが大きいので何度か計測して重ねてプロットしています。±40Hzの範囲では10dB以上減衰があることがわかります。
水色のトレースは、条件を変えてあります。キットでは100nFとしていたカップリングキャパシタを1uFに交換して測定したものです。時定数が10倍なので、穴も1/10になっています。特に不都合はみられないので、このくらいの定数とするのが良いかもしれません。
ついでに実験として、192kHzサンプリングの場合の帯域内特性を計測してみました。外側で振幅が下がるのがわかっていましたが、測定してみたら一発です。肩のあたりまで10dB程度も減衰しているのがわかります。グレーのプロットは、48k-spsのトレースを4倍に拡大して対応するように重ねたものです。仕様外の使い方をしているので仕方のないことなのですが、せっかく使えることがわかったので、なんとか活用したいところです。
ちなみに今回の計測は、Pythonでスクリプトを書いて、SGとCentSDRはシリアル経由で制御、ならびに測定値の読み取りを行いました。また、測定結果は、matplotlibでグラフ化しています。すべての作業はJupyter notebookで行っています。Jupyter notebookは作業とメモが同時に行えるのは大変便利です。