こんにちはドルフィンシステムの笹生です。
今日も USRPサンプル紹介の続き第4回目です。
サンプルの場所や開き方は第一回目 NI USRP のサンプルを紐解く (1) ~"niUSRP EX Rx Continuous Async.vi"~ のブログを見てみてください。
前回までは実行する際のパラメータの説明などを主に解説しましたが、今回は基本的な受信サンプルのプログラム構造 (ブロックダイアグラムの構造) を1回目と同じ "niUSRP EX Rx Continuous Asyc.vi" を使ってみていきたいと思います。
USRP 受信サンプルのプログラム構造
"niUSRP EX Rx Continuous Asyc.vi" を開くと以下のようなフロントパネルが開きます。
LabVIEW のプログラムはこのフロントパネルと対になったブロックダイアグラムに記述されています。[Ctrl +E] を押すかメニューの [ウィンドウ]→[ブロックダイアグラムを表示] でブロックダイアグラムが開きます。
このサンプルは以下のようなブロックダイアグラムになっています。
通常、左から右へデータフローとして処理が流れていきます。
四角いものが関数だったりプロパティノードだったりして、各ブロックをワイヤで接続し、実行時にデータがワイヤを伝搬して処理を進めていきます。
LabVIEW のブロックダイアグラムでのプログラミングの基本は NI のサイト等を参考にしてもらって、本ブログではこのブロックダイアグラムの構造と処理の流れを見ていきます。
まず、大きく3つの構造に分けることができます。
① 初期化の部分
② 処理のループの部分
③ 終了処理の部分
①初期化の部分
初期化の部分では 大きく4つの処理をしています。
左から
①USRPデバイスのオープン
Device Name への設定の仕方は USRP のデバイスの種類によって異なります。
Ethernet で接続するタイプの USRP では USRP に設定してある IP アドレスを設定します。PCIe ケーブル接続の USRP では、NI MAX で認識しているデバイス名を設定します。
開くことが出来たら、セッションハンドルを出力しますのでこの後の設定などはそのセッションハンドルを基に行います。
②チャネルの有効化
この部分は USRP のプロパティノードを使用しています。
使いたい チャネルの有効化をするプロパティです。
文字列で与えます。通常は 0 です。USRP の種類によって 2ch 使えるものは 1 も設定できます。
③各種 RF 設定
受信の RF 設定のメインとなる関数です。
設定後、この関数で受信開始を USRP に指示します。
受信が開始され、RF 信号が IQ データにダウンコンバートされてバッファに蓄えられていきますので、②の処理ループでデータを PC に吸いあげます。
②処理ループの部分
処理ループでは、USRP でRF 信号が IQ データにダウンコンバートされてバッファに蓄えられていきますので、データを PC に吸いあげる(フェッチする)ことが主な処理です。
付随して、吸い上げたデータをフロントパネルのグラフ表示器で表示します。
構造としては
① While Loop
グレーの枠が While Loop です。Stop ボタンが押されるか、エラーが発生したらループを停止します。
② 受信データのフェッチ
この関数で USRP から Number of Sample で指定した数の IQ データをフェッチしてグラフ表示のほうに渡しています。サンプルを参考に受信信号に信号処理させるときはこの関数の出力を使うことになります。
CDB は Complex Double なので倍精度複素数のデータです。
WDT は Waveform Data Type の略で、配列に時間データが付与された波形データの形式を表しています。
関数の下部にある選択できるリストから出力するデータフォーマットを変更することができます。もちろん変更した場合はそのあとの処理も対応する必要があります。
③グラフ表示
フェッチした IQ データをスペクトラム、IQ 時間軸で表示しています。
スペクトラムは処理が重いので 1秒ごとに1 回の処理にしているようです。
③終了処理
最期は終了処理で、USRP を停止してUSRP デバイスを閉じます。
①USRP を停止
USRP を停止します。
② USRP デバイスを閉じる
USRP のセッションを閉じて終了です。
まとめ
今回は基本的な USRP 受信サンプルのプログラムの構造を解説しました。
大きく3つの構造でできていました。
① 初期化の部分
② 処理のループの部分
③ 終了処理の部分
サンプルとしてはシンプルで判りやすくて、複雑怪奇なサンプルよりは良いと思います。
ただこのサンプルをベースにインタラクティブなものに作り替える必要があることがほとんどだと思いますし、処理ループ内での処理を増やしていくと、フェッチが間に合わなくなってバッファがオーバーフローして簡単にエラーしてしまいます。
ドルフィンシステムでは秘伝のテンプレートがあるので普段の業務で開発の初期段階はかなり省力化できています。(代々伝わる秘伝のタレなのでちょっと公開はしかねます、、、)
0 件のコメント :
コメントを投稿