こんにちは、ドルフィンシステムの笹生です。
昨年に引き続きあまり説明がされていない USRP のサンプルについて実際に動作させたりしながら紹介していきたいと思います。
サンプルプログラムの開き方は第一回のブログを参照してください。
niUSRP EX Full Duplex (Single Device, Multi Channel).vi
名前順にソートされて5番目のサンプルが「niUSRP EX Full Duplex (Single Device, Multi Channel).vi」です。
このサンプルは 1台の USRPデバイスで、多チャンネルに対応した送受信のフルデュプレックス処理を行うサンプルとなります。
意外と送受信同時に行うサンプルは提供されていないです、
それではフロントパネルを見てみましょう。
ブロックダイアグラムはこのような感じです。
横に長いので4つに分割してます。
まずは一番左から受信側の初期化をしています。ほとんどプロパティーノードで設定しています。
次に送信側の初期化をしています。こちらもほとんどプロパティーノードで設定しています。
次にコミットして、トリガのための時間を 0 にセットして、イニシエイトします。同時に送信のデータを指定されたトーン周波数の正弦波として作成します。
次に上側は受信ループで、下側は送信ループです。Stop ボタンで終了して、デバイスを閉じます。
ここで使用している USRP の関数は左から、
①受信と送信の初期化の部分
初期化の部分では 大きく4つの処理をしています。
左から
①USRPデバイスのオープン
"niUSRP Open Rx Session.vi" でデバイスの受信側 Rx を開きます。送信の初期化では "niUSRP Open Tx Session.vi" でデバイスの送信側 Tx を開きます。まずはこの関数を呼ばないことには始まりません。必須です。
Device Name への設定の仕方は USRP のデバイスの種類によって異なります。
Ethernet で接続するタイプの USRP では USRP に設定してある IP アドレスを設定します。PCIe ケーブル接続の USRP では、NI MAX で認識しているデバイス名を設定します。
開くことが出来たら、セッションハンドルを出力しますのでこの後の設定などはそのセッションハンドルを基に行います。
②チャネルの有効化
この部分は USRP のプロパティノードを使用しています。
使いたい チャネルの有効化をするプロパティです。
文字列で与えます。このサンプルでは固定値として "0,1" が与えられています。
③トリガの時間を設定
開始してから実際の実行開始までのトリガの設定をしています。(受信側の初期化の時で1回だけ。絶対にここで設定しなくてはいけないわけではないです。)
フロントパネルの Start Trigger Time の設定が設定されます。④各種 RF 設定と設定値取得
②受信処理ループの部分
本サンプルの受信の処理ループは For ループでスイープ分のステップを実行します。
構造としては以下の様になっています。
① While Loop
外側の四角い枠が While Loop です。Stop ボタンを押されるか、エラーが発生したらループを停止する条件で実装されています。
② 受信データのフェッチ
この関数で USRP からIQ データをフェッチしてグラフ表示のほうに渡しています。この関数では 2D CDB という形式にしており、マルチチャネルに対応してデータを取得しています。
CDB は Complex Double なので倍精度複素数のデータですので 2次元の複素数配列が取得されます。
基本的には行がチャネルになりますので、サンプルの様に指標配列の For Loop で簡単にチャネルのデータを得ることができます。
ちなみにサンプル数の指定をしていないので、デフォルトの [100000] サンプル分データをフェッチします。
関数の下部にある選択できるリストから出力するデータフォーマットを変更することができます。もちろん変更した場合はそのあとの処理も対応する必要があります。③グラフ表示
フェッチした 2D の複素である IQ データを、IQ グラフと、スペクトラムに変換しグラフに表示しています。③送信処理ループの部分
本サンプルの送信の処理ループは For ループでスイープ分のステップを実行します。
構造としては以下の様になっています。
① While Loop
外側の四角い枠が While Loop です。Stop ボタンを押されるか、エラーが発生したらループを停止する条件で実装されています。
② 送信データの書き込み
この関数で USRPに作成した IQ データ渡すことで送信しています。この関数では 2D CDB という形式にしており、マルチチャネルに対応してデータを送信しています。
CDB は Complex Double なので倍精度複素数のデータですので 2次元の複素数配列で作成します。
基本的には行がチャネルになりますので、サンプルの様に各チャネルの複素数を配列結合して渡します。
関数の下部にある選択できるリストから出力するデータフォーマットを変更することができます。もちろん変更した場合はそれに合わせて作成データも対応する必要があります。
③終了処理
最期は終了処理で、USRP を停止してUSRP デバイスを閉じます。①USRP を停止(受信側のみ)
受信側でイニシエートしているので、受信側では USRP を停止します。
② USRP デバイスを閉じる(受信側も送信側も)
USRP のセッションを閉じて終了です。
実行してみる
使用する USRP は USRP 2954 で実行してみます。
Device Name に NI MAX で取得した名称を指定して実行します。
実行すると、右側上のグラフには送信している信号が表示され、下部には受信した IQ グラフとスペクトラムがタブの切り替えで表示されます。
0 件のコメント :
コメントを投稿