4、IQ采样与相位测量:IQ信号基础、正交解调原理、相位差计算、IQ数据格式与存储、采样率与精度权衡
好,咱们进入蓝牙测向最核心的环节——IQ采样与相位测量。说实话,很多做蓝牙开发的工程师,一听到“IQ”两个字就觉得头大,觉得这是射频工程师的事。但做AoA/AoD测向,你绕不开它。我个人习惯把IQ数据比作“相位的指纹”,你只要会读这个指纹,就能算出角度。
4.1 IQ信号基础:为什么是I和Q?
先问一个问题:一个正弦波,你怎么描述它?通常我们说幅度和频率。但如果你想知道它相对于另一个波的“偏移量”,也就是相位,怎么办?
这时候就需要IQ信号了。I路(In-phase,同相分量)和Q路(Quadrature,正交分量),说白了就是把一个信号拆成两个互相垂直的分量。你可以想象成直角坐标系里的x和y,合成一个向量,这个向量的角度就是相位。
核心公式:
s(t) = I(t) * cos(ωt) + Q(t) * sin(ωt)
其中,相位 φ = arctan(Q / I)
我在项目中遇到过一位同事,他死活不理解为什么非要两个分量。我打了个比方:你站在十字路口,想知道北偏东多少度。只看北边的路(I路)你只知道走了多远,但不知道偏了多少。必须同时看东边的路(Q路),才能算出角度。他一下子就懂了。
4.2 正交解调原理:如何从射频信号中提取IQ?
正交解调,就是把天线接收到的射频信号,通过混频器分别与0°和90°的本振信号相乘,再经过低通滤波,得到I和Q两路基带信号。
嗯,这里要注意一个关键点:本振信号的频率必须与载波频率严格同步。否则你会看到IQ数据在旋转,而不是稳定的点。我曾经在调试一款芯片时,发现IQ数据一直在转圈,查了半天,原来是PLL锁相环的参考时钟漂了。
我的经验: 调试时先看IQ数据的“星座图”。如果是一个稳定的点,说明解调正常。如果是一个圆环,说明有频率偏移。如果是一团乱麻,那大概率是硬件链路有问题。
4.3 相位差计算:从IQ到角度
有了I和Q,相位计算就简单了。对于单天线接收,相位 φ = atan2(Q, I)。注意,这里用atan2而不是atan,因为atan2能处理四个象限,避免180°歧义。
对于AoA测向,我们需要计算两根天线之间的相位差。假设天线1的IQ是(I1, Q1),天线2的IQ是(I2, Q2),那么:
φ1 = atan2(Q1, I1)
φ2 = atan2(Q2, I2)
Δφ = φ2 - φ1
// 注意相位缠绕,需要解卷绕
if (Δφ > π) Δφ -= 2π
if (Δφ < -π) Δφ += 2π
你想想看,这个Δφ就是电磁波到达两根天线的路程差引起的相位差。再结合天线间距d,就能算出到达角θ:
θ = arcsin(Δφ * λ / (2π * d))
避坑指南: 我曾经因为天线间距算错,导致角度全偏了。蓝牙AoA常用的天线间距是λ/2,也就是约6.25cm(2.4GHz)。如果间距大于λ/2,会出现角度模糊,也就是多个角度对应同一个相位差。
4.4 IQ数据格式与存储:别小看这个环节
IQ数据怎么存?这看起来简单,但坑不少。常见的格式有:
| 格式 | 位宽 | 说明 |
|---|---|---|
| 有符号整型 | 8-bit / 16-bit | 最常用,I和Q各占一个int8或int16 |
| 浮点型 | 32-bit float | 精度高,但存储和传输开销大 |
| IQ交织 | I0, Q0, I1, Q1, ... | 连续存储,适合DMA传输 |
| IQ分离 | I0, I1, ... Q0, Q1, ... | 便于SIMD向量化处理 |
我个人习惯用16位有符号整型,配合IQ交织格式。为什么?因为蓝牙的IQ采样率通常不高(1MHz左右),16位足够覆盖动态范围,而且交织格式可以直接喂给硬件加速器做FFT或相关运算。
存储建议: 如果做AoA定位,通常需要连续采集多个CTE(Constant Tone Extension)的IQ数据。我一般会开一个环形缓冲区,每个CTE包对应一个slot,避免数据覆盖。缓冲区大小至少能存3个完整CTE的数据,防止处理不过来。
4.5 采样率与精度权衡:鱼和熊掌
采样率越高,你能捕获的相位变化越精细,但代价是什么?功耗、存储、处理时间都上去了。蓝牙CTE的持续时间是固定的(16μs到160μs),你需要在有限的时间内决定采多少个点。
举个例子:
- 1MHz采样率: 每个CTE采16~160个IQ样本。精度够用,功耗适中。大多数蓝牙芯片的默认配置。
- 4MHz采样率: 每个CTE采64~640个样本。精度更高,但功耗翻倍,而且数据量大了4倍。
- 125kHz采样率: 每个CTE只采2~20个样本。省电,但相位估计的方差很大。
我记得有一次做低功耗门禁项目,客户要求电池用两年。我一开始用4MHz采样,功耗直接超标。后来降到1MHz,同时做了多次测量取平均,精度没降多少,功耗却降了60%。
权衡原则:
- 静态场景(如室内定位基站):用高采样率,追求精度
- 移动场景(如穿戴设备):用低采样率,配合滤波算法
- 多径严重的环境:适当提高采样率,利用过采样抑制噪声
另外,采样率还影响相位噪声。你想想看,采样率越高,每个样本的积分时间越短,信噪比会下降。所以不是采样率越高越好,要找到那个平衡点。我一般会先做一组实验,画一条“采样率 vs 角度误差”的曲线,选拐点处的值。
小结
IQ采样和相位测量,说白了就是三个步骤:正交解调拿到IQ、计算相位差、换算成角度。每一步都有坑,但只要你理解了原理,调试起来并不难。下一章我们会讲天线阵列设计,到时候这些IQ数据就要派上大用场了。