2020年3月30日月曜日

ラズベリーパイでGNU Radio: その1 Raspberry Pi 4で動作させる


今更ながらUSBドングルでSDR受信を試すことにしました。手元にあったワンセグ受信用ドングルは、アンテナコネクタがMCXで使い勝手が悪いなーと調べていたら、e-bayでSMAコネクタがついたRTL-SDR Blogブランドのものが2000円台で売られているのを見つけ購入してみました。現物はワンセグ用ドングルより大きく、サイズ感が想像と違いました。


Raspberry Pi 4のセットアップ

Linuxで使いたいのでラズパイ4を新たに購入しました。ラズパイ4は消費電力が大きくCPUの冷却が必要とされているので、FLIRCのファンレスタイプのケースを選びました。このケースのアルミ筐体がCPUと熱的に結合され、ケース全体がCPUの放熱板として働くのでファン要らずになるという仕掛けです。アイドル動作中には、ケースが人肌程度に暖まります。注意点としては、ラズパイのヘッダピンがケースに覆われてしまうので使えなくなることでしょうか。このケース、国内では入手しづらいようで、amazon.comで購入しました。



ラズパイ4では、電源コネクタがUSB Type-Cに、ビデオ出力がmicroHDMIにそれぞれ変更されています。ACアダプタ(5.1V 3A以上)、HDMIケーブルは秋月電子で購入できます。ちなみにRTL-SDRドングルを含めた消費電流はアイドル時に約0.6A。SDR使用中に0.9Aを超える程度まで変動します。なお、ラズパイには電源スイッチがありません。なので電源スイッチ付きUSBケーブルがローテクながら便利です。

ラズパイのOSインストールにはこれまでと特段変わりないので割愛します。今回はRaspbian Buster with desktop and recommended softwareを入れてみました。設定でSSHログインとVNC Serverを有効にしておきます。インストール時にはラズパイにHDMIディスプレを接続すると思いますが、画面解像度はスタートメニューから 設定 → Screen Configuration にて1920×1080に変更できます。

ラズパイのヘッドレス運用

ディスプレイやキーボードなどを接続せずに使うことをヘッドレス運用とよぶそうです。WindowsからVNCでリモートログインするには、追加設定が必要でした。
一つ目はVNCのパスワード設定です。まず、ラズパイGUI画面で右上タスクバーのVNCアイコンをクリックしVNC Serverアプリを起動します。アプリ右上の三本線メニューでOptions... → Security → Authenticationを"VNC password"に変更します。
これで、WindowsにVNC Viewerアプリをインストールすればリモートログインできます。ところが、ここでラズパイからHDMIディスプレイを取り外すとCannot currently show the desktopとエラーが出て表示できません。そこで、ラズパイのLXTerminalまたはSSHログインにてraspi-configを実行し、画面解像度を設定します。
$ sudo raspi-config
7 Advanced Options → A5 Resolution → DMT Mode 82 1920x1080 60Hz 16:9 としました。

rtl-sdrをインストール

SDR受信を行うには、Osmocom projectのrtl-sdrライブラリを使います。導入には一癖あるようです。よくわからないこともありWeb記事に沿って作業を行いました。まずは、rtl-sdrに必要なlibusbライブラリとビルドツールをインストールします。
$ sudo apt-get update
$ apt-cache search libusb
 ・・・ インストール可能なパッケージが表示されますが、libusb-1.0-0ではだめなのでlibusb-1.0-0-devを選びます
$ sudo apt-get install libusb-1.0-0-dev
$ sudo apt-get install autoconf
$ sudo apt-get install libtool
次いでrtl-sdrをインストールします
$ git clone git://git.osmocom.org/rtl-sdr.git
$ cd rtl-sdr
$ aclocal
$ autoreconf --force --install
$ ./configure
$ make
$ sudo make install
$ sudo make install-udev-rules
$ sudo ldconfig
ここでrtl-sdrで採用されているRTL28xxチップに対応するテレビ受信用標準ドライバをblacklist登録してカーネルに読み込まれないようにします。
$ sudo nano /etc/modprobe.d/rtl_blacklist.conf
ファイルの内容は次の2行です
blacklist dvb_usb_rtl28xxu
blacklist rtl2832
ラズパイを再起動して、rtl_testコマンドで情報が取得できればOK。
$ rtl_test

