RSSIはおおまかな距離を出しますが、実際の部屋ではマルチパスや人体で誤差が±3〜5mになります。BLEタグで持ち物探索やゾーン入退をサブメートル精度にしたいなら測距が必要です。本稿では双方向測距(TWR)、クロック漂移が効く理由、RSSIとの融合を解説します。
測距の考え方
受信電力からではなく、電波の飛行時間を測ります。往復では:
d = c * (T_round – T_reply) / 2
光は0.3m/nsなので、1nsの誤差は0.15mです。
片側TWR(SS-TWR)
タグがt0で送信、アンカーが固定遅延Δ後にt1で応答、タグがt2で受信。
T_round = t2 – t0
d = c * (T_round – T_reply) / 2
クロックが同期していないと、周波数オフセットf_offが効きます。
error = c * f_off * T_round / 2
20ppm水晶、T_round=10µsでは誤差2e-10s→6cm。100µsでは60cmに伸びるため、往復時間を短くするかオフセットを打ち消します。
両側TWR(SDS-TWR)
2回目の交換を加え、タグとアンカーのクロックオフセットを相殺します。処理遅延の非対称(<1ns)のみが残ります。SDS-TWRは水晶精度の要件を取り除くため、BLE/UWB測距の標準です。
BLE実装上の現実
BLEにUWBのようなRTTプリミティブはなく、次で実装します。
- 接続イベントのタイミング
- CTE/AoAフレームの位相
- GATT要求/応答( simplestだが主堆遅延1〜10msが支配)
1µsタイマは150mの不確定性を生むため、アプリ層ではなく無線層でタイムスタンプします。
RSSI融合
TWRは正確だが数msの能動TX/RXで数mA。RSSIは受動で安いがバイアス付き。カルマンフィルタで融合し、TWRはN回に1回に抑えて電力を節約します。
電力コスト
| 手法 | 能動時間 | 電流 | 精度 |
|---|---|---|---|
| RSSI受動 | 0.5ms | 5-8mA | ±3-5m |
| SS-TWR | ~4ms | 5-8mA | ±0.5m |
| SDS-TWR | ~8ms | 5-8mA | ±0.1-0.3m |
チェックリスト
- SDS-TWRで水晶オフセット相殺
- 工場でアンテナ+処理遅延を較正
- 無線層でタイムスタンプ
- カルマンでRSSI融合
- 往復時間を短く
適切なBLEタグはSDS-TWRで0.1〜0.3mを達成し、疎な測距とRSSIで電池寿命を維持します。