USB 接続のワンセグチューナーを利用してラジオを受信するという、rtl-sdr なるものがあることを最近知ったのですが、それを Raspberry Pi 5 で実践してみました。今回はその過程を記録しておきます。
rtl-sdr とは?
rtl は「RTL2832u」という Realtek 社製のチューナー IC のことを指します。
sdr は Software Defined Radio、つまりソフトウェア制御のラジオのことを指します。周波数変調、A/D 変換、信号処理などなど、受信に必要な処理を PC 側で行います。
それで、rtl-sdr とは何かというと、「RTL2832u を利用してソフトウェア制御でラジオを受信しよう」ということになります。つまり、RTL2832u が搭載されているチューナーと PC さえあればラジオ受信機に変身させることができるというわけですね。
RTL2832u が搭載されているものとは?
実は Amazon など、そのへんで売っているワンセグチューナーは RTL2832u が搭載されている場合が多いです。いずれも数百円~2000円程度で売っています。
…という情報を得て、筆者が所有しているワンセグチューナーの IC を調べてみました。
型番は「DS-DT305WH」。ZOX という企業から出ているようです。おそらく5年以上前に、当時の値段で300~500円くらいで秋葉原の店で購入したものになります。(ちなみに先日同じ店に行ったら売っていませんでした…ワンセグももはや時代遅れ?)
これを WIndows PC に挿入し、デバイスマネージャでチューナーのデバイス情報を確認します。すると、RTL2832u の文字が!たまたま自宅に転がっていたチューナーですが、rtl-sdr に使えそうです。
Raspberry Pi じゃないと駄目?
そんなことはありません。rtl-sdr
と SDR# が動けば他の Windows PC や Linux PC でも OK です。
radiko で良くない?
ダメです。浪漫がありません(※個人的感想)。実際に電波で受信するから良いのです。また、radiko では数十秒〜2分程度の遅延の問題があります。
手順
まず、今回の導入環境はこんな感じです。
- 受信サーバ:チューナーを挿入して rtl-sdr を動かす。また、TCP で受信データを送出する。
- クライアント:受信サーバに TCP 接続し、音声を再生する。また、周波数の調整や復調モードの設定などをする。
受信サーバとクライアントは同じ Raspberry Pi 上でも良いですし、別々の PC でも OK です。前者の場合はループバックでできますが、後者の場合はファイアウォールでポートを開放(WAN を介する場合はルータ側でもポート開放)が必要です。
実行環境
- 受信サーバ
- Raspberry Pi 5
- OS : Ubuntu 23.10 (Linux kernel ver.6.5.0, 64bit)
- CPU : BCM2835
- RAM : 8GB
- クライアント
- HP ENVY TE02
- OS : Windows 11 Pro (64bit)
- CPU : Intel Core i7-13700
- RAM : 32GB
受信サーバの導入:rtl-sdr のビルド&インストール
本記事では受信サーバは Linux であることが前提です。
まずは rtl-sdr を入手します。配布サイトは下記のリンクにあります。
https://osmocom.org/projects/rtl-sdr/wiki/Rtl-sdr#rtl_sdr
まずはビルドに必要なツールをインストール。
$ sudo apt update
$ sudo apt install git cmake libusb-1.0-0.dev build-essential pkg-config
続いてソースコードを git clone
$ git clone https://gitea.osmocom.org/sdr/rtl-sdr.git
clone したディレクトリに移動し、ビルドします。
$ cd rtl-sdr/
$ mkdir build
$ cd build
$ cmake ../ -DINSTALL_UDEV_RULES=ON
$ make
このとき、非 root ユーザからチューナが使えるようにするため、cmake
にて -DINSTALL_UDEV_RULES=ON
を指定しています。
最後にインストールして完了です。
$ sudo make install
$ sudo ldconfig
受信サーバの起動
RTL2832u を搭載したワンセグチューナーを Raspberry Pi に挿入し、サーバを起動しましょう。
$ rtl_tcp -a [サーバの IP アドレス] -p [ポート(デフォルトは 1024)]
で受信サーバを起動します。さらにポートを開放します。
$ sudo ufw allow [設定したポート番号]
$ sudo ufw reload
クライアント側の準備:SDR# のインストール
rtl-sdr で受信したものを PC 上で聴くために、SDR# をインストールします。SDR# は Windows と Linux に対応しており、arm64 版も用意されていますので、Raspberry Pi 上でも動くかと思います。ですが、今回は普段利用しているデスクトップ PC で聞けるようにしたいという欲求があったので、LAN を介して Raspberry Pi とは別の Windows PC にインストールすることにしました。
SDR# は使用中の PC に挿入されたワンセグチューナーに対しても受信処理ができるようで、おそらく Windows または Linux PC にワンセグチューナーを挿して SDR# を起動すれば、PC 1台だけで受信から音声出力までを実現できるかと思います。
ダウンロードページはこちら:
今回は一番上の “Software Defined Radio Package” を選びました。
ダウンロードされた zip ファイルの中に SDR# の実行ファイルが同梱されています。
これを起動し、左上の横棒3つのボタンを開きます。
「Source」→「RTL-SDR TCP」を選択します。
続いて、設定ボタンを押して接続先を設定します。
ここには先程の受信サーバの IP アドレスと、設定したポート番号を指定します。
これにて設定完了です。左上から2番目の再生ボタンを押して、周波数を合わせて試しに TOKYO FM を聞いてみます。
少しノイズが聞こえますが、かなり高音質です。
受信テスト
アンテナはこんな感じ。配線が剥き出しになってしまっていますが、テレビ用の同軸ケーブルです。これを壁のアンテナ端子に差し込み、もう一方を変換アダプタを介してワンセグチューナーに繋いでいます。
受信地は関東で、クリアに聞こえたのは今のところ関東圏の FM 放送のみです。TOKYO FM、NACK5、FM ヨコハマ、NHK FM に加え、TBS ラジオ、文化放送、ニッポン放送といった AM 波のワイド FM 放送などなど。
一方、AM 波は受信できませんでした。今使用しているチューナーは 25MHz あたりからしか受信できないようで、AM 波は受信可能周波数の範囲外です。
これに関してはより広範囲な周波数に対応した RTL2832u チューナーが Amazon などで販売されていますので、それを買ってみるのもいいかなと思っています。お値段はそのへんのワンセグチューナーと比べるとやや高めですが…
他にも 50MHz 帯の受信も試してみましたが、こちらは一切受信できませんでした。アンテナ線の接触にもかなり左右され、アンテナに工夫の余地がありそうです。