GNU Radioで遊ぶ超高速ディジタル無線スタータキット
“USRP B205mini-i”

~自作のスペアナ/ネットアナからIoTエッジ,5G通信まで~

[著] 別府 伸耕 (リニア・テック) [企画]ZEPエンジニアリング

“SDR”(Software Defined Radio)を使ってみよう!

“SDR”でFM放送を受信することを目指す

“SDR”(Software Defined Radio)は,高周波アナログ回路技術と高速ディジタル信号処理技術を組み合わせて生まれた,電気・電子工学の最高峰ともいうべきテーマです.SDRの応用先はいわゆる“5G”に対応した広帯域無線機(通信機)から高性能なオリジナル測定器,センシング・フロント・エンド,IoTエッジに至るまで多岐に渡ります.

本記事では,写真1に示す“USRP B205mini-i”を使ってSDRを手軽に体験する方法を紹介します.

写真1 “USRP B205mini-i”を使えば手軽にSDRの実験ができる

ここから先のおおまかな流れを図1に示します.そもそも“SDR”とは何なのかという話から始めて,実験で使用する“USRP B205mini-i”の構造や機能を簡単に紹介します.続いて,パソコン側の信号処理ソフトウェアである“GNU Radio”のインストール方法や使い方を説明します.最後に,実際にGNU Radio上でFMラジオを構成してFM放送を聞く実験をします.

図1 本記事の流れ.最終的にSDRでFM放送を受信することを目指す

“SDR”は最先端の無線機

「無線機」あるいは「通信機」と呼ばれる電子回路には,その時代の最先端の技術が盛り込まれています.過去に「真空管」や「トランジスタ」といった電子回路の主役とも言えるデバイスが開発された背景には,「性能の良い通信機を作る」という明確なモチベーションがありました.現在の我々の生活も「スマートフォン」や「テレビ」,「無線LAN」,「Bluetoothイヤホン」など数多くの無線機器によって支えられています.

「無線機」を作るためには,高性能かつ高価な電子部品が不可欠でした.これまでに性能とコストのトレード・オフの結果として,様々な回路方式が提案されてきました.ところが最近は電子部品の高性能化および低価格化の結果として,無線機の回路構成が1つの形に収束しつつあります.その収束点こそが,これから紹介する“SDR”です.

“SDR”はアナログとディジタルを組み合わせた電子回路の最高峰

“Software Defined Radio”という言葉を直訳すると,「ソフトウェアによって定義された無線機」となります.「ソフトウェア」という言葉が入っていることから,コンピュータやディジタル回路の要素が含まれていることがわかります.これは,従来の無線機がアナログ回路の塊だったこととは対照的です.

また,ここでは“Radio”という単語を「無線機」と訳していますが,SDRは従来の「ラジオ」というよりも「高性能な測定器」といったイメージに近い存在です.SDRは高周波向けの「測定器」あるいは「計測器」とほとんど同じ回路構造をもっており,高周波アナログ回路の要素が多く含まれています.

以上のことから,“SDR”は「高周波アナログ回路」と「高速ディジタル回路」を融合して作られた技術の結晶であり,まさに現代の電子回路の最高峰であると言えます.

“USRP B205mini-i”は70 MHzから6 GHzまで対応

我々の生活は,様々な無線通信によって支えられています.通信の目的や使用する機器の種類に応じて,対応する電波の周波数が図2のように定められています.

1 MHz前後の周波数を使用する「AMラジオ」や,100 MHz付近を使用する「FMラジオ」は日常生活でも馴染み深いかと思います.また,テレビの「地上波ディジタル放送」はおよそ470 MHzから710 MHzまでの周波数が利用されています.2.4 GHzや5 GHzといった周波数を利用する「無線LAN」は,重要な通信インフラの一部です.

今回の実験で使用する“USRP B205mini-i”のRFフロント・エンドは,70 MHzから6 GHzまでの周波数に対応しています.これは非常に広い周波数範囲であり,復調のための信号処理さえ実装すれば様々な用途に応用できます.

図2 われわれの身の回りにある通信機器が利用している電波の周波数

“5G”にも対応できる

最近,「第5世代移動通信システム」(5th Generation Mobile Communication System),いわゆる“5G”の話題をよく耳にします.これは携帯電話などを含む移動体通信の新しい規格であり,従来の“4G”よりも一度に大量のデータをやりとりできることが期待されています(通信の帯域幅が広い).

