レシーバーソフト大幅改良

PiRadio受信用のソフトウェアが度重なる改版で現在Ver.2.40になっています。
受信機としての実使用のテストを繰り返し、改良を重ね大変使いやすくなったと思います。

V2.00以降の改善点は以下に挙げるとおりです。

・GUIを大幅に変更し、マウスだけでほぼ全ての操作が可能
・スペアナにより瞬時に信号を補足できる高速スキャンが可能
・FM/AMに受信レベル(dBm)で設定できるスケルチを追加
・AMにはソフトウェアAGC機能を追加
・SSB復調機能追加、USBやLSB、CWを受信可能
・SSB復調時に微弱な信号を聞きやすくするIF GAIN機能追加
・FIRフィルタのBW=2kHz〜48kHzを1kHzステップで可変可能
・IIRフィルタのBW=1kHz〜48kHzを1kHzステップで可変可能
・スペアナの信号強度をアンテナ端での電力dBmで表示
・オシロもアンテナ端での入力電圧を表示
・f特補正テーブルを追加、校正すればある程度の精度の測定値が得られます
・波形データをCSVファイルにセーブする機能を追加
・設定を3種類記憶できるメモリ機能追加



PiRadio Receiver V2.40 の画面です。



マウスによるクリックで項目を選び、ホイールで数値変更やON/OFFなど設定します。

システム構成

システム構成方法は従来通り非常にシンプルです。
ラズベリーパイ3にPiRadioボードをGPIOソケットでドッキングさせます。 HDMIでモニターに接続、アンテナをSMA(RF入力側)に接続するだけです。
別にBluetoothまたはUSBキーボード、マウスなどが必要になりますが、 ロータリーエンコーダは必須ではありません。マウスホイールで代用可能です。

動作確認済みのロータリーエンコーダ:COPAL RES20D50-201-1
Raspberry Pi 公式タッチスクリーンは動作確認済みです。





上の写真の構成で受信機となります。音声と画面はHDMI、電源はUSB(1.5A以上)、 マウスとキーボードはUSBドングルを使用しています。 アンテナは各自で用意して下さい。アンテナは同軸ケーブルを使って本体から数メートル以上離しての使用をお勧めします。

コンパイル方法

レシーバソフトウェアはソースコードで配布されるためそれぞれの環境でコンパイルが必要です。
コンパイルする前にALSAの開発環境を以下のようにラズベリーパイのLXTerminal上でインストールする必要があります。

$ sudo apt-get install libasound2 libasound2-dev

XWindowのXlib.hなども必要です。インストール方法は以下の通りです。

$ sudo aptitude install xorg-dev

レシーバソフトウェアはこちらから最新版をダウンロードしてください。

PiRadio ディレクトリを作り、ダウンロードしたソースファイルをその下に置きます。

ソースコードのコンパイル方法

$ cd PiRadio
$ g++ -I/usr/include/X11 -L/usr/X11 -o piradio piradio.cpp -lX11 -lasound -lm



コンパイル時間は数秒です。エラーやワーニングが出なければ正常終了です。

起動方法

ラズベリーパイのLXTerminalを起動し、PiRadioディレクトリに移動。
sudo ./piradio でレシーバソフトウェアが起動します。
ラズベリーパイのGPIOにアクセスするため管理者権限のsudoが必要になります。



ここで「f特補正テーブル」が存在する場合は上のように「Load fresp.txt OK!」が出ます。
ない場合は「Not exist fresp.txt」と出ているはずです。
ない場合は強制的に補正ゼロとして値を計算しますが、 測定値の誤差が数dB発生するため以下からダウンロードして「PiRadio」フォルダに入れておいた方が良いでしょう。

f特補正テーブルはこちらから基板Revと一致するものをダウンロードしてください。

起動すると以下のようなスペアナ画面になります。



最初にFM放送を受信してみる

最も簡単に探せるFM放送を受信してみます。
80.0MHzの東京FMを設定する場合、以下の3通りの方法があります。

