倉庫内でBluetooth Beaconがブロードキャストする際、RSSIベースの測距では「3〜5メートルの範囲内のどこか」という不確実性の円しか得られず、通路レベルの位置特定には使用できません。BLE 5.1で導入された到着角(AoA)方向検出は、このRSSIの円を数度の精度の方位線に置き換え、2つ以上のロケータアンテナを使用することでサブメートル測位を実現します。本記事では、CTE波形構造からアンテナアレイジオメトリ、IQサンプリング、角度推定アルゴリズムまで、AoA信号チェーン全体を解説し、システムが2度の精度を達成するか20度のノイズに終わるかを決定するエンジニアリングパラメータ、トレードオフ、キャリブレーション手順を詳述します。
## 1. BLE 5.1方向検出:AoA vs AoD
BLE 5.1は2つの方向検出モードを定義しています。どちらもパケットペイロードの後に追加される72〜160ビットのConstant Tone Extension(CTE)を利用しますが、誰がアンテナを切り替え、誰がIQデータをサンプリングするかが異なります:
| パラメータ | 到着角(AoA) | 出発角(AoD) |
|———–|————————|————————–|
| アンテナアレイ位置 | 受信機(ロケータ) | 送信機(ビーコン/タグ) |
| アンテナ切り替え | 受信機がCTE中に切り替え | 送信機がCTE中に切り替え |
| IQサンプリング | 受信機がサンプリング | 受信機がサンプリング(単一アンテナ) |
| 典型的ユースケース | 資産追跡、屋内ナビゲーション | アイテム検索、近接方向 |
| ビーコン複雑さ | シンプル(単一アンテナ、CTE追加のみ) | 複雑(アレイ+スイッチ必要) |
| ロケータ複雑さ | 複雑(アレイ+スイッチ+サンプラ) | シンプル(単一アンテナ) |
| アドバタイジングPDU内CTE | 対応(ADV_EXT_IND) | 非対応 |
| データチャネルPDU内CTE | 対応 | 対応 |
| タグ側ファームウェア | TxにCTEConfigを追加 | 送信中にRFスイッチGPIOを制御 |
電池駆動のBLEタグを使用する資産追跡では、AoAが主流のアーキテクチャです。タグはシンプル(単一アンテナ、アドバタイジングパケットでCTEを有効化するだけ)で、アンテナアレイ、RFスイッチ、IQサンプリングのすべての複雑さは商用電源駆動のロケータに集約されます。本記事では、エンジニアリングの決定事項が存在するAoA受信機側に焦点を当てます。
### パケット構造内のCTE配置
CTEは標準BLEパケットのCRC後に、同じRFチャネルで送信され、ホワイトニングは適用されません:
“`
| プリアンブル | アクセスアドレス | PDUヘッダ + ペイロード | CRC | CTE |
^
72-160ビット、非ホワイトニング
“`
PDUヘッダには、ADV_EXT_INDの拡張ヘッダまたはデータチャネルPDUに2ビットのCPTypeフィールド(CTE Info)が含まれ、受信機に以下を伝えます:(a) CTEが存在する、(b) CTEタイプ(AoA = 1 usスイッチ、AoD = 2 usスロット)、(c) CTE長(1-20単位、各8 us)、(d) アンテナ切り替えパターン長。
CTE自体はRFキャリア周波数の純粋な正弦波です(変調なし、ホワイトニングなし)。受信機はこれをダウンコンバートし、既知のレートでI/Qペアをサンプリングし、アンテナアレイ全体の位相進展を生成して到着角をエンコードします。
## 2. Constant Tone Extension(CTE)構造
CTEは全長に関わらず固定の内部構造を持ちます:
| セグメント | 持続時間 | 内容 | 目的 |
|———|———-|———|———|
| ガードインターバル(GI) | 4 us | 最後のCTEビットと同じ | AGCセットリング待ち、サンプリングなし |
| リファレンス期間 | 8 us | 単一リファレンスアンテナ | 位相リファレンス確立 |
| スイッチスロット1 | 1 us(AoA)または2 us(AoD) | アンテナ1 | IQサンプル取得 |
| スイッチスロット2 | 1 us(AoA)または2 us(AoD) | アンテナ2 | IQサンプル取得 |
| … | … | … | … |
| スイッチスロットN | 1 us(AoA)または2 us(AoD) | アンテナN | IQサンプル取得 |
AoAモードでは各スイッチスロットは1 usです。8 usのリファレンス期間と4 usのガードインターバルで、最大長CTE(20単位 x 8 us = 160 us)は以下を生成します:
– ガード:4 us
– リファレンス:8 us(1 usあたり1 IQサンプル = 8リファレンスサンプル)
– スイッチング:148 us / 1 us = 148スイッチスロット
実際には、ほとんどの設計で4〜8アンテナ素子を使用するため、CTEごとに4-8スイッチスロットが必要です。残りのスロットは未使用またはオーバーサンプリングに使用されます。典型的な構成:
| 構成 | CTE長 | アンテナ数 | サンプル/スロット | 総IQペア | 更新レート |
|——–|———–|———-|————–|—————-|————-|
| 最小 | 2単位(16 us) | 4 | 1 | 4 + 8リファレンス | ~10 Hz |
| 標準 | 4単位(32 us) | 4 | 1 | 4 + 8リファレンス | ~10 Hz |
| 拡張 | 8単位(64 us) | 8 | 1 | 8 + 8リファレンス | ~5 Hz |
| オーバーサンプル | 16単位(128 us) | 8 | 4 | 32 + 8リファレンス | ~2 Hz |
トレードオフは明確です:CTEが長いほどサンプル数が多く角度分解能が向上しますが、通信時間が増加しアドバタイジングレートが低下します。BLEの3つのプライマリアドバタイジングチャネル(37, 38, 39)では、160 usのCTEはパケット総通信時間に約10-15%を追加しますが、許容範囲です。
### CTE周波数と位相リファレンス
CTEはRFチャネル中心周波数(例:チャネル37では2402 MHz)で送信されます。変調がないため、アンテナアレイ全体の位相変動は空間的な経路差のみに起因します。アレイ広角に対して角度thetaで到着する信号の、距離dで分離された隣接アンテナ間の位相差は以下の通りです:
“`
phase_diff = (2 * pi * d / lambda) * sin(theta)
“`
ここでlambda = c / f = 3e8 / 2402e6 = 2402 MHzで124.9 mmです。
標準的な半波長間隔(d = lambda/2 = 62.5 mm)では、以下のように簡略化されます:
“`
phase_diff = pi * sin(theta)
“`
これは最大一意視野角がプラスマイナス90度(合計180度のFoV)であることを意味し、プラスマイナス90度を超えると位相ラッピングが発生します。より広いカバレッジには、lambda/2未満の間隔または複数のサブアレイを使用します。
## 3. アンテナアレイ設計
アンテナアレイはAoAシステムで最も重要なハードウェア要素です。そのジオメトリが角度分解能、視野角、マルチパス感受性を直接決定します。
### 3.1 リニアアレイ
均一リニアアレイ(ULA)はBLE AoAで最もシンプルかつ一般的な構成です:
| パラメータ | 値 | 備考 |
|———–|——-|——-|
| 素子数 | 4-8 | 多いほど分解能向上 |
| 素子間隔 | lambda/2(62.5 mm) | 一意FoVの標準 |
| アレイ長(4素子) | 187.5 mm | ロケータPCBに収まる |
| アレイ長(8素子) | 437.5 mm | 外部アレイが必要な場合あり |
| 角度分解能(4素子) | ~15度 | 10 dB SNR時 |
| 角度分解能(8素子) | ~8度 | 10 dB SNR時 |
| 視野角 | プラスマイナス90度 | 合計180度 |
| 曖昧性 | 前後曖昧性 | +30度と-30度からの信号が同一に見える |
前後曖昧性はULAの根本的な制限です:+30度から到着する信号は-30度からのもの(鏡像)と同じ位相進展を生成します。これは(a)アレイを壁やRF反射板に対して設置し片半球のみを可視にするか、(b)2Dアレイを使用することで解決します。
### 3.2 平面(2D)アレイ
完全な2D角度推定(方位角+仰角)には平面アレイが必要です。一般的な構成:
| タイプ | ジオメトリ | 素子数 | 方位角FoV | 仰角FoV | 複雑さ |
|——|———-|———-|————-|—————|————|
| 正方形UCA | N x Nグリッド | 4, 9, 16 | 360度 | ~60度 | 中程度 |
| 円形UCA | リング | 4-8 | 360度 | ~60度 | 中程度 |
| L字型 | 2つのULAが角を共有 | 2N-1 | 360度 | 360度 | 低 |
| 三角形 | 3素子120度間隔 | 3 | 360度 | 限定 | 低 |
均一円形アレイ(UCA)は天井設置ロケータで人気です。前後曖昧性がなく360度の方位角カバレッジを提供するためです:
“`
アンテナ位置(8素子UCA、半径r = lambda/2):
x_i = r * cos(2 * pi * i / 8)
y_i = r * sin(2 * pi * i / 8)
“`
天井設置ロケータでは、方位角(theta)がタグへのコンパス方位を与え、仰角(phi)が水平面下の角度を与え、既知の天井高から距離を推定できます:
“`
distance = ceiling_height / tan(phi)
“`
### 3.3 アンテナ素子選択
パッチアンテナはAoAアレイの標準的な選択です。指向性放射パターン(対象半球へのゲイン)とコンパクトなフォームファクタを備えているためです:
| アンテナタイプ | サイズ(2.4 GHz) | ゲイン | パターン | 適合性 |
|————-|——————-|——|———|————-|
| PCBパッチ | 25 x 25 mm | 6-7 dBi | 半球状 | 優秀(コンパクト、指向性) |
| セラミックチップ | 5 x 5 mm | 2-4 dBi | ブロードサイド | 良好(コンパクト、低ゲイン) |
| PCBトレース(IFA) | 15 x 5 mm | 2-3 dBi | ブロードサイド | 普通(全方向性傾向) |
| ダイポール(外部) | 30 mm | 2.15 dBi | ドーナツ状 | 不適(バックローブ問題) |
| ヘリカル | 15 x 8 mm | 3-5 dBi | 半球状 | 良好だが背が高い |
AoAの主要アンテナパラメータ:位相中心安定性。アンテナの位相中心(見かけの放射点)は到着角が変化してもシフトしてはなりません。PCBパッチアンテナの位相中心安定性はプラスマイナス1-2 mmで、2.4 GHzでプラスマイナス1-3度の角度誤差に変換されます。安価なセラミックチップアンテナはプラスマイナス5 mmの位相中心変動(プラスマイナス7度の誤差)がある場合があり、高精度AoAには不適切です。
### 3.4 相互結合と素子間隔
アンテナ素子が互いに近接(lambda未満)して配置されると、相互結合により各素子の放射パターンが隣接素子によって歪みます。lambda/2間隔の隣接パッチアンテナ間の結合係数S21は通常-15〜-20 dBです。これは管理可能ですが無視できません:
| 間隔 | S21(結合) | パターン歪み | 角度誤差寄与 |
|———|—————-|——————-|————————|
| lambda/4(31 mm) | -8〜-12 dB | 重大 | 5-10度 |
| lambda/2(62.5 mm) | -15〜-20 dB | 中程度 | 1-3度 |
| lambda(125 mm) | -25〜-30 dB | 最小 | <1度 |
| 3lambda/4(94 mm) | -20〜-25 dB | 低 | <1度 |
緩和策には以下が含まれます:(a)素子間にグランドプレーンカットアウトを追加、(b)ディフェクテッドグランドストラクチャ(DGS)の使用、(c)素子間の電磁バンドギャップ(EBG)構造、または(d)間隔を3lambda/4に広げて一意FoVの狭小化(プラスマイナス90度からプラスマイナス42度)を受け入れる。
## 4. RFスイッチとサンプリングフロントエンド
### 4.1 アンテナスイッチ要件
AoA受信機は1 usの各スイッチスロット中にアンテナ素子を切り替える必要があります。RFスイッチが重要コンポーネントです:
| パラメータ | 要件 | 典型部品 | 備考 |
|-----------|-------------|---------------|-------|
| 切り替え時間 | < 200 ns | SKY13330, HMC253, PE42420 | IQサンプル前に確定必要 |
| 挿入損失 | < 1 dB | SKY13330: 0.7 dB | 感度に影響 |
| アイソレーション(オフ) | > 20 dB | SKY13330: 25 dB | クロストーク防止 |
| ポート数 | 4-8 SPxT | SP4T, SP8T | アレイサイズに対応 |
| 周波数 | 2.4 GHz ISM | 全記載部品 | 標準 |
| 制御インターフェース | GPIO(SP8Tで3ビット) | MCU GPIO直接 | 高速、決定論的 |
| 線形性(IIP3) | > 20 dBm | SKY13330: 35 dBm | 相互変調防止 |
スイッチセトリング時間が重要です。1 usのスイッチスロットでIQサンプルをスロット中央(切り替え後500 ns)で取得する場合、スイッチは200-300 ns以内にセトリングし、200 nsのクリーン信号をサンプリングに残す必要があります。SKY13330(Skyworks)とPE42420(pSemi)はどちらも150-200 nsのセトリング時間を指定しており、適切です。
### 4.2 BLE SoCでのIQサンプリング
IQサンプリングは外部ADCではなくBLE SoCの無線ペリフェラルによって実行されます。無線の内部I/Q復調器がベースバンドI/Qサンプルへのアクセスを提供します:
| SoC | IQサンプルレート | サンプルバッファ | CTEサポート | アンテナスイッチ制御 | 備考 |
|—–|—————|—————|————-|———————-|——-|
| nRF52811/52833/52840 | 1-2 MHz(DFE) | 128-1024バイト | 対応(ハードウェア) | PPI経由GPIO | 最も成熟したDFエコシステム |
| nRF5340 | 1-2 MHz(DFE) | 最大4096バイト | 対応(ハードウェア) | DPPI経由GPIO | デュアルコア、大バッファ |
| CC2640R2 | 8 MHz(カスタム) | 限定 | 非対応(パッチ必要) | 手動GPIO | ネイティブDF非対応 |
| CC2642/CC2652 | 1 MHz | 設定可能 | 対応(ハードウェア) | IOMUX経由GPIO | BLE 5.1ネイティブ |
| ESP32-C6/H2 | 設定可能 | 設定可能 | 対応(ハードウェア) | GPIOマトリックス経由GPIO | 最近、成熟度低 |
| BGM240/BG24 | 1 MHz | 設定可能 | 対応(ハードウェア) | PRS経由GPIO | Silabs Gecko |
Nordic nRF52/53シリーズが最も成熟したAoA実装を持ちます。Direction Finding Engine(DFE)はハードウェアペリフェラルで、以下を実行します:
1. PDUヘッダからCTE存在を検出
2. PPI(Programmable Peripheral Interconnect)経由で1 us間隔でRFスイッチGPIOを制御
3. 最大2 MHzでI/Qをサンプリング(設定可能、デフォルト1 MHz = 1サンプル/us)
4. 専用RAMバッファにサンプルを格納
5. サンプリング完了時に割り込みを生成
### 4.3 スイッチングパターン構成
アンテナ切り替えパターンは各スイッチスロットでどのアンテナをアクティブにするかを定義します。4素子アレイの場合:
| スイッチスロット | アクティブアンテナ | SwitchPattern GPIO値 | 備考 |
|————-|—————|————————-|——-|
| リファレンス(0-7) | アンテナ0(リファレンス) | 0x01 | 全リファレンスサンプルで同一アンテナ |
| スロット1 | アンテナ1 | 0x02 | 最初の測定アンテナ |
| スロット2 | アンテナ2 | 0x04 | 2番目の測定アンテナ |
| スロット3 | アンテナ3 | 0x08 | 3番目の測定アンテナ |
| スロット4 | アンテナ0 | 0x01 | リファレンスに戻る(オプション) |
| スロット5-8 | アンテナ1-3繰り返し | 0x02, 0x04, 0x08 | オーバーサンプリング(オプション) |
パターンはRAMのバッファにロードされ、RADIOペリフェラルのPPIシステムがCTE受信に同期して1 us間隔でGPIOピンをトグルします。このハードウェア駆動の切り替えにより、ソフトウェア制御のGPIOトグルでは避けられないジッターを排除します。
## 5. 角度推定アルゴリズム
IQサンプルを収集した後、到着角を計算する必要があります。アルゴリズムの選択が角度分解能、計算コスト、ノイズロバスト性を決定します。
### 5.1 位相差法(基本)
最もシンプルなアプローチは隣接アンテナ素子間の位相差を計算し、角度に変換する方法です:
“`python
import numpy as np
# IQサンプル:4アンテナ、各1サンプル(スイッチスロットから)
# iq[0] = リファレンス、iq[1..3] = アンテナ1..3
iq = np.array([complex(i, q) for i, q in iq_samples])
# 各アンテナサンプルの位相
phases = np.angle(iq)
# 隣接素子間の位相差
dphi = np.diff(phases)
# 角度に変換(半波長間隔)
# dphi = pi * sin(theta) => theta = arcsin(dphi / pi)
theta = np.arcsin(np.clip(dphi / np.pi, -1, 1))
# 素子ペア全体で平均
theta_avg = np.mean(theta)
“`
| パラメータ | 値 | 備考 |
|———–|——-|——-|
| 角度分解能 | 10-15度(4素子、10 dB SNR) | 位相ノイズで制限 |
| 計算量 | O(N) | マイクロ秒で実行 |
| マルチパスロバスト性 | 低 | 反射が位相を破壊 |
| 一意FoV | プラスマイナス90度 | 標準ULA |
| 必要SNR | > 5 dB | これ以下では位相ラップ |
位相差法は概念実証や低精度アプリケーション(部屋レベル測位)に適しています。サブ度精度が必要な本番システムには、より高度なアルゴリズムが必要です。
### 5.2 MUSIC(Multiple Signal Classification)
MUSICは共分散行列の固有分解を用いて信号部分空間とノイズ部分空間を分離する部分空間ベースのアルゴリズムです。複数の同時信号(マルチパス反射)を分離でき、超分解能を実現します:
“`python
import numpy as np
from scipy.linalg import eigh
def music_aoa(iq_matrix, num_antennas, num_signals=1, d=0.5, scan_points=180):
# iq_matrix: (num_snapshots, num_antennas) complex
# d: 素子間隔(波長単位、0.5 = lambda/2)
# 1. 共分散行列の計算
R = np.cov(iq_matrix.T) # (N, N)エルミート
# 2. 固有分解
eigenvalues, eigenvectors = eigh(R)
# 3. 固有値を降順ソート
idx = np.argsort(eigenvalues)[::-1]
eigenvalues = eigenvalues[idx]
eigenvectors = eigenvectors[:, idx]
# 4. ノイズ部分空間(最小N-K固有ベクトル)
K = num_signals
En = eigenvectors[:, K:] # (N, N-K)
# 5. 走査角度thetaのステアリングベクトル
thetas = np.linspace(-90, 90, scan_points)
spectrum = np.zeros(scan_points)
for i, theta in enumerate(np.deg2rad(thetas)):
a = np.exp(-1j * 2 * np.pi * d * np.arange(num_antennas) * np.sin(theta))
# MUSIC疑似スペクトラム
spectrum[i] = 1.0 / np.abs(a.conj() @ En @ En.conj().T @ a)
# 6. ピーク探索
peak_idx = np.argmax(spectrum)
return thetas[peak_idx], spectrum
“`
| パラメータ | 値 | 備考 |
|———–|——-|——-|
| 角度分解能 | 3-5度(4素子、10 dB SNR) | 超分解能 |
| 分解能(8素子) | 1-2度 | クラメル・ラオ限界に近い |
| 計算量 | 固有分解でO(N^3) | Cortex-M4Fで1-5 ms |
| マルチパス処理 | 最大N-1信号を分離 | K < Nの場合 |
| 必要スナップショット | >= N(通常8-16) | 複数CTE受信が必要 |
| メモリ | N x N共分散(N=4で64バイト) | 軽微 |
MUSICの主要な利点はマルチパス分解能です。直接波と反射波が異なる角度から到着する場合、MUSICは疑似スペクトラムで両方を別々のピークとして識別できます。直接波は通常最も高い電力のピークですが、この仮定はNLOS(非視線)環境では成り立たない場合があります。
### 5.3 ESPRIT(Rotational Invarianceによる信号パラメータ推定)
ESPRITはアレイのシフト不変構造を利用してMUSICのスペクトル探索を回避します。MUSICより計算量が少ないですが、均一アレイが必要です:
| パラメータ | MUSIC | ESPRIT |
|———–|——-|——–|
| アレイタイプ | 任意(ULA, UCA, 平面) | ULAまたはペアサブアレイのみ |
| スペクトル探索 | あり(180+評価) | なし(閉形式) |
| 計算量 | O(N^3) + O(走査 x N) | O(N^3) |
| レイテンシ(Cortex-M4F、N=4) | 2-5 ms | 1-2 ms |
| 角度分解能 | 同等 | 同等 |
| マルチパス分解能 | あり(ピーク探索) | あり(固有値マッピング) |
| 実装複雑さ | 中程度 | 中程度 |
4-8アンテナのBLE AoAでは、MUSICとESPRITの両方がCortex-M4Fで数ミリ秒以内に実行されます。選択は通常アレイジオメトリで決まります:UCA(天井設置ロケータ)にはMUSIC、ULA(壁面設置ロケータ)にはESPRIT。
### 5.4 クラメル・ラオ下限(CRLB)
CRLBはSNR、アンテナ数、アレイジオメトリを考慮した最良可能角度精度を定義します:
“`
var(theta) >= lambda^2 / (8 * pi^2 * d^2 * N * (N-1) * SNR * K)
“`
ここでN = アンテナ数、K = スナップショット数、d = 素子間隔(メートル)、SNR = リニア(dBではない)。
| N(アンテナ) | K(スナップショット) | SNR(dB) | CRLB(度) | 実用値(x2 CRLB) |
|————-|————-|———-|—————-|———————|
| 4 | 1 | 10 | 3.8 | 7.6 |
| 4 | 8 | 10 | 1.3 | 2.7 |
| 8 | 1 | 10 | 1.1 | 2.3 |
| 8 | 8 | 10 | 0.4 | 0.8 |
| 4 | 8 | 20 | 0.4 | 0.8 |
| 8 | 8 | 20 | 0.13 | 0.26 |
「実用値」列は実環境の障害(位相ノイズ、相互結合、チャネル不平衡)を考慮し、通常CRLBの2倍になります。それでも、8素子アレイで8スナップショット、20 dB SNRでは理論的にサブ度精度が達成可能です。
## 6. マルチパスとNLOS緩和
屋内環境はマルチパスが豊富です。2.4 GHz信号は金属棚、コンクリート壁、人体で反射し、タグからロケータへの複数の経路を作ります。各経路は異なる角度で到着し、受信機はそのベクトル和を見ます。
### 6.1 AoAへのマルチパス影響
| 環境 | 直接波電力 | 反射波電力 | AoA誤差(位相差) | AoA誤差(MUSIC) |
|————|——————-|———————|———————-|——————-|
| オフィス(LOS) | -50 dBm | -65 dBm | 2-5度 | 1-2度 |
| 倉庫(部分LOS) | -60 dBm | -63 dBm | 10-25度 | 3-8度 |
| 工場(NLOS) | -75 dBm | -70 dBm | 30度以上 | 10-20度 |
| 廊下(導波管) | -55 dBm | -57 dBm | 15-30度 | 5-10度 |
NLOS条件では直接波が最も強い反射波より10-15 dB低い場合があります。MUSICは時折両方の経路を分解できますが、どのピークが直接波かを特定するには追加情報が必要です:
– **RSSIゲーティング**:直接波が最も高いRSSIを持つべき(NLOSでは常に真とは限らない)
– **一貫性チェック**:直接波の角度は複数CTE受信間で一貫しているべき
– **マルチロケータ融合**:3以上のロケータがタグを見る場合、直接波は一貫した三角測量を生成する角度を持つ
– **仰角フィルタリング**:天井設置ロケータの場合、直接波は既知の天井高に一致する仰角を持つべき
### 6.2 空間スムージング
空間スムージングはマルチパス信号を非相関化する前処理技術で、MUSICがコヒーレントマルチパス(標準MUSICでは不可能)を分解できるようにします:
| 技術 | アレイタイプ | 非相関化 | アパーチャ損失 | 複雑さ |
|———–|———–|—————|———————|————|
| 前方スムージング | ULA | あり | ~50% | 低 |
| 前方-後方 | ULA | あり | ~50% | 低 |
| 空間スムージング(UCA) | UCA | あり | ~40% | 中程度 |
| 2Dスムージング | 平面 | あり | ~50% | 中程度 |
前方空間スムージングはN素子ULAをサイズM = N – L + 1のL個の重複サブアレイに分割します。サブアレイの共分散行列を平均化することでコヒーレントマルチパスを非相関化しますが、有効アパーチャがNからMに減少します。4素子アレイでは2素子サブアレイ(L=2, M=2)で1つのマルチパス信号を分解できますが、分解能は2素子アレイレベルに低下し、通常はトレードオフに見合いません。8素子アレイではM=5(L=4)の前方-後方スムージングが良いバランスです。
### 6.3 時間フィルタリング
角度推定が完璧でも、出力は時間的にノイズがあります。カルマンフィルタやアルファベータフィルタが角度推定を平滑化します:
| フィルタ | 状態 | チューニング | レイテンシ | 平滑度 |
|——–|——-|——–|———|————|
| 移動平均 | theta | ウィンドウ = 5-10サンプル | 0.5-1 s | 中程度 |
| アルファベータ | theta, omega | alpha=0.3, beta=0.05 | <0.2 s | 良好 |
| カルマン | theta, omega | Q, Rを測定から | <0.1 s | 最高 |
| パーティクルフィルタ | theta, x, y | 100-500パーティクル | 0.1-0.5 s | 最高(非線形) |
移動する資産(フォークリフト、AGV)のリアルタイム追跡では、アルファベータフィルタが実用的な最適点です:マイクロ秒で実行され、最小限のレイテンシを追加し、ほとんどの屋内アプリケーションに適切な平滑化を提供します。
## 7. システムアーキテクチャとデプロイメント
### 7.1 ロケータハードウェアアーキテクチャ
完全なAoAロケータは以下で構成されます:
| コンポーネント | 機能 | 典型部品 | コスト |
|-----------|----------|---------------|------|
| BLE SoC | 無線、IQサンプリング、角度計算 | nRF52833/5340 | $4-7 |
| RFスイッチ | アンテナマルチプレクシング | SKY13330-385LF(SP4T) | $1.50 |
| アンテナアレイ | 4-8素子パッチアレイ | カスタムPCBまたはTI AOA-RD | $3-10 |
| MCU(オプション) | 角度計算オフロード | なし(SoCで十分) | $0 |
| Ethernet/Wi-Fi | ポジショニングサーバーへのバックホール | W5500またはESP32 | $2-3 |
| 電源 | PoEまたは12Vアダプタ | PoEモジュール | $2-4 |
| エンクロージャ | RF透過性ハウジング | ABS/ポリカーボネート | $3-8 |
| **総BOM** | | | **$15-35** |
### 7.2 ロケータ配置戦略
| 配置 | 高さ | 間隔 | カバレッジ | 精度 | ユースケース |
|-----------|--------|---------|----------|----------|----------|
| 天井設置 | 3-4 m | 8-15 m | 100-200 sqm | 0.5-1 m | オフィス、小売 |
| 壁面設置 | 2-3 m | 6-10 m | 50-100 sqm | 1-2 m | 廊下、通路 |
| ハイベイ | 8-12 m | 15-25 m | 300-500 sqm | 2-5 m | 倉庫、工場 |
| 床面設置 | 0.5-1 m | 4-8 m | 30-60 sqm | 0.3-0.5 m | 高密度資産追跡 |
天井設置UCAロケータを3-4 mの高さで10-12 m間隔で配置するのが、サブメートル屋内測位の標準デプロイメントです。ロケータからタグへの仰角が距離を制約します:
| 仰角 | 水平距離(天井3 m) | 水平距離(天井4 m) |
|----------------|-----------------------------------|-----------------------------------|
| 80度 | 0.5 m | 0.7 m |
| 60度 | 1.7 m | 2.3 m |
| 45度 | 3.0 m | 4.0 m |
| 30度 | 5.2 m | 6.9 m |
| 20度 | 8.2 m | 11.0 m |
仰角20度未満では距離推定が信頼できなくなります(小さな角度誤差が大きな距離誤差を引き起こす)。これがロケータ間隔を、タグが常に少なくとも2つのロケータの20-80度仰角コーン内にあるように選ぶべき理由です。
### 7.3 ポジショニングサーバー
ポジショニングサーバーは複数ロケータからの角度測定を受信し、2Dまたは3D位置を計算します:
| 方式 | 最小ロケータ数 | 計算 | 精度 | 備考 |
|--------|-------------|-------------|----------|-------|
| 三角測量(AoA 2つ) | 2 | 2方位線の交点 | 0.5-2 m | 角度誤差に敏感 |
| 最小二乗法(AoA N個) | 3以上 | N方位の残差最小化 | 0.3-1 m | ロバスト、標準 |
| カルマンフィルタ | 2以上 | 運動モデル付き状態空ース | 0.2-0.5 m | 時間平滑化 |
| フィンガープリンティング+AoA | 1以上 | RSSI/AoAハイブリッドDB | 0.5-1 m | ロケータ1台で動作 |
3以上のロケータを使用する最小二乗法が本番標準です。位置推定は以下を最小化します:
```
minimize sum_i | theta_measured_i - theta_predicted_i(position) |^2
```
これはガウス・ニュートンまたはレーベンバーグ・マルカート反復で解く非線形最小二乗問題です。3-4ロケータと5-10度の角度精度で、結果の位置精度は2Dで通常0.5-1.0 mです。
## 8. キャリブレーションと特性評価
### 8.1 位相キャリブレーション
すべてのAoAシステムは、RFスイッチ、PCBトレース、アンテナ素子の製造ばらつきを補償するため、アンテナごとの位相キャリブレーションが必要です。キャリブレーション手順:
1. **リファレンスタグ**:CTE送信タグを既知角度(0度、広角)で2-3 m距離に配置
2. **IQサンプル収集**:100-1000 CTE受信を記録
3. **アンテナごとの位相オフセット計算**:0度での期待位相は全アンテナで0。偏差がキャリブレーションオフセット
4. **キャリブレーションテーブル格納**:アンテナごとの位相オフセット、フラッシュに保存
| キャリブレーションソース | 位相誤差大きさ | 頻度 | キャリブレーション方法 |
|-------------------|----------------------|-----------|-------------------|
| RFスイッチ非対称性 | 5-20度 | 1回(工場) | アンテナごとの位相オフセット |
| PCBトレース不一致 | 2-10度 | 1回(工場) | アンテナごとの位相オフセット |
| アンテナ位相中心 | 1-5度 | 1回(工場) | 角度依存LUT |
| 温度ドリフト | 1-3度 | 温度ビンごと | 温度補償LUT |
| 周波数(チャネル) | 2-5度 | チャネルごと | チャネルごとのキャリブレーション |
キャリブレーションなしでは、生の位相オフセットが10-20度の系統的角度誤差を引き起こす可能性があります。キャリブレーション後、残差誤差は通常1-3度です。
### 8.2 無響室特性評価
完全な特性評価には回転プラットフォーム付きの無響室が必要です:
| 測定 | 装置 | 所要時間 | 出力 |
|-------------|-----------|----------|--------|
| アンテナパターン(素子ごと) | VNA+無響室 | 2-4時間 | 素子ごとのゲインvs角度 |
| 位相パターン(素子ごと) | VNA+無響室 | 2-4時間 | 素子ごとの位相vs角度 |
| 相互結合(Sパラメータ) | VNA | 30分 | S21マトリックス(N x N) |
| エンドツーエンドAoA精度 | CTEタグ+無響室ローテータ | 4-8時間 | 測定vs真角度、全360度 |
| 温度スイープ | サーマルチャンバ+タグ | 2-4時間 | 位相オフセットvs温度 |
エンドツーエンドAoA精度スイープが最も価値のある測定です。タグを固定距離に配置し、ロケータを-90度から+90度まで5度刻みで回転させます。各角度で100 CTE受信を収集し、中央値の推定角度を記録します:
| 真角度 | 中央値推定(未キャリブレーション) | 中央値推定(キャリブレーション済み) | 標準偏差 |
|------------|-------------------------------|-------------------------------|---------|
| -60度 | -47度 | -59度 | 3度 |
| -30度 | -24度 | -30度 | 2度 |
| 0度 | +6度 | 0度 | 1度 |
| +30度 | +37度 | +31度 | 2度 |
| +60度 | +52度 | +59度 | 3度 |
未キャリブレーション結果は6-13度の系統的誤差を示し、キャリブレーションテーブルがこれを0-1度に削減します。標準偏差は大角度で増加します。ソースに向けて投影される有効アパーチャが減少するためです。
## 9. タグ側の消費電力
タグ(ビーコン)はアドバタイジングパケットにCTEを追加するだけです。増分電力コスト:
| モード | アドバタイジング間隔 | CTEなし電流 | CTEあり(16 us) | 差分 | バッテリー影響(CR2032、220 mAh) |
|------|---------------------|----------------|-----------------|-------|--------------------------------|
| 1 Hz | 1000 ms | 12 uA avg | 12.3 uA avg | +0.3 uA | 無視可能(5年以上) |
| 10 Hz | 100 ms | 85 uA avg | 88 uA avg | +3 uA | 5年以上 |
| 100 Hz | 10 ms | 750 uA avg | 780 uA avg | +30 uA | ~8ヶ月 |
CTEは各アドバタイジングイベントに16-160 usを追加するだけで、イベント総持続時間(プリアンブル+ペイロード+CTE+TX起動)の3-4 msと比較して無視できます。100 Hzアドバタイジングと160 us CTEでも、追加エネルギーは総TXエネルギーの5%未満です。これはAoA対応タグが標準BLEビーコンと実質的に同じバッテリー寿命を持つことを意味します。
### タグでのCTE設定
nRF52ベースのタグでアドバタイジングパケットのCTEを有効化:
```c
// AoA用CTE設定(1 usスイッチスロット、16 us長 = 2単位)
ble_radio_cte_config_t cte_config = {
.cte_type = BLE_RADIO_CTE_TYPE_AOA,
.cte_length = 2, // 2 x 8 us = 16 us
.cte_time_total = 16, // CTE総持続時間(us)
.antenna_switching = false, // タグはスイッチしない(AoAモード)
};
// アドバタイジングセットに適用
sd_ble_gap_cte_set(adv_handle, &cte_config);
```
タグファームウェアの変更は最小限です:アドバタイジングセットでCTEを有効化する1回のAPI呼び出しのみ。アンテナスイッチ、IQサンプリング、角度計算は不要です。これがAoAが電池駆動の資産タグに適している理由です。
## 10. 一般的な落とし穴とデバッグ
| 問題 | 症状 | 根本原因 | 修正 |
|-------|---------|------------|-----|
| 一定の角度オフセット | 全角度が5-15度シフト | 位相キャリブレーション未適用 | キャリブレーション手順実行、オフセット保存 |
| 角度ラップアラウンド | 角度が+85度から-85度にジャンプ | エンドファイアでのULA曖昧性 | FoVをプラスマイナス75度に制限、またはUCA使用 |
| ノイジー角度(std > 10度) | 真角度周辺のランダム散乱 | 低SNRまたはマルチパス | CTE長増加、空間スムージング追加 |
| 角度が0で固定 | 全推定が0を返す | RFスイッチ未トグル、またはCTE未検出 | GPIO配線確認、PPI設定検証 |
| 間欠的IQデータ | 一部CTE受信でゼロサンプル | ラジオバッファオーバーフローまたはタイミングジッター | DFEバッファサイズ増加、割り込み優先度確認 |
| 仰角精度不良 | 方位角OK、仰角が20度以上ずれる | 平面アレイの仰角未キャリブレーション | 無響室で完全2Dキャリブレーション |
| NLOS障害 | 角度が壁を指す | 強反射が直接波を支配 | マルチロケータ融合追加、NLOS検出使用 |
| 温度ドリフト | 2時間以上の動作で精度劣化 | RFスイッチ位相シフトvs温度 | 温度補償キャリブレーションテーブル |
| チャネル依存エラー | アドバタイジングチャネル間で精度変動 | 位相オフセットが周波数ごとに異なる | チャネルごとのキャリブレーションテーブル |
| タグ向き感受性 | タグ回転で角度変化 | タグアンテナが全方向性でない | 全方向性アンテナのタグ使用、または姿勢センサー追加 |
### デバッグチェックリスト
1. アドバタイジングパケットにCTEが存在することを確認(nRF ConnectまたはEllipsis使用)
2. GPIOでRFスイッチがトグルしていることを確認(スイッチ制御ピンでオシロスコープ)
3. IQサンプルバッファがデータで満たされていることを確認(非ゼロ、変化する値)
4. 位相キャリブレーションテーブルがロード・適用されていることを確認
5. 無響室(または屋外開放エリア)でテストしマルチパスを排除
6. 角度推定アルゴリズム出力を既知回転と照合
7. 現実的速度(0.5-2 m/s)で移動タグをテスト
8. 対象環境にデプロイしグラウンドトゥルースで特性評価
## 11. 実装比較:Nordic vs TI vs Silicon Labs
| 機能 | Nordic nRF52833/5340 | TI CC2642/CC2652 | Silicon Labs BG24 |
|———|———————-|——————-|——————-|
| BLE仕様 | 5.1+ | 5.2+ | 5.2+ |
| DFE/DFハードウェア | 対応(DFEペリフェラル) | 対応(ラジオDMA) | 対応(RAC + BUFC) |
| 最大IQサンプルレート | 2 MHz | 1 MHz | 1 MHz |
| IQバッファサイズ | 128-4096バイト | 設定可能 | 設定可能 |
| アンテナスイッチ制御 | PPI + GPIO(ハードウェア) | IOMUX + GPIO | PRS + GPIO |
| SDK AoAサンプル | nRF Direction Finding | rtls_agent | AoA locator |
| スイッチパターン柔軟性 | スロットごとのGPIOパターン | スロットごとのパターン | スロットごとのパターン |
| アドバタイジング内CTE | 対応 | 対応 | 対応 |
| データチャネル内CTE | 対応 | 対応 | 対応 |
| AoAリファレンスデザイン | nRF AoA locator | CC26x2 AoA antenna | xGM24 AoA kit |
| コミュニティサポート | 充実 | 中程度 | 成長中 |
| 角度推定SDK | Nordic AoA library | TI RTLS toolbox | Silabs AoA plugin |
Nordicがリファレンスデザイン、SDKサンプル、コミュニティサポートを含む最も成熟したエコシステムを持ちます。nRF52833は実績あるDFEハードウェアと豊富なドキュメントにより、本番AoAロケータのデファクトSoCです。
## 12. 本番AoAシステムの設計チェックリスト
**アンテナアレイ:**
– [ ] 素子間隔 = lambda/2(62.5 mm)ULA、または半径 = lambda/2 UCA
– [ ] 相互結合 < -15 dB(VNA Sパラメータ測定で確認)
- [ ] 位相中心安定性 < プラスマイナス2 mm(チップアンテナではなくパッチアンテナ使用)
- [ ] グランドプレーンが最外側素子から少なくともlambda/4延長
**RFフロントエンド:**
- [ ] RFスイッチセトリング時間 < 200 ns(オシロスコープで確認)
- [ ] スイッチ挿入損失 < 1 dB(リンクマージン予算)
- [ ] スイッチアイソレーション > 20 dB(素子間クロストーク防止)
– [ ] GPIOスイッチ制御がマッチしたトレース長で配線(< 5 mm スキュー)
**ファームウェア:**
- [ ] DFE/DFペリフェラルが1 usスイッチスロット(AoAモード)に設定
- [ ] IQバッファサイズ >= 2 x(アンテナ数 + 8)サンプル(ダブルバッファ)
– [ ] スイッチパターンがRADIOペリフェラルRAMにロード
– [ ] 位相キャリブレーションテーブルがフラッシュに保存され角度推定前に適用
– [ ] 角度推定アルゴリズム選択(PoCは位相差、本番はMUSIC)
– [ ] 時間フィルタ(アルファベータまたはカルマン)を角度出力に適用
**タグ側:**
– [ ] アドバタイジングセットでCTE有効化(cte_type = AoA、length = 2-4単位)
– [ ] アドバタイジング間隔が測位更新レート要件に一致
– [ ] タグアンテナが全方向性(チャンバでパターン確認)
– [ ] CTEオーバーヘッド込みでバッテリー寿命計算
**デプロイメント:**
– [ ] ロケータ間隔が20-80度仰角コーンカバレッジで選定
– [ ] 各カバレッジエリアにLOSを持つ最低3ロケータ
– [ ] ポジショニングサーバーが最小二乗法またはカルマン融合を実行
– [ ] NLOS検出・拒否が実装済み
– [ ] グラウンドトゥルース(測定位置)でサイトサーベイ実施
– [ ] 対象環境(チャンバのみでなく)で精度仕様を検証
AoA方向検出はBLE測位を3-5メートルのRSSI円からサブメートルの方位交点に変換します。技術は成熟しています — ハードウェアDFE搭載のBLE 5.1 SoC、リファレンスアンテナデザイン、オープンソースの角度推定ライブラリがすべて利用可能です。エンジニアリングの課題は信号処理ではなく物理層にあります:アンテナアレイ設計、RFスイッチの完全性、位相キャリブレーション、マルチパス緩和。これらを正しく行えば、Bluetooth Beaconシステムはサブメートル精度を提供します。間違えれば、余分なアンテナを搭載した高価なRSSIセンサーに過ぎません。