日本の“5G”で使われる周波数には,大きく分けて6 GHz以下の“Sub 6”(サブ・シックス)と呼ばれる周波数帯と「28 GHz帯」の2種類があります.このうち,今回の実験で使用する“USRP B205mini-i”でも対応可能な“Sub 6”の周波数割り当てを図3に示します.

図3 “USRP B205mini-i”で対応可能な“5G”のうちの“Sub 6”の周波数割り当て

図3には,従来から使われている“4G”の「3.4 GHz帯」の周波数割り当ても記載しています.“4G”の帯域幅は基本的に“40 MHz”となっているのに対して,“5G”の「3.7 GHz帯」および「4.5 GHz帯」の帯域幅は“100 MHz”であり,従来の2倍程度の速度で通信できることがわかります(変調方式などの条件を一致させた場合).

また,4.6 GHzから4.8 GHzの間は,企業や自治体が独自の無線ネットワークを構築できる「ローカル5G」という仕組みに割り当てられています.大手キャリアのような通信事業者だけではなく,一般の企業が独自のネットワークで“5G”ならではの広帯域通信を享受できるということで注目が集まっています.今回の実験で使う“USRP B205mini-i”の帯域幅は56 MHz(上り + 下り)なので“5G”で利用可能な帯域幅をフル活用することは難しいですが,「ローカル5G」の試験機としては十分に実用的な性能を発揮することが期待できます.

SDRのための万能プラットフォーム:“USRP B205mini-i”

“USRP B205mini-i”のおもな仕様

今回の実験で使う“USRP B205mini-i”の主な仕様を表1に示します.対応周波数は70 MHzから6 GHz,帯域幅は56 MHzということで,SDRのちょっとした実験をするには十分な性能を持っています.

また,スペクトル・アナライザ(スペアナ)やネットワーク・アナライザ(ネットアナ),シグナル・ジェネレータ(SG)といった測定器としての応用も可能です.実際,これから作るFMラジオの一部にも「スペアナ」の機能を盛り込んでいます(後述).本記事で“USRP B205mini-i”や“GNU Radio”の扱いに慣れたら,ぜひオリジナル測定器の製作にチャレンジしてみてください.

表1 “USRP B205mini-i”の仕様

“USRP B205mini-i”の内部ブロック図

図4に“USRP B205mini-i”の内部ブロック図を示します.大きく分けると「RFフロント・エンド部分」,「ディジタル・バッファ部分」,「USBコントローラ部分」の3つのブロックで構成されています.

図4 “USRP B205mini-i”の内部ブロック図

RFフロント・エンド部分

「RFフロント・エンド部分」は高周波アナログ信号を扱うブロックです.“RX2”端子から入力された微弱な電波は“LNA”(Low Noise Amplifier)で増幅された後,“MIX”(Mixer)と“LO”(Local Oscillator)で構成されるダウン・コンバータで周波数変換されます.その後“BPF”(Band Pass Filter)で不要な信号を除去してから,“ADC”(Analog to Digital Converter)に入力されます.ここでディジタル信号に変換されたデータは次の「ディジタル・バッファ部分」に渡されます.

一方で,「ディジタル・バッファ部分」から受け取った送信データは“DAC”(Digital to Analog Converter)でアナログ信号に変換されてから“MIX”と“LO”によってアップ・コンバートされ,“PA”(Power Amplifier)で増幅されて“TX”端子から出力されます.

この回路はSDRのフロント・エンドとして典型的な構成であり,“AD9364”(アナログ・デバイセズ社製)という1チップのICの中に集積されています.

データ・バッファ部分

「データ・バッファ部分」は,アナログ信号を扱う「RFフロント・エンド部分」から受け取る(あるいは送り出す)データを一時的に蓄えたり,「間引き」(Decimation)や「補間」(Interpolation)といった処理をしたりするブロックです.また,数値計算による周波数変換(DDC: Digital Down ConversionやDUC: Digital Up Conversion)も行います.これらの処理により,SDRの信号処理を担うパソコン側の負担を軽減します.

この部分はザイリンクス社製のFPGAである“Spartan 6”を使って実装されています.

USBコントローラ部分

「USBコントローラ部分」は,「データ・バッファ部分」から流れて来るデータをパソコンとの間でやりとりします.USB 3.0規格に対応しているため,適切なパソコンを用意すれば高速なデータ伝送が可能です.SDRの要である信号処理は,“GNU Radio”などのSDR用ソフトを利用してパソコン側で行うことになります.

従来の無線機と“SDR”の違い

