3. 随机误差建模与辨识:Allan方差分析法

各位同学,今天我们来聊聊惯性导航里一个绕不开的话题——随机误差建模。说实话,我刚入行那会儿,觉得确定性误差(比如零偏、标度因数)才是大头,随机误差嘛,无非就是白噪声。直到有一次做高精度寻北仪,数据出来飘得离谱,我才意识到:随机误差不建模,系统性能天花板就在那儿

那怎么分析随机误差呢?业界最常用的工具就是Allan方差。它最早是用于原子钟频率稳定度分析的,后来被我们做惯导的“借”过来,成了分析MEMS和光纤陀螺噪声的标配。说白了,它能把混在一起的噪声成分,像筛子一样一层层筛出来。

3.1 Allan方差分析法的原理

先别急着看公式,咱们先想一个问题:你有一长串陀螺或加速度计的输出数据,怎么知道里面有哪些噪声?

传统方差是算整体波动,但Allan方差聪明在——它把数据按不同时间长度切块。比如你采样了10小时的数据,可以按1秒一段、10秒一段、100秒一段……分别算方差。这样就能看出:不同时间尺度下,噪声的表现是不一样的

数学上,Allan方差的定义是这样的:

σ²(τ) = (1/2) * ⟨(Ω_{k+1} - Ω_k)²⟩

其中τ是相关时间(也就是你切块的长度),Ω_k是第k个时间块的平均值。这个公式看着简单,但背后有个关键点:它计算的是相邻两个时间块均值的差值的方差。为什么要相邻?因为这样可以滤掉低频趋势项,只保留随机成分。

我个人的习惯是,拿到原始数据后,先画一条Allan方差曲线。这条曲线通常长什么样呢?咱们看下面这张图:

Allan方差曲线(双对数坐标) 相关时间 τ (s) 10⁰ 10¹ 10² 10³ 10⁴ Allan方差 σ²(τ) 10⁻⁶ 10⁻⁵ 10⁻⁴ 10⁻³ 量化噪声 (斜率-1) 角度随机游走 (斜率-1/2) 零偏不稳定性 (谷底) 速率随机游走 (斜率+1/2) 速率斜坡 (斜率+1) ■ 量化噪声 ■ 角度随机游走 ■ 零偏不稳定性 ■ 速率随机游走 ■ 速率斜坡

这张图是双对数坐标下的Allan方差曲线。你想想看,不同噪声在曲线上会呈现出不同的斜率。这就是我们辨识噪声的依据。

3.2 Allan方差曲线解读

拿到一条实测的Allan方差曲线,怎么看?我一般分三步走:

  1. 看形状:曲线是单调下降?还是先降后升?有没有明显的谷底?
  2. 看斜率:不同区段的斜率是多少?-1、-1/2、0、+1/2、+1?
  3. 读数值:谷底对应的纵坐标是多少?这直接决定了你的系统能达到的最佳精度。

举个例子。有一次我帮客户分析一款国产MEMS陀螺,Allan方差曲线在τ=10s附近有个明显的谷底,纵坐标大约是0.01°/s。这意味着什么呢?这款陀螺的最佳角速率分辨率就是0.01°/s,再想提高就得换器件了。

核心要点:Allan方差曲线的谷底对应的是零偏不稳定性,这是衡量惯性器件长期稳定性的关键指标。谷底越深、位置越靠右,说明器件性能越好。

3.3 随机噪声项提取

好了,现在咱们来逐个拆解这五种噪声。我按曲线从左到右的顺序来讲。

3.3.1 量化噪声

量化噪声出现在曲线最左端(短相关时间),斜率为-1。它是由AD转换器的有限分辨率引起的。说白了,你模拟量是连续的,但数字量是离散的,这个台阶就是量化噪声。

计算公式:

Q = σ(τ) / √3

其中σ(τ)是τ=1s时的Allan标准差。Q的单位是弧度或度。

我的经验:量化噪声通常很小,除非你用低分辨率ADC。有一次我遇到一个奇怪的现象,Allan曲线在短时间区段斜率不是-1而是-0.8,查了半天发现是ADC的采样时钟有抖动。嗯,这里要注意,时钟抖动也会影响量化噪声的斜率

3.3.2 角度随机游走

这是惯导系统里最常见的噪声,斜率为-1/2。它代表角速度积分后产生的角度误差,本质上是白噪声通过积分器后的结果。

提取方法:

ARW = σ(τ) × √τ

在双对数曲线上,取τ=1s对应的纵坐标值,就是ARW。单位是°/√h 或 rad/√s。

我记得有一次做车载导航,客户说定位误差越来越大。我一看Allan曲线,ARW高达0.1°/√h,比标称值大了10倍。后来发现是陀螺的供电电源纹波太大,把白噪声放大了。电源质量直接影响ARW,这个坑我踩过。

3.3.3 零偏不稳定性

这是曲线谷底对应的噪声,斜率为0(水平段)。它代表的是低频漂移,是衡量惯性器件长期稳定性的核心指标。

