こんにちは、ドルフィンシステムの笹生です。
今回で 17回目の USRP のサンプルについての紹介となります。
今回紹介するサンプルはタイトルの「USRP 2台を MIMOケーブルで接続して同期受信するサンプル」です。このサンプルは MIMO ケーブルを使用できるデバイス (Ettus USRP 2/N2x0 シリーズ、NI USRP-2920/2921/2922/2930/2932) 限定のサンプルになります。
本サンプルを動作させるには上記 USRP が 2台と MIMO ケーブルが必須です。
それでは「niUSRP EX Rx Multiple Synchronized Inputs (MIMO Expansion).vi 」を見ていきましょう。
サンプルプログラムの開き方につきましては第一回のブログを参照してください。
ちなみに NI USRP-2922/2930/2932 や、2940//2942/2943/ 2950/2952/2953 については最終注文受付日が2023/12/29 になっており、それ以降は注文が出来なくなるようですので注意してください。(ドータボードとして BX, SBX を搭載しているものがディスコンになるようです。2023/06/20現在)
niUSRP EX Rx Multiple Synchronized Inputs (MIMO Expansion).vi
名前順にソートされて17番目のサンプルが「niUSRP EX Rx Multiple Synchronized Inputs (MIMO Expansion).vi 」です。
このサンプルは 2台の USRP を MIMO ケーブルで同期させての2つのチャネルから受信するサンプルになります。ただし、MIMO ケーブルに対応している USRP はEttus USRP 2/N2x0 シリーズ、NI USRP-2920/2921/2922/2930/2932 になります。それ以外のデバイスではこのサンプルは使用できません。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
MIMOケーブルとは?
https://files.ettus.com/manual/page_usrp2.html#usrp2_mimocable
Ettus Research の Webサイトには以下の様な説明があります。(機械翻訳しています)
MIMO ケーブルを使用すると、2 つの USRP デバイスが基準クロック、時刻同期、およびイーサネット インターフェイスを共有できるようになります。デバイスの 1 つが、そのクロックと時刻参照を MIMO ケーブルに同期します。このデバイスをスレーブ、もう一方のデバイスをマスターと呼びます。
- スレーブ デバイスは、マスター デバイスからクロックと時刻の基準を取得します。
- マスターとスレーブは個別に使用することも、マルチデバイス構成で使用することもできます。
- 外部クロックはオプションであり、マスター デバイスにのみ供給される必要があります。
共有イーサネットモード
共有イーサネット モードでは、構成内の 1 つのデバイスのみがイーサネットに接続できます。
- クロック基準、時間基準、およびデータは MIMO ケーブルを介して通信されます。
- マスターとスレーブは、同じサブネット内で異なる IPv4 アドレスを持つ必要があります。
デュアルイーサネットモード
デュアル イーサネット モードでは、構成内の両方のデバイスがイーサネットに接続されている必要があります。
- MIMO ケーブルを介して通信されるのは、クロック基準と時間基準のみです。
- マスターとスレーブは、異なるサブネットに異なる IPv4 アドレスを持つ必要があります。
スレーブの設定
スレーブが MIMO ケーブル経由でマスターと同期するには、スレーブ デバイスで次のクロック構成を設定する必要があります。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
今回のサンプルでは共有イーサネットモードになり、USRP 間を MIMO ケーブルで接続して、イーサネットケーブルは一本で PC とマスター USRP 接続します。
それではフロントパネルを見てみましょう。
下のような GUI を確認できます。
フロントパネルとしては大きく分けて、左側が設定関連、右側が受信信号のグラフ表示になります。
Start Trigger Time
Actual Rx Timestamp
受信開始からの経過時間が表示されます。
Error out
エラーが発生したときに表示されます。
右上には IQ 時間波形、右下にはベースバンドパワースペクトラムのグラフがあります。実行しエラーがなければ右側のグラフに IQ 時間波形とスペクトラム波形が表示されます。最大 2CH 分が表示されます。
初期化設定の部分
初期化設定の部分では 大きく7つの処理をしています。①USRPデバイスのオープン
Device Name への設定の仕方としてマスターを先に設定します。
開くことが出来たら、セッションハンドルを出力しますのでこの後の設定などはそのセッションハンドルを基に行います。
②チャネルの有効化
この部分は USRP のプロパティノードを使用しています。
使いたい チャネルの有効化をするプロパティです。
③スタートトリガタイミングの設定
設定項目は以下のクラスタになります。受信が実際に開始される時間です。コメントにあるように MIMO ケーブルでの同期を確立するためにこの設定は必須です。
④ IQ レート、キャリア周波数設定
IQ レートをプロパティノードで設定しています。
⑤その他 RF 設定
⑥内部クロックの時刻を 0 にセット
受信が開始され、指定されたタイミングで取得した RF 信号が IQ データにダウンコンバートされてバッファに蓄えられていきますので、後段の②受信表示の部分でデータを PC に吸いあげます。
②受信表示の部分
②受信表示の部分では、USRP でRF 信号が IQ データにダウンコンバートされてバッファに蓄えられていきますので、データを PC に吸いあげる(フェッチする)ことが主な処理です。また取得データをグラフに表示する処理も行っています。
このサンプルでは受信は 1度きりなので、特にループ構造は無いです。
本サンプルの受信の処理ループは For ループでスイープ分のステップを実行します。
構造としては以下の様になっています。
① While Loop
外側の四角い枠が While Loop です。Stop ボタンを押されるか、エラーが発生したらループを停止する条件で実装されています。
② 受信データのフェッチ
この関数で USRP からIQ データをフェッチしてグラフ表示のほうに渡しています。この関数では 2D CDB という形式にしており、マルチチャネルに対応してデータを取得しています。
CDB は Complex Double なので倍精度複素数のデータですので 2次元の複素数配列が取得されます。
基本的には行がチャネルになりますので、サンプルの様に指標配列の For Loop で簡単にチャネルのデータを得ることができます。
ちなみにサンプル数の指定をしていないので、デフォルトの [100000] サンプル分データをフェッチします。
関数の下部にある選択できるリストから出力するデータフォーマットを変更することができます。もちろん変更した場合はそのあとの処理も対応する必要があります。
③グラフ表示
フェッチした 2D の複素である IQ データを、IQ グラフと、スペクトラムに変換しグラフに表示しています。
③終了処理
実行してみる
使用する USRP は NI USRP 2922(マスター) と Ettus USRP2(スレーブ)で実行してみます。
まず、USRP の MIMO Expansion のコネクタを MIMO ケーブルで接続します。マスター側の USRP と PC をイーサネットで接続します。
2台の USRP の電源を入れます。
念のため uhd_find_device のコマンドでデバイスを確認します。
2台確認できました。それぞれの IP をVI の Device Names に設定して実行します。
2ch 分の IQ 時間波形とそのスペクトラム無事にが表示されました。
0 件のコメント :
コメントを投稿