“USRP B205mini-i”を含む“SDR”と従来の無線機(ラジオなど)の回路構成を比べてみましょう.今回はFMラジオの実験を行うので,音声信号を扱う無線機(いわゆるラジオ)を題材にして考えることにします.典型的な無線機の受信回路と,“SDR”で実装した受信機の構成を図5に示します.

図5 従来の無線機と“SDR”の回路構造の比較(受信回路のみ)

従来の無線機の構成

高周波信号の増幅と周波数変換を担当する「RFフロント・エンド」

図5(a)は,いわゆる「スーパーヘテロダイン受信機」の典型的な回路構成です.アンテナから入力された微小な電波は「RFアンプ」で増幅されます.

基本的に,周波数が大きい領域では増幅回路のゲインを稼ぎにくかったり発振などのトラブルが発生しやすかったりするので,数100 MHz以上の信号をそのまま扱うのは得策ではありません.そこで,「ミキサ」(Mixer)を使って元のRF信号と「局部発振回路」(局発,Local Oscillator)の出力を乗算します.すると三角関数の性質により,ミキサに入力された2つの信号の「和」および「差」に相当する周波数の信号が得られます.無線機の回路では,この現象を「ヘテロダイン」と呼びます(数学的にはただの三角関数の乗算).

通常は2つの周波数の「差」の方だけを取り出し,これ以降の回路で扱う周波数が小さくなるようにします.この操作を「ダウン・コンバート」といいます(より広義に「周波数変換」と呼ぶこともある).ここまでがいわゆる「RFフロント・エンド」の部分の役割です.

大きな増幅率を持つ「IF増幅回路」

ダウン・コンバートされた信号は,「中間周波数」(Intermediate Frequency, IF)増幅回路でさらに増幅されます.ミキサの出力には「上側の周波数」と「下側の周波数」の2つが含まれているので,IFアンプの前には所望の周波数だけを通す「フィルタ回路」を用意する必要があります.信号の帯域幅にもよりますが,IFアンプの前後には狭帯域のフィルタを接続して余計なノイズを極力落とし,SN比(Signal to Noise ratio)が大きくなるように設計するのが一般的です.

音声信号を取り出す「復調回路」

IFアンプの出力を「復調回路」(Demodulator)に入力すると,もとのデータ(音声信号など)を取り出すことができます.AMラジオならダイオードを使った「包絡線検波回路」(envelope detector)を使い,FMラジオなら「レシオ検波回路」(ratio detector)などが用いられます.これらのラジオでは復調回路の出力として微小な音声信号が得られるので,それをオーディオ・アンプで増幅してスピーカを鳴らします.

“SDR”の構成

アナログ回路とは物理現象を利用した「アナログ計算機」である

アンプという回路が担当する「増幅」という動作は,数学的に言えば「掛け算」です(入力された信号を定数倍する).ミキサが担当する「周波数変換」も,数学的に言えば「掛け算」です(2つの入力信号を乗算する).ラジオにおける「復調」の処理も,数学的には何らかの「関数」として表現できます.

よって,従来の無線機は「アナログ回路によって信号処理を実装したもの」であると考えられます.無線機という役割に特化した「アナログ計算機」と言っても良いでしょう.

計算処理をディジタル計算機に任せれば“SDR”になる

一方で,現在もっとも普及している「計算機」といえば,CPUやFPGAによって実装する「ディジタル式のコンピュータ」が挙げられます.CPUは,読み込ませる「ソフトウェア」を書き換えることで計算処理の内容を自由自在に変更できます.FPGAの場合は内部回路をコンフィグレーションすることで,やはり回路動作を思い通りに変更できます.

そこで,無線機として動作するために必要な「数学的な計算処理」をCPUやFPGAといったコンピュータに実装すれば,「動作を自由自在に変更できる無線機」ができるだろうというアイディアが生まれました.これが“Software Defined Radio”すなわち「ソフトウェアで動作を定義する無線機」の基本的な発想です.

“SDR”ではアナログとディジタルが得意分野を分担している

アナログ回路の「アンプ」は,物理現象の結果として電気信号を増幅します.アナログ回路の中を電気信号が伝わるスピードは,理論的には「光の速さ」です(実際はRやCによる時定数で支配される).大雑把な言い方をすれば,「入力信号を印加した瞬間に出力信号が得られる」ことになります.

これに対して,コンピュータ上でアンプの動作を模擬するために「掛け算」を実行しようとした場合,何段階かの動作ステップを踏むことになります.CPUの場合,その速さはクロック・パルスに支配されています.そのため,入力と出力の間には必ず「時間差」が生じてしまいます.もしリアルタイムな信号処理を実行したいならば,非常に速いコンピュータを用意する必要があります.

