USRP の受信を一度だけ行う同期のサンプル~niUSRP EX Rx Finite Sync.vi (USRP のサンプルを紐解く (15))

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

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

今回紹介するサンプルはタイトルの「USRP の受信を一度だけ行う同期のサンプル」と言うように一見すごく単純なサンプルのようですが、同期のためのクロックやタイムベースでの設定を理解する上で見たほうが良いサンプルだと思います。

過去に弊社福島のブログでも紹介されたことがあるサンプルです。

早速「niUSRP EX Rx Finite Sync.vi」を紹介します。


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

niUSRP EX Rx Finite Sync.vi

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


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

このサンプルは 1台の USRPから 1度だけ受信をするサンプルなのですが、受信の条件として同期の設定をすることができるサンプルになっています。リファレンスクロックやタイムベースリファレンスを設定し、タイムベースでのトリガに同期して受信するなどができます。


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

下のような GUI を確認できます。




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


名称デフォルト設定値について
Device Name192.168.10.2USRP のデバイス名を入力します。
Ethernet で接続している時はIP で設定します。
USRP-RIO のように PCIe (MXI) ケーブルで
接続しているときは NI MAX で認識している
デバイス名を入力します。
IQ Rate500kいわゆるサンプリングレートです。設定可能な
範囲は USRP のハードによります
Carrier Frequency915Mキャリア周波数を設定します。
設定可能な範囲は USRP のハードによります。
Gain1ゲインを設定します。
設定範囲はUSRP のハードによります。
Active AntennaRX1アンテナと書いてありますが、受信するポート
の名称を文字列で指定します。USRP のハード
によって多少ことなりますが、TX/RX 、RX1
などを設定します。
Enabled Channel0有効なチャネルの番号を指定します。
Number of Samples16384受信するサンプル数を指定します。
Timeout10タイムアウトする時間を秒で指定します。
Coerced IQ Rate実行時に設定された IQレートが表示されます。
Coerced Carrier Frequency実行時に設定されたキャリア周波数が表示されます。
Coerced Gain実行時に設定されたゲインが表示されます。



名称デフォルト設定値について
Reference Frequency SourceInternalリファレンスクロックを指定します。デフォルトはInternal です。
Internal, RefIn, Mimo, GPS の 4種類から選択します
Timebase Clock SourceInternalタイムベースリファレンスを指定します。デフォルトはInternal です。
Internal, PpsIn, Mimo, GPS の 4種類から選択します
Basis Time Synchronous
To Timebase Clock?
OFFタイムベースでの同期に Basis Timeを使うかどうかを選択します。デフォルトは OFF です。
Basis Time0, 0上記 ON の時に、この Basis Time で指定した時間を外部からのタイミング制御信号(例えば、PPSなど)が来たときのエッジの時間は何秒経過したものなのかを設定する項目です。
2つパラメータありますが、whole seconds は秒、fractional seconds は小数部です。
Time to Receive First Sample0, 0同期のトリガが掛かった時刻(=Basis Time)からこの時刻までまって最初のサンプルを受信します。(スタートトリガ)
2つパラメータありますが、whole seconds は秒、fractional seconds は小数部です。
Actual Rx Time実行した際の実際の受信の時間を表示します。
2つパラメータありますが、whole seconds は秒、fractional seconds は小数部です。



Error out

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




右上には IQ 時間波形、右下にはベースバンドパワースペクトラムのグラフがあります。実行しエラーがなければ右側のグラフに IQ 時間波形とスペクトラム波形が表示されます。


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

左から①初期化設定→②受信表示→③終了という流れです。




初期化設定の部分

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

①デバイスオープン
②チャネルの有効化
③スタートトリガタイミングの設定
④リファレンス設定
⑤finite 設定
⑥RF 設定
⑦Basis Time 設定
⑧受信開始


①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 Channel0これも USRP のハードウェアによって 複数チャネルに
対応していることもあります。0, 1 などを設定します。

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


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




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

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

受信が実際に開始される時間です。


④ リファレンス設定


今回のサンプルの同期の部分の設定です。

名称デフォルト設定値について
Reference Frequency SourceInternalリファレンスクロックを指定します。デフォルトは
Internal です。
Internal, RefIn, Mimo, GPS の 4種類から選択します
Timebase Clock SourceInternalタイムベースリファレンスを指定します。デフォルトは
Internal です。
Internal, PpsIn, Mimo, GPS の 4種類から選択します


⑤finite 設定





⑥RF 設定



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

⑦Basis Time 設定


名称デフォルト設定値について
Basis Time Synchronous
To Timebase Clock?
OFFタイムベースでの同期に Basis Timeを使うかどうかを
選択します。デフォルトは OFF です。
Basis Time0, 0上記 ON の時に、この Basis Time で指定した時間を外部からのタイミング制御信号(例えば、PPSなど)が来たときのエッジの時間は何秒経過したものなのかを設定する項目です。
2つパラメータありますが、whole seconds は秒、fractional seconds は小数部です。

Basis Time Synchronous To Timebase Clock? が OFF ならば False ケースで実行開始の時がトリガ開始の時間(Now 設定)になります。

Basis Time Synchronous To Timebase Clock? が ON ならば Next Timebase Edge すなわち指定した Basis Time  まで待機してからトリガをかけます。
そして、別途先に指定してある Start Trigger Time の設定の時間に最初のサンプルが受信されます。

⑤ 受信開始


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

②受信表示の部分

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

このサンプルでは受信は 1度きりなので、特にループ構造は無いです。



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



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

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


② IQ グラフ表示



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

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




CDB をWDT の波形タイプに作り直して計算→表示をしています。


③終了処理

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


①USRP を停止


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

② USRP デバイスを閉じる


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

実行してみる

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

最初はデフォルトのままで実行してみました。


受信されて、Actual Rx Time は [2,0] で、Time to Receive First Sampleと同じでした。





さて、Basis Time Synchronous To Timebase Clock? を ON にした時の Basis Time  の設定ですが、外部からのタイミング制御信号例えば、PPSなどが来たときのエッジの時間は何秒経過したものなのかを設定する項目です。
つまりエッジが来た時のスタート時刻を Basis Time にしてしまうという処理です。

そして、Time to Receive First Sampleになったら実際の受信をするということになります。

ですので、以下のような[Basis Time < Time to Receive First Sample] の設定は動作します。(厳密にいうと Basis Time と Time to Receive First Sample差が Timeout 以内)

逆の場合[
Basis Time > Time to Receive First Sample]はタイムアウトしてしまいます。つまり時間が既に過ぎているのでいつまでたっても受信できないのでタイムアウトとなるのです。

普通は 
Basis Timeはデフォルトの 0 にしておくのが普通だと思います。

まとめ

このサンプルの目的はトリガソース、 Basis Time と Time to Receive First Sample の関係についての説明が主な目的になるかと思います。

finite にしているのはソースとして外部トリガと信号があるならば、実際に正しく受信できるか目で落ち着いて確認できるからなんだろうと思います。

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

0 件のコメント :

コメントを投稿