NI-USRP 21とLabVIEW 2018の組み合わせがおかしい?

2台のUSRPを使って無線信号をイーサネットで中継する(リピーターを実現する)

概要

USRPとネットワークプログラミングを組み合わせることで、USRPをリピーターとして使用することができます。
まるで"Radio over Ethernet"ですね(そこまで複雑ではない)。


USRPは受信したIQデータを出力しますが、このIQデータの型は単純なInt16のデータ配列です。このIQデータをネットワークで別なPCに転送し、そのPCがUSRPにIQデータを送ると電波として送信できます。

またUSRP N210は送受信を同時に行うことができますので、双方向のリピーターも可能です。

USRPが受信したIQ信号をもう一台のPCに転送します。もう一台のPCは、接続したUSRPにIQ信号を送信します。この動作をお互いに行うことで、リピーターのような動作をすることができます。

またstone等のパケットリピーターソフトと組み合わせれば、さらに柔軟な構成もできそうですね。

実践で学ぶ、一歩進んだサーバ構築・運用術 第 5 回 stone (前編)
https://www.gcd.org/sengoku/docs/NikkeiLinux00-08/relay.ja.html


というような元ネタが天から降ってきましたので、今回はUSRPを利用したリピーターを実現します。


トポロジーとセットアップ

ここではUSRP N210を例に説明します。

PCとUSRPは2台必要です。各PCには、イーサネット(有線)を2つ用意します。1つはUSRPを直結し、もう一つはもう一台のPCを直結します。

IQレートが低い(1Msps等)の場合はハブ経由でもよいかもしれませんが、目安として5Msps以上は直結しましょう。無線LANはコンスタントにレートが出ないので論外です。

イーサネットアダプタは、Intel製を使用します。

安価なUSBイーサネットアダプタは、高速に連続転送をしていると動作が不安定になることが多いので極力使用しないでください。


IPアドレス設定(USRP用)

次にIPアドレスを設定します。

USRP N210のデフォルトIPアドレスは、192.168.10.1 もしくは 192.168.10.2です。(発売元がNIとEttusで違う)

PCのUSRPと直結する側のイーサネットのIPアドレスを、192.168.10.11にします。

次に、PCからUSRPにpingを打って確認します。

C:\> ping 192.168.10.1


IPアドレス設定(PC相互接続用)

PCを直結する側のIPアドレスは、上図のように192.168.20.11と192.168.20.21にしてお互いpingを打って確認します。


イーサネットアダプタのバッファを設定する

※以下のページの他の項目にも目を通しておくと良いです。ただしWindows10以降の場合「環境整備 3. レジストリの設定」のレジストリ設定はしなくてよいです。


USRPネットワーク接続時のデータ落ちを防ぐ (環境構築編)
http://mikioblog.dolphinsystem.jp/2016/07/usrp.html


ソフトウェアのセットアップ

まずLabVIEW開発環境をPCにインストールします(VIはLabVIEW 2020で作成してあるので2020以降が望ましいです)。

次に、以下のページからNI-USRPをダウンロードしてインストールします。ダウンロードするNI-USRPのバージョンは「LabVIEW 2020なら NI-USRP 20以降」のように開発環境に合わせます。

https://www.ni.com/ja-jp/support/downloads/drivers/download.ni-usrp.html#414358


NI-USRPのバージョンによってサポートしているLabVIEW開発環境やUSRPに違いがあるのですが、今回は同じバージョンにしておけばよいです。

https://www.ni.com/pdf/manuals/374760aa.html#app


ソースコードをクローンする

githubにあるので、以下のURLからcloneします。

gitを使っていなければ以下のURLのページにある「code→Download zip」でzipファイルをダウンロードして展開します。


https://github.com/mikiofuku/NI-USRP-Full-Duplex


実行する

FS-Packet over Ethernet Duplex.viをダブルクリックして開きます。


とりあえず、2台のPCで以下の値を設定して実行してみます。

  • 「Device names」に、接続しているUSRPのIPアドレスを入力します。例) 192.168.10.1。
  • 「IQデータ送信先のIPアドレス」に、もう一台のPCの直結したIPアドレスを入れておきます。
  • 「IQデータを受信するIPアドレス」は、0を入れておきます。(ここは自分のIPアドレスを入力しますが、0で自動選択されます。)
  • 「○○のポート番号」はすべて40000にしておきます(もう一台のPCのも)。

実行は2台のPCでできるだけ同時に、Ctrl+Rか、ツールバーの白い右矢印をクリックします。

するとUSRPがIQデータを取得し、もう一台のPCのUSRPから送信します。


中心周波数 2.4GHzで10MHz BWを中継する場合は、

  • Carrier frequency : 2G
  • IQ rate : 12.5M

として設定して実行します。