現実問題として,「RFフロント・エンド」や「IFアンプ」の部分は非常に速く変化する信号を扱うので,通常のコンピュータで代替するのは困難です.しかし,IFアンプより後(IFアンプを省略する場合もある)の「復調処理」は高速なCPUやFPGAを使えば十分にリアルタイムで実行可能です.そこで,RFとIFの部分はアナログ回路で構成し,その出力をAD変換器(Analog to Digital Converter, ADC)に接続してディジタル信号に変換し,ディジタル演算回路に入力する方式がとられました.これが図5(b)の回路構成です.

FPGAやCPUで演算された結果はDA変換器(Digital to Analog Converter, DAC)でオーディオ信号に変換しても良いですし,何らかのデータとして処理したいならばDA変換せずにそのままCPU内部で扱っても構いません.この部分はソフトウェアやHDLで柔軟に変更可能なので,「まずは回路だけ作って機能は後でじっくり考える」という開発スタイルが可能となります.

今後は数学の理解がますます重要になる

実装方法が「アナログ的」であろうと「ディジタル的」であろうと,我々の身の回りの電子回路が何らかの計算を行っていることに変わりはありません.従来の無線機はアナログ的な実装だったゆえに「ハードウェアとして機能が固定されていた」のですが,“SDR”の場合は計算処理の内容をソフトウェアで変更できるので「1つのハードウェアで様々な機能を実現できる」ということになります.これは,“SDR”を導入する上での大きなメリットの1つです.

“SDR”のアナログ・フロントエンドは“USRP B205mini-i”のように便利な製品が多く出ているので,電気回路をゼロから設計する工数は節約できるかもしれません.しかし,コンピュータ上で行う信号処理は要求仕様に合わせて独自に実装する必要があります.よって,“SDR”の普及によって「数学の理解」の重要性がますます大きくなったと言えます.もちろん従来の電気回路設計でも数学は必要でしたが,“SDR”のようにコンピュータ上の計算が製品の価値を大きく左右するものを扱う際は,数学の理解の重要性が大きく増します.「製品を生かすも殺すも数学次第」と言っても過言ではありません.たとえば微分・積分,線形代数,複素関数論,フーリエ解析,確率,統計などを学んでおくと大いに役立ちます.

実験に必要なソフトウェアをインストールする

“GNU Radio”をインストールする

今回は“SDR”用の信号処理アプリケーションとして,無償で利用できる“GNU Radio”(グニュ・ラジオ)を使います.ここでは,Windows10の64ビット版の環境にGNU Radioをインストールするものとします.なお,ここで紹介する内容は2021年4月現在のものです.今後変更される可能性がありますのでご了承ください.

まずは,GNU Radioのダウンロード・ページにアクセスします.“Download Latest GR 3.7 Installer”をクリックして,インストーラをダウンロードします(図6).

インストーラがダウンロードできたら,ダブル・クリックして起動します(図7).

図6 “Download Latest GR 3.7 Installer”をクリックする 図7 ダウンロードしたインストーラをダブル・クリックして起動する

図8の画面では[Next]をクリックします.

図9の画面では“I accept the terms in the License Agreement”にチェックを付けて[Next]をクリックします.

図8 [Next]をクリックする 図9 “I accept the terms in the License Agreement”にチェックを付けて[Next]をクリックする

図10の画面ではインストール先のディレクトリを選択します.今回はデフォルトのまま[Next]をクリックします.

図11の画面で[Install]をクリックするとインストールが始まります.ここで「この不明な発行元からのアプリがデバイスに変更を加えることを許可しますか?」というメッセージが表示されるので,[はい]をクリックします.

図10 インストール先を設定して[Next]をクリックする 図11 [Install]をクリックするとインストールが開始される

インストール作業が終わるまで待ちます(図12).

問題なくインストールが完了すると図13の画面が表示されるので,[Finish]をクリックして終了します.

図12 インストールが完了するまでしばらく待つ 図13 [Finish]をクリックして終了する

“USB Driverをインストールする

GNU Radioをインストールできたら,次は“USRP B205mini-i”のUSBドライバをインストールします.ここから先の作業は,“USRP B205mini-i”をパソコンに接続した状態で行ってください.

