GNU Radioを使った無線信号処理の基本


本稿では、GNU Radioを使用し、無線信号処理の基本についてみていきます。

GNU Radioとは

GNU Radio」は、デジタルとアナログの信号処理を扱うオープンソースな開発キットです。 RTL-SDR、HackRF、USRPなど幅広いSDR ハードウェアをサポートしており、データを処理するために使用できる膨大な種類の無線処理ブロックとアプリケーションを含んでいます。

環境情報

今回、GNU Radioを使って無線信号処理を行うための環境は次のとおりです。

OS:Ubuntu 20.04

$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="20.04.1 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.1 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal

GNU Radioのインストール

  • GNU Radio本体
  • 開発環境
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install gnuradio
$ sudo apt install git cmake build-essential

GNU Radio Companionの起動

ターミナルからgnuradio-companionコマンドを実行します。GNU Radioのグ​​ラフィカルツールである「GNU Radio Companion(GRC)」を起動します。

$ gnuradio-companion

この画面で重要な3つのコンポーネントを確認します。

  1. Workspace: オプションと変数からなるブロックで表示される空白の領域
  2. Blocks: 右側のリスト、ラジオの作成に使用できるさまざまな処理ブロック
  3. Reports: 画面下部、出力、デバッグ、およびエラーメッセージが表示される

波形を生成して出力する

COS(正弦)波を生成して波形表示を行う

GRCを使用してワークフローを構築するには、ブロックペインからワークスペース領域にブロックをドラッグアンドドロップします。
ここでは、「COS(正弦)波」を生成し、波形表示を行います。

  1. Signal Sourceブロックを配置する。Waveform Generatorsセクション内に当該ブロックがあります。Ctrl + Fキーにて、Signal Sourceキーワードにて検索して確認することもできます。
    配置したブロックの文字列が赤で表示されていることに注目してください。これは、ブロックからの出力(この場合は信号源から出るコサイン波形)が別のブロックに未接続であることを意味しています。

  2. Throttleブロックを追加する。Throttleブロックは、GNU Radioが過剰なシステムリソース消費するのを防ぐためにすべてのフローグラフで使用するものです。

  3. 信号の受け皿としてQT GUI Time Sinkブロックを追加します。

  4. それぞれのブロックを接続する。ブロックのoutと、接続したいブロックのinをクリックすることで接続可能です。

  5. Signal Sourceブロックのプロパティを表示します。ブロックをダブルクリックしてください。プロパティでは、ブロックに関するさまざまな値を設定できます。ここでは、[Frequency]の値を100に設定します。

  6. メニューの[Run] > [Execute]またはF6キーにて実行する。Top Blockウインドウに波形が表示されます。

COS(正弦)波を一つだけ表示する

  1. 全てのブロックにおいて、[Output Type]をComplexからFloatに変更する。

異なる周波数の波を表示する

  1. Signal Sourceブロックを追加し、ブロックのプロパティを表示する。[Output Type]をFloat、[Frequency]の値を150に設定する。

  2. Throttleブロックを追加する。ブロックのプロパティを表示する。[Output Type]をFloatに設定する。

  3. 既存のQT GUI Time Sinkブロックのプロパティを表示する。[Number of Inputs]の値を2に設定します。

  4. それぞれのブロックを接続し、メニューの[Run] > [Execute]またはF6キーにて実行する。

参考情報