エラーする場合

IPアドレスが違う

大体のエラーの原因は、IPアドレスが違う(USRPや相手側PC)か、転送が間に合っていません。

IPアドレスが違う場合は、事前にping等を打って必ずそれぞれの疎通を確認してください。(PC-USRP間, PC-PC間)


転送が間に合っていない

「UDP Recv timeout」が点灯する場合は、もう一台のPCからUDPデータを受信していません。もう一台のPCが動作していないか、もう一台のPCの「IQデータ送信先のIPアドレス」が間違っていると思われます。

「usrp rx loop」が以下のエラーが出ている場合は、USRPからのIQデータ取得が間に合っていません。Number of samplesを1000, 2000, 3000, 4000等と増量するか、IQ Rateを下げてください。または使用しているPCが遅いか、他のプログラムが動いているかもしれませんので他のプログラムを停止してください。


「usrp tx loop」が以下のエラーが出ている場合は、USRPへのIQデータ送信が間に合っていません。Number of samplesを増量するか、IQ Rateを下げてください。または使用しているPCが遅いか、他のプログラムが動いているかもしれませんので他のプログラムを停止してください。

「rx buffer full (USRP - UDP)」が点灯する場合は、USRPから受信したIQデータのUDP転送が間に合っていません。Number of samplesを1000, 2000, 3000, 4000等と増量するか、IQ Rateを下げてください。またはネットワークが遅いかもしれません。

「tx buffer full (UDP - USRP)」が点灯する場合は、USRPでの送信が間に合っていません。Number of samplesを増量するか、IQ Rateを下げてください。

rx buffer (current)もしくはtx buffer (current)がUSRP受信/送信用バッファサイズと同じくらいの数になっている場合は(下図の例では500位)、USRP受信/送信用バッファサイズを増量します。

それでもだめな場合はIQ rateを下げてください。ちなみにUSRP N210(USRP-294xシリーズ)は、1GbEのため合計帯域幅が20MHz BW(IQ rate 25Msps)が上限です。受信だけなら20MHz BWが上限、送受両方なら10MHz BWの送受信が上限になります。


動作確認

さて動作確認を行います。

ドルフィンシステムでは、このような場合の動作確認にWiFiを使用しています。

既知のWiFi信号を送信しUSRPで収録。収録したIQデータを復調させて、正しく復調できていればデータ落ちなく正常に転送が出来ていると判定できます。

  • 送信するWiFi信号は、NI WLAN計測ツールキットで生成した802.11a信号。
  • これをADALM-PLUTOから1フレーム分を連続送信し、USRP-RIOで収録しデータファイルに保存します。
  • 解析は、NI WLAN計測ツールキットを使って復調します。IQデータファイルを読み込み1フレームずつ解析をします。

収録された446フレームのうち、438フレームを復調できていることが確認できました。

リピーターとしての動作は問題なさそうです。


※ NI WLAN計測ツールキットはdiscontinuedになっているため、ここで紹介した動作確認用のアプリは公開いたしません。

※ 特性などの評価は省くことにします。


設定値について


項目名設定値
Device names接続しているUSRPのIPアドレスを入力します。192.168.10.1
Carrier frequency受信中心周波数を設定します。2.4G, 2.312G
IQ rateサンプリングレートを指定します。帯域幅の1.25倍です。12.5M (10MHz BWの場合)
rx gain受信側アンプ設定値をdB単位で指定します。設定範囲はドーターボードによって違います。(※1)1
tx gain送信側アンプ設定値をdB単位で指定します。設定範囲はドーターボードによって違います。(※1)11.5
Number of samplesUSRPから一回に取得するサンプル数を指定します。
IQ Rate 1Mspsは1秒間に1MサンプルをUSRPから取得します。Number of samples == 1000なら1000回取得することになります。
1000, 2000
USRP受信用バッファサイズUSRPから受信したIQデータをUDPで転送する前にバッファしておくバッファサイズです。IQ Rate 1MspsでNumber of samples=1000の場合で、USRP受信用バッファサイズ50なら0.5s分バッファすることになります。500
USRP受信用バッファサイズもう一台のPCからUDPで受信したIQデータをバッファしておくバッファサイズです(USRP送信前のデータ)。500
UDP socket buffer size (recv)UDP受信用ソケットバッファのサイズです。最大値の64Kにしておきます。64000


※1 https://files.ettus.com/manual/page_dboards.html


参考

NI-USRPドライバでOpen時にエラーが出て、USRPが接続できないんだけど。
http://mikioblog.dolphinsystem.jp/2017/06/ni-usrpfpga.html


USRPネットワーク接続時のデータ落ちを防ぐ (環境構築編)
http://mikioblog.dolphinsystem.jp/2016/07/usrp.html


コメント