USRP で受信した信号をスペクトログラムのように表示する ~ niUSRP EX Spectral Monitoring (History).vi (USRP のサンプルを紐解く (20))

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

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

今回紹介するサンプルはタイトルの「USRP で受信した信号をスペクトログラムのように表示するサンプル」です。

それでは「niUSRP EX Spectral Monitoring (History).vi 」を見ていきましょう。

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

※以前よりお伝えしましおりますが、USRP の古い型番の物はそろそろ販売中止になるものも出てくるそうですのでご注意ください。

niUSRP EX Spectral Monitoring (History).vi 

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


名前順にソートされて20番目のサンプルが「niUSRP EX Spectral Monitoring (History).vi 」です。

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

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


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

名称デフォルト設定値について
Device Names192.168.10.2USRP のデバイス名を入力します。
Ethernet で接続している時はIP で設定します。
USRP-RIO のように PCIe (MXI) ケーブルで
接続しているときは NI MAX で認識している
デバイス名を入力します。
IQ Sampling Rate [S/sec]200kいわゆるサンプリングレートです。設定可能な
範囲は USRP のハードによります
Carrier Frequency [Hz]90.5Mキャリア周波数を設定します。
設定可能な範囲は USRP のハードによります。
Gain [dB]20設定したいゲインを入力します。
Samples / Frame5000ここで指定したサンプル数受信したらプログラムを終了します。
Active AntennaRX1アンテナと書いてありますが、受信するポート
の名称を文字列で指定します。USRP のハード
によって多少ことなりますが、TX/RX 、RX1
などを設定します。
IQ Sampling Rate [S/sec](actual)実行時に設定された IQレートが表示されます。
Carrier Frequency[Hz](actual)実行時に設定されたキャリア周波数が表示されます。
Gain[dB] (actual)実行時に設定されたゲインが表示されます。




Error out

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


ベースバンドパワースペクトラムのグラフに受信結果(現在の)が表示されます。


Intensity Chart には過去を含むスペクトラムを連続でスペクトログラムを表示します。


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

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



初期化設定の部分

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

①デバイスオープン
チャネルの有効化
③取得方法の設定(有限)
IQレート、RF設定
受信開始
⑥最初のフレームを取得


①USRPデバイスのオープン




"niUSRP Open Rx Session.vi" でデバイスの受信側 Rx を開きます。まずはこの関数を呼ばないことには始まりません。必須です。

名称デフォルト設定値について
device Names
USRP の IP アドレスを入力します。
Ethernet で接続している時はIP で設定します。
ここでは 2つのイーサネットポートを[;] の文字列で
結合して渡しています。

Device Name への設定の仕方としてマスターを先に設定します。

開くことが出来たら、セッションハンドルを出力しますのでこの後の設定などはそのセッションハンドルを基に行います。


②チャネルの有効化




この部分は USRP のプロパティノードを使用しています。
使用するチャンネル番号(ここでは 0) を指定しています。

取得方法の設定(有限)

取得方法を有限に設定し、1回の取得サンプル数を指定します。


④IQレート、RF設定


IQ レート、キャリア周波数、ゲイン、アクティブアンテナの設定をします。

⑤ 受信開始



受信が開始され、指定されたタイミングで取得した RF 信号が IQ データにダウンコンバートされてバッファに蓄えられていきます。


最初のフレームを取得


このサンプルではパイプラインを開始するにあたり最初のフレームを取得しておくようです。目的は恐らく表示に時間がかかるので、次の受信ループの際にエラーしないようにするためだと考えられます。(あまり良いやり方とは思えませんが、、、)

②受信の部分

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

本サンプルの受信の処理ループは While ループです。エラーした場合かユーザーが STOP ボタンを押したときに終了する構造になっています。

① While Loop 

 外側の四角い枠が While Loop です。ユーザーが STOP ボタンを押したとき、エラーが発生したらループを停止する条件で実装されています。

② 受信開始とフェッチ


毎回イニシエートしてからフェッチの関数で USRP からIQ データをフェッチしています。多くのサンプルでは個のフェッチのあと直接グラフにデータを渡すことが多いですが、このサンプルではグラフ表示のほうにはシフトレジスタで前回のデータを渡しています。この関数では CDB WDT という形式にしています。

CDB WDT は Complex Double の倍精度複素数のデータと時間情報がついた波形データが取得されます。

関数の下部にある選択できるリストから出力するデータフォーマットを変更することができます。もちろん変更した場合はそのあとの処理も対応する必要があります。

③グラフ表示


フェッチした 2D の複素である IQ データをスペクトラムに変換し通常のグラフにと強度チャート(Intensity Chart) に表示しています。

この強度チャートにヒストリカルなデータが表示されるサンプルです。

③終了処理

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


①USRP を停止


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

② USRP デバイスを閉じる


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

実行してみる




実行されると、受信が開始され、右側のスペクトラムへの表示と、強度チャートへの表示がされました。

まとめ

このサンプルは USRP の受信データをスペクトラムと強度チャートへのスペクトログラムのように表示させる簡易なサンプルだと思います。

このサンプルの難易度は初心者向け()としたいと思います。


0 件のコメント :

コメントを投稿