USRP の LO 周波数を高精度に設定するサンプル ~ niUSRP EX Fine-Tune LO Frequency.vi(USRP のサンプルを紐解く (9))

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

今回は USRP の LO 周波数を高精度に設定するサンプル niUSRP EX Fine-Tune LO Frequency.vi」の紹介です

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

niUSRP EX Fine-Tune LO Frequency.vi


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


名前順にソートされて4番目のサンプルが「niUSRP EX Fine-Tune LO Frequency.vi」です。

このサンプルではファイル名からの推測では、LO 周波数を高精度に設定する(チューンする)ような印象を受けますが、ブロックダイアグラムを見ると LO のチューニングというよりも、実際に設定された LO の周波数を取得して、そこから信号の受信するキャリア周波数を正確に設定するサンプルだと理解しました。

これでは何を言っているかよくわからないと思いますが、受信したい信号の中心周波数の設定と LO の設定値がずれていても正確な周波数で受信できますというサンプルなんだと思います。


まずはフロントパネルを見てみます。



左側の設定項目については以下のような意味です。
名称デフォルト設定値について
Device Name192.168.10.2USRP のデバイス名を入力します。
Ethernet で接続している時はIP で設定します。
USRP-RIO のように PCIe (MXI) ケーブルで
接続しているときは NI MAX で認識しているデバイス名
を入力します。
Active AntennaRX1アンテナと書いてありますが、受信するポートの名称を文字列で
指定します。USRP のハードウェアによって多少ことなりますが、
TX/RX 、RX1 などを設定します。
Desired LO Frequency98M希望する LO 周波数を設定します。
USRP では必ずしも希望した LO 周波数が設定できるとは
限りません。
その為通常は実際の設定値をリードバックして確認します。
Sweep Bandwidth [Hz]20Mスイープするバンド幅を Hzで指定します。
通常あまり見ない本サンプルのための設定値のようです。
Bandwidth Per Step [Hz]200kスイープするステップのバンド幅を指定します。
通常あまり見ない本サンプルのための設定値のようです。
基本的に IQ Rate と一致します。
Sample / Frame50001回にフェッチするデータのサンプル数を指定します。
Gain20RFボードのゲインを設定します。

中央の表示器(実際の設定値等)は以下のような意味です。

名称表示について
Current Carrier Frequency実行したときに実際に設定されたキャリア周波数が表示されます。
Actual Locked LO Frequency [Hz]実行したときに実際に設定されたLO 周波数が表示されます。
Number of Stepsスイープで実行したステップ数が表示されます。
Actual IQ Rate[Hz]実行したときに実際に設定された IQレートが表示されます。
error out実行時にエラーが起きると表示されます。

右側のグラフにはスイープした時のキャリア周波数に対しての電力スペクトラムが並べて表示されます。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーー

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

横に長いので2つに分割してます。

まずは左側


右側


ここで使用している USRP の関数は左から、[niUSRP Open Rx Session.vi]、[プロパティーノードでの各種設定取得]、[niUSRP Initiate.vi]、[niUSRP Fetch Rx Data (poly).vi]、[niUSRP Abort]、[niUSRP Close Session]です。


①初期化の部分

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

左から

①USRPデバイスのオープン


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


名称デフォルト設定値について
Device Name192.168.10.2USRP のデバイス名を入力します。
Ethernet で接続している時はIP で設定します。
USRP-RIO のように PCIe (MXI) ケーブルで
接続しているときは NI MAX で認識しているデバイス名
を入力します。

Device Name への設定の仕方は USRP のデバイスの種類によって異なります。

Ethernet で接続するタイプの USRP では USRP に設定してある IP アドレスを設定します。PCIe ケーブル接続の USRP では、NI MAX で認識しているデバイス名を設定します。

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


②チャネルの有効化


この部分は USRP のプロパティノードを使用しています。

使いたい チャネルの有効化をするプロパティです。

名称デフォルト設定値について
Enabled Channel0これも USRP のハードウェアによって 複数チャネルに
対応していることもあります。0, 1 などを設定します。

文字列で与えます。通常は 0 です。USRP の種類によって 2ch 使えるものは 1 も設定できます。



