GNURadioでFMラジオを受信する(ubuntu編)

Radio

Ubuntu18.04LTSへGNUradio3.7をインストールして、テスト動作させるまでの手順です。

前回の記事ではWindows10にGNUradioを入れましたが、今後記事にする予定のワンセグ受信のモジュールは、ubuntuでビルドする必要があるので、その準備対応としてUbuntuへのGNUradioインストール方法を解説します。

今回使用するUSBチューナー

使用するチューナーは、RTL2838が乗ったUSBチューナードングルです。

商品リンクに掲載したチューナーの動作確認は行っています。

同じICチップを使っているUSBチューナーの大半は動作するようです。

KKHMF USB2.0 デジタル DVB-T SDR+ DAB+ FM HDTV TVチューナー 受信機 RTL2832U+ R820T2

GNUradioのバージョンに注意

GNUradioの最新版は3.8ですが、v3.7から多くの変更がありますので、過去のソフト資産を使いたい場合は、バージョンを上げる際には細心の注意が必要です。

  • python2からpython3へ変更
  • GRCファイルの記録様式がXML形式からYAML形式に変更
  • gr-qtguiGUIがQt4からQt5へ変更
  • gr-comedi、gr-fcd、およびgr-wxguiモジュールのサポートが終了
  •  PyQwtベースのユーティリティはコンポジションから削除

特にGRCファイルの記録様式がYAML形式に変わっている部分は要注意で、GRCファイルをGNUradio3.8で読み込んで保存してしまうと、GNUradio3.7で読み込めない形式となってしまします。

今後、gr-isdbtというワンセグデコーダを使って、ワンセグ受信にトライしていきたいと考えておりgr-isdbtの開発環境と合わせる必要がありますので、今回はGNUradio3.7をインストールすることにします。

本記事の制約について

本記事の対象はRTL2832, RTL2838が実装されたUSBチューナー限定です。

アナログデバイセズのADLAM-Pulto等の高機能チューナーは、メーカの専用ライブラリをいれないと動作しないようですので、この要領だけではGNUradioは動作しません。

またwindows10のWSL/WSL2での仮想ubuntu環境での動作は出来ていません。GNUradioのインストールと編集作業は可能ですが、USBデバイスや音声デバイスなどのIOデバイスのアクセスがあると実行時にエラーとなります。

ADLAM-PulutoはWindows10のWSL/WSL2で動作するそうなので、RTL2832/2838はおそらくWindowsのZadigドライバーと競合していると想定されます。

Windows10でお使いの場合は、Windows版のGNUradioを使う方が良さそうです。Windows版のGNUradioではUbuntuでビルドが必要なモジュールがインストールできませんが、解決方法は探っていきたいと思います。

GNUradioの入手とインストール

GNUradioはバージョン間の互換性が乏しいので、必ずバージョンを確認してからインストールします。

apt-cacheで提供されているバージョンを確認します。ubuntu18.04の場合は、バージョン3.7.11が最終リリースでした。

$ sudo apt update

$ apt-cache madison gnuradio
gnuradio | 3.7.11-10 | http://ftp.tsukuba.wide.ad.jp/Linux/ubuntu bionic/universe amd64 Packages

$ apt-cache policy gnuradio
gnuradio:
インストールされているバージョン: (なし)
候補: 3.7.11-10
バージョンテーブル:
*** 3.7.11-10 500
500 http://ftp.tsukuba.wide.ad.jp/Linux/ubuntu bionic/universe amd64 Packages
100 /var/lib/dpkg/status
$ sudo apt install gnuradio

RTL-SDR用のIOドライバーモジュールをインストールします。GNUradioのRTL-SDR用のIOドライバーはgr-osmosdrにまとめられています。

$ apt-cache policy gr-osmosdr 
gr-osmosdr:
  インストールされているバージョン: (なし)
  候補:               0.1.4-14build1
  バージョンテーブル:
 *** 0.1.4-14build1 500
        500 http://ftp.tsukuba.wide.ad.jp/Linux/ubuntu bionic/universe amd64 Packages
        100 /var/lib/dpkg/status
$ sudo apt install gr-osmosdr

一般ユーザーがデバイスにアクセスできるようにパーミッションを設定します。

lsusbコマンドでRTL283xのポートを表示させると次のような結果が表示されます。

$ sudo lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 0bda:2838 Realtek Semiconductor Corp. RTL2838 DVB-T
Bus 001 Device 002: ID 046d:c52b Logitech, Inc. Unifying Receiver
Bus 001 Device 003: ID 04b4:120d Cypress Semiconductor Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

ID 0bda:2838 Realtek Semiconductor Corp. RTL2838 DVB-TがUSBチューナのポートになるので、/lib/udev/rules.d/60-librtlsdr0.rulesの該当する記述の権限設定を、0660→0666に書き換えます。(以下表示は適宜改行しています)

$ sudo nano /lib/udev/rules.d/60-librtlsdr0.rules

# RTL2832U OEM vid/pid, e.g. ezcap EzTV668 (E4000), Newsky TV28T (E4000/R820T) e<br />tc.<br />
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="2838", ENV{ID_SOF<br />
TWARE_RADIO}="1", MODE="0666", GROUP="plugdev"  MODEを0660→0666に変更する

これでGNUradioのインストールは完了です。

Ubuntu版のGNUradio起動方法

GNUradioの起動は、端末ウィンドウのコマンドラインから gnuradio-companionと入力します。単にgnuradioと入力しても起動しないので注意しましょう。

$ gnuradio-companion 
Gtk-Message: 20:00:50.802: Failed to load module "canberra-gtk-module"
<<< Welcome to GNU Radio Companion 3.7.11 >>>

Block paths:
  /usr/share/gnuradio/grc/blocks
  /usr/local/share/gnuradio/grc/blocks

linux; GNU C++ version 7.3.0; Boost_106501; UHD_003.010.003.000-0-unknown

>>> Done

gnuradioが起動すると次のような画面が出て、あとの使い方はWindows版とほぼ同一です。

Failed to load module "canberra-gtk-module"というメッセージが出ますが、イベントサウンドを再生させるモジュールです。インストールしなくともgnuradioは動作しますが、不具合があると困るのでインストールしておきます。

canberra-gtk-module大きなモジュールでインストールに時間がかかりますので、gnuradioの動作後に実施しましょう。

$ sudo apt install canberra-gtk*

FMラジオで動作テストする

インストールが終わったらFMラジオのモジュールをロードしてFM放送が受信できることを確かめます。

GNUradioは、信号処理を得意とするpythonでコーディングされており、GUI周りも同じQTで組まれていますので、使い方はWindows版と差がなく、同じように使えます。

なおGRCファイルはWindows版と同じものを使いましたので適宜ご利用ください。

GNUradio FMtuner grc-file

ビルドが必要なモジュールはUbuntuで使う

UbuntuのベースとなるUnixは、もともとエンジニア用の計算機として発展してきたものですから、モジュールの追加などのビルドが容易であり、システム安定性や管理面での使い勝手に優れています。

ワンセグ受信モジュールなど、ビルド・コンパイルを必要とする場合は、作者から手順が公開されているubuntu版で動かして、その後、Windows版にモジュール移植という手順で検証を進めていきたいと考えています。

gr-isdbtを使ったワンセグ受信はubuntu上なら動作できましたので、その手順などは今後の記事にまとめていきたいと思います。