NI-USRPで送信を一時停止する2つの方法

今回はNI-USRPドライバを使用して、USRPからデータを送信する場合に一時送信を停止する方法を解説します。
NI-USRPドライバを使用してUSRPの送受信を行います。

受信の場合

受信の場合は以下のように、

  • Initiate関数で受信を開始し
  • Fetch関数でデータを取得し
  • Abort関数で受信を終了します。

clip_image001[3]

送信の場合

送信の場合は、受信と違いInitiate関数とAbort関数は無く明示的に開始停止はありません。
Write Tx Data関数を呼んだタイミングで送信が開始されます(もしくはトリガのタイミング。サンプルの"niUSRP EX Tx with GPS.vi"等を参照)。

clip_image001[5]

送信を停止する場合は、

  • 停止する直前の送信時に
  • Write Tx Data関数の "end of data?"にtrueを付加して送信する。

これで送信が停止されます。
この "end of data? = true"にしないと、次にWrite Tx Data関数を呼んだ場合に、"Tx buffer underflow~"のエラーが発生します。
よって一時停止する場合には、必ず "end of data? = true"で停止します。

または以下のように0のデータを"end of data?"にtrueでも停止可能です。

image

送信再開までに50msの時間がかかるので注意

Write Tx Data関数で"end of data? = true"で送信は停止することが出来ます。
そしてもう一度Write Tx Data関数を呼ぶと("end of data? = false"で)再度送信することが出来ます。しかし再度送信する場合は即座に送信されるわけではなく50msかかります。
Write Tx Data関数を呼んでから送信されるまで50ms掛かってしまいます。

50msの待ち時間なく送信を一時停止する方法

50msも待てない場合は、仕方ないので"end of data? = true"を使って送信を一時停止しません。
その代わりに、以下のように0データを送信するようにします。
(送信する0データ長は、IQ Rateに合わせた長さを用意して下さい。IQ Rate 1Mの場合で、1ms送信停止する場合は、IQ 1000サンプルの0データを送信します。)

clip_image001[9]

コメント