こんにちは、ドルフィンシステムの笹生です。
今回で 18回目の USRP のサンプルについての紹介となります。
今回紹介するサンプルはタイトルの「2台の USRP を PPS で同期して受信するサンプル」です。このサンプルは PPSトリガ信号入力がある USRP デバイスであれば使用可能です。
本サンプルを動作させるために
・PPSトリガ信号が入力ができる USRP が 2台
・外部のPPSトリガ信号源
・外部のリファレンス10MHz クロック信号源
が必要です。
それでは「niUSRP EX Rx Multiple Synchronized Inputs (PPS Trig).vi 」を見ていきましょう。
サンプルプログラムの開き方につきましては第一回のブログを参照してください。
ちなみに前回もお伝えしましたが、USRP の古い型番の物はそろそろ販売中止になるものも出てくるそうですのでご注意ください。また 8月の価格改定で価格が上昇する可能性もございますので合わせてご注意ください。
niUSRP EX Rx Multiple Synchronized Inputs (PPS Trig).vi
名前順にソートされて17番目のサンプルが「niUSRP EX Rx Multiple Synchronized Inputs (PPS Trig).vi 」です。
このサンプルは 2台の USRP を 外部の PPS トリガで同期させての2つのチャネルから受信するサンプルになります。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
PPSトリガとは?
PPS = Pulse Per Second の略で、1秒周期のパルスのことを言います。
GPS受信器では出力として PPS トリガと 10MHz リファレンスクロックを出すものがあります。USRP にはこの PPS の立ち上がりエッジをトリガとして使用し、受信を開始することができます。このサンプルでは PPS 以外に 10MHz リファレンスクロックも与えてあげる必要があります。
弊社でPPS トリガのソース、リファレンスクロックのソースとして良く使っているのが オクトクロック-G OctoClock-G です。今回もオクトクロック-G を使用します。
ーーーーーーーーーーーーーーーーーーーーー
今回のサンプルでは共有イーサネットモードになり、USRP 間を MIMO ケーブルで接続して、イーサネットケーブルは一本で PC とマスター USRP 接続します。
それではフロントパネルを見てみましょう。
下のような GUI を確認できます。
Start Trigger Time
Actual Rx Timestamp
受信開始からの経過時間が表示されます。
Error out
エラーが発生したときに表示されます。
右上には IQ 時間波形、右下にはベースバンドパワースペクトラムのグラフがあります。実行しエラーがなければ右側のグラフに IQ 時間波形とスペクトラム波形が表示されます。最大 2CH 分が表示されます。
初期化設定の部分
初期化設定の部分では 大きく8つの処理をしています。①USRPデバイスのオープン
Device Name への設定の仕方としてマスターを先に設定します。
開くことが出来たら、セッションハンドルを出力しますのでこの後の設定などはそのセッションハンドルを基に行います。
②チャネルの有効化
この部分は USRP のプロパティノードを使用しています。
使いたい チャネルの有効化をするプロパティです。
コメントにあるように、2台目の dev1 の RF0 は ch番号2 になるようです。
③スタートトリガタイミングの設定
設定項目は以下のクラスタになります。受信が実際に開始される時間です。コメントにあるように MIMO ケーブルでの同期を確立するためにこの設定は必須です。
④ IQ レート、キャリア周波数設定
IQ レートをプロパティノードで設定しています。
⑤USRP のデバイス毎のアンテナ、リファレンス、PPSソース設定
2台の USRP dev0,dev1 毎にアクティブアンテナの設定と、ゲイン、リファレンスクロックソースとしてリファレンス10MHz入力、タイムベースクロックとして PPS入力を指定します。
⑥設定の反映
この時点で設定を反映させておきます。
⑦デバイス間の同期実行
このサブVIは、USRP サンプルフォルダにある VI "niUSRP EX Synchronize Clocks Multi-Device (PPS).vi"を使っています。
このサブVI は複数台の同期に使うのもので、PPS以外にも 内蔵GPS の PPSで同期させるときにも使用できるようです。
今回は内蔵GPS の PPSは使用せず、マスターの繰り返しアルゴリズムを使っているようで、デフォルト20回繰り返し同期を試すようです。
このサブ VI はまた別途時間がある際に詳しく解析したいと思います。
受信が開始され、指定されたタイミングで取得した 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 は NI USRP 2943R と NI USRP 2954Rの2台 + OctoClock-Gで実行してみます。
2台の USRP に OctoClock-G から PPS と 10MHz Refを接続し、電源を入れます。
今回は USRP RIO なので、IP の代わりにデバイス名を Device Names に設定して実行します。
2ch 分の IQ 時間波形とそのスペクトラム無事に表示されました。
0 件のコメント :
コメントを投稿