ADALM2000はアナログデバイセズ社が学生の学習やホビー用途向けに開発したUSB接続の測定器。以前の記事で、付属ソフトScopyによるオシロスコープやネットワークアナライザ、Pythonプログラミングインタフェースなどを記事に取り上げたが、今回はGNURadioで使えるようセットアップを試みた。
ADALM2000のGNURadioインタフェースライブラリgr-m2kはLinuxのみ対応でWindowsに非対応のため、今回はUbuntuをターゲットとした。
GNURadioとは?
GNURadioについては以前の記事でも取り上げた。
オープンソースのSDR(Software Defined Radio)用ツールで、複雑なデジタル信号処理もGUI操作により簡単に構築出来る。また、GNURadioがADALM2000と接続出来れば、データの波形表示やスペアナ表示などの機能を用いて信号処理プラットフォーム用途としても利用出来そうだ。
ADALM2000のGNURadioインタフェース
ADALM2000の発売元であるADI社(Analog Devices社)には、最初からSDRとして販売されているPluto SDRというデバイスが存在する。AD9963搭載のADALM2000とAD9363搭載のPluto SDRとではそもそもハードは別物ではあるが、どちらもlibiioという共通のミドルウエアを介してPCとのインタフェースが行われている。ケースなどの外観もよく似ており、高速動作する12bitの高性能A/D・D/A変換を搭載しているという表面上のスペックは割と共通していることから、ADI社では兄弟デバイス的な扱いなのかもしれない。
以前の記事、
この記事の中でADALM2000からPython経由でデータキャプチャ出来ることを確認した時にもRF回路を付ければSDR化出来そうだと書いたが、その後ADI社がその具体的な方法を下記ページに公開し解説している。
ADALM2000とGNURadioのインタフェースについてはこちらのページで解説されているgr-m2kという追加モジュールが必要だ。
Ubuntuへ追加モジュールをインストールする
gr-m2kはGitHubからソースコードで取得してビルドする必要がある。また、事前にGNURadioとADALM2000のインタフェースライブラリlibm2kをインストールしておく必要がある点にも注意。
残念ながらgr-m2kは今のところWindows版への対応はされておらず、Linux専用となっている。Pluto SDR用のGNURadioインタフェースgr-iioも状況は似ていて「Windowsで使いたい場合はWSL上で使うのがオススメ」とある。というわけで、Windowsで動かしたい場合はWSL上で動作するUbuntuにインストールをするのが良いだろう。WSL上のUbuntuにgr-m2kをインストールする場合は、libm2kのWSLへのインストールを試みた過去記事が参考になると思う。
WSL上のUbuntuでGNURadio Companionを使うためにはWindows10上にVcXsrvなどのXサーバのインストールが必要になるので、適宜インストールをしておく。ただ、自分も実際WSL上にインストールして動かしてみたものの、GNURadioの動作がWSLのオーバーヘッドのせいか重たい感じになるため、ネイティブ動作のUbuntu上で動かす方がベターだろう。
以下、インストール方法を順を追って解説する。
GNURadioのインストール
gr-m2kをインストールするためには、GNURadioのバージョン3.8以上が必須。一方Ubuntu18.04の公式リポジトリに入っているGNURadioはやや古いバージョン3.7のため、PPAリポジトリの物をインストールする。まずはリポジトリの追加。
$ sudo add-apt-repository ppa:gnuradio/gnuradio-releases
$ sudo apt update
リポジトリを追加後、インストール実行。
$ sudo apt install gnuradio
libm2kのビルドとインストール
以前の記事で書いたlibm2kのインストール方法と同じ内容だが再掲しておく。
まずはビルド用ツールをシステムにインストール。
$ sudo apt install git cmake swig g++ python3-dev python3-setuptools
次にlibiioのインストール。
$ wget http://swdownloads.analog.com/cse/travis_builds/master_latest_libiio-ubuntu-18.04-amd64.deb
$ sudo dpkg -i master_latest_libiio-ubuntu-18.04-amd64.deb
そしてlibm2kのビルドとインストール。古いlibm2kがシステムにインストールされているとgr-m2kのインストールが失敗する場合があるので、既にインストールが済んでいても再度最新の物をインストールした方が良い。
$ git clone https://github.com/analogdevicesinc/libm2k.git
$ cd libm2k
$ mkdir build
$ cd build
$ cmake -DENABLE_EXCEPTIONS=TRUE ../
$ make
$ sudo make install
gr-m2kのビルドとインストール
上記に従ってGNURadioとlibm2kのインストールが完了したら、gr-m2kのインストールを行う。いきなりgr-m2kのインストールをしようとしてもエラーで進めなくなるので、順番を守ること。
こちらもgr-m2kのページ書かれたインストール方法そのままだが再掲。
$ git clone https://github.com/analogdevicesinc/gr-m2k.git
$ cd gr-m2k
$ mkdir build
$ cd build
$ cmake ..
$ make
$ sudo make install
$ cd ../..
$ sudo ldconfig
環境変数の設定
GNURadioは内部でPythonスクリプトを生成して実行する。上記コマンドでインストールされるgr-m2k(Pythonモジュール名m2k)はPythonデフォルトのサーチパスでない場所(/usr/local/lib/python3/dist-packages/の下)にインストールされてしまうため、モジュールのインポートエラーが発生する可能性がある。その場合は、.bashrcなどにPYTHONPATH環境変数を追加する必要がある。
export PYTHONPATH=/usr/local/lib/python3/dist-packages
GNURadioを起動
さて、上記のインストールを一通り行うと、ADALM2000がGNURadioの中で利用可能になる。コンソールから以下を実行して、GNURadio Companionを起動する。
$ gnuradio-companion
虫眼鏡ボタンを押してブロックの検索窓を表示し”m2k”と入力すると、ADALM2000のSourceとSinkが追加されているのがわかる。
簡単なフローグラフで動作テスト実行
ADALM2000のハードウエア結線は下表のようにする。
入力端子 | 接続先 |
---|---|
1+ | W1 |
1- | GND |
2+ | W2 |
2- | GND |
そして、以下のようなフローグラフm2ktest.grcを作成してテストを実行した。
このフローグラフの動作は以下の通り。
- Signal Sourceで500Hz,振幅0.5Vのサイン波を生成してM2K Analog Out SinkのChannel 1から出力させる
- Signal Sourceで2kHz,振幅1Vのサイン波を生成してM2K Analog Out SinkのChannel 2から出力させる
- (ADALM2000ハードウエアにて) DAC出力からサイン波が電気信号として出力され、結線を通じてその信号がADCに入力される
- M2K Analog In Sourceのキャプチャ結果をQT GUI Time Sinkで波形表示させる
上の実行結果のキャプチャでも、きちんと500Hzと2kHzのサイン波がGUI Time Sinkのグラフに描画されていることが確認出来る。
ADALM2000のA/D・D/Aサンプリング周波数や入力レンジについて
ADALM2000のA/D・D/Aコンバータの仕様が明記されたページが見つからなかったので、gr-m2kのページやADALM2000の技術仕様ページなどから拾った情報を以下にまとめておく。
A/Dコンバータ
入力サンプリング周波数は内部的には100MHzで固定されており、それ以外のサンプリング周波数は内蔵FPGAで実装されたデシメータでサンプリング周波数の変換が行われる。
- サンプリング周波数(Sampling frequency): 1kHz,10kHz,100kHz,1MHz,10MHz,100MHzのいずれかを設定
- 帯域幅: サンプリング周波数の1/4
- 入力電圧レンジ(Range ch X): low選択時→-2.5V〜2.5V, high選択時→-25V〜25V
D/Aコンバータ
出力サンプリング周波数は内部的には75MHzで固定されており、それ以外のサンプリング周波数は内蔵FPGAで実装されたインターポレータでサンプリング周波数の変換が行われる。
- サンプリング周波数(Sampling frequency): 750Hz,7.5kHz,75kHz,750kHz,7.5MHz,75MHzのいずれかを設定
- (帯域幅: サンプリング周波数の1/3→明記された資料が見つからなかったため推定値)
- 出力電圧レンジ: -5V〜+5V
まとめ
ADALM2000をGNURadioの信号源(Source)と出力先(Sink)として使えることが確認出来た。以前の記事にてRTL-SDRを使ったFMラジオが簡単に作れてしまった事から、RFアンプを取り付ければ中波帯/短波帯のSDRを作るのも簡単そうだ。
しかし単にSDRとして使うだけでなく、ADALM2000に搭載された12bitの高性能A/D・D/Aコンバータと、GNURadioにはフィルタなどの信号処理ブロックやグラフ表示ブロックを組み合わせることで、高性能な実験プラットフォームとしても活用出来そうだ。何か面白い活用法を思いついたら、随時記事にして行きたいと思う。
コメント