こんにちは、ドルフィンシステムの笹生です。
今回で 16回目の USRP のサンプルについての紹介となります。
今回紹介するサンプルはタイトルの「USRP 1台でマルチチャネルの受信を行うサンプル」です。このサンプルでは、[B210/NI USRP 2900/2901]、[NI USRP 2945/2955/X410]、[NI USRP 294x/295x] で複数のアンテナポート = マルチチャネルの受信を行うサンプルになっています。
[B210/NI USRP 2900/2901]と[NI USRP 294x/295x]では 2CH、[NI USRP 2945/2955/X410]では 4CH の受信が可能です。
早速「niUSRP EX Rx Multiple Inputs (Single Device, Multi Channel).vi」を紹介します。
サンプルプログラムの開き方につきましては第一回のブログを参照してください。
niUSRP EX Rx Multiple Inputs (Single Device, Multi Channel).vi
サンプルのフォルダを開くと以下のようにずらずらっと並んでおります
名前順にソートされて16番目のサンプルが「niUSRP EX Rx Multiple Inputs (Single Device, Multi Channel).vi」です。
このサンプルは 1台の USRPの複数のチャネルから受信するサンプルで基本的なものになります。
それではフロントパネルを見てみましょう。
下のような GUI を確認できます。
フロントパネルとしては大きく分けて、左側が設定関連、右側が受信信号のグラフ表示になります。
名称 | デフォルト | 設定値について |
Device Name | 192.168.10.2 | USRP のデバイス名を入力します。 Ethernet で接続している時はIP で設定します。 USRP-RIO のように PCIe (MXI) ケーブルで 接続しているときは NI MAX で認識している デバイス名を入力します。 |
Number of Samples Per Fetch | 16384 | 1フェッチあたり受信するサンプル数を指定します。 |
IQ Rate [S/sec] | 1M | いわゆるサンプリングレートです。設定可能な 範囲は USRP のハードによります |
Timeout | 10 | タイムアウトする時間を秒で指定します。 |
Enabled Channel | 0,1 | 2ch の場合 0,1 を設定し、4ch の場合 (USRP-2945/2955) は 0,1,2,3 を設定します。 |
Channel N Active Antenna (N=0,1,2,3) | RX1 | アンテナと書いてありますが、受信するポート の名称を文字列で指定します。USRP のハード によって多少ことなりますが、TX/RX 、RX1 などを設定します。 |
Channel N Gain (N=0,1,2,3) | 1 | ゲインを設定します。 設定範囲はUSRP のハードによります。
|
名称 | デフォルト | 設定値について |
Channel N Carrier Frequency (N=0,1,2,3) | 2G | キャリア周波数を設定します。 設定可能な範囲は USRP のハードによります。 ハードによってタブを切り替えて設定します。 |
Start Trigger Time名称 | デフォルト | 設定値について |
whole seconds | 1 | 開始ボタンから実行するトリガまでの時間の秒を指定します |
fractional seconds | 0 | 開始ボタンから実行するトリガまでの時間の秒未満の値を指定します |
Actual Rx Timestamp
受信開始からの経過時間が表示されます。
Error outエラーが発生したときに表示されます。
右上には IQ 時間波形、右下にはベースバンドパワースペクトラムのグラフがあります。実行しエラーがなければ右側のグラフに IQ 時間波形とスペクトラム波形が表示されます。最大 4CH 分が表示されます。
ブロックダイアグラムはこのような感じです。
左から①初期化設定→②受信表示→③終了という流れです。
初期化設定の部分
初期化設定の部分では 大きく7つの処理をしています。
①デバイスオープン
②チャネルの有効化
③スタートトリガタイミングの設定
④IQレート設定
⑤USRP のモデル別でRF 設定(マルチチャネル)
⑥次のタイムエッジ初期化
⑦受信開始
①USRPデバイスのオープン
"niUSRP Open Rx Session.vi" でデバイスの受信側 Rx を開きます。まずはこの関数を呼ばないことには始まりません。必須です。
名称 | デフォルト | 設定値について |
device Names |
| USRP のデバイス名を入力します。 Ethernet で接続している時はIP で設定します。
ここでは 2つのイーサネットポートを[+] の文字列で 結合して渡しています。 |
Device Name への設定の仕方は USRP のデバイスの種類によって異なります。
Ethernet で接続するタイプの USRP では USRP に設定してある IP アドレスを設定します。PCIe ケーブル接続の USRP では、NI MAX で認識しているデバイス名を設定します。
開くことが出来たら、セッションハンドルを出力しますのでこの後の設定などはそのセッションハンドルを基に行います。
②チャネルの有効化
この部分は USRP のプロパティノードを使用しています。
使いたい チャネルの有効化をするプロパティです。
名称 | デフォルト | 設定値について |
Enabled Channel | 0,1 | 2ch の場合 0,1 を設定し、4ch の場合 (USRP-2945/2955) は 0,1,2,3 を設定します。 |
③スタートトリガタイミングの設定
設定項目は以下のクラスタになります。
名称 | デフォルト | 設定値について |
whole seconds | 1 | 実行するトリガまでの時間の秒を指定します |
fractional seconds | 0 | 実行するトリガまでの時間の秒未満の値を指定します |
受信が実際に開始される時間です。
④ IQ レート設定
IQ レートをプロパティノードで設定しています。
名称 | デフォルト | 設定値について |
IQ Rate [S/sec] | 1M | いわゆるサンプリングレートです。設定可能な 範囲は USRP のハードによります |
⑤各種 RF 設定と設定値取得
この部分でも USRP のプロパティノードを使用しています。
[Model] を取得してその文字列によって、その後の設定をケースストラクチャで分けています。
[Model] デフォルトの場合→ 294x/295x など
タブの [NI-294x/295x] の方の設定でCarrier Freq は設定してます。
プロパティノード名 | 設定元 | 設定値について |
Active Channel | 0 | ch 0 の設定を指定します。 |
Carrier Frequency | channel 0 carrier frequency [Hz] | フロントパネルの294x/295x シリーズの USRP の ch 0 の 設定が設定されます。 |
Gain | Rx Gain | フロントパネル USRP の ch0 の Rx Gain設定が設定されます。 |
Active Antenna | Rx Active Antenna | フロントパネルの ch0 の設定が設定されます。 |
Active Channel | 1 | ch 1 の設定を指定します。 |
Carrier Frequency | channel 1 carrier frequency [Hz] | フロントパネルの294x/295x シリーズの USRP の ch 1 の 設定が設定されます。 |
Gain | Rx Gain | フロントパネル USRP の ch1 の Rx Gain設定が設定されます。 |
Active Antenna | Rx Active Antenna | フロントパネルの ch1 の設定が設定されます。 |
[Model] [NI USRP-2945/2955/X410] の場合→ 2945/2955/X410 など
タブの [NI-2945/2955/X410] の方の設定でCarrier Freq は設定してます。
プロパティノード名 | 設定元 | 設定値について |
Active Channel | 0 | ch 0 の設定を指定します。 |
Carrier Frequency | channel 0 carrier frequency [Hz] | フロントパネルの294x/295x シリーズの USRP の ch 0 の 設定が設定されます。 |
Gain | Rx Gain | フロントパネル USRP ch0 の Rx Gain設定が設定されます。 |
Active Antenna | Rx Active Antenna | フロントパネルのch 0 の設定が設定されます。 |
Active Channel | 1 | ch 1 の設定を指定します。 |
Carrier Frequency | channel 1 carrier frequency [Hz] | フロントパネルの294x/295x シリーズの USRP の ch 1 の 設定が設定されます。 |
Gain | Rx Gain | フロントパネル USRP ch1 の Rx Gain設定が設定されます。 |
Active Antenna | Rx Active Antenna | フロントパネルのch 1 の設定が設定されます。 |
Active Channel | 2 | ch 2 の設定を指定します。 |
Carrier Frequency | channel 0 carrier frequency [Hz] | フロントパネルの294x/295x シリーズの USRP の ch 2 の 設定が設定されます。 |
Gain | Rx Gain | フロントパネル USRP ch2 の Rx Gain設定が設定されます。 |
Active Antenna | Rx Active Antenna | フロントパネルのch 2 の設定が設定されます。 |
Active Channel | 3 | ch 3 の設定を指定します。 |
Carrier Frequency | channel 1 carrier frequency [Hz] | フロントパネルの294x/295x シリーズの USRP の ch 3 の 設定が設定されます。 |
Gain | Rx Gain | フロントパネル USRP ch3 の Rx Gain設定が設定されます。 |
Active Antenna | Rx Active Antenna | フロントパネルのch 3 の設定が設定されます。
|
[Model] "B210", "NI USRP-2901" の場合
タブの [NI-2900/2901] の方の設定でCarrier Freq は設定してます。
プロパティノード名 | 設定元 | 設定値について |
Carrier Frequency | Rx (or Tx) carrier frequency [Hz] | フロントパネルの2900/2901 シリーズの USRP の Rx (or Tx) の 設定が設定されます。 |
Active Channel | 0 | ch 0 の設定を指定します。 |
Gain | Rx Gain | フロントパネル USRP の Rx Gain設定が設定されます。 |
Active Antenna | Rx Active Antenna | フロントパネルの設定が設定されます。 |
Active Channel | 1 | ch 1 の設定を指定します。 |
Gain | Rx Gain | フロントパネル USRP の Rx Gain設定が設定されます。 |
Active Antenna | Rx Active Antenna | フロントパネルの設定が設定されます。 |
⑥次のタイムエッジの初期化
受信開始前に内部の次のタイムエッジを 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 を停止してUSRP デバイスを閉じます。
①USRP を停止
受信側でイニシエートしているので、受信側では USRP を停止します。
② USRP デバイスを閉じる
USRP のセッションを閉じて終了です。
実行してみる
使用する USRP は USRP 2954 で実行してみます。
2ch 分の IQ 時間波形とそのスペクトラムが表示されました。
まとめ
このサンプルは複数ch 受信の比較的簡易なサンプルだと思います。
このサンプルの難易度は初心者向け(★☆☆)としたいと思います。
0 件のコメント :
コメントを投稿