USRPを使い始めた時のメモです.USRPの用途は,研究においてのキャリアの照射や変調波の受信になります.受信後に復調処理や信号処理にかけるためMatlabを使ってSDRを制御しようと考えています.
これは同じようなことが起きた時に思い返せるように起こったことを煩雑にメモしたものです.ですので,USRPの購入からセットアップ,使い方に関する記事としては別でまとめたいと思っています.Get Started的なのをお求めであればこちらを参照ください.
USRPとは
ソフトウェア無線(SDR : Software Defined Radio)の一種です.他のSDRに比べて高価な代わりにスペックが高いのが特徴です.拡張ボード(daughter Board)を取り付けることで広い周波数帯扱えるようにできたりします.
今までは比較的安価なSDRを使っていたのですが,実験内容に限界が来たので新たにUSRPを使おうと決めた次第です.私はEttus ResearchというところからUSRPN210というものを購入いたしました.
Matlabとは
Matlab(MATrix LABoratory)は,MathWorks社が開発している数値解析ソフトウェア.ツールボックスと呼ばれる様々なライブラリを使うことで多彩な解析・制御・処理を実現できる.その中のCommunications System Toolbox,DSP System Toolbox, Signal Processing Toolbox等を使うことでUSRPなどのSDRを制御することも可能.SDRごとのハードウェアサポートパッケージも必要になりますが,これらのツールボックスを使うには費用が結構かかるので個人での使用は厳しいかもしれないです.
これから書くことについて
USRP導入の手順を自分の身に起こった通りに書いていくつもり.中には明らかに手順がおかしいところがあったりもするが,後で振り返れるように自分がやった通りに書いていきます.全記事の最後に導入方法をまとめたいと思います.
まずはこの記事の構成を示します.
- MatlabでUSRPを動かす
- USRPのファームウェア及びFPGAイメージのアップデート(前編)
- USRPのファームウェア及びFPGAイメージのアップデート(後編)
このような手順で書いていきたいと思います.
それではまず1.から.
1. MatlabでUSRPを動かす
SDR制御ソフトウェアの選択
このサイトにあるように,USRPの制御ができるソフトウェアはいくつかあります(ホントはもっと良いサイトがあったのですが取り急ぎ).
- GnuRadio : OSSのSDR制御ソフトウェア.Pythonで動かすことができ使いやすい.HackRF Oneはこれを使っていた
- Labview : USRPを制御する際よく使われる印象.情報も多い.
- Matlab : 言わずと知れている数値解析ソフトウェア.今回はこれを使う.
私は共同で研究している方の環境と合わせることや,USRPでの電波受信後の解析でMatlabのツールボックスを利用したいという理由からMatlabを使用します.大学でMatlabを比較的安価に利用できるライセンスがあったのでそちらを利用.余談ですが,このライセンスの紐づけに問題があり,非常に苦戦した(ライセンスサーバ側の問題だった様子).
Matlabの環境構築
Matlabそのものの構築は学内ライセンスに依存するので割愛.必要なツールボックス等は以下.
- Communications System Toolbox
- Signal Processing Toolbox
- DSP System Toolbox
- Communications System Toolbox Support Package for USRP® Radio
これらを入れるとMatlabからUSRPを動かすことが可能になる.USRPのサポートパッケージを入れるとサンプルプログラムもいくつか付いてくるので試すことが可能です.
USRPの環境構築
USRPN210に加え,拡張ボードを買っていたのでそちらを取り付ける.取りつけはこちらのサイトを参考にした.
USRPは特にマニュアルなどは付属しておらず,Ettus Researchの電子ユーザマニュアルがある.だが私はこちらのナレッジベースを参考にした.ここを見ると以下のような記述がある.
All Ettus Research products are individually tested before shipment. The USRP™ is guaranteed to be functional at the time it is received by the customer.
「出荷前に個別にテストされていて,届いた時点で既に機能するぜ」と言っていると僕の英語力が言っている.そのため早速クロスケーブルでUSRPとホストPCを繋いでテストプログラムを動かしてみる.今回はsdruFMReceiverSimulinkExampleというサンプルを動かしてみる.MatlabのコマンドラインにsdruFMReceiverSimulinkExampleと打ってEnter.
Simulinkのブロック図が表示されるので実行.
すると「192.168.10.2にデバイスが見つからねぇよ」的なことを言われる.当たり前である….静的にIPを振ってアドレス空間を共通にする必要がある.
気を取り直してイーサネットのプロパティのIPv4の設定から静的にIPを振る
- IPアドレス : 192.168.10.1
- サブネットマスク : 255.255.0.0
気を取り直して実行すると,デバイスは見つかったが以下のエラーが出る(スクショを消し飛ばしたので写真になります…).
んんん?ファームウェアとFPGAイメージのアップデートが必要で以下のコマンドを試せと言われている(パスの上の方省略).
1 2 |
$PATH/UHD/lib/uhd/utils/uhd_images_downloader.py $PATH/UHD/bin/uhd_image_loader --args="type=usrp2,addr=192.168.10.2" |
そのまま使えると書いてあったがやはり僕の読み間違いでファームウェアやイメージのインストールが必要だったのか,もしかしたら購入から使うまでに間が空いてしまったのでファームウェアとFPGAイメージのアップデートが必要になったのか,と色々考えつつ,まずは指示されている上記のプログラムを実行しようと思い至った.
調べてみると,USRPはUHD(USRP Hardware Driver)というソフトウェアでホストPCから様々な設定が可能なようなのでそちらを入れることに.
続きは次の投稿とします.
余談
今回はエラー内容からUSRPが認識されているかどうかわかりましたが,Matlabのコマンドで接続を確認するには以下のようにします.
1 |
>> findsdru("192.168.10.2") |
こうすることで接続機器のプラットフォームやシリアルナンバーが表示されます.さらにはステータスというのが表示されます.正常ならばSuccessと出ますが,この段階の私のようにファームウェアとFPGAイメージのインストールが必要な場合ですとnot compatibleみたいな状態になってます.