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

ドルフィンシステム福島です。

導入事例が一段と増えているUSRP-RIO。弊社の開発事例でも、ここ最近はすべてUSRP-RIOベースです。

USRP-RIOを使う場合、サンプル(IDL)を使って送信や受信を行う方も多いかと思いますが、今回は、サンプルを使った場合、ある特定のIQレートを設定すると受信したデータの転送が間に合っていないにもかかわらず、バッファオーバーフローエラーが発生しないという現象をご紹介します。

■動作確認環境
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

以上です。

コメント