Cuando un Bluetooth Beacon transmite en un almacén, la medición basada en RSSI indica que la etiqueta está «en algún lugar dentro de 3 a 5 metros» — un círculo de incertidumbre inutil para localización a nivel de pasillo. BLE 5.1 introdujo la detección de dirección por Ángulo de Llegada (AoA), que reemplaza el círculo RSSI con una línea de rumbo precisa a unos pocos grados, habilitando posicionamiento submétrico cuando se usan dos o más antenas localizadoras. Este artículo cubre la cadena completa de señal AoA — desde la estructura de la onda CTE hasta la geometría del arreglo de antenas, muestreo IQ y algoritmos de estimación de ángulo — con los parámetros de ingeniería, compromisos y procedimientos de calibración que determinan si su sistema logra 2 grados de precisión o 20 grados de ruido.
1. Detección de Dirección BLE 5.1: AoA vs AoD
BLE 5.1 define dos modos de detección de dirección. Ambos explotan una extensión de tono constante (CTE) de 72 a 160 bits agregada después del payload del paquete, pero difieren en quién conmuta antenas y quién muestrea datos IQ:
| Parámetro | Ángulo de Llegada (AoA) | Ángulo de Salida (AoD) |
|---|---|---|
| Ubicación del arreglo | Receptor (localizador) | Transmisor (beacon/tag) |
| Conmutación de antena | Receptor conmuta durante CTE | Transmisor conmuta durante CTE |
| Muestreo IQ | Receptor muestrea | Receptor muestrea (antena única) |
| Caso de uso típico | Trazabilidad de activos, navegación interior | Búsqueda de objetos, dirección de proximidad |
| Complejidad del beacon | Simple (antena única, añade CTE) | Compleja (requiere arreglo + conmutador) |
| Complejidad del localizador | Compleja (arreglo + conmutador + muestreador) | Simple (antena única) |
| CTE en PDU advertising | Si (ADV_EXT_IND) | No |
| CTE en PDU canal de datos | Si | Si |
| Firmware en tag | Añadir CTEConfig a Tx | Controlar GPIO del conmutador RF durante Tx |
Para trazabilidad de activos con tags BLE alimentados por batería, AoA es la arquitectura dominante: el tag permanece simple (antena única, solo habilita CTE en el paquete advertising), y toda la complejidad — arreglo de antenas, conmutador RF, muestreo IQ — reside en el localizador alimentado por red. Este artículo se centra en el lado del receptor AoA, donde viven las decisiones de ingeniería.
Ubicación del CTE en la Estructura del Paquete
El CTE se transmite después del CRC de un paquete BLE estándar, en el mismo canal RF, sin aplicar blanqueamiento:
| Preambulo | Direccion de Acceso | Cabecera PDU + Payload | CRC | CTE |
^
72-160 bits, sin blanquear
La cabecera PDU contiene un campo CPType de 2 bits (CTE Info) en la cabecera extendida de ADV_EXT_IND o en PDUs de canal de datos, que informa al receptor: (a) CTE presente, (b) tipo de CTE (AoA = conmutación 1 us, AoD = slot 2 us), (c) longitud CTE (1-20 unidades de 8 us), (d) longitud del patrón de conmutación de antena.
El CTE en sí es una sinusoide pura a la frecuencia portadora RF (sin modulación, sin blanqueamiento). El receptor la downconvierte y muestrea pares I/Q a una tasa conocida, produciendo una progresión de fase a través del arreglo de antenas que codifica el ángulo de llegada.
2. Estructura de la Extensión de Tono Constante (CTE)
El CTE tiene una estructura interna fija independientemente de su longitud total:
| Segmento | Duración | Contenido | Propósito |
|---|---|---|---|
| Intervalo de Guardia (GI) | 4 us | Igual al último bit CTE | Permitir asentamiento AGC, sin muestreo |
| Período de Referencia | 8 us | Antena de referencia única | Establecer referencia de fase |
| Slot de Conmutación 1 | 1 us (AoA) o 2 us (AoD) | Antena 1 | Muestra IQ tomada |
| Slot de Conmutación 2 | 1 us (AoA) o 2 us (AoD) | Antena 2 | Muestra IQ tomada |
| … | … | … | … |
| Slot de Conmutación N | 1 us (AoA) o 2 us (AoD) | Antena N | Muestra IQ tomada |
En modo AoA, cada slot de conmutación es 1 us. Con un período de referencia de 8 us e intervalo de guarda de 4 us, un CTE de longitud máxima (20 unidades x 8 us = 160 us) produce:
- Guardia: 4 us
- Referencia: 8 us (1 muestra IQ por us = 8 muestras de referencia)
- Conmutación: 148 us / 1 us = 148 slots de conmutación
En la práctica, la mayoría de diseños usan 4 a 8 elementos de antena, por lo que solo se necesitan 4-8 slots de conmutación por CTE. Los slots restantes son no usados o empleados para sobremuestreo. Una configuración típica:
| Config | Longitud CTE | Antenas | Muestras/Slot | Pares IQ Totales | Tasa de Actualización |
|---|---|---|---|---|---|
| Mínima | 2 unidades (16 us) | 4 | 1 | 4 + 8 ref | ~10 Hz |
| Estándar | 4 unidades (32 us) | 4 | 1 | 4 + 8 ref | ~10 Hz |
| Extendida | 8 unidades (64 us) | 8 | 1 | 8 + 8 ref | ~5 Hz |
| Sobremuestreada | 16 unidades (128 us) | 8 | 4 | 32 + 8 ref | ~2 Hz |
El compromiso es directo: CTE más largo da más muestras y mejor resolución angular, pero consume más tiempo aire y reduce la tasa de advertising. En los tres canales primarios de advertising de BLE (37, 38, 39), un CTE de 160 us añade aproximadamente 10-15% al tiempo aire total del paquete, lo cuál es aceptable.
Frecuencia y Referencia de Fase del CTE
El CTE se transmite a la frecuencia central del canal RF (ej., 2402 MHz para canal 37). Como no hay modulación, la única variación de fase a través del arreglo de antenas proviene de la diferencia de camino espacial. Para una señal que llega a un ángulo theta respecto a la dirección principal del arreglo, la diferencia de fase entre dos antenas adyacentes separadas por distancia d es:
phase_diff = (2 * pi * d / lambda) * sin(theta)
donde lambda = c / f = 3e8 / 2402e6 = 124.9 mm a 2402 MHz.
Para el espaciamiento estándar de media longitud de onda (d = lambda/2 = 62.5 mm), esto se simplifica a:
phase_diff = pi * sin(theta)
Esto significa que el campo de visión ambiguo máximo es de más/menos 90 grados (un FoV total de 180 grados), con envoltura de fase ocurriendo más allá de más/menos 90 grados. Para cobertura más amplia, se usan arreglos con espaciamiento menor a lambda/2 o múltiples subarreglos.
3. Diseño del Arreglo de Antenas
El arreglo de antenas es el elemento de hardware más critico en un sistema AoA. Su geometría determina directamente la resolución angular, el campo de visión y la susceptibilidad a multicamino.
3.1 Arreglo Lineal
Un Arreglo Lineal Uniforme (ULA) es la configuración más simple y común para BLE AoA:
| Parámetro | Valor | Notas |
|---|---|---|
| Número de elementos | 4-8 | Más elementos = mejor resolución |
| Espaciamiento de elementos | lambda/2 (62.5 mm) | Estándar para FoV ambiguo |
| Longitud del arreglo (4 elem) | 187.5 mm | Cabe en PCB de localizador |
| Longitud del arreglo (8 elem) | 437.5 mm | Puede requerir arreglo externo |
| Resolución angular (4 elem) | ~15 grados | A 10 dB SNR |
| Resolución angular (8 elem) | ~8 grados | A 10 dB SNR |
| Campo de visión | más/menos 90 grados | 180 grados total |
| Ambigüedad | Ambigüedad frente-detrás | Señal de +30 y -30 grados se ve identica |
La ambigüedad frente-detrás es la limitación fundamental del ULA: una señal que llega de +30 grados produce la misma progresión de fase que una de -30 grados (imagen espejo). Esto se resuelve sea (a) montando el arreglo contra una pared o reflector RF de modo que solo un hemisferio sea visible, o (b) usando un arreglo 2D.
3.2 Arreglo Planar (2D)
Para estimación angular 2D completa (acimut + elevación), se requiere un arreglo planar. Configuraciones comunes:
| Tipo | Geometría | Elementos | FoV Acimut | FoV Elevación | Complejidad |
|---|---|---|---|---|---|
| UCA cuadrado | Cuadrícula N x N | 4, 9, 16 | 360 grados | ~60 grados | Moderada |
| UCA circular | Anillo | 4-8 | 360 grados | ~60 grados | Moderada |
| Forma de L | Dos ULA compartiendo esquina | 2N-1 | 360 grados | 360 grados | Baja |
| Triangular | 3 elementos a 120 grados | 3 | 360 grados | Limitada | Baja |
El Arreglo Circular Uniforme (UCA) es popular para localizadores montados en techo porque proporciona cobertura acimutal de 360 grados sin ambigüedad frente-detrás:
Posiciones de antena (UCA de 8 elementos, radio r = lambda/2):
x_i = r * cos(2 * pi * i / 8)
y_i = r * sin(2 * pi * i / 8)
Para un localizador montado en techo, el acimut (theta) da la dirección de brújula hacia el tag, y la elevación (phi) da el ángulo bajo la horizontal, desde el cuál se puede estimar la distancia dada la altura conocida del techo:
distance = ceiling_height / tan(phi)
3.3 Seleccion de Elemento de Antena
Las antenas de parche son la elección estándar para arreglos AoA porque tienen un patrón de radiación direccional (ganancia hacia el hemisferio de interés) y un factor de forma compacto:
| Tipo de Antena | Tamaño (a 2.4 GHz) | Ganancia | Patrón | Idoneidad |
|---|---|---|---|---|
| Parche PCB | 25 x 25 mm | 6-7 dBi | Hemisferico | Excelente (compacto, direccional) |
| Chip cerámico | 5 x 5 mm | 2-4 dBi | Broadside | Bueno (compacto, menos ganancia) |
| Traza PCB (IFA) | 15 x 5 mm | 2-3 dBi | Broadside | Regular (tendencia omnidireccional) |
| Dipolo (externo) | 30 mm | 2.15 dBi | Toroidal | Pobre (problemas de lobulo posterior) |
| Helicoidal | 15 x 8 mm | 3-5 dBi | Hemisferico | Bueno pero alto |
Parámetro clave de antena para AoA: estabilidad del centro de fase. El centro de fase de la antena (el punto aparente de radiación) no debe desplazarse a medida que cambia el ángulo de llegada. Las antenas de parche PCB tienen estabilidad de centro de fase de más/menos 1-2 mm, lo que se traduce en más/menos 1-3 grados de error angular a 2.4 GHz. Las antenas de chip cerámico economicas pueden tener desviación de centro de fase de más/menos 5 mm (error de más/menos 7 grados), haciéndolas inadecuadas para AoA de alta precisión.
3.4 Acoplamiento Mutuo y Espaciamiento de Elementos
Cuando los elementos de antena se colocan cerca (menos de lambda), el acoplamiento mutuo causa que el patrón de radiación de cada elemento sea distorsionado por sus vecinos. El coeficiente de acoplamiento S21 entre antenas de parche adyacentes a espaciamiento lambda/2 es típicamente -15 a -20 dB. Esto es manejable pero no despreciable:
| Espaciamiento | S21 (acoplamiento) | Distorsión de patrón | Contribución de error angular |
|---|---|---|---|
| lambda/4 (31 mm) | -8 a -12 dB | Severa | 5-10 grados |
| lambda/2 (62.5 mm) | -15 a -20 dB | Moderada | 1-3 grados |
| lambda (125 mm) | -25 a -30 dB | Mínima | <1 grado |
| 3lambda/4 (94 mm) | -20 a -25 dB | Baja | <1 grado |
Las estrategias de mitigación incluyen: (a) añadir cutouts de plano de tierra entre elementos, (b) usar estructuras de tierra defectivas (DGS), (c) estructuras de banda prohibida electromagnética (EBG) entre elementos, o (d) simplemente aumentar el espaciamiento a 3lambda/4 y aceptar el FoV ambiguo más estrecho (más/menos 42 grados en lugar de más/menos 90 grados).
4. Conmutador RF y Frontend de Muestreo
4.1 Requisitos del Conmutador de Antena
El receptor AoA debe conmutar entre elementos de antena durante cada slot de conmutación de 1 us. El conmutador RF es el componente critico:
| Parámetro | Requisito | Parte Típica | Notas |
|---|---|---|---|
| Tiempo de conmutación | < 200 ns | SKY13330, HMC253, PE42420 | Debe asentarse antes de muestra IQ |
| Pérdida de inserción | < 1 dB | SKY13330: 0.7 dB | Afecta sensibilidad |
| Aislamiento (off) | > 20 dB | SKY13330: 25 dB | Previene diafonía |
| Número de vías | 4-8 SPxT | SP4T, SP8T | Coincide con tamaño de arreglo |
| Frecuencia | 2.4 GHz ISM | Todas las partes listadas | Estándar |
| Interfaz de control | GPIO (3-bit para SP8T) | GPIO MCU directo | Rapido, deterministico |
| Linealidad (IIP3) | > 20 dBm | SKY13330: 35 dBm | Previene intermodulación |
El tiempo de asentamiento del conmutador es critico. Con un slot de conmutación de 1 us y la muestra IQ tomada en el centro del slot (500 ns después de conmutar), el conmutador debe asentarse en 200-300 ns, dejando 200 ns de señal limpia para muestreo. El SKY13330 (Skyworks) y PE42420 (pSemi) ambos especifican 150-200 ns de tiempo de asentamiento, lo cuál es adecuado.
4.2 Muestreo IQ en SoCs BLE
El muestreo IQ es realizado por el periférico de radio del SoC BLE, no por un ADC externo. El demodulador I/Q interno de la radio proporciona acceso a las muestras I/Q en banda base:
| SoC | Tasa de Muestra IQ | Buffer de Muestras | Soporte CTE | Control de Conmutador | Notas |
|---|---|---|---|---|---|
| nRF52811/52833/52840 | 1-2 MHz (DFE) | 128-1024 bytes | Si (hardware) | GPIO vía PPI | Ecosistema DF más maduro |
| nRF5340 | 1-2 MHz (DFE) | Hasta 4096 bytes | Si (hardware) | GPIO vía DPPI | Dual-core, más buffer |
| CC2640R2 | 8 MHz (custom) | Limitado | No (requiere patch) | GPIO manual | DF nativo no soportado |
| CC2642/CC2652 | 1 MHz | Configurable | Si (hardware) | GPIO vía IOMUX | BLE 5.1 nativo |
| ESP32-C6/H2 | Configurable | Configurable | Si (hardware) | GPIO vía matriz GPIO | Reciente, menos maduro |
| BGM240/BG24 | 1 MHz | Configurable | Si (hardware) | GPIO vía PRS | Silabs Gecko |
La serie Nordic nRF52/53 tiene la implementación AoA más madura. El Motor de Búsqueda de Dirección (DFE) es un periférico de hardware que:
- Detecta presencia de CTE desde la cabecera PDU
- Controla el GPIO del conmutador RF vía PPI (Interconexión de Perifericos Programable) a intervalos precisos de 1 us
- Muestrea I/Q a hasta 2 MHz (configurable, por defecto 1 MHz = 1 muestra/us)
- Almacena muestras en un buffer RAM dedicado
- Genera una interrupción cuando el muestreo está completo
4.3 Configuración del Patrón de Conmutación
El patrón de conmutación de antena define cuál antena está activa durante cada slot de conmutación. Para un arreglo de 4 elementos:
| Slot de Conmutación | Antena Activa | Valor GPIO SwitchPattern | Notas |
|---|---|---|---|
| Referencia (0-7) | Antena 0 (referencia) | 0x01 | Misma antena para todas las muestras de referencia |
| Slot 1 | Antena 1 | 0x02 | Primera antena de medición |
| Slot 2 | Antena 2 | 0x04 | Segunda antena de medición |
| Slot 3 | Antena 3 | 0x08 | Tercera antena de medición |
| Slot 4 | Antena 0 | 0x01 | Retorno a referencia (opcional) |
| Slot 5-8 | Antenas 1-3 repiten | 0x02, 0x04, 0x08 | Sobremuestreo (opcional) |
El patrón se carga en un buffer en RAM, y el sistema PPI del periférico RADIO toggles los pines GPIO a intervalos de 1 us, sincronizados con la recepción del CTE. Esta conmutación impulsada por hardware elimina el jitter que sería imposible de evitar con toggling de GPIO controlado por software.
5. Algoritmos de Estimación de Ángulo
Una vez recogidas las muestras IQ, el ángulo de llegada debe calcularse. La elección del algoritmo determina la resolución angular, el coste computacional y la robustez al ruido.
5.1 Método de Diferencia de Fase (Basico)
El enfoque más simple calcula la diferencia de fase entre elementos de antena adyacentes y la convierte en un ángulo:
import numpy as np
# Muestras IQ: 4 antenas, 1 muestra cada una (de slots de conmutacion)
# iq[0] = referencia, iq[1..3] = antena 1..3
iq = np.array([complex(i, q) for i, q in iq_samples])
# Fase de cada muestra de antena
phases = np.angle(iq)
# Diferencia de fase entre elementos adyacentes
dphi = np.diff(phases)
# Convertir a angulo (espaciamiento media longitud de onda)
# dphi = pi * sin(theta) => theta = arcsin(dphi / pi)
theta = np.arcsin(np.clip(dphi / np.pi, -1, 1))
# Promediar a traves de pares de elementos
theta_avg = np.mean(theta)
| Parámetro | Valor | Notas |
|---|---|---|
| Resolución angular | 10-15 grados (4 elem, 10 dB SNR) | Limitada por ruido de fase |
| Computacion | O(N) | Trivial, ejecuta en microsegundos |
| Robustez a multicamino | Pobre | Cualquier reflexión corrompe la fase |
| FoV ambiguo | más/menos 90 grados | ULA estándar |
| SNR requerida | > 5 dB | Por debajo, la fase se envuelve |
El método de diferencia de fase es adecuado para prueba de concepto y aplicaciones de baja precisión (posicionamiento a nivel de habitación). Para sistemas en producción que requieren precisión subgrado, se necesitan algoritmos más sofisticados.
5.2 MUSIC (Multiple Signal Classification)
MUSIC es un algoritmo basado en subespacio que separa el subespacio de señal del subespacio de ruido usando descomposición en autovalores de la matriz de covarianza. Puede resolver múltiples señales simultaneas (reflexiones multicamino) y lograr superresolución:
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: espaciamiento de elementos en longitudes de onda (0.5 = lambda/2)
# 1. Calcular matriz de covarianza
R = np.cov(iq_matrix.T) # (N, N) Hermiteana
# 2. Descomposicion en autovalores
eigenvalues, eigenvectors = eigh(R)
# 3. Ordenar autovalores (descendente)
idx = np.argsort(eigenvalues)[::-1]
eigenvalues = eigenvalues[idx]
eigenvectors = eigenvectors[:, idx]
# 4. Subespacio de ruido (autovalores N-K mas pequenos)
K = num_signals
En = eigenvectors[:, K:] # (N, N-K)
# 5. Vector de steering para angulo de barrido 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))
# Pseudoespectro MUSIC
spectrum[i] = 1.0 / np.abs(a.conj() @ En @ En.conj().T @ a)
# 6. Busqueda de pico
peak_idx = np.argmax(spectrum)
return thetas[peak_idx], spectrum
| Parámetro | Valor | Notas |
|---|---|---|
| Resolución angular | 3-5 grados (4 elem, 10 dB SNR) | Superresolución |
| Resolución (8 elem) | 1-2 grados | Cerca del limite Cramer-Rao |
| Computacion | O(N^3) para descomposición | 1-5 ms en Cortex-M4F |
| Manejo de multicamino | Resuelve hasta N-1 señales | Si K < N |
| Snapshots requeridos | >= N (típicamente 8-16) | Necesita múltiples recepciones CTE |
| Memoria | Covarianza N x N (64 bytes para N=4) | Trivial |
La ventaja clave de MUSIC es la resolución de multicamino: si el camino directo y una reflexión llegan de ángulos diferentes, MUSIC puede identificar ambos como picos separados en el pseudoespectro. El camino directo es típicamente el pico con mayor potencia, aunque esta suposición puede fallar en entornos NLOS (sin línea de vista).
5.3 ESPRIT (Estimación de Parámetros de Señal vía Invariancia Rotacional)
ESPRIT evita la búsqueda espectral de MUSIC explotando la estructura de invariancia de desplazamiento del arreglo. Es computacionalmente más ligero que MUSIC pero requiere un arreglo uniforme:
| Parámetro | MUSIC | ESPRIT |
|---|---|---|
| Tipo de arreglo | Cualquiera (ULA, UCA, planar) | ULA o subarreglos emparejados solo |
| Búsqueda espectral | Si (180+ evaluaciones) | No (forma cerrada) |
| Computacion | O(N^3) + O(barrido x N) | O(N^3) |
| Latencia (Cortex-M4F, N=4) | 2-5 ms | 1-2 ms |
| Resolución angular | Equivalente | Equivalente |
| Resolución multicamino | Si (búsqueda de pico) | Si (mapeo de autovalores) |
| Complejidad de implementación | Moderada | Moderada |
Para BLE AoA con 4-8 antenas, tanto MUSIC como ESPRIT se ejecutan en pocos milisegundos en un Cortex-M4F. La elección entre ellos suele estar dictada por la geometría del arreglo: MUSIC para UCA (localizadores de techo), ESPRIT para ULA (localizadores de pared).
5.4 Cota Inferior de Cramer-Rao (CRLB)
La CRLB define la mejor precisión angular posible dado el SNR, número de antenas y geometría del arreglo:
var(theta) >= lambda^2 / (8 * pi^2 * d^2 * N * (N-1) * SNR * K)
donde N = número de antenas, K = número de snapshots, d = espaciamiento de elementos (metros), SNR = lineal (no dB).
| N (antenas) | K (snapshots) | SNR (dB) | CRLB (grados) | Práctico (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 |
La columna «Práctico» tiene en cuenta impedimentos del mundo real (ruido de fase, acoplamiento mutuo, desbalance de canal) que típicamente duplican la CRLB. Aun así, un arreglo de 8 elementos con 8 snapshots a 20 dB SNR puede lograr teoricamente precisión subgrado.
6. Mitigación de Multicamino y NLOS
Los entornos interiores son ricos en multicamino. Una señal de 2.4 GHz se refleja en estanterías metalicas, paredes de hormigón y cuerpos humanos, creando múltiples caminos desde el tag hasta el localizador. Cada camino llega a un ángulo diferente, y el receptor ve su suma vectorial.
6.1 Impacto del Multicamino en AoA
| Entorno | Potencia camino directo | Potencia camino reflejado | Error AoA (diff-fase) | Error AoA (MUSIC) |
|---|---|---|---|---|
| Oficina abierta (LOS) | -50 dBm | -65 dBm | 2-5 grados | 1-2 grados |
| Almacén (LOS parcial) | -60 dBm | -63 dBm | 10-25 grados | 3-8 grados |
| Fábrica (NLOS) | -75 dBm | -70 dBm | 30+ grados | 10-20 grados |
| Pasillo (guíaondas) | -55 dBm | -57 dBm | 15-30 grados | 5-10 grados |
En condiciones NLOS, el camino directo puede estar 10-15 dB por debajo de la reflexión más fuerte. MUSIC a veces puede resolver ambos caminos, pero identificar qué pico es el camino directo requiere información adicional:
- Gating RSSI: El camino directo debería tener el RSSI más alto (no siempre cierto en NLOS)
- Verificación de consistencia: El ángulo del camino directo debería ser consistente a través de múltiples recepciones CTE
- Fusion multi-localizador: Si 3+ localizadores ven el tag, el camino directo es aquel cuyos ángulos producen una triangulación consistente
- Filtrado de elevación: Para localizadores de techo, el camino directo debería tener un ángulo de elevación que coincida con la altura de techo conocida
6.2 Suavizado Espacial
El suavizado espacial es una técnica de preprocesamiento que descorrelaciona señales multicamino, permitiendo a MUSIC resolver multicamino coherente (que MUSIC estándar no puede):
| Técnica | Tipo de Arreglo | Descorrelacion | Pérdida de Apertura | Complejidad |
|---|---|---|---|---|
| Suavizado hacia adelante | ULA | Si | ~50% | Baja |
| Forward-backward | ULA | Si | ~50% | Baja |
| Suavizado espacial (UCA) | UCA | Si | ~40% | Moderada |
| Suavizado 2D | Planar | Si | ~50% | Moderada |
El suavizado espacial hacia adelante divide el ULA de N elementos en L subarreglos superpuestos de tamaño M = N – L + 1. Las matrices de covarianza de los subarreglos se promedian, lo que descorrelaciona el multicamino coherente a costa de reducir la apertura efectiva de N a M. Para un arreglo de 4 elementos, subarreglos de 2 elementos (L=2, M=2) pueden resolver 1 señal multicamino, pero la resolución cae a la de un arreglo de 2 elementos — usualmente no vale la pena. Para arreglos de 8 elementos, el suavizado forward-backward con M=5 (L=4) es un buen equilibrio.
6.3 Filtrado Temporal
Incluso con estimación angular perfecta, la salida es ruidosa en el tiempo. Un filtro de Kalman o alfa-beta suaviza las estimaciones de ángulo:
| Filtro | Estado | Ajuste | Latencia | Suavidad |
|---|---|---|---|---|
| Media móvil | theta | Ventana = 5-10 muestras | 0.5-1 s | Moderada |
| Alfa-beta | theta, omega | alpha=0.3, beta=0.05 | <0.2 s | Buena |
| Kalman | theta, omega | Q, R de medición | <0.1 s | Mejor |
| Filtro de partículas | theta, x, y | 100-500 partículas | 0.1-0.5 s | Mejor (no lineal) |
Para seguimiento en tiempo real de activos en movimiento (carretillas elevadoras, AGVs), el filtro alfa-beta es el punto óptimo práctico: se ejecuta en microsegundos, añade latencia mínima y proporciona suavizado adecuado para la mayoría de aplicaciones interiores.
7. Arquitectura del Sistema y Despliegue
7.1 Arquitectura de Hardware del Localizador
Un localizador AoA completo consta de:
| Componente | Función | Parte Típica | Coste |
|---|---|---|---|
| SoC BLE | Radio, muestreo IQ, cómputo de ángulo | nRF52833/5340 | $4-7 |
| Conmutador RF | Multiplexacion de antena | SKY13330-385LF (SP4T) | $1.50 |
| Arreglo de antenas | Arreglo de parche 4-8 elementos | PCB personalizado o TI AOA-RD | $3-10 |
| MCU (opcional) | Descarga de cómputo de ángulo | Ninguno (SoC suficiente) | $0 |
| Ethernet/Wi-Fi | Backhaul al servidor de posicionamiento | W5500 o ESP32 | $2-3 |
| Fuente de alimentación | PoE o adaptador 12V | Modulo PoE | $2-4 |
| Carcasa | Vivienda transparente a RF | ABS/policarbonato | $3-8 |
| BOM Total | $15-35 |
7.2 Estrategia de Colocación de Localizadores
| Colocación | Altura | Espaciado | Cobertura | Precisión | Caso de Uso |
|---|---|---|---|---|---|
| Montaje en techo | 3-4 m | 8-15 m | 100-200 m2 | 0.5-1 m | Oficina, retail |
| Montaje en pared | 2-3 m | 6-10 m | 50-100 m2 | 1-2 m | Pasillos, estantes |
| Bahía alta | 8-12 m | 15-25 m | 300-500 m2 | 2-5 m | Almacén, fábrica |
| Montaje en suelo | 0.5-1 m | 4-8 m | 30-60 m2 | 0.3-0.5 m | Trazabilidad densa de activos |
Los localizadores UCA montados en techo a 3-4 m de altura con espaciado de 10-12 m son el despliegue estándar para posicionamiento interior submétrico. El ángulo de elevación desde el localizador hasta el tag restringe la distancia:
| Ángulo de elevación | Distancia horizontal (techo 3 m) | Distancia horizontal (techo 4 m) |
|---|---|---|
| 80 grados | 0.5 m | 0.7 m |
| 60 grados | 1.7 m | 2.3 m |
| 45 grados | 3.0 m | 4.0 m |
| 30 grados | 5.2 m | 6.9 m |
| 20 grados | 8.2 m | 11.0 m |
Por debajo de 20 grados de elevación, la estimación de distancia se vuelve poco fiable (pequenos errores de ángulo causan grandes errores de distancia). Por esto el espaciado de localizadores debe elegirse de modo que el tag siempre esté dentro del cono de elevación 20-80 grados de al menos dos localizadores.
7.3 Servidor de Posicionamiento
El servidor de posicionamiento recibe mediciones de ángulo de múltiples localizadores y computa la posición 2D o 3D:
| Método | Min localizadores | Computacion | Precisión | Notas |
|---|---|---|---|---|
| Triangulación (2 AoA) | 2 | Interseccion de 2 lineas de rumbo | 0.5-2 m | Sensible a error angular |
| Mínimos cuadrados (N AoA) | 3+ | Minimizar residual de N rumbos | 0.3-1 m | Robusto, estándar |
| Filtro de Kalman | 2+ | Espacio de estados con modelo de movimiento | 0.2-0.5 m | Suaviza en el tiempo |
| Fingerprinting + AoA | 1+ | Base de datos hibrida RSSI/AoA | 0.5-1 m | Funciona con 1 localizador |
El método de mínimos cuadrados con 3+ localizadores es el estándar de producción. La estimación de posición minimiza:
minimize sum_i | theta_measured_i - theta_predicted_i(position) |^2
Este es un problema de mínimos cuadrados no lineal resuelto por iteración Gauss-Newton o Levenberg-Marquardt. Con 3-4 localizadores y precisión angular de 5-10 grados, la precisión de posición resultante es típicamente 0.5-1.0 m en 2D.
8. Calibración y Caracterización
8.1 Calibración de Fase
Cada sistema AoA requiere calibración de fase por antena para compensar variaciones de fabricación en el conmutador RF, trazas PCB y elementos de antena. El procedimiento de calibración:
- Tag de referencia: Colocar un tag transmisor CTE en un ángulo conocido (0 grados, dirección principal) a 2-3 m de distancia
- Recoger muestras IQ: Registrar 100-1000 recepciones CTE
- Computar offset de fase por antena: La fase esperada a 0 grados es 0 para todas las antenas. Cualquier desviación es el offset de calibración.
- Almacenar tabla de calibración: Offset de fase por antena, almacenado en flash
| Fuente de calibración | Magnitud de error de fase | Frecuencia | Método de calibración |
|---|---|---|---|
| Asimetría del conmutador RF | 5-20 grados | Una vez (fábrica) | Offset de fase por antena |
| Desajuste de traza PCB | 2-10 grados | Una vez (fábrica) | Offset de fase por antena |
| Centro de fase de antena | 1-5 grados | Una vez (fábrica) | LUT dependiente de ángulo |
| Deriva de temperatura | 1-3 grados | Por bin de temperatura | LUT compensada por temperatura |
| Frecuencia (canal) | 2-5 grados | Por canal | Calibración por canal |
Sin calibración, los offsets de fase en bruto pueden causar 10-20 grados de error angular sistemático. Después de la calibración, el error residual es típicamente 1-3 grados.
8.2 Caracterización en Cámara Anechoica
La caracterización completa requiere una cámara anechoica con plataforma rotatoria:
| Medición | Equipo | Duración | Salida |
|---|---|---|---|
| Patrón de antena (por elemento) | VNA + cámara | 2-4 horas | Ganancia vs ángulo por elemento |
| Patrón de fase (por elemento) | VNA + cámara | 2-4 horas | Fase vs ángulo por elemento |
| Acoplamiento mutuo (parámetros-S) | VNA | 30 minutos | Matriz S21 (N x N) |
| Precisión AoA extremo a extremo | Tag CTE + rotador de cámara | 4-8 horas | Medido vs ángulo verdadero, 360 grados completos |
| Barrido de temperatura | Cámara termica + tag | 2-4 horas | Offset de fase vs temperatura |
El barrido de precisión AoA extremo a extremo es la medición más valiosa. El tag se coloca a distancia fija, y el localizador se rota en incrementos de 5 grados desde -90 a +90 grados. En cada ángulo, se recogen 100 recepciones CTE y se registra el ángulo estimado mediano:
| Ángulo verdadero | Mediano estimado (sin calibrar) | Mediano estimado (calibrado) | Desv estándar |
|---|---|---|---|
| -60 grados | -47 grados | -59 grados | 3 grados |
| -30 grados | -24 grados | -30 grados | 2 grados |
| 0 grados | +6 grados | 0 grados | 1 grado |
| +30 grados | +37 grados | +31 grados | 2 grados |
| +60 grados | +52 grados | +59 grados | 3 grados |
Los resultados sin calibrar muestran un error sistemático de 6-13 grados, que la tabla de calibración reduce a 0-1 grados. La desviación estándar aumenta a ángulos mayores porque la apertura efectiva proyectada hacia la fuente disminuye.
9. Consumo de Energía en el Lado del Tag
El tag (beacon) solo necesita añadir CTE a sus paquetes advertising. El coste de potencia incremental:
| Modo | Intervalo advertising | Corriente sin CTE | Con CTE (16 us) | Delta | Impacto batería (CR2032, 220 mAh) |
|---|---|---|---|---|---|
| 1 Hz | 1000 ms | 12 uA avg | 12.3 uA avg | +0.3 uA | Despreciable (5+ anos) |
| 10 Hz | 100 ms | 85 uA avg | 88 uA avg | +3 uA | 5+ anos |
| 100 Hz | 10 ms | 750 uA avg | 780 uA avg | +30 uA | ~8 meses |
El CTE añade solo 16-160 us a cada evento de advertising, lo cuál es despreciable comparado con los 3-4 ms de duración total del evento (preambulo + payload + CTE + arranque TX). Incluso a 100 Hz de advertising con 160 us de CTE, la energía adicional es menos del 5% de la energía TX total. Esto significa que los tags habilitados para AoA tienen esencialmente la misma vida de batería que los beacons BLE estándar.
Configuración de CTE en el Tag
Habilitar CTE en el paquete advertising en un tag basado en nRF52:
// Configurar CTE para AoA (slot de conmutacion 1 us, longitud 16 us = 2 unidades)
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, // duracion total CTE en us
.antenna_switching = false, // el tag no conmuta (modo AoA)
};
// Aplicar al conjunto de advertising
sd_ble_gap_cte_set(adv_handle, &cte_config);
La modificación del firmware del tag es mínima: una llamada API para habilitar CTE en el conjunto de advertising. Sin conmutador de antena, sin muestreo IQ, sin cómputo de ángulo. Por eso AoA es atractivo para tags de activos alimentados por batería.
10. Pitfalls Comunes y Depuración
| Problema | Síntoma | Causa Raíz | Solución |
|---|---|---|---|
| Offset de ángulo constante | Todos los ángulos desplazados 5-15 grados | Calibración de fase no aplicada | Ejecutar procedimiento de calibración, almacenar offsets |
| Envoltura de ángulo | El ángulo salta de +85 a -85 grados | Ambigüedad ULA en endfire | Limitar FoV a más/menos 75 grados, o usar UCA |
| Ángulo ruidoso (std > 10 grados) | Dispersión aleatoria alrededor del ángulo verdadero | SNR bajo o multicamino | Aumentar longitud CTE, añadir suavizado espacial |
| Ángulo atascado en 0 | Todas las estimaciones devuelven 0 | Conmutador RF no toggling, o CTE no detectado | Verificar cableado GPIO, verificar config PPI |
| Datos IQ intermitentes | Algunas recepciones CTE devuelven cero muestras | Overflow de buffer de radio o jitter de temporización | Aumentar tamaño de buffer DFE, verificar prioridades de interrupción |
| Precisión de elevación pobre | Acimut OK, elevación desviada 20+ grados | Arreglo planar no calibrado para elevación | Calibración 2D completa en cámara anechoica |
| Fallo NLOS | El ángulo apunta a la pared en lugar del tag | Reflexión fuerte dominando camino directo | Añadir fusion multi-localizador, usar detección NLOS |
| Deriva de temperatura | Precisión se degrada tras 2+ horas de operacion | Desplazamiento de fase del conmutador RF vs temperatura | Tabla de calibración compensada por temperatura |
| Error dependiente de canal | La precisión varia entre canales advertising | Offset de fase difiere por frecuencia | Tabla de calibración por canal |
| Sensibilidad a orientación del tag | El ángulo cambia cuando el tag rota | Antena del tag no omnidireccional | Usar tag con antena omnidireccional, o añadir sensor de orientación |
Lista de Verificación de Depuración
- Verificar que CTE está presente en el paquete advertising (usar nRF Connect o Ellipsis)
- Confirmar toggling del conmutador RF en GPIO (osciloscopio en pines de control)
- Verificar que el buffer de muestras IQ está poblado (valores no nulos, variados)
- Validar que la tabla de calibración de fase está cargada y aplicada
- Probar en cámara anechoica (o área exterior abierta) para eliminar multicamino
- Verificar salida del algoritmo de estimación vs rotacion conocida
- Probar con tag en movimiento a velocidades realistas (0.5-2 m/s)
- Desplegar en entorno objetivo y caracterizar con ground truth
11. Comparación de Implementación: Nordic vs TI vs Silicon Labs
| Característica | Nordic nRF52833/5340 | TI CC2642/CC2652 | Silicon Labs BG24 |
|---|---|---|---|
| Spec BLE | 5.1+ | 5.2+ | 5.2+ |
| Hardware DFE/DF | Si (periférico DFE) | Si (DMA de radio) | Si (RAC + BUFC) |
| Max tasa de muestra IQ | 2 MHz | 1 MHz | 1 MHz |
| Tamaño buffer IQ | 128-4096 bytes | Configurable | Configurable |
| Control de conmutador de antena | PPI + GPIO (hardware) | IOMUX + GPIO | PRS + GPIO |
| Ejemplo AoA SDK | nRF Direction Finding | rtls_agent | AoA locator |
| Flexibilidad de patrón de conmutación | Patrón GPIO por slot | Patrón por slot | Patrón por slot |
| CTE en advertising | Si | Si | Si |
| CTE en canal de datos | Si | Si | Si |
| Diseño de referencia AoA | nRF AoA locator | CC26x2 AoA antenna | xGM24 AoA kit |
| Soporte de comunidad | Extenso | Moderado | Creciente |
| SDK de estimación de ángulo | Nordic AoA library | TI RTLS toolbox | Silabs AoA plugin |
Nordic tiene el ecosistema más maduro con diseños de referencia, ejemplos SDK y soporte de comunidad. El nRF52833 es el SoC de facto para localizadores AoA de producción debido a su hardware DFE probado y extensa documentación.
12. Lista de Verificación de Diseño para Sistemas AoA de Producción
Arreglo de antenas:
- Espaciamiento de elementos = lambda/2 (62.5 mm) para ULA, o radio = lambda/2 para UCA
- Acoplamiento mutuo < -15 dB (verificar con medición parámetros-S VNA)
- Estabilidad de centro de fase < más/menos 2 mm (usar antenas de parche, no de chip)
- Plano de tierra se extiende al menos lambda/4 más allá del elemento más exterior
Frontend RF:
- Tiempo de asentamiento del conmutador RF < 200 ns (verificar con osciloscopio)
- Pérdida de inserción del conmutador < 1 dB (presupuesto de margen de enlace)
- Aislamiento del conmutador > 20 dB (prevenir diafonía entre elementos)
- Control GPIO del conmutador enrutado con longitudes de traza coincidentes (< 5 mm skew)
Firmware:
- Periférico DFE/DF configurado para slots de conmutación de 1 us (modo AoA)
- Tamaño de buffer IQ >= 2 x (num_antenas + 8) muestras (doble buffer)
- Patrón de conmutación cargado en RAM del periférico RADIO
- Tabla de calibración de fase almacenada en flash y aplicada antes de estimación de ángulo
- Algoritmo de estimación de ángulo seleccionado (diff-fase para PoC, MUSIC para producción)
- Filtro temporal (alfa-beta o Kalman) aplicado a la salida de ángulo
Lado del tag:
- CTE habilitado en conjunto de advertising (cte_type = AoA, length = 2-4 unidades)
- Intervalo de advertising coincide con requisito de tasa de actualización de posicionamiento
- Antena del tag es omnidireccional (verificar patrón en cámara)
- Vida de batería calculada con overhead de CTE incluido
Despliegue:
- Espaciado de localizadores elegido para cobertura de cono de elevación 20-80 grados
- Mínimo 3 localizadores con LOS a cada área de cobertura
- Servidor de posicionamiento ejecutando mínimos cuadrados o fusion Kalman
- Detección y rechazo NLOS implementados
- Estudio de sitio realizado con ground truth (posiciones medidas)
- Especificación de precisión verificada en entorno objetivo (no solo cámara)
La detección de dirección AoA transforma el posicionamiento BLE de un círculo RSSI de 3-5 metros en una interseccion de rumbos submétricos. La tecnología es madura — SoCs BLE 5.1 con DFE de hardware, diseños de antena de referencia y bibliotecas de estimación de ángulo de código abierto están todos disponibles. El desafío de ingeniería no está en el procesamiento de señales sino en la capa física: diseño del arreglo de antenas, integridad del conmutador RF, calibración de fase y mitigación de multicamino. Haga eso bien, y su sistema de Bluetooth Beacon entrega precisión submétrica. Hagalo mal, y tiene un costoso sensor RSSI con antenas extra.
