2. 陀螺仪零偏静态标定与补偿
零偏标定的对象与判据
陀螺仪在完全静止时,理想输出应为 0,但实际输出存在一个缓慢变化的直流分量,即零偏。零偏由常值分量 b0 与随机漂移组成,是短时方位角解算的主要误差源之一。本案例的任务是:用一段静止采集的角速度序列估计 b0,用统计量判断这段数据是否"够稳",再做补偿并量化补偿前后的角度漂移。
关键约定:陀螺敏感轴输出角速度 ω(t),单位 °/s;采样间隔 Δt 固定;角度由角速度积分得到,θ(t)=∫ω dt。零偏补偿即 ω_c(t)=ω(t)−b̂0,补偿后角度漂移应显著小于补偿前。
零偏估计与稳定性检验
静止序列的均值就是常值零偏的估计。但仅给均值不够,还要回答"这段数据能不能用":如果序列中存在明显趋势、阶跃或异常尖峰,均值会被污染,补偿后反而引入新的偏差。因此标定流程必须包含稳定性检验。
下面是一段可直接运行的 Python 实现,输入为已对齐的静止角速度序列(单位 °/s),输出零偏估计、稳定性指标与补偿前后漂移对比。示例数据由固定随机种子生成,用于演示流程,不代表真实器件实测值。
import numpy as np
# ---- 1. 构造教学示例:静止 60 s,100 Hz ----
rng = np.random.default_rng(20240501)
dt = 0.01
N = 6000
t = np.arange(N) * dt
b0_true = 0.0120 # 示例常值零偏,°/s
noise = rng.normal(0, 0.0008, N) # 随机噪声,°/s
omega = b0_true + noise # 静止输出序列
# ---- 2. 零偏估计 ----
b_hat = omega.mean()
sigma = omega.std(ddof=1)
# ---- 3. 稳定性检验 ----
# 3a. 分段均值漂移:把序列切成 6 段,看各段均值差异
seg = omega.reshape(6, -1).mean(axis=1)
seg_spread = seg.max() - seg.min()
# 3b. 线性趋势斜率(最小二乘)
slope = np.polyfit(t, omega, 1)[0]
# 3c. 异常点比例(3σ 准则)
outlier_ratio = np.mean(np.abs(omega - b_hat) > 3 * sigma)
print(f"b_hat = {b_hat:.6f} °/s")
print(f"sigma = {sigma:.6f} °/s")
print(f"分段均值极差 = {seg_spread:.6f} °/s")
print(f"趋势斜率 = {slope:.3e} °/s²")
print(f"3σ 异常点比例 = {outlier_ratio:.4%}")
# ---- 4. 补偿与漂移对比 ----
theta_raw = np.cumsum(omega) * dt
theta_cmp = np.cumsum(omega - b_hat) * dt
drift_raw = np.max(np.abs(theta_raw))
drift_cmp = np.max(np.abs(theta_cmp))
print(f"补偿前最大漂移 = {drift_raw:.4f} °")
print(f"补偿后最大漂移 = {drift_cmp:.4f} °")
print(f"漂移下降比 = {drift_raw / drift_cmp:.1f}×")
判据与结果解读
稳定性检验的通过条件建议同时满足:分段均值极差小于 3 倍噪声标准差、趋势斜率接近 0(例如 |slope|·60 s 小于 0.5 倍 b̂0)、3σ 异常点比例低于 1%。任一条件不满足,说明这段静止数据混入了转动、温漂或干扰,应重新采集而不是强行补偿。
补偿效果的判据是漂移下降比。以示例参数推算:补偿前漂移约 0.0120 × 60 ≈ 0.72°,补偿后残余漂移由随机噪声积分决定,量级在 0.0008 × √6000 × 0.01 ≈ 0.0006° 附近,下降比可达数百倍。实际器件因零偏不稳定度更大,下降比通常明显低于此值,但仍应显著大于 1;若下降比接近 1,说明零偏估计被趋势或异常点污染,需回到稳定性检验排查。
标定记录表(可直接填写)
| 项目 | 符号/公式 | 示例值 | 通过条件 |
|---|---|---|---|
| 采样率与时长 | 1/Δt,N·Δt | 100 Hz,60 s | 覆盖预期工作时段 |
| 零偏估计 | b̂0 = mean(ω) | 0.0120 °/s | — |
| 噪声标准差 | σ = std(ω) | 0.0008 °/s | 与器件指标同量级 |
| 分段均值极差 | max(seg)−min(seg) | 待填 | < 3σ |
| 趋势斜率 | polyfit 一次项 | 待填 | |slope|·60 s < 0.5·b̂0 |
| 异常点比例 | |ω−b̂0| > 3σ | 待填 | < 1% |
| 补偿前漂移 | max|Σω·Δt| | ≈0.72 ° | — |
| 补偿后漂移 | max|Σ(ω−b̂0)·Δt| | 待填 | 显著小于补偿前 |
| 漂移下降比 | drift_raw / drift_cmp | 待填 | ≥ 10× |
填写时把示例值替换为本次采集的真实统计量;若某项不通过,先排查采集条件(是否真正静止、有无温升、线缆扰动),再决定是否重新采集,而不是直接调低判据。