・キーボードから周波数を「80」リターンと入力する。
・Center周波数の動かしたい桁を左クリックし、ホイールで変更する。
・スペアナ表示範囲に80.0MHzがある場合、そこを左クリックする。

スペアナの中心に東京FMのスペクトルが見えます。



画面左下のFIRとIIRフィルタの帯域がこのままでは狭すぎるため、
項目を左クリックしホイールで数値をそれぞれ48kHzに変更します。
この状態から音声を復調するには以下の方法があります。

・[スペース]キーを押してDEMODモードにする。
・上の[DEMOD]スイッチをクリックしてDEMODモードにする。
・マウスの右クリックでDEMODモードにする。

画面はオシロスコープになり、HDMIまたはラズベリーパイのヘッドホンジャックから復調音声が出力されます。
ただし帯域48kHzはFM放送の復調には不足しているため音声は歪んでいます。



このように上の3種類の方法でスペアナ、復調をスムーズに切り替えできます。

アマチュア無線を高速スキャンする

次に48kHz以下の帯域でもきれいに聞こえるアマチュア無線を受信してみます。
アマチュア無線は様々な周波数に神出鬼没に現れるためスキャンで探すのが有効です。 また信号が弱くなったり断続的に入感するため無信号時の雑音をミュートするスケルチ機能を使用します。

アマチュア無線は信号が微弱な場合が多い事と、PiRadioやラズベリーパイが出すノイズを避けるためにも、 接続するアンテナは屋外に立てたGPやディスコーンなどを使いPiRadioから離れた位置にアンテナを設置することをお勧めします。

FIRとIIRの帯域もそれぞれアマチュア無線に適した16kHzに設定します。
キーボードから145[リターン]と入力すると145.000MHzのアマチュアバンドに同調されます。

ここでスケルチ(SQL)の設定をします。設定値以上の強度の電波だけが受信されます。 ここではノイズが少なく明瞭に受信できるレベルの-100dBmとしています。SQLを左クリックしてホイールで数値を-100にします。

横軸の赤い線がSQLレベルを表しています。信号強度の測定のためのカーソルにもなります。



スキャンモードは「HOP」と「STAY」がありますが、通常は「HOP」にします。 スキャンモードを設定すると直ちにスキャン動作が開始されます。
アベレージング回数はスペクトラムの変化の速度を決めるため、スキャンの動作の反応速度に影響します。 10〜20程度が使いやすい範囲です。

スペアナのスケルチラインを超えた信号が直ちに受信される様子が確認できると思います。
スキャンモード「HOP」の時の動作は 

信号補足 → 周波数変更 → 復調開始 → 信号レベル低下 → 元の周波数でスキャン再開

となりますが、スキャンモードが「STAY」の場合は

信号補足 → 周波数変更 → 復調開始 → 信号レベル低下 → 受信継続(元の周波数に戻らない)

またFMはエンファシス(Emph)をONにすると音声のf特が広域減衰されるため微弱時に聞きやすくなります。

エアーバンドを高速スキャンする

次に48kHz以下の帯域でもきれいに聞こえる航空無線を受信してみます。
航空無線の通信も広い範囲の周波数帯に突如として現れるためスキャンで探すのが有効です。 また信号が弱くなったり断続的に入感するため無信号時の雑音をミュートするスケルチ機能を使用します。

航空無線も信号が微弱な場合が多い事と、PiRadioやラズベリーパイが出すノイズを避けるためにも、 接続するアンテナは屋外に立てたGPやディスコーンなどを使いPiRadioから離れた位置にアンテナを設置することをお勧めします。

航空無線はAMです。MODE設定はAMにします。
FIRとIIRの帯域もそれぞれ航空無線に適した16kHzに設定します。
キーボードから124[リターン]と入力すると124.000MHzのエアーバンドに同調されます。

スケルチ(SQL)の設定はノイズが少なく明瞭に受信できるレベルの-105dBmとしています。 SQLを左クリックしてホイールで数値を-105にします。



スキャンモードは「HOP」と「STAY」がありますが、通常は「HOP」にします。 スキャンモードを設定すると直ちにスキャン動作が開始されます。
アベレージング回数はスペクトラムの変化の速度を決めるため、スキャンの動作の反応速度に影響します。 10〜20程度が使いやすい範囲です。