提取方法:直接读取谷底对应的纵坐标值。单位是°/h 或 rad/s。

注意:零偏不稳定性不是零偏本身。零偏是固定偏差,可以标定补偿;零偏不稳定性是随机漂移,无法完全补偿。所以选型时,这个指标比零偏更重要。

3.3.4 速率随机游走

斜率+1/2,出现在曲线中长相关时间区段。它代表角加速度的白噪声,在惯导里通常与机械振动或温度波动有关。

提取方法:

RRW = σ(τ) / √τ

单位是°/h/√h 或 rad/s/√s。

说实话,速率随机游走在MEMS器件里不太常见,但在光纤陀螺里偶尔会出现。我曾经遇到一个光纤陀螺,RRW异常大,最后发现是光纤环的缠绕工艺有问题,导致温度梯度敏感。

3.3.5 速率斜坡

斜率+1,出现在曲线最右端(长相关时间)。它代表的是确定性趋势项,比如温度引起的线性漂移,或者地球自转的残余分量。

提取方法:

K = σ(τ) / τ

单位是°/h² 或 rad/s²。

这里有个容易混淆的地方:速率斜坡到底是随机误差还是确定性误差?严格来说,它是确定性误差,但Allan方差把它也当作噪声项来处理。我个人建议,如果发现曲线末端明显上翘,先检查数据里有没有未补偿的温度漂移,而不是急着把它当作随机噪声。

3.4 实战:用Python提取噪声参数

说了这么多理论,咱们来点实际的。下面是我常用的一个Python脚本片段,用于从Allan方差曲线中提取五种噪声参数:

import numpy as np
import matplotlib.pyplot as plt

def extract_noise_params(tau, allan_var):
    """
    从Allan方差曲线提取噪声参数
    tau: 相关时间数组
    allan_var: Allan方差数组
    """
    sigma = np.sqrt(allan_var)
    
    # 1. 量化噪声 (斜率-1, 取tau=1s)
    idx_q = np.argmin(np.abs(tau - 1))
    Q = sigma[idx_q] / np.sqrt(3)
    
    # 2. 角度随机游走 (斜率-1/2, 取tau=1s)
    ARW = sigma[idx_q] * np.sqrt(tau[idx_q])
    
    # 3. 零偏不稳定性 (谷底)
    idx_min = np.argmin(sigma)
    BI = sigma[idx_min]
    tau_bi = tau[idx_min]
    
    # 4. 速率随机游走 (斜率+1/2, 取长相关时间)
    idx_rrw = np.argmin(np.abs(tau - tau[-1]//2))
    RRW = sigma[idx_rrw] / np.sqrt(tau[idx_rrw])
    
    # 5. 速率斜坡 (斜率+1, 取最长相关时间)
    K = sigma[-1] / tau[-1]
    
    return {
        'Q': Q,           # 量化噪声 (deg)
        'ARW': ARW,       # 角度随机游走 (deg/√h)
        'BI': BI,         # 零偏不稳定性 (deg/h)
        'RRW': RRW,       # 速率随机游走 (deg/h/√h)
        'K': K            # 速率斜坡 (deg/h²)
    }

# 使用示例
tau = np.logspace(0, 4, 100)  # 1s 到 10000s
allan_var = 1e-6 / tau + 1e-8  # 模拟数据
params = extract_noise_params(tau, allan_var)
print(params)

这个脚本虽然简单,但足够应付大多数情况。不过要注意,实际数据往往没这么理想,曲线可能有很多毛刺。我建议先做平滑处理,或者用最小二乘法拟合各段斜率。

3.5 避坑指南

最后,分享几个我踩过的坑:

  • 数据长度不够:Allan方差要求数据长度至少是最大相关时间的10倍。比如你想分析到1000s,至少需要10000s的数据。我曾经为了省时间只采了半小时,结果曲线后半段全是噪声。
  • 温度变化干扰:如果测试环境温度在缓慢变化,Allan曲线末端会异常上翘,容易被误判为速率斜坡。解决办法是加温控箱,或者先做温度补偿。
  • 振动耦合:在振动环境下测试,Allan曲线在短时间区段会出现异常凸起。这时候要区分是器件本身的噪声还是外部振动。
  • 采样率选择:采样率太低会丢失高频噪声信息,太高又会产生大量冗余数据。我一般建议采样率是系统带宽的5-10倍。

总结一下:Allan方差分析法是惯性导航随机误差建模的基石。通过解读曲线斜率,我们可以把五种噪声一一分离出来。记住,曲线谷底是零偏不稳定性,这是衡量器件精度的核心指标。下次你拿到一份陀螺或加速度计的测试数据,不妨先画一条Allan方差曲线,它能告诉你很多数据手册上没写的东西。

好了,这一章就到这里。下一章我们会讲如何把这些噪声参数用到卡尔曼滤波器里,实现真正的组合导航。到时候见!


公众号:蓝海资料掘金营,微信deep3321