🦁

SoapySDRのGNU Radioでの使用

2022/01/11に公開

環境

  • PC: Ubuntu 18.04
  • HackRF One (SDR)

目的

Open SourceのSDRインターフェースライブラリであるSoapySDRを使用してGNU Radioを動作させます。下記ではHackRFを使用していますが、SoapySDRに対応しているSDRであれば(独自のSDRでも)使用できます。

gnuradioのインストール

普通にインストールすると後のgr-soapyのインストールで失敗するため、下記のようにインストールしておきます。

  • 最新のgnuradio 3.9ではなく3.8をインストール
  • 先にaptでインストール、アンインストールした後、ソースコードからビルド、インストール
$ sudo add-apt-repository ppa:gnuradio/gnuradio-releases-3.8
$ sudo apt-get update
$ sudo apt install gnuradio
$ sudo apt remove --purge gnuradio
$ sudo apt install git cmake g++ libboost-all-dev libgmp-dev swig python3-numpy python3-mako python3-sphinx python3-lxml doxygen libfftw3-dev libsdl1.2-dev libgsl-dev libqwt-qt5-dev libqt5opengl5-dev python3-pyqt5 liblog4cpp5-dev libzmq3-dev python3-yaml python3-click python3-click-plugins python3-zmq python3-scipy python3-pip python3-gi-cairo
$ pip3 install git+https://github.com/pyqtgraph/pyqtgraph@develop
$ pip3 install numpy scipy
$ echo 'export PYTHONPATH=/usr/local/lib/python3/dist-packages:usr/local/lib/python2.7/site-packages:$PYTHONPATH' >> ~/.bashrc
$ echo 'export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
$ echo 'export PYTHONPATH=/usr/local/lib/python3/dist-packages:usr/local/lib/python2.7/site-packages:$PYTHONPATH' >> ~/.profile
$ echo 'export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH' >> ~/.profile
$ cd ~/
$ git clone --recursive https://github.com/gnuradio/gnuradio
$ cd gnuradio
$ git checkout maint-3.8
$ mkdir build
$ cd build
$ git pull --recurse-submodules=on
$ git submodule update --init
$ cmake -DENABLE_GR_UHD=OFF ..
$ make -j $(nproc --all)
$ sudo make install
$ sudo ldconfig

SoapySDRのインストール

SoapySDRをインストールします。

$ git clone https://github.com/pothosware/SoapySDR.git
$ cd SoapySDR
$ mkdir build
$ cd build
$ cmake ..
$ make -j4
$ sudo make install
$ sudo ldconfig

HackRFドライバのインストール

GREAT SCOTT GADGETS社のSDRであるHackRFのドライバをインストールします。

HackRFのHost用ライブラリをインストール

HackRFのHost用ライブラリをインストールします。

$ sudo apt-get install build-essential cmake libusb-1.0-0-dev pkg-config libfftw3-dev
$ git clone https://github.com/greatscottgadgets/hackrf
$ cd hackrf/host
$ mkdir build
$ cd build
$ cmake ..
$ make
$ sudo make install
$ sudo ldconfig

HackRF OneをUSBで接続してからhackrf_infoを実行します。

$ hackrf_info
hackrf_info version: unknown
libhackrf version: unknown (0.6)
Found HackRF
Index: 0
Serial number: 000000000000000006d065dc2aa875df
Board ID Number: 2 (HackRF One)
Firmware Version: 2018.01.1 (API:1.02)
Part ID Number: 0xa000cb3c 0x007d435d

permissionがなくopenに失敗することがありますが、グループplugdevに属していないとUSBにアクセスできないためです。aptインストール時に自動的に設定されますが、設定されていない場合は下記のコマンドでユーザをplugdevのグループに追加します。

$ sudo usermod -aG plugdev username

HackRFのSoapySDR用ライブラリ(SoapyHackRF)をインストール

SoapySDRのAPIでHackRFを動作させるためのライブラリであるSoapyHackRFをインストールします。

$ git clone https://github.com/pothosware/SoapyHackRF.git
$ cd SoapyHackRF
$ mkdir build
$ cd build
$ cmake ..
$ make
$ sudo make install

gr-soapyのインストール

Gnu Radio用のsoapyライブラリであるgr-soapyをインストールします。

$ sudo apt-get install libboost-dev libboost-date-time-dev libboost-filesystem-dev libboost-program-options-dev libboost-system-dev libboost-thread-dev libboost-regex-dev libboost-test-dev python3 python3-six python3-mako python3-dev swig cmake gcc libsoapysdr-dev libconfig++-dev libgmp-dev liborc-0.4-0 liborc-0.4-dev liborc-0.4-dev-bin git
$ git clone https://gitlab.com/librespacefoundation/gr-soapy
$ cd gr-soapy
$ mkdir build
$ cd build
$ cmake ..
$ make -j $(nproc --all)
$ sudo make install

gnuradioの起動

gnuradioのインストール時に.profileと.bashrcを編集しているため、これらのファイルを読み込み直すか、ログインし直した後にgnuradioを起動します。Soapy SinkとSoapy Sourceのブロックが使用できるようになっています。

$ gnuradio-companion

Soapy Sourceを使用したFM受信回路

FMヨコハマ(84.7MHz)を受信できるようにSoapy Sourceを次のように設定します。

  • Device Type : hackrf
  • Sampling Rate : 4e6
  • Center Freq [Hz] : 85.7e6
  • Gain Mode : Overall
  • Overall Gain Value : ゲインは環境に応じて調整
  • RF Antenna : TX/RX
  • Automatic DC Removal : False

HackRF OneにはDCオフセットがあるため、周波数を1MHzずらして受信した後、1MHzのCWと乗算してからLPFをかけることでDCオフセットを除去しています。

Discussion