1. Allan方差分析主要用于分析陀螺量化噪声、角度随机游走噪声(角速率白噪声)、零偏不稳定性、角速率随机游走(角加速度白噪声)和速率斜坡(角速率常值趋势项),等五种典型误差。有些文献也提到可用于分析周期项和一阶马尔可夫误差,但这不是Allan方差分析的强项,周期项更适合用功率谱分析,马尔可夫更适合于用相关分析(时间序列分析),不要试图以己之短攻人所长!
2. Allan方差分析的是静态误差,陀螺必须在静基座下进行采集数据,否则要是动基座下采集的陀螺数据,分析的结果到底是陀螺误差呢还是基座运动特性?!
3. Allan方差计算中采用了“差分”计算操作,因此Allan方差无法分析获得陀螺随机常值漂移参数。若是将几个陀螺的Allan方差曲线同时绘制在同一个双对数图上,曲线在左下角的对应的陀螺性能一般较好些,而右上角的差些。如下图从下到上分别为激光陀螺、光纤陀螺和MEMS陀螺,其中激光陀螺性能最好。如果是同一类型的陀螺,也是左下角的曲线性能稍好些
4. 如下图红圈中的Allan方差并不是什么马尔可夫过程噪声的,往往是由于陀螺经过低通滤波器后造成的,这时Allan方差反映的是滤波器的特性,而不是实际陀螺的特性。因此要得到陀螺的本质特性,应该对陀螺作高频采样,并且不能对原始数据做任何处理,直接用Allan方差分析才行。
(摘自http://blog.sina.com.cn/s/blog_40edfdc90102y1ar.html)
6.
MATLAB程序
allan.m文件
function [T,sigma] = allan(omega,fs,pts) %fs为陀螺仪的频率,pts为选用描绘的点的数目
[N,M] = size(omega); % figure out how big the output data set is
n = 2.^(0:floor(log2(N/2)))'; % determine largest bin size
maxN = n(end);
endLogInc = log10(maxN);
m = unique(ceil(logspace(0,endLogInc,pts)))'; % create log spaced vector average factor
t0 = 1/fs; % t0 = sample interval
T = m*t0; % T = length of time for each cluster
theta = cumsum(omega)/fs; % integration of samples over time to obtain output angle θ
sigma2 = zeros(length(T),M); % array of dimensions (cluster periods) X (#variables)
for i=1:length(m) % loop over the various cluster sizes
for k=1:N-2*m(i) % implements the summation in the AV equation
sigma2(i,:) = sigma2(i,:) + (theta(k+2*m(i),:) - 2*theta(k+m(i),:) + theta(k,:)).^2;
end
end
sigma2 = sigma2./repmat((2*T.^2.*(N-2*m)),1,M);
sigma = sqrt(sigma2);
nihe.m文件
function C=nihe(tau,sig,M)
X=tau';Y=sig';
B=zeros(1,2*M+1);
F=zeros(length(X),2*M+1);
for i=1:2*M+1
kk=i-M-1;
F(:,i)=X.^kk;
end
A=F'*F;
B=F'*Y;
C=A\B;
gyro_data.m文件
clc;
clear;
data = dlmread('data.dat'); %从文本中读取数据,单位:deg/s,速率:100Hz
data = data(720000:2520000, 3:5)*3600; %截取保温两个小时后的,五个小时的数据,把 deg/s 转为 deg/h
[A, B] = allan(data, 100, 100); %求Allan标准差,用100个点来描述
loglog(A, B, 'o'); %画双对数坐标图
xlabel('time:sec'); %添加x轴标签
ylabel('Sigma:deg/h'); %添加y轴标签
legend('X axis','Y axis','Z axis'); %添加标注
grid on; %添加网格线
hold on; %使图像不被覆盖
C(1, :) = nihe(A', (B(:,1)').^2, 2)'; %拟合
C(2, :) = nihe(A', (B(:,2)').^2, 2)';
C(3, :) = nihe(A', (B(:,3)').^2, 2)';
Q = sqrt(abs(C(:, 1) / 3)); %量化噪声,单位:deg/h
N = sqrt(abs(C(:, 2) / 1)) / 60; %角度随机游走,单位:deg/h^0.5
Bs = sqrt(abs(C(:, 3))) / 0.6643; %零偏不稳定性,单位:deg/h
K = sqrt(abs(C(:, 4) * 3)) * 60; %角速率游走,单位:deg/h/h^0.5
R = sqrt(abs(C(:, 5) * 2)) * 3600; %速率斜坡,单位:deg/h/h
fprintf('量化噪声 X轴:%f Y轴:%f Z轴:%f 单位:deg/h\n', Q(1), Q(2), Q(3));
fprintf('角度随机游走 X轴:%f Y轴:%f Z轴:%f 单位:deg/h^0.5\n', N(1), N(2), N(3));
fprintf('零偏不稳定性 X轴:%f Y轴:%f Z轴:%f 单位:deg/h\n', Bs(1), Bs(2), Bs(3));
fprintf('角速率游走 X轴:%f Y轴:%f Z轴:%f 单位:deg/h/h^0.5\n', K(1), K(2), K(3));
fprintf('速率斜坡 X轴:%f Y轴:%f Z轴:%f 单位:deg/h/h\n', R(1), R(2), R(3));
D(:, 1) = sqrt(C(1,1)*A.^(-2) + C(1,2)*A.^(-1) + C(1,3)*A.^(0) + C(1,4)*A.^(1) + C(1,5)*A.^(2)); %生成拟合函数
D(:, 2) = sqrt(C(2,1)*A.^(-2) + C(2,2)*A.^(-1) + C(2,3)*A.^(0) + C(2,4)*A.^(1) + C(2,5)*A.^(2));
D(:, 3) = sqrt(C(3,1)*A.^(-2) + C(3,2)*A.^(-1) + C(3,3)*A.^(0) + C(3,4)*A.^(1) + C(3,5)*A.^(2));
loglog(A, D); %画双对数坐标图
(摘自 https://blog.csdn.net/u012325601/article/details/60882949)