USRP-RIOで受信データ落ちしてもエラーが表示されない場合がある。その現象とは?

ドルフィンシステム福島です。
導入事例が一段と増えているUSRP-RIO。弊社の開発事例でも、ここ最近はすべてUSRP-RIOベースです。
USRP-RIOを使う場合、サンプル(IDL)を使って送信や受信を行う方も多いかと思いますが、今回は、サンプルを使った場合、ある特定のIQレートを設定すると受信したデータの転送が間に合っていないにもかかわらず、バッファオーバーフローエラーが発生しないという現象をご紹介します。

こちらの問題は既に解決しています。

解決 : USRP-RIOで受信データ落ちしてもエラーが表示されない場合がある。その現象とは?
http://mikioblog.dolphinsystem.jp/2017/11/usrp-rio_20.html

■動作確認環境
LabVIEW 2015 SP1
NI USRP 16.1
NI USRP-2954R
PXIe - MXI インターフェイスキット
Simple USRP StreamingのRx Streaming (Host).vi

最大帯域幅とIQレート、転送レートのおさらい

まず転送レートについてちょっとおさらいをします。
NI USRP-2954の最大帯域幅は160MHz BWで、IQレートに換算すると200MS/s (Mega Samples/sec)になり、ホストへの転送レートに換算すると800MB/sとなります(*1)。
USRP-RIOからホストへの最大転送レートは800MB/sなので、USRP-RIOからホストへ転送できる最大帯域幅は160MHz BWになります(*2)。
1ch なら 160MHz BW。2chなら80MHz BW x 2 = 合計160MHz BWです。

160MHz BWでデータ収録をする

USRP-RIOからホストへの転送が間に合わない場合、このようにBuffer overflowのエラーが発生します。これはホスト側(Windowsソフトウェア)のデータ取り込みが間に合わず、データがあふれた=上書きされてデータを失った状態です。
clip_image001
では実際にNI USRP-2954とNI PXIe-8135コントローラで最大帯域幅 160MHzを1ch収録すると、画像のようにオーバーフロー無くデータ受信が可能です。
clip_image002
※画像のサンプルは、オーバーフロー状態や転送したデータ量が分かるようにサンプルを改造しています。
オーバーフロー部分を拡大した画像が以下のもので、オーバーフローは0でエラー無し、rate/sが200.22Mとなっており設定したIQレートと等しくなっています。
clip_image003
次に、NI USRP-2954は2ch搭載しているので、
2ch*80MHz BW = 160MHz BW
でデータを取得してみると、こちらもデータを取得できました。
clip_image004

ホスト-USRP-RIO間の転送レートを超える転送でもエラー無し?

では、もっとIQレートを上げて取得してみましょう。
1chで160MHz BWまで収録可能ですから、2chで160MHz BWの合計320MHz BWをやってみましょう。
ホスト-USRP-RIO間の転送レート上限が160MHz BWなので、オーバーフローエラーが発生するはず!
ですが、発生せず。
clip_image005
実際に受信しているデータ量を見てみると、320MHz BWならIQレート 400MS/sですが、160MHz BW相当の226MS/sになっています。
ホスト-USRP-RIO間の転送レート上限は 160MHz BW(800MB/s)のはずで、本来ならBuffer overflowが発生するはずですが・・・400MS-226MS=174MS/s 分のデータがどこかに消えてしまいました。

原因は?

さて原因はなんでしょう?
まずFPGAが疑えますが、FPGA内でサンプリングされるレートは200MS/sの固定レートになっていて、データ処理が間に合うようにFPGAはコンパイルされているので、FPGA内の処理が間に合っていないことはなさそうです。
ホスト側はバッファオーバーフローエラーは検知していません。
というと、PXI Expressバス?
LabVIEWが感知できないところでデータが捨てられてしまっているようですね。
うーん謎です。

まとめ

本日のまとめです。
NI USRP-2954をPXIe MXIインターフェイスボードで接続した場合、2chでIQレート100MS/sを超えた値を設定してもバッファオーバーフローは発生しないで転送し続けるが、転送されるデータ量はPXIe MXIインターフェイス上限の800MB/s = 200MS/s程度である。
実際分かりにくい現象ですね。
どんどんIQレートを上げていってもエラーが発生しないから、行けてる行けてる、と思っていたら全然データを受信できていなかったという罠。
受信したデータ量を見なければ気がつかない現象です。
ちなみに2ch IQレート 200MS/s似設定すると、オーバーフローエラーが発生しました。ですが、転送レートは200MS/sです。
clip_image006
以上です。

コメント