③各種 RF 設定と設定値取得
この部分でも USRP のプロパティノードを使用しています。

実は以前紹介したブログ記事で登場した[niUSRP Configure Signal.vi]関数でも RF 設定はできるのですが、LO の設定はできません。(過去ブログ「NI USRP のサンプルを紐解く (4) ~基本的な受信サンプルのプログラム構造」参照

受信の RF 設定のメインとなる関数です。

名称デフォルト設定値について
Desired LO Frequency98M希望する LO 周波数を設定します。
USRP では必ずしも希望した LO 周波数が設定できるとは
限りません。
その為通常は実際の設定値をリードバックして確認します。
Active AntennaRX1アンテナと書いてありますが、受信するポートの名称を文字列で
指定します。USRP のハードウェアによって多少ことなりますが、
TX/RX 、RX1 などを設定します。
Bandwidth Per Step [Hz]200kスイープするステップのバンド幅を指定します。
通常あまり見ない本サンプルのための設定値のようです。
基本的に IQ Rate と一致します。
Gain [dB]20RFボードのゲインを設定します。
Sweep Bandwidth [Hz]20Mスイープするバンド幅を Hzで指定します。
通常あまり見ない本サンプルのための設定値のようです。

また設定値を取得して、スイープするための初期キャリア周波数、ステップなどを計算しています。
Actual IQ Rate[Hz]実行したときに実際に設定された IQレートが表示されます。
Actual Locked LO Frequency [Hz]実行したときに実際に設定されたLO 周波数が表示されます。

計算としては、Actual Locked LO Frequency [Hz]である Coerced LO Frequency からSweep Bandwidth[Hz]の半分 を引き算して IQ Rate = Step バンド幅 を加えたものが初期のキャリア周波数にしています。

④ 受信開始


設定後、この関数で受信を初期化します。

②処理ループの部分

本サンプルの処理ループは For ループでスイープ分のステップを実行します。

構造としては以下の様になっています。


① For Loop 

 四角い枠が For Loop です。指定回数ループするか、Stop ボタンを押されるか、エラーが発生したらループを停止しする条件で実装されています。

③ 受信データのフェッチ 



この関数で USRP から [Samples / Frame] で指定した数の IQ データをフェッチしてグラフ表示のほうに渡しています。

サンプルを参考に受信信号に信号処理させるときはこの関数の出力を使うことになります。

名称デフォルト設定値について
Number of Samples16384USRP から取得する1回あたりのサンプル数を指定します。[Samples / Frame]を設定しています。
Timeout10sタイムアウトとして指定する秒数を指定します。
今回指定していないのでデフォルトが使われます。

出力データは、CDB WDT という形式です。

CDB は Complex Double なので倍精度複素数のデータです。

WDT は Waveform Data Type の略で、配列に時間データが付与された波形データの形式を表しています。



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

③グラフ表示




フェッチした IQ データをスペクトラムに変換しグラフに表示しています。

スペクトラムは For ループのシフトレジスタに接続されていて、グラフに追加されていくように実装しています。

③終了処理

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

①USRP を停止


USRP を停止します。

② USRP デバイスを閉じる


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


実行してみる

使用する USRP は USRP 2922 + SBXボード で実行してみます。

Device Name に IP を指定して実行します。


実行すると、希望する LO は デフォルト 98M ですが、 Actual は 400M (SBX ボードの下限)になり、20M のスイープ範囲で 200kHz 毎に実行されます。

ステップ数は 100になり、For ループは 100回実行されます。

初期キャリア周波数は 390MHz であり、200kHz 幅でずらしながら 410MHz までデータを取得してそのスペクトラムがグラフに追加表示されていきます。


まとめ

今回のサンプルはLO のチューニングというよりも、実際に設定された LO の周波数を取得して、そこから信号の受信するキャリア周波数を正確に設定するサンプルです。
LO リークがある場合でも、キャリア周波数をずらして実行させることができるのを示すサンプルかと思います。

このサンプルの難易度は中級者向け(★★☆)としたいと思います。

0 件のコメント :

コメントを投稿