3、天线阵列设计基础
天线阵列设计,说实话,是蓝牙测向功能里最容易被低估的一环。很多人觉得算法写好了就行,天线随便摆摆。我在项目里吃过这个亏,后来才明白——天线阵列的物理实现,直接决定了你测向的精度上限。
这一章我们聊聊天线理论入门、常见的阵列类型、间距与相位差的关系,还有切换时序。嗯,内容有点多,但都是干货。
3.1 天线理论入门
先简单回顾一下天线的基本概念。天线说白了就是把电信号转换成电磁波的器件。对于蓝牙测向来说,我们最关心的是天线的方向图和相位中心。
- 方向图:天线在不同方向上的辐射强度。全向天线在水平面是圆形的,但实际总有偏差。
- 相位中心:电磁波等效的辐射点。理想情况下,相位中心是固定的。但实际天线,尤其是低成本PCB天线,相位中心会随频率漂移。
对于蓝牙AoA/AoD应用,我们通常使用贴片天线或偶极子天线。贴片天线增益高、方向性好,但带宽窄。偶极子天线带宽宽、全向性好,但增益低。我个人习惯在接收端用贴片天线,发射端用偶极子天线——当然,这取决于你的具体场景。
3.2 天线阵列类型
天线阵列的类型很多,但蓝牙测向里最常用的就两种:均匀线性阵列(ULA)和均匀圆形阵列(UCA)。
3.2.1 均匀线性阵列(ULA)
ULA就是把天线等间距排成一条直线。结构简单,算法成熟,是入门首选。
ULA的特点:
- 只能测量一维角度(通常是水平角或俯仰角)
- 角度分辨率取决于天线数量和间距
- 存在180度模糊问题(前后对称)
举个例子,4根天线间距λ/2的ULA,可以覆盖-90°到+90°的范围。但如果你把间距拉大到λ,就会出现栅瓣,角度估计会出错。我在一个项目中为了省天线数量,把间距设成了λ,结果测向结果乱跳——嗯,后来老老实实改回λ/2了。
3.2.2 均匀圆形阵列(UCA)
UCA把天线均匀分布在圆周上。它能测量二维角度(水平角+俯仰角),而且没有180度模糊问题。
UCA的特点:
- 360度全覆盖,无死角
- 可以同时估计方位角和俯仰角
- 算法复杂度比ULA高
- 对天线一致性要求更高
我记得第一次做UCA时,选了8根天线,半径设为λ/2。结果发现天线之间的互耦效应很严重,导致相位测量偏差。后来加了去耦结构才解决。所以,UCA虽然功能强大,但实现难度也大。
| 特性 | ULA | UCA |
|---|---|---|
| 测量维度 | 一维 | 二维 |
| 覆盖范围 | 180° | 360° |
| 算法复杂度 | 低 | 高 |
| 天线数量 | 少(2-8根) | 多(4-12根) |
| 常见应用 | 室内定位、门禁 | 机器人、无人机 |
3.3 天线间距与相位差关系
这是整个测向技术的核心。你想想看,我们怎么从天线接收到的信号里提取角度信息?答案就是相位差。
假设两根天线间距为d,信号入射角为θ。那么信号到达两根天线的路程差是d·sin(θ)。这个路程差对应的相位差就是:
Δφ = 2π · d · sin(θ) / λ
其中λ是信号波长。对于蓝牙,λ ≈ 12.3 cm(2.44 GHz)。
所以,只要测出两根天线之间的相位差Δφ,就能反推出角度θ:
θ = arcsin(Δφ · λ / (2π · d))
这里有几个关键点:
- 间距d不能太大:d > λ/2时,sin(θ)可能对应多个Δφ,出现角度模糊。这就是奈奎斯特采样定理在空间域的体现。
- 间距d不能太小:d太小,相位差变化不敏感,角度分辨率低。
- λ/2是最佳折中:既能覆盖±90°,又能最大化分辨率。
3.4 天线切换时序
蓝牙测向里,我们不是同时读取所有天线的信号,而是依次切换。这就涉及到切换时序的设计。
蓝牙Core Spec规定,AoA/AoD的切换发生在CTE(Constant Tone Extension)期间。CTE是一段未调制的载波信号,持续时间可以是16μs到160μs。
切换时序的关键参数:
- 切换时间(Switching Time):从一个天线切换到下一个天线所需的时间。典型值1-2μs。
- 稳定时间(Settling Time):切换后,信号稳定下来所需的时间。典型值1-2μs。
- 采样时间(Sampling Time):在每个天线上采集I/Q数据的时间。典型值4-8μs。
举个例子,一个4天线阵列的切换时序:
CTE开始
天线1:稳定2μs → 采样4μs
天线2:切换1μs → 稳定2μs → 采样4μs
天线3:切换1μs → 稳定2μs → 采样4μs
天线4:切换1μs → 稳定2μs → 采样4μs
CTE结束
总时间 = 2 + 4 + (1+2+4)×3 = 6 + 21 = 27μs。这个时间必须小于CTE的总时长。
另外,切换顺序也很重要。我建议采用循环切换而不是随机切换。循环切换可以让每个天线在CTE内被多次采样,提高角度估计的鲁棒性。
嗯,这一章的内容就到这里。天线阵列设计是个实践性很强的领域,光看理论是不够的。我建议你拿到开发板后,先搭一个简单的2天线ULA,用示波器看看切换波形,再慢慢扩展到更多天线。这样踩过的坑,印象才深刻。