Bluetooth Low EnergyのChannel Sounding(★★★)

[BLE(Bluetooth Low Energy)の開発依頼は、フィールドデザインまでお気軽にお問い合わせください。]

ここでは、Bluetooth ver6.0から導入されたChannel Soundingについて説明します。従来のRSSIから距離を推定する方法では、誤差が20m近く出るため、近距離以外の判定には全く利用できませんでした。そこで、新たな方法が導入されました。


Channel Soundingとは

Soundingとは、ソナー(音波)などで海底の形状などを調べる意味で使われてましたが、無線関係でもよく使われ、電波を利用して周辺環境を調べることの意味です。BLEのChannel Soundingでは、次の2つの方法で距離を測定します。

  • RTT(Round Trip Time): 電波の往復の時間を調べることで、距離を推定する
  • PBR(Phase Based Ranging): 無変調波を出し、相手がそれを折り返し、それぞれの受信信号の位相差から距離を推定する

往復の時間で距離を計測する方法は、技術的にはレーダーを応用したものなので古くからあります。Wi-Fiで2016年にIEEE802.11mcという規格が発表され、製品がいろいろ出ています。
また、位相差で距離を計測する方法は、技術的には1930年代から船舶で利用されていたもので、特に新しいものではありません。小型の無線端末では、Zigbeeで2010年代ころに、PBR(当時は、MCPD(Multi Carrier Phase Difference)と呼んでいた)を使って、距離を数十cm単位で計測できていました。
ここで注意が必要なのは、PBRは位相の傾きから距離を推定するため、隣り合う周波数で位相差が±π以内でしか推定できません。BLEの1MHz間隔で測定する場合は、cを光速とすると、c/2Δfの範囲でしか推定できず、0〜150mが限度になります。RTTと組み合わせれば、150m〜300mまでも計測できますが、一般的に1MPHYでは150mも飛びませんので、その必要はありません。


RTTの基本原理

RTTの原理に関しては、Fine Timing Measurement(Wi-Fi Location)についてと同じですので、省略します。
ps単位の制御が必要なため、BLEの場合は誤差が大きく、ほとんど使い物になりません。弊社の実装では、屋内、屋外ともに0m〜40mの実施範囲ではどの場所でも10mくらいの誤差が出ます。


PBRの基本原理

InitiatorからReflectorまでの電波の到達時間をτとすると、Reflectorで受信されるのは、2πf(t-τ)の位相なので次の図のようになります。同様に、Reflectorでは、Initiatorに電波を返信します。このとき、どの周波数でも返信するタイミングはほぼ同じにしておく必要があります(10usなど)。また、Local Oscillatorのドリフト量などを同じと仮定したいため、短い時間に全計測は済ませたいです。

それぞれの受信位相を足し合わせる(通常は位相はIQの複素数で表せるため、その場合は掛け算となる)と、-4πfτ+Cとなり、それぞれでの初期位相が綺麗に消えることになります。Cは固定位相や測定時の遅延など周波数に依存しない定数となります。この式では、位相なので、2πごとの曖昧さが残ってしまいます。

そこで、次のように、隣り合う2つの周波数で同じように受信位相を取得します。

θ1=-4πf1τ+C (mod 2π)

θ2=-4πf2τ+C (mod 2π)

さらに、差分を取り、Cを打ち消します。

12)=-4π(f1-f2)τ (mod 2π)

到達時間τの式にすると、

τ=-(θ12)/4πΔf (mod 1/2Δf)

今、θ1, θ2は既知で、BLEのChannel Soundingでは、隣り合う周波数の差Δf(=f1-f2)は、1MHzです。
よって、距離はτに光速c(=3×108)を掛け合わせると導出できます。

distance = c・τ

上記で注意が必要なのは、前述したように、最大でもc/2Δfの範囲までしかこの方法は使えないことです。
この方法で計測した弊社の実装では、屋内の0m〜40mの実施範囲では場所によっては2mくらいの誤差、屋外の0m〜40mの実施範囲では0.6mくらいの誤差が出ますが、入退室管理やキーレスエントリー、アセットトラッキングなどには利用できると思います。


BLE Channel Sounding

BLE Channel Sounding(以下CS)では、測定を開始する方をInitiatorと呼び、測る対象の方をReflectorと呼びます。特に、Central/Peripheralとは関係ありません。ただ、運用上は、Peripheralを低消費電力にしたいので、CentralがInitiatorになり、PeripheralがReflectorになるケースが多いと思われます。
下記の手順で測定が行われます。

LL_CS_SECURITY_REQパケットでは、IV(initialization vector), IN(instantiation nonce), PV(personalization vector)を交換します。これらから、乱数をパケットごとに作成し、CS_SYNCパケットの最後につけ、双方で検証することで、偽造防止を行うことができます。

CS_SYNCパケットは、Channel Sounding(RTT)用の特別なパケットで、1MPHYか2MPHYで送信されます。
CS Toneは、無変調のキャリアになります。