Episode 34 SDRでFMラジオを受信してみた

ブログ

皆さんこんにちはグレキチです。

7月下旬ということで、夏真っ只中ですね。児童たちはすでに夏休みに入っているはずですが、昼間は近所の子供の声など全く聞こえて来ません。最近の児童は夏休みはどのように過ごしているのでしょうか?TVゲームなどが普及し出してから、子供達は外で遊ぶということがめっきり減ってしまったのだとは思いますが、それ以外にもYoutubeなどの動画アプリやTiktokなどをみたりとインドア生活にどっぷりなんですかね!? もしくは、“熱中症になると大変だから、極力外で遊ばないように”とか親から言われている といったこともあり得るのでしょうかね?🤔
そういう時代とは言え、子供が外で元気よく遊ばなくなった(もしくは、治安悪化で遊べ無くなった!?😱)この国の将来が、かなり不安に思えてしまうのは私だけでしょうか?💦

さて今回の内容ですが、無線に関することに焦点を当ててみました。
皆さんは、“ラジオ” と聞いて普通に思い浮かべるのは、自動車やラジカセなどで受信して聴くものというイメージかと思います。しかし今や、インターネットを介して世界中のラジオをパソコンで聴くことができる時代になっているって知ってました? また、インターネットを介さずにパソコンで聴く方法もあって、それが SDR(ソフトウェア無線)と言われているもので、すでにかなりの種類のハードウェアとソフトウェアがネット上に溢れているようでした。私も試してみたいなと思い、安価なハードウェアを入手してソフトウェアによるFMラジオ受信に取り組んでみたので、今回はその詳しい内容ついて紹介してみたいと思います。

SDRについて

まずは SDR について、簡単に説明します。

SDR(Software Defined Radio)は、ソフトウェアによって無線機の機能の大部分を定義して変更できる無線通信システムのことです。従来の無線機がハードウェアの回路で特定の通信方式に固定されている(通常、無線機器は周波数ごとにハードウェアや信号処理のための回路などが作られる)のに対し、SDR は DSP(Digital Signal Processor)や FPGA(Field Programmable Gate Array)といったプログラマブルな半導体やCPUを活用し、ソフトウェアを書き換えるだけで変調方式や周波数帯などを柔軟に変更することができる代物なのです☝️

また、開発視点から考えると、SDRには以下のようなメリット・デメリットがあるようでした。

<メリット>

  • 柔軟な機能変更: ソフトウェアを更新するだけで、新しい通信規格や変調方式に対応できる。これにより、ハードウェアの交換なしに、複数の通信方式を1台の無線機で実現できる。
  • 開発コストと期間の削減: 新しい無線システムを開発する際、ハードウェアを一から設計する必要がなく、ソフトウェア開発に注力できるため、開発コストと期間を大幅に削減できる。
  • 小型・軽量化: 複数の無線機を1台に統合できるため、機器の小型化と軽量化につながる。

<デメリット>

  • 設計の複雑性: ハードウェアとソフトウェアを統合的に設計する必要があり、高度な専門知識が求められることになる。
  • 高速処理の要求: ソフトウェアで複雑な信号処理を行うため、高性能なプロセッサが必要となり、消費電力が増加する傾向がある。
  • リアルタイム性の制約: ソフトウェアの処理速度によっては、リアルタイム性が重要なアプリケーションで遅延が発生する可能性がある。

SDRの概要については、ざっとこんな感じです。

使用デバイス

次に、今回SDR実施のために調達した専用ハードウェアについて紹介します。

とりあえず日本国内で発信されているラジオの周波数帯が一通り受信できる安いもので良いと思ったので、検索するととりあえずよくワードに引っかかったRTL-SDRと呼ばれているものに絞り、その中でも耐久性がありそうなしっかりした品質のものを検討した結果、Adafruit社の SOFTWARE DEFINED RADIO USB(RTL2832U + FC0013)というものを購入してみました。(パッケージには ”Mini Digital TV Stick” と記載されています😆)

