ソフトウェア制御のUSRPでマイクロ秒単位の送受信制御を行う(ストリーミング編)



こんにちはドルフィンシステム福島です。
9月になりだいぶ暑さも和らいできました。夕方になると虫の音が聞こえてきます。

ドルフィンシステムではGoogle Next Hub MaxというホームオートメーションのハブとなるAndroid タブレットを設置していて、そこから毎朝9時~夜20時まで自動的に環境音楽を流しています。その環境音楽は「虫の音」にしています。静かすぎると眠くなるので「虫の音」はちょうど良いBGMです。

以前の回で、マイクロ秒単位の送受信制御を行う方法について解説しました。このときは単発でしたが今回は連続(continuous)で行う方法について解説します。


【前回】ソフトウェア制御のUSRPでマイクロ秒単位の送受信制御を行う(finite編)
http://mikioblog.dolphinsystem.jp/2024/07/20240707-usrp.html


【今回】ソフトウェア制御のUSRPでマイクロ秒単位の送受信制御を行う(ストリーミング編)
http://mikioblog.dolphinsystem.jp/2024/07/usrp.html


ハードウェア制御の戦略

連続(continuous)送受信時の戦略は、データ落ちしないことが重要な戦略になります。

「データ落ち」とは、USRPからデータ取得が間に合わないず受信データを取りこぼしたり、送信すべきデータ生成がUSRPの送信タイミングに間に合わない事を言います。データ落ちしてしまうと、今まで送受信したサンプル数が分からなくなってしまいますので、ここが一番重要なポイントです。

例えばUSRPをサンプリングレート 1Mで受信動作させた場合で、既に11.5Mを受信した場合は動作開始後11秒500ms経過していることが分かります。ですが途中でデータ落ちをしてしまうと受信したデータサンプル数が分からなくなり動作開始からの経過時間が分からなくなってしまいます。


受信側

受信側については、全データを切れ目無く受信し続けることが重要です。

プログラミングやCPUパワーによってはデータ落ちしてしまうので、このような事が無いようにすることが重要です。

受信開始からの受信したデータサンプル数を数えておけば、

「受信開始から〇〇サンプル受信したので、このサンプルは受信開始から〇〇マイクロ秒目」という判断が出来、マイクロ秒単位でのサンプル操作が可能になります。


送信側

送信側も受信側と同じく全データを切れ目無く送信し続けることが重要です。

送信データが無い場合はどうするか?ということですが送信すべきデータが無い場合はゼロを送ります。

「送信開始から〇〇サンプルのゼロを送信し、〇〇サンプル目から送信データ(ゼロ以外の値)を送る」という処理を行うことで、マイクロ秒単位での送信制御が可能になります。

送信開始時から10ms後に送信開始したい場合は、最初の10回は1Kサンプルの0を送信し、11回目に送信データを送信します。もし10msと10マイクロ秒後に送りたい場合は、11回目のデータの先頭に0を10ヶ付与して、その後に送信データを入れて送信します。

このようにして無信号時は0を送信し、ゼロの数で送信時間を調整します。


まとめ

上記のように受信側、送信側ともにデータ落ちなく送受信し、その送受信サンプル数を数えておくことでマイクロ秒単位の制御が可能になります。なお送受信タイミングがハードウェア的に同期していることが必要です。


以上、ドルフィンシステム福島でした。


コメント