こんにちは、ドルフィンシステムの笹生です。
今回で 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 Name | 192.168.10.2 | USRP のデバイス名を入力します。 Ethernet で接続している時はIP で設定します。 USRP-RIO のように PCIe (MXI) ケーブルで 接続しているときは NI MAX で認識している デバイス名を入力します。 |
IQ Rate | 500k | いわゆるサンプリングレートです。設定可能な 範囲は USRP のハードによります |
Carrier Frequency | 915M | キャリア周波数を設定します。 設定可能な範囲は USRP のハードによります。 |
Gain | 1 | ゲインを設定します。 設定範囲はUSRP のハードによります。 |
Active Antenna | RX1 | アンテナと書いてありますが、受信するポート の名称を文字列で指定します。USRP のハード によって多少ことなりますが、TX/RX 、RX1 などを設定します。 |
Enabled Channel | 0 | 有効なチャネルの番号を指定します。 |
Number of Samples | 16384 | 受信するサンプル数を指定します。 |
Timeout | 10 | タイムアウトする時間を秒で指定します。 |
Coerced IQ Rate | | 実行時に設定された IQレートが表示されます。 |
Coerced Carrier Frequency | | 実行時に設定されたキャリア周波数が表示されます。 |
Coerced Gain | | 実行時に設定されたゲインが表示されます。 |
名称 | デフォルト | 設定値について |
Reference Frequency Source | Internal | リファレンスクロックを指定します。デフォルトはInternal です。 Internal, RefIn, Mimo, GPS の 4種類から選択します |
Timebase Clock Source | Internal | タイムベースリファレンスを指定します。デフォルトはInternal です。 Internal, PpsIn, Mimo, GPS の 4種類から選択します |
Basis Time Synchronous To Timebase Clock? | OFF | タイムベースでの同期に Basis Timeを使うかどうかを選択します。デフォルトは OFF です。 |
Basis Time | 0, 0 | 上記 ON の時に、この Basis Time で指定した時間を外部からのタイミング制御信号(例えば、PPSなど)が来たときのエッジの時間は何秒経過したものなのかを設定する項目です。 2つパラメータありますが、whole seconds は秒、fractional seconds は小数部です。 |
Time to Receive First Sample | 0, 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 Channel | 0 | これも USRP のハードウェアによって 複数チャネルに 対応していることもあります。0, 1 などを設定します。
|
文字列で与えます。通常は 0 です。USRP の種類によって 2ch 使えるものは 1 も設定できます。
③スタートトリガタイミングの設定
設定項目は以下のクラスタになります。
名称 | デフォルト | 設定値について |
whole seconds | 1 | 実行するトリガまでの時間の秒を指定します |
fractional seconds | 0 | 実行するトリガまでの時間の秒未満の値を指定します |
受信が実際に開始される時間です。
④ リファレンス設定
今回のサンプルの同期の部分の設定です。
名称 | デフォルト | 設定値について |
Reference Frequency Source | Internal | リファレンスクロックを指定します。デフォルトは Internal です。 Internal, RefIn, Mimo, GPS の 4種類から選択します |
Timebase Clock Source | Internal | タイムベースリファレンスを指定します。デフォルトは Internal です。 Internal, PpsIn, Mimo, GPS の 4種類から選択します |
⑤finite 設定
⑥RF 設定
名称 | デフォルト | 設定値について |
IQ Rate | 500k | いわゆるサンプリングレートです。設定可能な 範囲は USRP のハードによります |
Carrier Frequency | 915M | キャリア周波数を設定します。 設定可能な範囲は USRP のハードによります。 |
Gain | 1 | ゲインを設定します。 設定範囲はUSRP のハードによります。 |
Active Antenna | RX1 | アンテナと書いてありますが、受信するポート の名称を文字列で指定します。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 Time | 0, 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 件のコメント :
コメントを投稿