スペアナのスケルチラインを超えた信号が直ちに受信される様子が確認できると思います。
スキャンモード「HOP」の時の動作は 

信号補足 → 周波数変更 → 復調開始 → 信号レベル低下 → 元の周波数でスキャン再開

となりますが、スキャンモードが「STAY」の場合は

信号補足 → 周波数変更 → 復調開始 → 信号レベル低下 → 受信継続(元の周波数に戻らない)

となります。

AMは信号強度が変動すると復調出力(音声)も変動するためそのままでは不安定な信号が聞き取りにくくなります。 そこでV2.00からはソフトウェアによる自動利得調整(AGC)が働くようになっています。
AGCは-80dBmレベルの信号強度と同じになるように常にIF利得を可変しフィードバック制御されています。 つまり-100dBmの信号を受信している場合はIFゲインを20dB上げています。

SSBやCWを受信する

SSB復調を追加したのでUSB/LSBやCWも受信できるようになりました。
144MHz帯などれは結構頻繁にSSBやCWが聞こえてきます。

SSBやCWも信号が微弱な場合が多い事と、PiRadioやラズベリーパイが出すノイズを避けるためにも、 接続するアンテナは屋外に立てたGPやディスコーンなどを使いPiRadioから離れた位置にアンテナを設置することをお勧めします。

MODE設定はUSBまたはLSBにします。144MHz帯ではUSBが使われます。
FIRとIIRの帯域の設定はSSBモードでは重要です。信号を受信しながら以下の値を参考に設定してください。

SSBの場合 FIR=48kHz IIR=3〜6kHz
CWの場合  FIR=2〜48kHz IIR=1〜2kHz

USBの場合はIchにHilbert LPF、QchにFIR LPFを
LSBの場合はIchにFIR LPF、QchにHilbert LPFを使用しています。
そのためFIRの帯域を絞るとリプルなどの影響でI/Qレベル差が生じてサイドバンド抑圧特性が悪化します。 SSB受信時はFIR BW=48kHz固定で使用した方が良い結果が得られます。帯域制限はIIRのみで行って下さい。

下の画像は無信号時のフロアノイズをスペアナSpan=25〜50kHzで観測した際のものです。 FIR、IIRフィルタ設定を変化させたIF帯域の様子を示しています。 最大限に絞るとBW=1kHzという狭帯域が実現できます。




SSBやCWは搬送波(キャリア)がないためスケルチが使えません。SQL設定を最低の-130dBmにします。 SSB復調では現状AGC機能がありません。時定数設定型のAGCを追加する予定はあります。

SSBやCWの信号をスペアナで探すコツは、信号レベルの変動に着目する事です。 AMやFMはキャリアがあるためレベルが一定ですが、SSBなどは大きく変動しています。 アベレージング回数を10回以下にしておくと変動を見やすくなります。

スペアナのスパンを変更する

スペアナ画面はスパン(横軸:周波数表示範囲)を
25MHz、10MHz、5MHz、1MHz、0.5MHz、0.2MHz、50kHz、25kHz、10kHz
の9段階に切り替えられます。

スペアナモード時にSpanをクリックしホイールで切り替えできます。


Narrow Span=50kHz〜10kHz
最もノイズフロアが下がります。-140dBm/95.3Hzです。


Mid Span=1.0MHz〜0.2MHz
無線通信のスペクトラムが観測しやすいため最も頻繁に使われます。
ノイズフロアは-132dBm/1.523kHzです。


Wide Span=25MHz〜5MHz
最も広帯域な観測ができますが、ノイズフロアは高めになり-117dBm/48.8kHzです。

信号レベルを測定する

PiRadio ReceiverではANT入力端の信号強度の絶対値を表示できるようになっています。
そのためにf特を補正するための補正テーブルファイル「fresp.txt」を使用しています。 このテーブルはあるPiRadioボードで測定した代表値で作成されているため、 他のボードでは数dBの誤差を生じますが、f特の傾向はどのボードも似ているため利用する価値はあります。

