USRP の受信を2つのイーサネット接続で行うサンプル~niUSRP EX Rx Dual Ethernet Connection.vi (USRP のサンプルを紐解く (14))

 こんにちは、ドルフィンシステムの笹生です。

今回で 14回目の USRP のサンプルについての紹介となります。

今回紹介するサンプルはちょっとマニアックなサンプルになります。USRP-RIO シリーズ等で、背面の イーサネット SFP+ポート(デフォルトではRJ-45に変換した1GbE と 10GbE) を2つ接続して同時に受信するサンプル「niUSRP EX Rx Dual Ethernet Connection.vi」を紹介します。

PC との物理的な接続や設定については別途紹介したいと思います。本記事ではサンプルの解説に絞ってまいります。

サンプルプログラムの開き方につきましては第一回のブログを参照してください。

niUSRP EX Rx Dual Ethernet Connection.vi

サンプルのフォルダを開くと以下のようにずらずらっと並んでおります


名前順にソートされて14番目のサンプルが「niUSRP EX Rx Dual Ethernet Connection.vi」です。

このサンプルは 1台の USRP-RIO デバイス、複数の受信ポート(2944/2954の場合は 4ch、それ以外は 2ch)で連続的に受信を行うサンプルですが、USRP 背面の 2つのイーサネットポート(SFP+)で並行して取得できるになります。


それではフロントパネルを見てみましょう。

開くと位置がずれて開いてしまうと思いますが、垂直水平バーで位置を調整してください。

調整すると下のような GUI を確認できます。


フロントパネルとしては大きく分けて、左側が設定関連、右側が受信信号のグラフ表示になります。

名称デフォルト設定値について
Connection Address 1192.168.10.2USRP 背面のどちらかのイーサポートの IP アドレスを入力します。
Connection Address 2192.168.10.2USRP 背面のもう一方のイーサポートの IP アドレスを入力します。
デフォルトで同じ IP になっていますが、本来は違うアドレスです。
Address Pair実行時にConnection Address 1と2 を結合した文字列が表示されます。

下のコメントはこう書いてあります。

"The IP address pair will be passed to the niUSRP Open Rx Session VI in this format.

Note: Refer to this formatting example when creating a new VI with dual streaming and ensure consistency before passing it to another VI."

「IP アドレス ペアは、この形式で niUSRP Open Rx Session VI に渡されます。

メモ: デュアルストリーミングを使用して新しい VI を作成する場合は、このフォーマットの例を参照し、別の VI に渡す前に一貫性を確認してください。」



名称デフォルト設定値について
Number of Samples Per Fetch16384USRP から取得する1回あたりのサンプル数を指定します。
IQ Rate[S/sec]1Mいわゆるサンプリングレートです。設定可能な
範囲は USRP のハードウェアによります
Timeout10sタイムアウトとして指定する秒数を指定します。
Enabled Channel0,1デュアル ストリーミングをサポートするには、2 つ以上のチャネルを
有効にする必要があります。
2ch の場合 0,1 を設定し、4ch の場合 (USRP-2945/2955)は 0,1,2,3 を
設定します。



各ch の RF 設定が 4つ横に並んでいます。

上記 Enabled Channel で指定した ch の番号が設定されます。

名称デフォルト設定値について
Channel X Carrier Frequency[Hz]2GChannel X (X=0,1,2,3) のキャリア周波数(センター周波数)です。
設定可能な範囲は USRP のハードウェアによります。
Channel X Gain10Channel X (X=0,1,2,3) のゲインを設定します。
設定範囲はUSRP のハードウェアによります。
Channel X Active AntennaRX1アンテナと書いてありますが、受信するポートの名称を文字列で
指定します。USRP のハードウェアによって多少ことなりますが、
TX/RX 、RX1 などを設定します。


Start Trigger Time

名称デフォルト設定値について
whole seconds1開始ボタンから実行するトリガまでの時間の秒を指定します
fractional seconds0開始ボタンから実行するトリガまでの時間の秒未満の値を指定します

Actual Rx Timestamp

受信開始からの経過時間が表示されます。


Error out

エラーが発生したときに表示されます。


実行しエラーがなければ右側のグラフに IQ 時間波形とスペクトラム波形が表示されます。


ブロックダイアグラムはこのような感じです。

まずは一番左から受信側の①初期化→②受信ループ→③終了という流れです



初期化の部分

初期化の部分では 大きく5つの処理をしています。

左から

①アドレスを結合してUSRPデバイスのオープン






"niUSRP Open Rx Session.vi" でデバイスの受信側 Rx を開きます。まずはこの関数を呼ばないことには始まりません。必須です。

名称デフォルト設定値について
device Names
USRP のデバイス名を入力します。
Ethernet で接続している時はIP で設定します。

ここでは 2つのイーサネットポートを[+] の文字列で
結合して渡しています。

Device Name への設定の仕方は USRP のデバイスの種類によって異なります。

Ethernet で接続するタイプの USRP では USRP に設定してある IP アドレスを設定します。PCIe ケーブル接続の USRP では、NI MAX で認識しているデバイス名を設定します。

