USRP X410 の IQレート設定にはご注意 (2025/3/3 更新)

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

今日は X410 の IQ レート (=サンプルレート)の設定についての備忘録です。

以前弊社の福島も記事にしておりますが、USRP IQレート設定にはご注意の続編的なお話で、新しい USRPである X410 についての IQ レート設定もご注意くださいという内容です。

福島の記事にもありますが、USRP の制御に使用するドライバの種類は大きく UHD、 NI-USRP(UHD)系、IDL系の 3種類 ありそれぞれで IQ レートの設定の柔軟さが異なります。

今回 X410 の NI-USRP (UHD) 系では、さらにX410 に使用されている FPGA のビットファイルの種類(接続インターフェース注意)によっても IQレートの設定柔軟さが異なるようです。

ここでいうドライバの IQ レートの柔軟さとは、ユーザーが設定した設定値に対して、実際の設定はぴったり同じになる場合とならない場合があるという意味です。

例えば、30Msps を設定しても、33.33333Msps の設定になってしまうなど柔軟に設定できない値があるという意味です。

今回は、X410 のドライバでの IQレートの設定について具体的にどうなのかを見てみたいと思います。

(2025/3/3 NI USRP ドライバに関しての更新があります)


使用するドライバによる IQレート 設定の違い

USRP X410 を制御するためにはドライバが必要です。

USRP のドライバには 大きく3つあります

① Ettus Research の UHD

② NI の NI USRPドライバ (2025/3/3更新)

 ②-1 : Ettus Research の FPGAイメージ (X4_200) の場合

 ②-2 : NI の FPGAイメージ (LV_400) の場合

③ NI の IDL

ここで ②の NI USRP は 最終的に UHD を使用していますが、若干 NI のほうで手を加えているようです。(③は福島のブログにあるように柔軟な設定が可能です。)

今回は上記3つのうち、①、② の IQ レートの設定についてみてみたいと思います。


① Ettus Research の UHD

UHD では残念ながら柔軟には IQ レートの設定はできません。

https://files.ettus.com/manual/page_usrp_x4xx.html#x4xx_usage_mcrs

USRP X410

The USRP X410 has a few fixed MCR available for every image type: The 200 MHz images allow master clock rates of 245.76 MHz or 250 MHz. The 400 MHz images allow master clock rates of 491.52 MHz or 500 MHz. Typically it is sufficient to open a UHD session without the master_clock_rate argument as UHD will pick a rate that fits the FPGA image loaded. If a non-valid MCR is chosen, the session will error out.


UHD では、マスタークロックレート(MCR)というクロックが実装されており、その分周で IQ レートが決まります。

ここでイメージと呼んでいるのは FPGA のイメージ(フレーバーとも呼ばれる)です。

200MHz イメージ(フレーバー:X4_200) は245.76MHz または 250MHz のMCRを選択できます。

そしてその分周で IQ レートを作成できます。

(同じ UHD をドライバとして使用している Matlab のヘルプの説明が割とわかりやすいのでリンクを掲載しておきます。Baseband Sample Rate in NI USRP Radios

245.76MHz の MCR が選択されている場合は、所謂 3GPP 系統で良く使用されているクロックレートに設定がしやすいです。

例えば、30.72MHz は 245.76M *1/ 8 なので 30.72MHz にぴったり設定可能です。

しかし、30MHz を設定したい場合は、一番近しい設定値である 30.72MHz に設定されます。

もっと小さいところで、1.024MHz は 245.76M *1/ 240 なので 1.024MHz ぴったり設定されますが、1MHz を設定しようとすると最も近しい 245.76M *1/ 246 = 0.99902439024M に設定されます。

この問題点は、所望の IQレートに合わせて信号処理を設計した場合でも実際の IQレートが異なるので、その分を考慮する必要があるところです。

例えばですが、1M のつもりで 1ms 分のデータを作成するとすると、1000サンプルですが、実際は 0.99902439024Mなので 1000サンプルは 1msよりも若干長くなってしまいます。どこかでリサンプルしてあげないといけません。


② NI の NI USRPに特にご注意 (2025/3/3更新)

X410 を NI USRP で制御する場合には、NI の FPGA イメージであれば柔軟な IQ レートの設定が可能なようです。

②-1 : Ettus Research の FPGAイメージ (X4_200) の場合

コマンドプロンプト( or X410 に ターミナルで SSH で入って)にて uhd_find_devices を実行します。


fpga : X4_200 の場合、UHD のイメージです。

このイメージの場合、NI USRP から 制御することが可能ですが、その場合は ① UHD の時と同様に IQ レート設定が柔軟にはできなくなりますので注意が必要です。

また接続するインターフェースとして、RJ45, SFP でのイーサネット接続での制御となります。

その為 X410 のデバイスの指定は 「192.168.10.1」などの IP アドレスで指定することになります。

詳細は以下のリンクを参照してください。

X410 の FPGA Image Flavors

②-2 : NI の FPGAイメージ (LV_400) の場合

NI USRP Configuration Utility を使用してNI のFPGA イメージに書き換え可能です。


確認の方法は、コマンドプロンプト( or X410 に SSH で入って)にて uhd_find_devices を実行します。



fpga : LV_400 は NI の FPGA イメージです。

このイメージの場合、NI USRP から 制御することが可能で、IQ レート設定が柔軟に設定することが可能です。

ただし、接続するインターフェースとして RJ45 のイーサネット接続と、 PCIe 接続が必須となります。

その為 X410 のデバイスの指定は 「RIO0」 等 NI MAX で表示されるデバイス名を指定する必要があります。

イメージの書き換え等詳細は以下のリンクを参照してください。

NI のサイト : Ettus USRP X410 Getting Started Guide


なぜドライバによって IQレート設定の柔軟さが違うのか

ここからは実際にプログラムを解析したわけではないので推測になってしまうのですが、UHD の FPGA イメージで柔軟に IQ レートの設定ができない理由は GNU radio, RFNoC のブロックが FPGA に実装されており、NI の FPGA イメージはその代わりにフラクショナルリサンプラが実装されているからだと思われます。

まとめ

UHD では基本的に柔軟な IQ レートの設定はできません。NI USRP の場合は、NI の FPGA イメージの時は柔軟な IQ レートの設定が可能ですが、UHD のイメージの場合は柔軟な IQ レートの設定ができません。

実は NI USRP と NI の FPGA イメージの組み合わせは X410 の UHD バージョンの整合性もとる必要があるようです。(そうしないとエラーしてしまうようです。)このあたりは結構苦戦しており、まだNI USRP と NI の FPGA イメージの組み合わせで試せておりません。日本 NI の技術の方にもお世話になりながら、またこの辺り整理ができたらご紹介しようと思います。

(2025/3/3 更新)

日本 NI の技術の方からのご指導もあり、NI USRP ドライバでの任意の IQ レート設定を試すことが出来ました。

NI USRP ドライバ + Ettus FPGA X4_200 (イーサネット接続)では飛び飛びの IQ レート設定しかできない。(UHDと同様)

NI USRP ドライバ + NI FPGA  LV_400(PCIe 接続)で任意の IQ レート設定が可能です。




0 件のコメント :

コメントを投稿