“USRP Hardware Driver and USRP Manual”の“Transport Notes”のページにアクセスします.図14に示す“Install USB driver (Windows)”の項目を探します(ページの下のほうにある).ここで“Download the driver from the UHD wiki page here.”の“here”のリンクを右クリックして,[名前を付けてリンク先を保存]をクリックします.デスクトップなどのわかりやすい場所に保存し,ダウンロードした圧縮ファイルを展開しておきます.

図14 “USRP B205mini-i”のUSBドライバをダウンロードする

[Windowsスタート・メニュー] - [Windows システム ツール] - [デバイス マネージャー]をクリックして,「デバイス マネージャー」を起動します.なお[Windowsキー] + [R]を押して「ファイル名を指定して実行」の画面を出し,“devmgmt.msc”と入力して[Enter]しても「デバイス マネージャー」を起動できます.

“USRP B205mini-i”のドライバがインストールされていない状態では,図15のように「ほかのデバイス」の欄に“WestBridge”という項目があります.これを右クリックして[ドライバーの更新]をクリックします.

すると図16の画面が表示されるので,「コンピューターを参照してドライバーソフトウェアを検索」をクリックします.

図15 デバイス マネージャーを開いて[ドライバーの更新]をクリックする 図16 「コンピューターを参照してドライバーソフトウェアを検索」をクリックする

図17の画面が表示されるので,[参照]ボタンをクリックして先ほどダウンロードして展開しておいた“erllc_uhd_winusb_driver”のディレクトリを選択して[次へ]をクリックします.

パソコン側がドライバを見つけると図18の画面が表示されるので,「“National Instruments Corporation”からのソフトウェアを常に信頼する」にチェックを付けて[インストール]をクリックします.

図17 先にダウンロードしておいたUSBドライバを選択して[次へ]をクリックする 図18 [インストール]をクリックする

インストールが完了するまで少し待ちます(図19).

問題なくインストールが完了すると図20の画面が表示されるので,[閉じる]をクリックします.

図19 USBドライバのインストールが完了するまで待つ 図20 ドライバのインストールが完了したら[閉じる]をクリックして終了

ドライバをインストールしてから再び「デバイス マネージャー」を開くと,図21のように“USRPs”という項目が表示され,“Ettus Research B205mini”が追加されていることが確認できます.

図21 “USRPs”の項目の“Ettus Research B205mini”として認識されていることを確認する

USRP B205mini-iとの接続を確認する

“GNU Radio”と“USB driver”のインストールが完了したら,パソコンと“USRP B205mini-i”との間の接続が確立されていることを確認しておきます.

[Windowsスタート・メニュー] - [GNURadio 3.7] - [GNURadio Command Prompt]をクリックして,“GNURadio Command Prompt”を起動します.ここで“uhd_usrp_probe”というコマンドを入力して[Enter]キーを押します.図22のような表示が出れば問題なく接続できています.

図22 “uhd_usrp_probe”コマンドを実行したときの様子

もし“Error: LookupError: KeyError: No devices found for -----$>$ Empty Device Address”などのエラー・メッセージが表示される場合は,ここまでのインストールの手順が正しく行われていることを確認してください.また,一度“USRP B205mini-i”をパソコンから抜いてから再び接続する,接続するUSBポートを変えてみる,パソコンを再起動するなどしてみてください.

“GNU Radio”上でFM受信機を構成する

これから作るFMラジオの概要

これからGNU Radio上で作るFMラジオの基本構成を図23に示します.「ラジオを聞く」ために最低限必要なブロックは4個だけです.

図23 これからつくるFMラジオの各部におけるサンプリング・レート

FM放送における1チャネルあたりの帯域幅は200 kHz程度ですが,今回は複数の放送局の電波を一度につかまえたいので“7.2 MHz”の帯域幅で“USRP B205mini-i”からデータを取得することにします.なお,“USRP B205mini-i”のアナログ入力部はIQ方式なので,“7.2 Msps”(“sps”は“samples per second”の略)のサンプリング・レートで“7.2 MHz”の帯域幅を確保できます(このあたりの詳細はディジタル変復調や通信理論の教科書を参照してください).

“7.2 Msps”というサンプリング・レートは,1秒間に720万個のデータを取得することを意味します.一般的なSDRではリアルタイムな動作が求められますが,これほど膨大なデータを常に処理し続けるのはかなり困難です.そこで,必要に応じてデータを「間引き」(decimation, デシメーション)します.

今回はローパス・フィルタでデータを1/10に間引きし,さらにその後のFM復調処理で1/30にデータを間引きします.すると,最終的なオーディオ出力のサンプリング・レートは“$7.2\ \mathrm{Msps} \div 300 = 24\ \mathrm{ksps}$”となります.FM放送の音声品質を考えると,妥当なサンプリング・レートであると言えます.