今回のサンプルでは2つのイーサネットポートを[+] の文字列で結合して渡しています。

開くことが出来たら、セッションハンドルを出力しますのでこの後の設定などはそのセッションハンドルを基に行います。


②チャネルの有効化



この部分は USRP のプロパティノードを使用しています。

使いたい チャネルの有効化をするプロパティです。

名称デフォルト設定値について
Enabled Channel0,1これも USRP のハードウェアによって 複数チャネルに
対応していることもあります。0, 1 などを設定します。
コメントにも書いてありますが、2つ以上 Enable Channel でしていしてください。

文字列で与えます。通常は 0 です。USRP の種類によって 2ch 使えるものは 1 も設定できます。


③スタートトリガタイミングの設定


設定項目は以下のクラスタになります。

名称デフォルト設定値について
whole seconds1開始ボタンから実行するトリガまでの時間の秒を指定します
fractional seconds0開始ボタンから実行するトリガまでの時間の秒未満の値を指定します


④ IQ レートの設定


プロパティノードで IQ Rate を設定し、設定された実際の IQ Rate を取得して後段受信ループのスペクトラムの表示でで使用しています。


⑤ USRP モデル毎の RF 設定

"NI USRP-2945","NI USRP-2955"のケース


デフォルトのケース

プロパティノードの Model を取得して、開いたデバイスの USRP タイプを取得し、"NI USRP-2945","NI USRP-2955" のケースでは 4ch 分の設定をし、それ以外の USRP (デフォルトのケース)では 2ch 分の設定をしています。

名称デフォルト設定値について
Channel X Carrier Frequency[Hz]2GChannel X (X=0,1,2,3) のキャリア周波数(センター周波数)です。
設定可能な範囲は USRP のハードウェアによります。
Channel X Gain10Channel X (X=0,1,2,3) のゲインを設定します。
設定範囲はUSRP のハードウェアによります。
Channel X Active AntennaRX1アンテナと書いてありますが、受信するポートの名称を文字列で
指定します。USRP のハードウェアによって多少ことなりますが、
TX/RX 、RX1 などを設定します。



⑤ 受信開始


設定後、Next Timebase Edge すなわち指定した Start Tigger Time まで待機してから受信開始を USRP に指示します。

受信が開始され、RF 信号が IQ データにダウンコンバートされてバッファに蓄えられていきますので、後段の②データ受信の部分でデータを PC に吸いあげます。

②受信ループの部分

②受信ループの部分では、USRP でRF 信号が IQ データにダウンコンバートされてバッファに蓄えられていきますので、データを PC に吸いあげる(フェッチする)ことが主な処理です。また取得データをグラフに表示する処理も行っています。


①2D CDB タイプでデータをフェッチ


CDB は Complex Double なので倍精度複素数のデータです。

2DCDB の設定なので、2次元の倍精度複素数の配列として取得しています。

WDT ではないので波形情報は含まれていません。

2D になっている理由は、複数ch 指定しているからです。

行が ch数、列が指定した"Number of Samples Per Fetch" です。


② IQ グラフ表示


CDB タイプをそのままグラフ表示器に接続すると I しか表示されないので、2D CDB の各要素(実部、虚部)を分離して、表示用に2次元の配列にし直しています。

③ ベースバンドスペクトラム表示


このサンプルでは 8回に1回の割合で表示しています。

(恐らく処理が重いので飛び飛びで表示させることでエラーさせない工夫だと思いますがあまりいい方法ではないですね。。。個人的には他のサンプルの様にタイマーで調整したほうがいいと思います。)

2D CDM を ch 毎に処理していて、WDT の波形タイプに作り直して計算→表示をしています。


③終了処理

最期は終了処理で、USRP を停止してUSRP デバイスを閉じます。

①USRP を停止


受信側でイニシエートしているので、受信側では USRP を停止します。

② USRP デバイスを閉じる


USRP のセッションを閉じて終了です。

実行してみる

使用する USRP は USRP 2954 で実行してみます。

今回は デフォルトのファームウェアで実行したため、Port 0 は RJ-45 変換した 1GbE のポート(IP = 192.168.10.2) を指定し、Port 1 は SFP+ を使った 10GbE ポート(IP = 192.168.40.2) を指定して実行しました。


IQ Rate は 1Msps で行ったのでそれぞれの ch のレートはおよそ 32Mbps になります。
Windows のタスクマネージャで確認すると、確かに 2つのイーサネットそれぞれで 32Mbps 相当で受信出来ていることが確認できました。




まとめ

実はこのサンプルはデフォルトの USRP ファームだとPort 0 は RJ-45 変換した 1GbE のポート、Port 1 は SFP+ を使った 10GbE ポートになります。
最高のパフォーマンスを出すためには両方 10GbE となるファームウェアに書き換えて使用する必要があります。
今回の記事ではサンプルの解説が主体なのでそこには触れませんが、色々とマニアックなのでいずれ紹介したいと思います。

このサンプルの難易度は上級者向け(★★★)としたいと思います。

0 件のコメント :

コメントを投稿