NI USRP のサンプルを紐解く (6) ~ niUSRP EX Command Delay.vi

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

前回までは本当にシンプルな物、最初に見たほうがいいものを紹介しました。

今回から名称順に見ていこうかと思います。今回は「niUSRP EX Command Delay.vi」です。

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


niUSRP EX Command Delay.vi

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


名前順にソートされている場合一番上にくるサンプルが「niUSRP EX Command Delay.vi」です。

名称からは

「送信なの?受信なの?」

「Command Delay ってことは遅延に関係したコマンドってこと?」

とさっぱりわかりません。

検索しても特に出てきません。



いったい何をするのか、探っていきましょう。

フロントパネルを見てみる

サンプルを開くとフロントパネルが表示されます。


基本設定は、「niUSRP EX Rx Continuous Async.vi」ベースのように見えます。

受信のサンプルのようです。(個人的には受信なら「Rx」とつけてほしかったですね。。。)


違いは真ん中の部分でしょうか、


[Reconfiguration Gain]

[Affected Channels]

[Time from Now]

という設定項目と

[Reconfigure ボタン]

[Clear ボタン]

があります。


設定項目を指定した時間後(Delay)に設定できる機能(Command) のようです。

[Ctrl+E] (またはメニュー [ウィンドウ] -> [ブロックダイアグラムを開く] )でブロックダイアグラムを見てみましょう。


ブロックダイアグラムを見る

ブロックダイアグラムはこのようになっています。


基本構造は以前紹介したサンプルと一緒ですね。

① 初期化の部分

② 処理のループの部分

③ 終了処理の部分

でできています。



①初期化の部分


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

左から

①USRPデバイスのオープン


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

名称デフォルト設定値について
Device Name192.168.10.2USRP のデバイス名を入力します。
Ethernet で接続している時はIP で設定します。
USRP-RIO のように PCIe (MXI) ケーブルで
接続しているときは NI MAX で認識しているデバイス名
を入力します。

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

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

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

②最初の受信する時間の設定(開始トリガの設定)

これは第2回に紹介した「NI USRP のサンプルを紐解く (2) ~"niUSRP EX Rx Continuous Sync.vi" Async との違いは?~」にも紹介しましたが、この "Time to Receive First Sample" の時刻を大きくすると実行開始してから設定した時間だけ遅れて受信します。

③RFの設定

なぜかこのサンプルはプロパティノードで設定していますね。

受信の RF 設定のメインとなる関数です。
名称デフォルト設定値について
IQ Rate1Mいわゆるサンプリングレートです。設定可能な
範囲は USRP のハードウェアによります
Carrier Frequency2Gいわゆるキャリア周波数(センター周波数)です。
設定可能な範囲は USRP のハードウェアによります。
Gain1ゲインを設定します。
設定範囲はUSRP のハードウェアによります。
Active AntennaRX1アンテナと書いてありますが、受信するポートの名称を文字列で
指定します。USRP のハードウェアによって多少ことなりますが、
TX/RX 、RX1 などを設定します。

④時刻のセット


指定時間分の計算のために、ここで初期時刻をセットしています。
0でクリアしているのでこの時点から指定時間過ぎたところで受信処理開始(スタートトリガ発行)になります。

⑤受信開始のコマンド

これを実行して受信をスタートします。
実際の受信開始は先に指定したトリガの条件で始まります。

②処理のループの部分


この処理ループは大きく 3つのパートに分かれています。
まず左側では毎回フェッチして受信信号のグラフ表示をしています。
中央のケースストラクチャは [Reconfigure ボタン]が押されたときに実行される関数です。内容的にはフロントパネルの中央にある設定がタイムコマンドで指定された時間だけ遅延してセットされます。
右のケースストラクチャは[Clear ボタン]が押されたときに実行される関数です。内容としてはタイムコマンドをクリアして即時反映させる機能を実装しています。
[終了ボタン]が押されたらループを抜けて終了します。エラーが起きても終了します。

①フェッチ


データをフェッチします。
この関数で USRP から Number of Sample で指定した数の IQ データをフェッチしてグラフ表示のほうに渡しています。

サンプルを参考に受信信号に信号処理させるときはこの関数の出力を使うことになります。

名称デフォルト設定値について
Number of Samples16384USRP から取得する1回あたりのサンプル数を指定します。
Timeout10sタイムアウトとして指定する秒数を指定します。
Actual Rx Timestamp実行して受信をしたタイミングでのタイムスタンプを表示します。

出力データは、2D CDB という形式です。

この形式は 2次元配列の複素数ということで、複数チャネル数分の受信をしてそのうちの 2ch 分を IQ グラフに表示しています。

②リコンフィグ(Command Delay のメイン)



ここではケースストラクチャを使って、 [Reconfigure ボタン]が押されたときに実行される関数です。

まず 「niUSRP Set Command Time.vi」 関数でわざとすぐに設定をするのではなく指定した時間後に設定を有効にする設定をします。

その後に設定したい内容をプロパティノードで指定しています。

(と理解しました。。。)

③設定のクリア


右のケースストラクチャは[Clear ボタン]が押されたときに実行される関数です。内容としてはセットした内容をクリアする機能ではなくタイムコマンドをクリアして即時反映させる機能になります。
(と理解しました)

③終了処理の部分

①タイムコマンドのクリア

②USRP を停止


USRP を停止します。

③USRP デバイスを閉じる


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

まとめ

今回は「niUSRP EX Command Delay.vi」を見てみました。
ファイル名からは私は内容の想像がすぐにはできませんでした。
ベースは基本的な受信のサンプルに、タイムコマンドを使って設定の変更を指定したタイミングでできるようにするサンプルでした。

どのようなケースが想定されるかは使い手の想像力にゆだねられているようなサンプルですね。


0 件のコメント :

コメントを投稿