USRP X410 の IQレート設定にはご注意

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

今日は 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レートの設定について具体的にどうなのかを見てみたいと思います。


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

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

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

① Ettus Research の UHD

② NI の NI USRP

③ 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に特にご注意

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

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


NI USRP から X410 の FPGA イメージが Ettus UHD の FPGAフレーバー(先ほどの X4_200) でも制御することが可能ですが、その場合は ① UHD の時と同様に IQ レート設定が柔軟にはできなくなりますので注意が必要です。

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



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

ここが FPGA : X4_200 等の場合は UHD のイメージなので、その場合は柔軟な設定はできません。


なぜドライバによって 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 の技術の方にもお世話になりながら、またこの辺り整理ができたらご紹介しようと思います。



0 件のコメント :

コメントを投稿