“GNU Radio Companion”を起動して新しいファイルを作る

これからGNU Radioで信号処理のフローを作っていきますが,そのデータの保存先のパスは「日本語を含まない」ようにする必要があります.今回は“C:/GNU_Radio”というディレクトリを作り,その中に“20210406”という名前の作業ディレクトリを用意しました.これはあくまで例なので,ご自身の環境に合わせて適宜作業ディレクトリを用意してください.

[Windowsスタート・メニュー] - [GNURadio 3.7] - [GNURadio Companion]をクリックして“GNU Radio Companion”を起動します.図24のように[File] - [New] - [QT GUI]をクリックして新しいファイルを用意します.

まだ何もしていませんが,先にファイルを保存しておきましょう.[File] - [Save as]をクリック(あるいは[Ctrl] + [s]を押す)して,図25のようなファイル保存のダイアログを出します.今回は“fm_receiver.grc”というファイル名にしました.繰り返しになりますが,保存先のパスには日本語が含まれないように注意してください.

図24 [File] - [New] - [QT GUI]をクリックする 図25 ファイル名と保存先を指定して[Save]をクリックする

変数“samp_rate”を設定する

新しいファイルを作成すると,図26のように“Variable”という変数を設定するためのブロックが用意されています.このブロックでは“samp_rate”という変数が定義されているので,素直にこれをサンプリング・レートを設定するための変数として使うことにします.

この“Variable”のブロックをダブル・クリックすると,図27の画面が出ます.ここで“Value”の欄に“7.2e6”(1e6 = 1,000,000)と入力して[OK]をクリックします.これで,今後“samp_rate”と記述した箇所には“7.2M”(7,200,000)という値が代入されます.

図26 変数“samp_rate”を定義している“Variable”ブロックをダブル・クリックする 図27 “Value”の欄に“7.2e6”と入力する

受信周波数の入力欄“QT GUI Entry”を追加する

続いて,FMラジオの受信周波数を設定するための入力欄を用意します.GNU Radioの画面の右側にあるモジュール一覧で,“GUI Widgets”の欄を展開します.さらに“QT”の欄を展開すると“QT GUI Entry”というブロックがあります(図28).

この“QT GUI Entry”をドラッグして,図29のように適当な場所に設置します.

図28 “QT GUI Entry”をフロー・グラフに追加する 図29 追加した“QT GUI Entry”をダブル・クリックする

追加した“QT GUI Entry”ブロックをダブル・クリックすると,図30の画面が表示されます.ここで“ID”の欄に“frequency”と入力し,“Type”の欄を“Float”に設定,“Default Value”の欄に“80e6”と入力して[OK]をクリックします.

なお,ここではTOKYO FM(80.0 MHz)を意識して“80e6”という値にしましたが,この値はお好みで変更して構いません.NHK-FMなら“82.5e6”,J-WAVEなら“81.3e6”となります.

図30 “QT GUI Entry”のパラメータを入力する

“UHD: USRP Source”を追加する

続いて,GNU Radioの画面右側の一覧から“UHD”(USRP Hardware Driver)の欄を展開します(図31).この中に“UHD: USRP Source”というブロックがあるので,これをドラッグしてフロー・グラフ画面に追加します(図32).

図31 “UHD: USRP Source”をフロー・グラフに追加する 図32 追加した“UHD: USRP Source”をダブル・クリックする

追加した“UHD: USRP Source”のブロックをダブル・クリックすると,図33の画面が表示されます.まずは“General”のタブを選択し,“Samp Rate”の欄に“samp_rate”と入力します.これで変数“samp_rate”の値がUSRPのサンプリング・レートとして設定されます.

続いて,図34のように“RF Options”のタブを選択します.“Ch0: Center Freq (Hz)”の欄に“frequency”と入力します.これで,さきほど用意した“GUI QT Entry”の“frequency”の値がUSRPで受信するキャリア周波数として設定されます.また,“Ch0: Gain Value”の欄には“75”と入力し,“Ch0: Gain Type”の欄では“Absolute (dB)”を選択します.これで,“USRP B205mini-i”のRFアンプのゲインが最大値の75 dBに設定されます(これはRF ICのAD9364の仕様にもとづく).

図33 “General”タブの内容を設定する 図34 “RF Options”の内容を設定する

“Low Pass Filter”を追加する

