关于Allan方差分析陀螺仪误差的几个摘要

1. Allan方差分析主要用于分析陀螺量化噪声、角度随机游走噪声(角速率白噪声)、零偏不稳定性、角速率随机游走(角加速度白噪声)和速率斜坡(角速率常值趋势项),等五种典型误差。有些文献也提到可用于分析周期项和一阶马尔可夫误差,但这不是Allan方差分析的强项,周期项更适合用功率谱分析,马尔可夫更适合于用相关分析(时间序列分析),不要试图以己之短攻人所长!

2. Allan方差分析的是静态误差,陀螺必须在静基座下进行采集数据,否则要是动基座下采集的陀螺数据,分析的结果到底是陀螺误差呢还是基座运动特性?!

3. Allan方差计算中采用了“差分”计算操作,因此Allan方差无法分析获得陀螺随机常值漂移参数。若是将几个陀螺的Allan方差曲线同时绘制在同一个双对数图上,曲线在左下角的对应的陀螺性能一般较好些,而右上角的差些。如下图从下到上分别为激光陀螺、光纤陀螺和MEMS陀螺,其中激光陀螺性能最好。如果是同一类型的陀螺,也是左下角的曲线性能稍好些

 

4. 如下图红圈中的Allan方差并不是什么马尔可夫过程噪声的,往往是由于陀螺经过低通滤波器后造成的,这时Allan方差反映的是滤波器的特性,而不是实际陀螺的特性。因此要得到陀螺的本质特性,应该对陀螺作高频采样,并且不能对原始数据做任何处理,直接用Allan方差分析才行。

关于Allan方差分析陀螺仪误差的几个摘要_第1张图片

 

(摘自http://blog.sina.com.cn/s/blog_40edfdc90102y1ar.html)

5. 关于Allan方差分析陀螺仪误差的几个摘要_第2张图片

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)
 

你可能感兴趣的:(关于Allan方差分析陀螺仪误差的几个摘要)