基準信号源(SGなど)があれば各自で補正テーブルを作成可能です。
値を保証した「計測器」ではないため測定値はあくまで参考程度とお考えください。



上の測定環境で-90dBmをPiRadioに入力した画像が下です。
-90dBmは電圧で表すと0.02mVp-pときりの良い値なるためオシロ波形で観測するのにも好都合です。 適度に微弱であるため広帯域スパン25MHzは厳しいため先ずはスパン1.0MHzとしています。



このボードは校正に使った物であるため、正確に測定できています。
以下はスパン25kHzの場合です。



スパン25kHzでも、正確に測定できています。
アナログIQ復調ICの直交誤差がこのレベルでは-40dB程度であることがわかります。 直交誤差は入力信号が弱いほど悪化する傾向にあります。
以下はオシロスコープの画面です。



さすがに-90dBmではノイズが乗っていますが、0.02mVp-pが測れています。

現状のFPGAではCICフィルタによるのビット増加の上位ビットを切り捨てて10bitを維持しているため スパンによって入力可能範囲が異なります。

スパンと入力範囲の関係を以下にまとめておきます。 MIN値はノイズフロアとしています。
ATT 0dB ATT 12dB
SPAN MIN MAX MIN MAX
25.0MHz -117dBm-45dBm -117dBm-45dBm
10.0MHz -117dBm-45dBm -117dBm-45dBm
5.0MHz -117dBm-45dBm -117dBm-45dBm
1.0MHz -132dBm-52dBm -123dBm-45dBm
0.5MHz -132dBm-52dBm -123dBm-45dBm
0.2MHz -132dBm-52dBm -123dBm-45dBm
50kHz -140dBm-60dBm -135dBm-45dBm
25kHz -140dBm-60dBm -135dBm-45dBm
10kHz -140dBm-60dBm -135dBm-45dBm

波形をファイルの保存

観測した波形は簡単にCSVファイルに保存できます。 波形はスペアナ、オシロどちらでも保存可能で、表示されている範囲だけになります。

波形を「STOP」ボタンで止めて「COPY」を押すだけです。



保存されるファイル名は「copy.csv」です。
EXCELですぐに読み込めてグラフ化できます。以下はその一例です。



「REC」を押すとCH3のストリームデータを保存します。 これは止めるまでずっとデータを保存し続けます。保存できるデータの種類は以下です。

CH3 AF 復調後の音声データ 48.8ksps
CH3 POW IF振幅電圧 √(I^2+Q^2) 

POWは広帯域電磁波強度の測定などに利用します。オシロ波形データ1掃引分の電圧を平均した値がここの1ポイントになります。 つまりBW=48.8kHzでは1/512、BW=1.56MHz以上では1/1024の掃引速度になります。
AFは処理時間が不足するため音声が途切れます。現時点では使用をお勧めできません。 解決手段が見つかったら後日、録音、再生機能として利用する予定です。

設定メモリ機能

設定が複雑になってきたため、設定を保存できるようにしました。
最大3つまでボタンを押すだけで設定を呼び出すことができます。

保存したい設定の状態で「MEMIN」を押します。 「MEMIN」が赤に変わったらメモリの書き込み状態です。ここで保存したい「 MEM」ナンバーを押すことで、 設定が保存されます。



保存された設定を読み出す際は、保存したナンバーの「MEM」ボタンを押すだけです。

その他の機能

その他、キーに割り当てられている機能一覧です。

Key 名称 機能   
スペースSpeana/Demod 選局/復調切替
P PN スペクトラム拡散擬似ノイズのON/OFF
R REC ストリーム波形の保存 ON/OFF
W Window 窓関数切替 Square/Hann/Blackman
TAB Speana/Oscilloオシロ・スペアナ切替

免責事項

このソフトウェアはトランジスタ技術2017年1月号の特集記事「電波解読マシン・Piラジオの製作」 のために作成した学習用のソフトウェアです。そのため無償で自由に改造、配布はできますが、測定器としての精度、 受信機としての性能を保証する物ではありません。