- リンクを取得
- ×
- メール
- 他のアプリ
ドルフィンシステム福島です。
導入事例が一段と増えている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
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です。

では実際にNI USRP-2954とNI PXIe-8135コントローラで最大帯域幅 160MHzを1ch収録すると、画像のようにオーバーフロー無くデータ受信が可能です。

※画像のサンプルは、オーバーフロー状態や転送したデータ量が分かるようにサンプルを改造しています。
オーバーフロー部分を拡大した画像が以下のもので、オーバーフローは0でエラー無し、rate/sが200.22Mとなっており設定したIQレートと等しくなっています。

次に、NI USRP-2954は2ch搭載しているので、
2ch*80MHz BW = 160MHz BW
でデータを取得してみると、こちらもデータを取得できました。

1chで160MHz BWまで収録可能ですから、2chで160MHz BWの合計320MHz BWをやってみましょう。
ホスト-USRP-RIO間の転送レート上限が160MHz BWなので、オーバーフローエラーが発生するはず!
ですが、発生せず。

実際に受信しているデータ量を見てみると、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が感知できないところでデータが捨てられてしまっているようですね。
うーん謎です。
どんどんIQレートを上げていってもエラーが発生しないから、行けてる行けてる、と思っていたら全然データを受信できていなかったという罠。
受信したデータ量を見なければ気がつかない現象です。
ちなみに2ch IQレート 200MS/s似設定すると、オーバーフローエラーが発生しました。ですが、転送レートは200MS/sです。

導入事例が一段と増えている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です。
- *1 サンプリングレートから帯域幅を出す計算式については、以下のページにまとめてありますので、読んでみてください。
ナショナルインスツルメンツ製品における帯域幅とIQレートの関係
http://www.dolphinsystem.jp/bandwidth_iqrate_on_niproducts/
USRP-RIO1台あたりの収録・再生可能帯域幅について
http://www.dolphinsystem.jp/available_tranferrate_per_usrprio/ - *2 PXIeでUSRP-RIOと接続した場合の転送レートの上限は800MB/s。
160MHz BWでデータ収録をする
USRP-RIOからホストへの転送が間に合わない場合、このようにBuffer overflowのエラーが発生します。これはホスト側(Windowsソフトウェア)のデータ取り込みが間に合わず、データがあふれた=上書きされてデータを失った状態です。では実際にNI USRP-2954とNI PXIe-8135コントローラで最大帯域幅 160MHzを1ch収録すると、画像のようにオーバーフロー無くデータ受信が可能です。
※画像のサンプルは、オーバーフロー状態や転送したデータ量が分かるようにサンプルを改造しています。
オーバーフロー部分を拡大した画像が以下のもので、オーバーフローは0でエラー無し、rate/sが200.22Mとなっており設定したIQレートと等しくなっています。
次に、NI USRP-2954は2ch搭載しているので、
2ch*80MHz BW = 160MHz BW
でデータを取得してみると、こちらもデータを取得できました。
ホスト-USRP-RIO間の転送レートを超える転送でもエラー無し?
では、もっとIQレートを上げて取得してみましょう。1chで160MHz BWまで収録可能ですから、2chで160MHz BWの合計320MHz BWをやってみましょう。
ホスト-USRP-RIO間の転送レート上限が160MHz BWなので、オーバーフローエラーが発生するはず!
ですが、発生せず。
実際に受信しているデータ量を見てみると、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です。
以上、ドルフィンシステム福島でした。
コメント
コメントを投稿