2015年7月10日金曜日

TWE-Liteのパケットスニファ・アナライザを使ってみた

 自転車ビーコンは、受信機が4秒おきにスリープから起床して短時間の受信待ちを行います。このタイミングを逃さないよう、送信機側では連続送信を4秒間以上継続します。タイミング設計については、開発を始めて間もない昨年9月に、「自転車ビーコンの電池持ち問題に対する解決案」というタイトルで考察しています。この目論見が正しかったのか、TWE SDKに含まれているパケットスニファを使って確かめてみました。

 パケットを観察する無線モジュールには、TWE-Lite賞の賞品としていただいたToCoStickを使用しました。PC直結ですぐ使えるので、思い立った時に実験が出来て便利です。サイトに書いてある通りにやってみると、リモコンが発信したパケットが猛烈な勢いで表示されます。


 リモコンからの電波をキャプチャし、パケット間の時間差をグラフにプロットしてみました。まずは、現状の毎秒64回+再送1回の場合。
64回/秒の場合

  • 16ms付近が最も頻度が高い
  • 4ms未満、30ms前後にも相当な数がある
  • 40ms以上も若干あり
という傾向があります。
 続いて、毎秒32回+再送1回の場合。

32回/秒の場合

 長時間側に分布するという予想を裏切り、毎秒64回の場合とほとんど変化がありません。毎秒32回ならば31msあたりに集中するはずですが、再送が効いているせいでしょう。同じ設定で5回連続してキャプチャした場合も、同様の傾向になりました。
32回/秒を複数回
パケットの高密度化を狙って64回/秒の送信を行ってきましたが、32回/秒の場合と違いは見られず、効果は無かったようです。送信間隔の他に、 再送回数や再送間隔を変えてみましたが、ばらつきが増えて長間隔側に分布が寄ってしまうだけで、パケットの高密度化は達成できませんでした。
 最適な待ち受け時間はどのくらいかを知るために、32回/秒の場合のパケット間隔を集計してみました。

 間隔[ms]  回数     積算回数  積算割合
    4       212     212     15.5%
    8       1       213     15.6%
    12      1       214     15.7%
    16      699     913     66.9%
    20      209     1122    82.2%
    24      2       1124    82.3%
    28      46      1170    85.7%
    32      165     1335    97.8%
    36      3       1338    98.0%
    40      1       1339    98.1%
    44      5       1344    98.5%
    48      17      1361    99.7%
    52      1       1362    99.8%
    56      1       1363    99.9%
    60      1       1364    99.9%
    64      1       1365    100.0%

 32ms以下に大きな集合があり、ここを押さえれば95%以上の確立でヒットします。64回/秒でも約96%がこの範囲にありました。これなら、週5日の使用で空振りは月に1回程度しか発生しません。
 36ms以上は電池もち悪化に見合うほどの効果が無いので、待ち受け時間は32msが最適と判断しました。
 今後は、

  • 送信APIを呼び出す頻度は32回/秒
  • 再送は1回
  • 受信側のスリープ解除1回あたりの受信待ち時間は32ms
という設定で使用します。

0 件のコメント:

コメントを投稿