在研究晶体振荡器和原子钟的稳定性时,人们发现这些系统的相位噪声中不仅有白噪声,而且有闪烁噪声。使用标准差分析这类噪声时发现结果是无法收敛的。为了解决这个问题,David Allan于1966年提出了Allan方差分析,该方法不仅可以准确识别噪声类型,还能精确确定噪声的特性参数,其最大优点在于对各类噪声的幂律谱项都是收敛的。对于IMU标定而言,标定可以分为确定性误差和随机误差,确定性误差包括:交轴耦合误差(Axis-misalignment),比例因子误差(Scale Factor),零偏(Bias)。随机误差则主要是高斯白噪声和bias随机游走。Allen方差主要用于标定随机误差。
Allen方差的计算方法如下:
保持IMU静止, 采集N个数据点。将采样数据划分为包含不同数量采样点的子集 :
T
(
n
)
=
n
T
s
,
n
=
1
,
2
…
N
/
2
,
T
(
n
)
T(n)= nT_s,n=1,2…N/2 ,T(n)
T(n)=nTs,n=1,2…N/2,T(n) 为该子集的平均时间。
将N个点定长分组,常用的交叠式Allen方差如下(n=3):
对于每个子集,计算均值后,计算相邻两组的方差。这样就会得到
n
n
n个在每一平均时间
T
(
n
)
T(n)
T(n)对应的方差
σ
(
n
)
σ(n)
σ(n)。根据这
n
n
n个点作图,可得到Allan标准差
σ
σ
σ随平均时间
T
T
T变化的双对数曲线。Allan方差有效反映了相邻两个采样段内平均频率差的起伏。
从上面的Allen方差图中可以得到5种随机误差
假设各种误差源统计独立,那总的艾伦方差为各种误差源之和,即将量化噪声的平方
σ
Q
σ_Q
σQ、角度随机游走的平方
σ
R
A
W
σ_{RAW}
σRAW、零偏不稳定性的平方
σ
b
i
a
s
σ_{bias}
σbias、角速率随机游走的平方
σ
R
R
W
σ_{RRW}
σRRW、角速率斜坡的平方
σ
R
R
σ_{RR}
σRR的总和。
下面是读取bag包并获取Allen方差的图片,并会生成对应的allen方差图。这里主要参考了https://github.com/ori-drs/allan_variance_ros对应的C++文件,为了方便这里提供了Python的代码以及注释。这个代码需要事先安装sudo pip install allantools
。