Adafruitの公式サイトでは、以下のような説明(機械翻訳)がなされています。

ソフトウェア無線(SDR)に興味を持ったことがあるなら、このUSBスティックは、強力で設定可能な受信機を手軽に楽しむための最適な方法です。高性能なRTL2832UとFC0013チューナーを搭載し、48.25~863.25MHzの信号を受信できます。つまり、Windows、Mac、Linuxを搭載したコンピューターで、FMラジオ、AM信号(ただしAMラジオは除く)、CW(モールス信号)、暗号化されていない無線信号(多くの警察や消防署で使用されているものなど)、POCSAGページャーなど、さまざまな信号を受信できるということです。非常にコンパクトながら高品質なRTL2832+FC0013モジュール(MCX RFコネクタ付き)、基本的な「DVB-T」アンテナ(DVB TV信号を受信するためのもので、米国では使用できませんが、ヨーロッパやDVB-T放送のある国では使用できます)、あまり役に立たないIRリモコン、そしてインストール/アプリケーションプログラム(CD)が付属しています。

あまり役に立たないIRリモコン“って、公式で説明しているのが面白いですね🤣
ちなみに、ちょこちょこ出てくる“RTL”ですが、これは台湾のチップメーカー“Realtek”社を表す略語として使われているようです。

主要諸元を表にまとめると、以下のようになります。

型番P1497G
メーカーAdafruit
デコーダーチップRTL2832U
チューナーチップFC0013
受信可能周波数48.25 〜 863.25 MHz
バンド幅6/7/8 MHz (自動選択)
インターフェースUSB 2.0
アンテナ長さ120.65 mm
ドングルサイズ22.24 x 23.1 x 9.9 mm
質量(リモコン除く)28.2 g

なお上では特に触れていませんでしたが、このデバイスは受信専用です。発信機能があると電波法に引っかかってきて面倒なので、あえて受信機能のみのものを選定しました。

また、今回私はLinuxで使えるように環境構築を試みましたが、ハードウェアドライバーなどは特に何もインストールせずに、USBドングルをパソコンに差し込んだだけでこのモジュールはLinux上で認識されました。Linux上で認識されたかどうかは、ターミナル上で lsusb を実行して以下のような値が返ってくるかで確認します。

# usb確認コマンド
lsusb

# 返り値に以下のデバイス名が含まれているか確認
Realtek Semiconductor Corp. RTL2838 DVB-T

ハードウェアの準備はこれで整いました😀

ソフトウェアについて

次に、使用したソフトウェアについて説明します。
ソフトウェアについてもいくつか種類がありますが、今回私はSDR界隈では有名なものの中から、Gqrx というものを選択してみました。以降その説明になります。

Gqrx概要

公式サイトの説明によると、
Gqrxは、GNU RadioとQt GUIツールキットを用いて実装されたオープンソースのソフトウェア無線です。現在、LinuxおよびMac上で動作し、Funcube Dongle、RTL-SDR、Airspy、HackRF、BladeRF、RFSpace、USRP、SoapySDRなど、gr-osmosdr がサポートするハードウェアに対応しています。 Gqrxは、オーディオ出力付きのAM/FM/SSB受信機として、あるいはFFT専用機器として動作させることができます。また、ネットワークソケットを介して外部アプリケーションと連携するためのさまざまなフックも用意されています。

また、Gqrxには次のような機能があるようでした。

  • コンピュータに接続されているデバイスを検出する
  • 対応デバイスからのI/Qデータを処理する
  • 周波数、ゲインの変更、および各種補正(周波数、I/Qバランス)の適用
  • AM、SSB、CW、FM-N、FM-W(モノラルおよびステレオ)復調機能
  • NOAA APT専用のFMモード
  • 可変バンドパスフィルタ
  • AGC、スケルチ、ノイズブランカー
  • FFTプロットとウォーターフォール表示
  • WAVファイルへの音声録音および再生
  • ベースバンド生データの録音および再生
  • 全ての信号処理を無効にするスペクトラムアナライザモード
  • TCP接続による基本的なリモートコントロール
  • UDP経由のストリーミング音声出力

