USRP の受信設定を動的に変更するサンプル ~ niUSRP EX Rx Continuous Async Reconfig on the Fly.vi(USRP のサンプルを紐解く (12))

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

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

今回紹介するサンプルは 第一回で紹介している「niUSRP EX Rx Continuous Asyc.vi」の派生形の一つで、実行中に動的に受信設定を変更するサンプル「niUSRP EX Rx Continuous Async Reconfig on the Fly.vi」を紹介します。

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


niUSRP EX Rx Continuous Async Reconfig on the Fly.vi

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


名前順にソートされて10番目のサンプルが「niUSRP EX Rx Continuous Async Reconfig on the Fly.vi」です。

(じつは前回紹介したサンプルは 6番目で、今回のサンプルの間に 3つサンプルがあるのですが、2945/55 限定だったり X410 限定だったりするのでスキップしました。)

このサンプルは 1台の USRPデバイス、1受信ポートで連続的に受信を行うサンプルですが、実行中に受信の設定を変更できるものになります。

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


フロントパネルとしては、左側が設定関連、中央が設定の確認用表示関連、右側が受信信号のグラフ表示になります。



名称デフォルト設定値について
Device Name192.168.10.2USRP のデバイス名を入力します。
Ethernet で接続している時はIP で設定します。
USRP-RIO のように PCIe (MXI) ケーブルで
接続しているときは NI MAX で認識しているデバイス名
を入力します。
IQ Rate[S\sec]1Mいわゆるサンプリングレートです。設定可能な
範囲は USRP のハードウェアによります
Carrier Frequency2Gいわゆるキャリア周波数(センター周波数)です。
設定可能な範囲は USRP のハードウェアによります。
Coerced IQ Rate[S/sec]100k実行したときに実際に設定された IQレートが表示されます。
Coerced Carrier Frequency100k
実行したときに実際に設定されたキャリア周波数が表示されます。


名称デフォルト設定値について
Active AntennaRX1アンテナと書いてありますが、受信するポートの名称を文字列で
指定します。USRP のハードウェアによって多少ことなりますが、
TX/RX 、RX1 などを設定します。
Enabled Channel0これも USRP のハードウェアによって 複数チャネルに
対応していることもあります。0, 1 などを設定します。
Gain1ゲインを設定します。
設定範囲はUSRP のハードウェアによります。
Number of Samples16384USRP から取得する1回あたりのサンプル数を指定します。
Timeout10sタイムアウトとして指定する秒数を指定します。
Coerced gain実行したときに実際に設定された ゲインが表示されます。
Actual Rx Timestamp実行して受信をしたタイミングでのタイムスタンプを表示します。

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




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

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


初期化の部分

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

左から

①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 で認識しているデバイス名を設定します。

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


②チャネルの有効化

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

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

名称デフォルト設定値について
Enabled Channel0これも USRP のハードウェアによって 複数チャネルに
対応していることもあります。0, 1 などを設定します。

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



③各種 RF 設定



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

ここでは Carrier Frequency と Gain と Active Antenna には制御器のローカル変数を使用しており、実行中に変更できるようにするために実体の制御器は受信ループ内で使用されています。


④ 受信開始

設定後、この関数で受信開始を USRP に指示します。

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

②データ受信ループの部分

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

このサンプルでは、フェッチの前に各種受信設定を変更できるようにしています。


初期化でローカル変数での設定をしていた Carrier Frequency と Gain と Active Antennaの制御器は、ここでプロパティノードで毎ループ設定更新しています。
その後フェッチをして、グラフ表示をする流れです。



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

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

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


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

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

WDT は Waveform Data Type の略で、配列に時間データが付与された波形データの形式を表しています。


関数の下部にある選択できるリストから出力するデータフォーマットを変更することができます。もちろん変更した場合はそのあとの処理も対応する必要があります。

③グラフ表示

フェッチした IQ データをスペクトラム、IQ 時間軸で表示しています。

③終了処理

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

①USRP を停止


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

② USRP デバイスを閉じる


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

実行してみる

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

Device Name に NI MAX で取得した名称を指定して実行します。


実行すると、右側上のグラフには受信した IQ グラフ、右下にはスペクトラムが表示されます。

実行中に Carrier Frequency と Gain と Active Antennaの設定を変更することができます。


まとめ

最初のほうで参考にできる受信のサンプルではないでしょうか。
実際多くのサンプルは初期化時に設定をしてその後変更できないので、こうすれば変更させることができるという例を示しているのは良いと思います。

一方でこのサンプルでは恐らく変更した直後の受信データは不正なデータが含まれている可能性もあったりするので、実用的にするには工夫が必要になると思います。

弊社でこのように途中で変更する場合には変更に関しては別ループにするなどしてフェッチに影響がでてデータ落ちなどしないようにします。

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

0 件のコメント :

コメントを投稿