rtl_fmコマンドで受信テスト

rtl_sdrライブラリ付属のコマンドラインツールrtl_fmで受信してみました。まずは音声再生のためsoxをインストールします。
$ sudo apt-get install -y alsa-utils sox libsox-fmt-all
そしてFMラジオを受信します。82.5MHzのFMラジオを受信しようとしたら、やや低い周波数を周波数を指定する必要がありました。いちおう音は出るんですが、ノイズ混じりだしひずみっぽいし、さらには金属的な付帯音が聞こえます。RFゲイン問題でも無さそうですし、サンプルレートの変換がうまく行っていないのか、aplayで再生しても同じで、原因はわかりませんでした。
rtl_fm -f 82.184M -M wbfm -s 200k| play -r 32k -t raw -e s -b 16 -c 1 -V1 -
rtl_fm -f 82.184M -M wbfm -s 200k -r 32000-| aplay -r 32 -f S16_LE


GNU Radioのインストール

まずはGNU Radio
$ sudo apt-get install gnuradio

次いでGNU radioからrtl-sdrを使えるようgr-osmosdrをインストール
$ sudo apt-get install gr-osmosdr

動作確認として osmocom_fft コマンドでスペクトラムを表示させてみました。NHK FMラジオが無音になったタイミングで、中心キャリアのほかにステレオパイロット信号とVICS信号がぼんやりと盛り上がって見えます。FFTサンプルレートは任意の値を指定できるようにみえて制約がありました。デフォルトは250kHzで1MHzはOKでしたが、500kHzはNGでした。
$ osmocom_fft -f 82.5M -s 250k


次に本命のGNU Radioを起動します。紹介記事で見かける画面が現れました。
$ gnuradio-companion

ネット上にあるFMラジオ受信のサンプルファイルを実行しようとすると、The xterm executable " is missingなるエラーが出ます。xtermが要るようなのでインストールします。
$ sudo apt-get install xterm
それでもエラーが出ますが、使い方がわからず手も足も出ません。そこで、RFワールドNo.44 GRCで広がるSDRの世界を片手に試すことにしました。ところがいちばん最初の、1kHz信号源をオーディオ出力するところでいきなりつまずいてしまいます。Audio Sinkのプロパティで(サウンド)Device Nameがブランクになっているのが原因のようです。試行錯誤してここにhw:0,1またはplughw:0,1とセットするとラズパイのイヤホンジャックを経由して音が出ることを確認できました。また、オーディオのサンプルレートは32kHz/48kHz/192kHzはOKですが、44.1kHzは使えないようです。


ラズパイを受信サーバとしてWindowsでリモート受信

ラズパイで受信サーバコマンドrtl_tcpを起動します。IPアドレスはラズパイのものに適宜読み替えてください。1234はデフォルトポート番号です。
$ sudo /usr/local/bin/rtl_tcp -a 192.168.0.xx -p 1234
Windows側ではWindows SDR Software Packageをダウンロードして、SDR#を起動します。次の操作で受信できるはずです。
・SourceとしてRTL-SDR(TCP)を選びます
・Configure Source(歯車マーク)をクリックし、受信サーバのIPアドレスをセット
 ※rtl-sdrライブラリのドライバではTCP接続ではDirect samplingモードを選べませんでしたが、RTL-SDR Blogのドライバでは改善されているようです(未確認)
・Start(再生マーク)をクリック

RTL-SDR Blog V3

DS-DT305

DT305では、局発リークとスプリアスが見えます。また、ウチの環境ではSDR#をTCP受信で使用すると、受信停止やアプリの終了のタイミングで高確率でハングアップします。

2020年3月28日土曜日

有料化した2D CAD「DraftSight」の代替は その2

前回の記事でQCADを使い始めていましたが、その後、ロシアNanosoftからnanoCAD(フリー版)がリリースされていることに気づきました。よりAutoCADライクなメニュー構成で、DWG形式をネイティブサポート、しかも動作も軽快。日本語フォントも表示されます。
QCADで作成したDXFファイルで一部読み込みできないものがありましたが、これまでの作図数が数枚なので躊躇なく乗り換えることにしました。


インストールは、ダウンロード画面でメール登録すると、折り返しダウンロードリンク、アクティベーションに必要なシリアルナンバ、パスワードがメールで届くという段取りで進めます。