とまあ、多岐にわたっており、全てを使いこなせる気がしません(特に後半の方)😅

インストール方法

Linuxへのインストールは、パッケージマネージャーを使って以下のように簡単に行えます。(Debian/Ubuntu系の場合)

sudo apt install gqrx-sdr

※Macの場合はbrewコマンドに対応しているようでした。

インストール出来たかどうか簡単に確認するには、ターミナルで gqrx の “-h” オプションを実行して確認します。

gqrx -h

# 返り値の例
Usage: gqrx [options]
Gqrx software defined radio receiver 2.17.6

Options:
-h, --help           Displays help on commandline options.
--help-all           Displays help, including generic Qt options.
-s, --style <style>  Use the given style (fusion, windows)
-l, --list           List existing configurations
-c, --conf <file>    Start with this config file
-e, --edit           Edit the config file before using it
-r, --reset          Reset configuration file

という感じで、ソフトのバージョン情報などが返ってきたら、無事にインストール出来ています。

FMラジオ受信作業の実施

実行環境が整ったので、それでは実際にFMラジオを受信してみましょう。RTL-USBドングルはすでにパソコンに接続されている状態から始めます。

Gqrxの実行

まずは、GqrxのGUIを起動するために、ターミナルで gqrx とタイプして実行します。
ソフトが起動すると下図のように、“Configure I/O devices” (入出力デバイスの設定)のポップアップが起動します。

このポップアップはそのタイトル通り、使用する入出力デバイス(入力するSDRハードウェアおよびオーディオ出力)の設定画面になります。

ここで重要なのは入力の項目ですが、パソコンに接続したSDRハードウェアが問題なく認識されていれば、上図の通り、”Device” のところには自動的に検出されたデバイス(この例の場合は、Realtek RTL2838…)が設定されます。もし“Other…” という表示になっていた場合は、デバイスがうまく検出されていない状態なので、左下の “Device scan” ボタンを押して、再検出を行います。
無事にデバイスが設定されたら、その他の設定は取り敢えずデフォルトのままで問題ないので、下の “OK” ボタンを押して次に進みます。

入出力デバイスの設定が完了すると、ポップアップが消えて、以下のような画面が立ち上がります。

GUIを立ち上げただけでは、まだ受信は始まっていない状態です。
左上の ▶️(再生)ボタン(下図の黄色枠内)を押すと受信が開始されます。ちなみに、もう一度 ▶️ ボタンを押すと受信が停止します。

取り敢えず ▶️ ボタンを押してみると、下図のように画面の中央部分にRFスペクトルが上から下に流れるように視覚的に表示されます。

画面の上方に表示されている数字が受信(ターゲット)周波数です。上図の場合だと、ターゲット周波数を450MHzに設定していることになります。
また、その数字のすぐ下に、グラフで示した赤い縦線がありますが、この赤線は受信周波数を視覚的に表していて、RFスペクトルとの左右位置関係を確認するのに大変便利です。

スペクトルが青色の場合、何も信号を受信していない状態を表しています。何か信号をキャッチすると該当周波数グラフの数値の下に黄色やオレンジへの色の変化が現れるので、どの周波数で電波をキャッチしているのかが見た目に非常にわかりやすいです。

ざっくり起動状態を確認したところで、他の設定項目の説明に移ります。

受信機オプション設定

ここでは、ウィンドウ右側にある “Receiver Options” の設定について説明します。
ここで押さえておきたい設定項目は、下図 Filter shapeModeAGC の3つです。

まず、Filter shape ですが、これにはプルダウンで SoftNormalSharp の3つから選択できるようになっています。例えば、Sharp にすると他周波数からの干渉に対する耐性が高くなる反面、計算処理に時間が掛かってしまう傾向があるようです。ターゲット周波数をより集中して受信したい場合にはSharp側に設定するという感じになるのかと思います。今回はそこまでの厳密さを要求しませんので、取り敢えず Normal を選択します。