次は,不要な信号の除去とデータの間引きに使うローパス・フィルタ(Low Pass Filter)を追加します.図35のように,“Filters”の欄から“Low Pass Filter”を探します.このブロックを先ほど設置した“UHD: USRP Source”ブロックの隣に置きます(図36).

図35 “Low Pass Filter”をフロー・グラフに追加する 図36 “UHD: USRP Source”の隣に“Low Pass Filter”を配置する

ここで,“UHD: USRP Source”ブロックの右側の青い端子をクリックした状態で,“Low Pass Filter”ブロックの左側の青い端子をクリックします.すると,図37のように2つのブロックが接続されます.今後は同様にしてブロック間の配線を行うものとします.

設置した“Low Pass Filter”ブロックをダブル・クリックして,図38の設定画面を出します.“Decimation”の欄に“10”,“Smple Rate”の欄に“samp_rate”,“Cutoff Freq”の欄に“100e3”,“Transition Width”の欄に“10e3”と入力し,“Window”の欄で“Hamming”を選択して[OK]をクリックします.

図37 2つのブロックの青色の端子を順番にクリックして配線する 図38 “Low Pass Filter”ブロックをダブル・クリックしてパラメータを設定する

“Simple Squelch”を追加する

FM放送における「ザー」というノイズを低減するために,「スケルチ」(squelch)の処理を追加しておきます(スケルチは必須ではない).図39のように“Level Controllers”の欄から“Simple Squelch”を探して,図40のように“Low Pass Filter”ブロックの隣に置きます.

図39 “Simple Squelch”を追加する 図40 “Smiple Squelch”の配線を行う

追加した“Simple Squelch”ブロックをダブル・クリックして,図41の画面を出します.“Threshold (dB)”の欄に“-40”,“Alpha”の欄に“1”と入力して[OK]をクリックします.なお,“Threshold”の値はお好みに応じて変更してください.

図41 “Simple Squelch”のパラメータを設定する

“WBFM Receive”を追加する

FM復調の処理を追加します.図42のように“Modulators”の項目から“WBFM Receiver”を探します.なお,“WBFM”は「ワイドバンドFM」(Wide Band Frequency Modulation)の略です.

図43のように“Simple Squelch”ブロックの隣に配置し,配線しておきます.

図42 “WBFM Receive”を追加する 図43 “WBFM Receive”を配置して配線を済ませた様子

“WBFM Receiver”ブロックをダブル・クリックして,図44の画面を出します.“Quadrature Rate”の欄に“720e3”と入力し,“Audio Decimation”の欄に“30”と入力して[OK]をクリックします.

図44 “WBFM Receive”のパラメータを設定する

“Audio Sink”を追加する

オーディオ出力のブロックを追加します.図45のように“Audio”の欄から“Audio Sink”を探します.このブロックを図46のように“WBFM Receiver”の隣に配置して配線を済ませます.

図45 “Audio Sink”を追加する 図46 “Audio Sink”を配置して配線を済ませた様子

“Audio Sink”ブロックをダブル・クリックして,図47の画面を出します.“Sample Rate”の欄で“24KHz”を選択して[OK]をクリックします.

図47 “Audio Sink”のパラメータを設定する

“QT GUI Frequency Sink”を追加する

FMラジオの各部の信号の周波数スペクトルを見るために,スペアナを設置しておきます.図48のように“Instrumentation”の項目で“QT”を展開し,“QT GUI Frequency Sink”を2つ設置します.

1つめの“QT GUI Frequency Sink”は“USRP B205mini-i”から得られる信号を観察するために使います.ブロックをダブル・クリックして図49の画面を出し,“FFT Size”の欄に“1024”,“Center Frequency (Hz)”の欄に“frequency”,“Bandwidth (Hz)”の欄に“samp_rate”,“Y min”の欄に“-100”,“Y max”の欄に“0”を入力して[OK]をクリックします.

図48 “QT GUI Frequency Sink”を2つ配置する 図49 高周波信号を観察するための“QT GUI Frequency Sink”のパラメータを設定する

2つめの“QT GUI Frequency Sink”は復調後のオーディオ信号を観察するために使います.ブロックをダブル・クリックして,図50の画面を出します.“Type”の欄で“Float”を選択し,“FFT Size”の欄に“1024”と入力します.また,“Spectrum Width”の欄では“Half”を選択します.“Center Frequency (Hz)”の欄に“0”,“Bandwidth (Hz)”の欄に“20e3”,“Y min”の欄に“-100”,“Y max”の欄に“0”と入力して[OK]をクリックします.

