こんにちは、ドルフィンシステムの笹生です。
今回で 13回目の USRP のサンプルについての紹介となります。
今回紹介するサンプルも前回と似ていて 第一回で紹介している「niUSRP EX Rx Continuous Asyc.vi」の派生形の一つで、受信するデータタイプの設定を変更するサンプル「niUSRP EX Rx Customize Fetch Type and Sample Width.vi」を紹介します。
サンプルプログラムの開き方につきましては第一回のブログを参照してください。
niUSRP EX Rx Customize Fetch Type and Sample Width.vi
サンプルのフォルダを開くと以下のようにずらずらっと並んでおります
名前順にソートされて13番目のサンプルが「niUSRP EX Rx Customize Fetch Type and Sample Width.vi」です。
このサンプルは 1台の USRPデバイス、1受信ポートで連続的に受信を行うサンプルですが、受信のデータタイプの設定を変更できるものになります。
それではフロントパネルを見てみましょう。
フロントパネルとしては、左側が設定関連、中央が設定の確認用表示関連、右側が受信信号のグラフ表示になります。
名称 | デフォルト | 設定値について |
Device Name | 192.168.10.2 | USRP のデバイス名を入力します。 Ethernet で接続している時はIP で設定します。 USRP-RIO のように PCIe (MXI) ケーブルで 接続しているときは NI MAX で認識しているデバイス名 を入力します。 |
IQ Rate[S\sec] | 1M | いわゆるサンプリングレートです。設定可能な 範囲は USRP のハードウェアによります |
Carrier Frequency | 2G | いわゆるキャリア周波数(センター周波数)です。 設定可能な範囲は USRP のハードウェアによります。 |
Coerced IQ Rate[S/sec] | 100k | 実行したときに実際に設定された IQレートが表示されます。 |
Coerced Carrier Frequency | 100k | 実行したときに実際に設定されたキャリア周波数が表示されます。 |
名称 | デフォルト | 設定値について |
Active Antenna | RX1 | アンテナと書いてありますが、受信するポートの名称を文字列で 指定します。USRP のハードウェアによって多少ことなりますが、 TX/RX 、RX1 などを設定します。 |
Enabled Channel | 0 | これも USRP のハードウェアによって 複数チャネルに 対応していることもあります。0, 1 などを設定します。 |
Gain | 1 | ゲインを設定します。 設定範囲はUSRP のハードウェアによります。 |
Number of Samples | 16384 | USRP から取得する1回あたりのサンプル数を指定します。 |
Timeout | 10s | タイムアウトとして指定する秒数を指定します。 |
Coerced gain | | 実行したときに実際に設定された ゲインが表示されます。 |
Actual Rx Timestamp | | 実行して受信をしたタイミングでのタイムスタンプを表示します。 |
名称 | デフォルト | 設定値について |
Fetch Type | Binary Data | データタイプを選択します。Binary Data は I16 での IQ データです。 Floting Point Dataは振幅値に直した倍精度浮動小数点データです。 |
Sample Wudth | 16-bit | USRP のハードウェアでのサンプリングビット幅を選択します。 16-bit と 8-bit から選択できます。 |
Expected Peak | 1 | 集録または生成するフルスケール信号の割合として、期待される ピーク信号を指定します。1.0=100%, 0.5 = 50% の割合です。 NI-USRP は、この値を使用して、バス上で転送される 8 ビット データをスケーリングします。 |
実行しエラーがなければ右側のグラフの指定したデータタイプのタブが選択されて IQ 信号の時間波形が表示されます。
ブロックダイアグラムはこのような感じです。
まずは一番左から受信側の①初期化→②受信ループ→③終了という流れです。
初期化の部分
初期化の部分では 大きく5つの処理をしています。
左から
①USRPデバイスのオープン
"niUSRP Open Rx Session.vi" でデバイスの受信側 Rx を開きます。まずはこの関数を呼ばないことには始まりません。必須です。
名称 | デフォルト | 設定値について |
Device Name | 192.168.10.2 | USRP のデバイス名を入力します。 Ethernet で接続している時はIP で設定します。 USRP-RIO のように PCIe (MXI) ケーブルで 接続しているときは NI MAX で認識しているデバイス名 を入力します。 |
Device Name への設定の仕方は USRP のデバイスの種類によって異なります。
Ethernet で接続するタイプの USRP では USRP に設定してある IP アドレスを設定します。PCIe ケーブル接続の USRP では、NI MAX で認識しているデバイス名を設定します。
開くことが出来たら、セッションハンドルを出力しますのでこの後の設定などはそのセッションハンドルを基に行います。
②チャネルの有効化
この部分は USRP のプロパティノードを使用しています。
使いたい チャネルの有効化をするプロパティです。
名称 | デフォルト | 設定値について |
Enabled Channel | 0 | これも USRP のハードウェアによって 複数チャネルに 対応していることもあります。0, 1 などを設定します。 |
文字列で与えます。通常は 0 です。USRP の種類によって 2ch 使えるものは 1 も設定できます。
③受信データタイプの設定
名称 | デフォルト | 設定値について |
Fetch Type | Binary Data | データタイプを選択します。Binary Data は I16 での IQ データです。 Floting Point Dataは振幅値に直した倍精度浮動小数点データです。 |
Sample Wudth | 16-bit | USRP のハードウェアでのサンプリングビット幅を選択します。 16-bit と 8-bit から選択できます。 |
Expected Peak | 1 | 集録または生成するフルスケール信号の割合として、期待される ピーク信号を指定します。1.0=100%, 0.5 = 50% の割合です。 NI-USRP は、この値を使用して、バス上で転送される 8 ビット データをスケーリングします。 |
④各種 RF 設定
受信の RF 設定のメインとなる関数です。
名称 | デフォルト | 設定値について |
IQ Rate | 1M | いわゆるサンプリングレートです。設定可能な 範囲は USRP のハードウェアによります |
Carrier Frequency | 2G | いわゆるキャリア周波数(センター周波数)です。 設定可能な範囲は USRP のハードウェアによります。 |
Gain | 1 | ゲインを設定します。 設定範囲はUSRP のハードウェアによります。 |
Active Antenna | RX1 | アンテナと書いてありますが、受信するポートの名称を文字列で 指定します。USRP のハードウェアによって多少ことなりますが、 TX/RX 、RX1 などを設定します。 |
Coerced IQ Rate | | 実行したときに実際に設定された IQレートが表示されます。 |
Coerced Carrier Frequency | | 実行したときに実際に設定されたキャリア周波数が表示されます。 |
Coerced Gain | | 実行したときに実際に設定された ゲインが表示されます。 |
ここでは Carrier Frequency と Gain と Active Antenna には制御器のローカル変数を使用しており、実行中に変更できるようにするために実体の制御器は受信ループ内で使用されています。
⑤ 受信開始
設定後、この関数で受信開始を USRP に指示します。
受信が開始され、RF 信号が IQ データにダウンコンバートされてバッファに蓄えられていきますので、②データ受信の部分でデータを PC に吸いあげます。
②受信ループの部分
②受信ループの部分では、USRP でRF 信号が IQ データにダウンコンバートされてバッファに蓄えられていきますので、データを PC に吸いあげる(フェッチする)ことが主な処理です。
このサンプルでは、初期化時に指定したデータタイプで受信データを吸い上げて表示しています。
これは Fetch Type が Binary Data を指定した場合です。
I16 でデータをフェッチをして、グラフ表示をする流れです。
Fetch Type が Floating Point Data を指定した場合の流れです。
データの受信をするフェッチの関数はこの関数で USRP から Number of Sample で指定した数の IQ データをフェッチしてグラフ表示のほうに渡しています。
サンプルを参考に受信信号に信号処理させるときはこの関数の出力を使うことになります。
名称 | デフォルト | 設定値について |
Number of Samples | 16384 | USRP から取得する1回あたりのサンプル数を指定します。 |
Timeout | 10s | タイムアウトとして指定する秒数を指定します。 |
| | |
出力データは、Binary Data を選択したときは I16、Floating Point Data を選択したときは CDB という形式です。
I16 は 16bit int の符号付き整数の値です。1次元配列で取得しますが、配列のインデックス偶数が I 、奇数が Q のデータに対応しています。
CDB は Complex Double なので倍精度複素数のデータです。
他のサンプルでは CDB WDT タイプを使ったりしていますが、今回は I16 と CDB ですね。
(ちなみにWDT は Waveform Data Type の略で、配列に時間データが付与された波形データの形式を表しています。)
関数の下部にある選択できるリストから出力するデータフォーマットを変更することができます。もちろん変更した場合はそのあとの処理も対応する必要があります。
③終了処理
最期は終了処理で、USRP を停止してUSRP デバイスを閉じます。
①USRP を停止
受信側でイニシエートしているので、受信側では USRP を停止します。
② USRP デバイスを閉じる
USRP のセッションを閉じて終了です。
実行してみる
使用する USRP は USRP 2943 で実行してみます。
Device Name に NI MAX で取得した名称を指定して実行します。
実行すると、右側上のグラフには受信した IQ グラフが表示されます。
まとめ
基本的には Binary Data は USRP から実際に取得しているデータになります。CDB 等はホストで受信 I16データに係数をかけて倍精度浮動小数点にしているものになります。
変換している分だけ、CDB等のほうが処理が重くなりますので、サンプルレートが早いとデータ落ちをする可能性は高まります。
このサンプルの難易度は初級者向け(★☆☆)としたいと思います。
0 件のコメント :
コメントを投稿