次に Mode です。この項目は受信信号の変調方式を指定するもののようで、プルダウンを開いてみると12個くらい選択項目があります。今回はFMラジオの受信なので、その場合は WFM(mono) もしくは WFM(stereo) のいずれかを選択すれば良いです。WFM の意味は、“広帯域周波数変調”の英語の略語です。その他10項目の説明はここでは割愛します。ご興味のある方は、公式ページのドキュメントを参照してみて下さい。

そして最後に AGC です。この単語は無線を取り扱う上での専門用語で、自動利得制御(Automatic Gain Control の略語)のことです。もう少し噛み砕いて説明すると、受信電波の強さが変動しても受信出力が一定になるようにするものです。簡単にいうと、出力を安定させる機能です。この項目はプルダウンで5つの中から選択しますが、今回私は適応速度を Fast に設定しました。受信状態が特に変な感じにならなければ、取り敢えず Fast を選択しておけば良いと思います。

以上、3項目の設定内容でした。

オーディオ設定

オーディオ設定は、出力装置(スピーカーやイヤホンなど)の設定になります。ここで気にする項目は、取り敢えず音量調節の Gain のみです。(下図右下)


パソコン側のスピーカー音量設定と相関をとって設定することになるかと思いますが、十分に聞こえるようにスライドバーで調節します。

以上で、入出力に関する設定は完了です。
続いてメインの設定項目となる、受信周波数の設定方法に移ります。

受信周波数の設定

周波数数値の変更は、左上の数字の部分にカーソルを合わせて、数字の上側をクリックするかキーの⬆️ボタンを押すと数字が大きくなり、逆に数字の下側をクリックするかキーの⬇️ボタンを押すと数字が小さくなる仕組みになっています。

上の例だと、100の位の数字“4”が白くハイライトされており、この状態で、数字を上下に分割した真ん中から比較的に上の部分にカーソルを合わせているので、この状態でマウスを左クリックすると、数字が 5、6、7 と段々大きくなっていきます。
もしくはこの状態で、直接数字をキーボードで打ち込むこともできます。
どの入力方法が一番良いかは、自分でいろいろ試してみるしかないですね😀

受信結果

実際にFMラジオを受信した結果を以下に示します。

78.4MHz帯のラジオ電波を受信した結果ですが、最初の方で説明した通り、信号が拾えているとスペクトルの色が黄色になっていることがわかると思います。こうやって、視覚的に見えると周波数の設定もし易いですよね。ご覧のように、78.4MHzよりも若干低い78.389MHzが周波数の中心に位置するように調整できましたから😀
なお、他の周波数帯に対しても、同じように問題なくラジオ受信できました。

なお、今回使ったRTL-SDRデバイスは、同梱されていたアンテナの長さが120mm程度しかありませんでしたので、日本でのFMラジオ受信に対してはアンテナが短すぎるため、手動で上の方へ持ち上げて受信感度を調節した経緯があります。安定した受信を望むのであれば、アンテナの変更が必須だと思いました。本当なら、計算上は1m(=1000mm)くらいは欲しいところなんですよね〜🤔

まとめ

今回は、SDRを使ったFMラジオ受信の内容でした。

SDRを初めて使ってみた感想ですが、端的に言うと、なかなか面白いな! です。今回はFMラジオの受信でしたが、ツールの使い方を学ぶと同時に、久しぶりに無線技術に関する内容も改めて勉強する機会にもなったのが良い副次効果でした。
今回構築した環境だと他にもいろいろなことが出来そうなので、今後も時間を見つけては色々と試してみたいと思います。
最後の “受信結果” のところでも書いた通り、取り敢えずアンテナを変更しないといけないことがわかったので、まずはそこから取り組んでみようと思いました。

ということで、今回は以上です。最後まで読んで頂いてありがとうございました。

それではまた、次回まで🖐️