これら2つの“QT GUI Frequency Sink”ブロックを図51のように配線します.

図50 音声帯域信号を観察するための“QT GUI Frequency Sink”のパラメータを設定する 図51 2つの“QT GUI Frequency Sink”の配置と配線を済ませた様子

完成したフロー・グラフの動作確認をする

以上でFMラジオのフロー・グラフは完成です.完成図を図52に示します.

図52 FMラジオのフロー・グラフを完成させた様子

GNU Radioの画面上部の“Generate the flow graph”ボタン(図53)をクリックします.このボタンをクリックすると保存先のディレクトリに“top_block.py”というPythonファイルが作成されます.もしこのボタンを押せない場合は,どこかのブロックの設定を間違えている可能性があります.ブロックの文字が赤色になっている箇所を探して,設定内容を修正してください.

問題なくPythonファイルが出力されたら,図54に示すように“Execute the flow graph”ボタンをクリックします.

図53 “Generate the flow graph”ボタンをクリックしてPythonファイルを作成する 図54 “Execute the flow graph”ボタンをクリックすると動作開始する

はじめて“Execute the flow graph”を実行するときは図55の画面が表示されます.特に問題はないので[OK]をクリックします.

また,最初に実行するときは“GNURadio Companion”の親ウィンドウに“Loading FPGA image: ...”という文字列が表示されて動作が一時的に止まったように見えますが,1分ほど待つと動作が開始されます.

図55 はじめて“Execute the flow graph”をクリックした時だけ出る.無視してよい

フロー・グラフが問題なく作成されて,USRPとの接続も正常になされていれば,図56のような画面が表示されます.画面上部の“frequency”の欄は,“QT GUI Entry”ブロックで実装した受信周波数の入力欄です.その下にあるグラフは復調後の音声帯域信号の周波数スペクトルを表しています.一番下のグラフは“USRP B205mini-i”から送られてくる高周波信号の周波数スペクトルです.このウィンドウを閉じると,動作が止まります.

もしうまくいかない場合は,USRPとの接続を確認し,各ブロックの接続やパラメータ設定に誤りがないことをよく確認してください.

図56 問題なく動作すればこのような画面が表示される

FM放送を聞く

アンテナを接続する

FM放送を受信するために,アンテナを接続します.ここでは,手元にあった写真2のような「ロッド・アンテナ」を使いました.なお,このロッド・アンテナにはFコネクタ(オス)が付いていますが,“USRP B205mini-i”のコネクタはSMAコネクタ(メス)です.そこで,写真2のように「F(メス)-BNC(オス)」の変換コネクタと「BNC(メス)-SMA(オス)」の変換コネクタを組み合わせて“USRP B205mini-i”に接続するようにしています.

なお,英語で呼ぶときはコネクタの「オス」は“Male”(メイル)あるいは“Plug”(プラグ)で,コネクタの「メス」は“Female”(フィメイル)あるいは“Jack”(ジャック)です.

このロッド・アンテナと“USRP B205mini-i”を接続し,さらにパソコンと接続した様子を写真3に示します.

写真2 ロッド・アンテナの例(実際はもっと伸ばして使う) 写真3 “USRP B205mini-i”とパソコンを使って無線システムを作る

もしロッド・アンテナで感度が足りない場合は,写真4のような「ダイポール・アンテナ」や写真5のような「ディスコーン・アンテナ」などを使います.アンテナの設置場所や向きなどもいろいろ変えてみてください.

写真4 ダイポール・アンテナの例(実際はもっと伸ばして使う) 写真5 ディスコーン・アンテナの例

受信する放送局を指定する

アンテナを接続したら,GNU Radioの“Execute the flow graph”ボタン(再生マークのボタン)をクリックして処理を開始します.“QT GUI Entry”で作成しておいた“frequency”の欄に数値を入力すれば,受信する放送局を変更できます(図57).たとえば“81.3M”と入力すればJ-WAVEを受信できます.

図57 “frequency”の欄に受信したい周波数を入力する

電波の受信状況がある程度良い場合は,図58のようにいくつかの放送局を同時にとらえることができます.SDRの回路構成は実際のスペクトル・アナライザ(計測器)とほとんど同じなので,このような表示が可能となります.アンテナから入ってくる電波の状況をこのように可視化できるのは,SDRの醍醐味です.ピークが見えている周波数を狙って受信してみてください.

図58 関東圏のFM放送局が見える
(c)2021 Nobuyasu Beppu