スペアナ機能を大幅に改善
V2.20まではスペアナのスパン切替が50MHz、1.56MHz、48.8kHzの3段階しかなく、
しかもキリの悪い数値であったため周波数の目盛りを読むのに大変不便でした。
そこでV2.30以降はスパン切替を9段階に増やし、全て計算しやすい数値に変更しました。
これまでの50MHzスパンはエイリアシングフィルタで半分しか波形が出なかったため、
見やすくなるように思い切って50MHzは削除して、最大スパンは25MHzとしました。
窓関数はより分解能が高いBlackman-Harrisを標準としました。
ソフトウェアのダウンロードとコンパイル方法
スペアナ機能改善に対応したレシーバソフトウェアは
こちらから最新版をダウンロードしてください。
ダウンロードしたソースコードをPiRadio ディレクトリの下に置きます。
ソースコードのコンパイル方法
$ cd PiRadio
$ g++ -I/usr/include/X11 -L/usr/X11 -o piradio piradio.cpp -lX11 -lasound -lm
コンパイル時間は数秒です。エラーやワーニングが出なければ正常終了です。
スペアナ SPAN リスト
9段階のSPAN切替の詳細は以下の通りです。
SPAN | FFT SIZE I+Q | RBW | CIC | Floor Noise |
25 MHz | 1024 x2 | 48.8 kHz | - | -117dBm (typ.) |
10 MHz | 1024 x2 | 48.8 kHz | - | -117dBm (typ.) |
5 MHz | 1024 x2 | 48.8 kHz | - | -117dBm (typ.) |
1.0 MHz | 1024 x2 | 1.523 kHz | 1/32 | -132dBm (typ.) |
0.5 MHz | 1024 x2 | 1.523 kHz | 1/32 | -132dBm (typ.) |
0.2 MHz | 1024 x2 | 1.523 kHz | 1/32 | -132dBm (typ.) |
50 kHz | 512 x2 | 95.3 Hz | 1/1024 | -140dBm (typ.) |
25 kHz | 512 x2 | 95.3 Hz | 1/1024 | -140dBm (typ.) |
10 kHz | 512 x2 | 95.3 Hz | 1/1024 | -140dBm (typ.) |
以下は全てSGから-60dBmを入力した際のスペアナ表示です。
先ずはSPAN=25MHz
下はSPAN=5MHz
サンプリングレートは25MHzと同じ50MHzで表示範囲だけを拡大しています。
下はSPAN=1.0MHz
ここからサンプリングレートは1.56MHzになるのでフロアノイズが下がります。
下はSPAN=0.2MHz
サンプリングレートは1.56MHzで表示範囲だけを拡大しています。
下はSPAN=50kHz
ここからサンプリングレートは48.8kHzになるのでフロアノイズが下がります。
SPAN=1.0MHz以下はCICフィルタのf特を補償するため15.7dBの逆特性でf特補正をしていますが、
その影響で両肩のノイズレベルが10dB程度上がっています。
下はSPAN=10kHz
サンプリングレートは48.8kHzで表示範囲だけを拡大しています。
PiRadio C/N実力値を測定
以下でPiRadioよりも確実にC/Nが高いSG(HP8648C)を使ってPiRadio自身のC/Nを測定して見ます。
PiRadioを使った色々な機器のC/N測定も同様の手順となります。
先ずは測定したい周波数に合わせてから無入力状態でしばらくノイズフロアを測定します。
AVE=20、SPAN=25kHzがおすすめです。DcCAL=ONにします。(下の画像)
信号が安定したらDcCALをOFFにします。
DcCALはゼロIF方式を採用しているPiRadioの宿命で、常に変化するDCオフセットを常時キャンセルし続ける機能です。
これがONのままだとスペアナの中心周波数はベースバンドではDCとなるためDcCALによってキャンセルされてしまうためです。
DaCAL=OFFにしてから、SGから-60dBmをPiRadioに入力します。
ここではPiRadioで-60dBmになるようSG出力を微調整しました。(下の画像)
波形が安定したらSTOPキーを押して画面を固定します。
フロアレベル2.5kHzオフセット、5kHzオフセット、10kHzオフセットを観測すると以下のようになります。
Offset | Noise Level | SG input | Difference | C/N |
2.5 kHz | -128 dBm | -60 dBm | -68 dB | -88 dBc/Hz |
5.0 kHz | -132 dBm | -60 dBm | -72 dB | -92 dbc/Hz |
10.0 kHz | -138dBm | -60 dBm | -78 dB | -98 dBc/Hz |
C/Nの求め方は以下の通りです。
RBW=95.3Hz より 1Hz との比率は 10*log(1/95.3) = -19.79dB
これはほぼ-20dBとみなします。
この-20dBを差分(difference)に加算するとC/N(dBc/Hz)になります。
他の機器のC/Nを測定する場合、上記測定結果よりも大きいC/Nが対象ならPiRadioで測定可能ということになります。
高速ロックアップ時の変化を見る
PiRadioは周波数変更時にシンセサイザのループフィルタを広帯域に切り替えてロックアップタイムを早くしています。
そのため周波数変更時に一瞬C/Nが悪化します。
下の画像はその瞬間を捉えたものです。ループ帯域が5kHz近くまで広がっている様子がわかります。
PiRadioの直交精度を見る
PiRadioはアナログIQ復調器を使っているためIQの直交誤差が問題になります。
IQ直交誤差は90°の位相誤差やIQ振幅バランスなどが影響しますが、トータルで40dB以上(EVMで1%以下)あれば優秀なラインです。
SGからの周波数がオフセットした信号を受信することで大まかな直交精度を知ることができます。
入力信号が大きいほど直交誤差は良くなりますが、入力信号レベル-60dBmでは-45dBcというかなり良い値を出しています。
DCオフセットはソフトウェアによるDcCALのおかげで-50dBcを達成できております。