GNU RadioでFMラジオ受信機を作ってみる

「Raspberry PiとUSBチューナー(RTL2832U+R820T)でFMラジオを受信してみる」では、市販のUSBチューナーを使ってFMラジオを受信してみた。 ここでは、SDR(Software-defined Radio)ツールであるGNU Radioを使ってFMラジオ受信機を作ってみる。

環境

Windows 10 Pro 64 bit版、Intel® Core™ i5-4200U Processor (3M Cache, up to 2.60 GHz)

>systeminfo
OS 名:                  Microsoft Windows 10 Pro
OS バージョン:          10.0.10586 N/A ビルド 10586
OS ビルドの種類:        Multiprocessor Free
システムの種類:         x64-based PC
プロセッサ:             1 プロセッサインストール済みです。
                        [01]: Intel64 Family 6 Model 69 Stepping 1 GenuineIntel ~1596 Mhz

GNU Radioのインストール

GNU Radioは、用意された変調・復調や周波数フィルタを行うブロックを組み合わせることで、柔軟にデジタル信号処理を行うことができるソフトウェアである。 ここでは、Windows上にGNU Radioをインストールし、RTL2832U+R820Tで受信した信号をTCP経由で受け取り処理することを考える。

まず、64 bit Windows版のダウンロードページから「Windows Installer」をダウンロードする。 ここでは利用するCore i5-4200UプロセッサがHaswellアーキテクチャであることから、「64-bit HASWELL+ (AVX2) CPU」版をダウンロードした。

インストーラを起動し既定の設定でインストールを行うと、スタートメニューの「すべてのアプリ」に「GNU Radio」フォルダが作成される。 この中の「GNURadio Companion」を実行すると、次のスクリーンショットのようなGUIアプリケーションが起動する。

f:id:inaz2:20160806003215p:plain

FMラジオ受信機を作成する

右のメニューからブロックを選択し、FMラジオ受信機を作成すると次のようになる。

f:id:inaz2:20160806003228p:plain

GNU Radioで作成したダイアグラムは拡張子grcのXMLファイルとして保存できる。 上のgrcファイルを次に示す。

この受信機の構成を簡単に説明すると次のようになる。

  1. RTL-SDR Source: TCP経由でI/Q信号を受信する(受信周波数80.0 MHz、サンプリングレート1200000 samples/sec、RF Gain 40 db)
  2. Low Pass Filter: ダウンサンプリングの前にナイキスト周波数を越える高周波をカットする(カットオフ周波数100 KHz、トランジション幅10 KHz)
  3. Rational Resampler: ダウンサンプリングを行う(サンプリングレート200 KHz)
  4. WBFM Receive: Wideband FMの復調を行い、48 KHzのPCM音声に変換(直交レート192 KHz、音声デシメーション1/4)
  5. FM Deemphasis: デエンファシスを行う(時定数50μs)
  6. Multiply Const: 音量調整を行う(5倍)
  7. Audio Sink: 音声を出力する(サンプリングレート48 KHz)

なお、スクリーンショットの左側にあるいくつかのパラメータは変数として定義している。 また、各ブロックについている端点の色はデータ型を表し、水色は複素数、オレンジ色は浮動小数点数を意味する。

Run→Execute(F6キー)を選択すると、次のスクリーンショットのようなウィンドウが表示され、FMラジオ(TOKYO FM 80.0 MHz)の音声が流れることが確認できる。

f:id:inaz2:20160806003245p:plain

関連リンク