陀螺仪随机误差的Allan方差分析

https://blog.csdn.net/u012325601/article/details/60882949

陀螺仪随机误差的Allan方差分析

GitHub仓库:https://github.com/XinLiGitHub/GyroAllan

PS:博文不再更新,后续更新会在GitHub仓库进行。

 

1,前言

        陀螺仪的随机误差主要包括:量化噪声、角度随机游走、零偏不稳定性、角速率随机游走、速率斜坡和正弦分量。对于这些随机误差,利用常规的分析方法,例如计算样本 均值和方差,并不能揭示出潜在的误差源。另一方面,在实 际工作中通过对自相关函数和功率谱密度函数加以分析将随 机误差分离出来是很困难的。Allan方差法是20世纪60年代由美国国家标准局的David Allan提出的,它是一种基于时域的分析方法。Allan方差法 的主要特点是能非常容易地对各种误差源及其对整个噪声统 计特性的贡献进行细致的表征和辨识,而且具有便于计算、 易于分离等优点。

 

2,MATLAB程序

        allan.m文件

 

 
  1. function [T,sigma] = allan(omega,fs,pts)

  2. [N,M] = size(omega); % figure out how big the output data set is

  3. n = 2.^(0:floor(log2(N/2)))'; % determine largest bin size

  4. maxN = n(end);

  5. endLogInc = log10(maxN);

  6. m = unique(ceil(logspace(0,endLogInc,pts)))'; % create log spaced vector average factor

  7. t0 = 1/fs; % t0 = sample interval

  8. T = m*t0; % T = length of time for each cluster

  9. theta = cumsum(omega)/fs; % integration of samples over time to obtain output angle θ

  10. sigma2 = zeros(length(T),M); % array of dimensions (cluster periods) X (#variables)

  11. for i=1:length(m) % loop over the various cluster sizes

  12. for k=1:N-2*m(i) % implements the summation in the AV equation

  13. sigma2(i,:) = sigma2(i,:) + (theta(k+2*m(i),:) - 2*theta(k+m(i),:) + theta(k,:)).^2;

  14. end

  15. end

  16. sigma2 = sigma2./repmat((2*T.^2.*(N-2*m)),1,M);

  17. sigma = sqrt(sigma2);


        nihe.m文件

 

 

 
  1. function C=nihe(tau,sig,M)

  2. X=tau';Y=sig';

  3. B=zeros(1,2*M+1);

  4. F=zeros(length(X),2*M+1);

  5.  
  6. for i=1:2*M+1

  7. kk=i-M-1;

  8. F(:,i)=X.^kk;

  9. end

  10.  
  11. A=F'*F;

  12. B=F'*Y;

  13. C=A\B;


        gyro_data.m文件

 

 

 
  1. clc;

  2. clear;

  3.  
  4. data = dlmread('data.dat'); %从文本中读取数据,单位:deg/s,速率:100Hz

  5. data = data(720000:2520000, 3:5)*3600; %截取保温两个小时后的,五个小时的数据,把 deg/s 转为 deg/h

  6. [A, B] = allan(data, 100, 100); %求Allan标准差,用100个点来描述

  7.  
  8. loglog(A, B, 'o'); %画双对数坐标图

  9. xlabel('time:sec'); %添加x轴标签

  10. ylabel('Sigma:deg/h'); %添加y轴标签

  11. legend('X axis','Y axis','Z axis'); %添加标注

  12. grid on; %添加网格线

  13. hold on; %使图像不被覆盖

  14.  
  15. C(1, :) = nihe(A', (B(:,1)').^2, 2)'; %拟合

  16. C(2, :) = nihe(A', (B(:,2)').^2, 2)';

  17. C(3, :) = nihe(A', (B(:,3)').^2, 2)';

  18.  
  19. Q = sqrt(abs(C(:, 1) / 3)); %量化噪声,单位:deg/h

  20. N = sqrt(abs(C(:, 2) / 1)) / 60; %角度随机游走,单位:deg/h^0.5

  21. Bs = sqrt(abs(C(:, 3))) / 0.6643; %零偏不稳定性,单位:deg/h

  22. K = sqrt(abs(C(:, 4) * 3)) * 60; %角速率游走,单位:deg/h/h^0.5

  23. R = sqrt(abs(C(:, 5) * 2)) * 3600; %速率斜坡,单位:deg/h/h

  24.  
  25. fprintf('量化噪声 X轴:%f Y轴:%f Z轴:%f 单位:deg/h\n', Q(1), Q(2), Q(3));

  26. fprintf('角度随机游走 X轴:%f Y轴:%f Z轴:%f 单位:deg/h^0.5\n', N(1), N(2), N(3));

  27. fprintf('零偏不稳定性 X轴:%f Y轴:%f Z轴:%f 单位:deg/h\n', Bs(1), Bs(2), Bs(3));

  28. fprintf('角速率游走 X轴:%f Y轴:%f Z轴:%f 单位:deg/h/h^0.5\n', K(1), K(2), K(3));

  29. fprintf('速率斜坡 X轴:%f Y轴:%f Z轴:%f 单位:deg/h/h\n', R(1), R(2), R(3));

  30.  
  31. 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)); %生成拟合函数

  32. 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));

  33. 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));

  34.  
  35. loglog(A, D); %画双对数坐标图

  36.  


3,运行结果

 

         量化噪声          X轴:0.458971 Y轴:0.564662 Z轴:1.118367  单位:deg/h
         角度随机游走  X轴:0.231291 Y轴:0.273737 Z轴:0.532305  单位:deg/h^0.5
         零偏不稳定性  X轴:8.264598 Y轴:8.849770 Z轴:7.367757  单位:deg/h
         角速率游走      X轴:42.156012 Y轴:40.870664 Z轴:32.268721  单位:deg/h/h^0.5
         速率斜坡          X轴:43.040958 Y轴:40.022454 Z轴:11.171091  单位:deg/h/h

 

         注意:当Allan标准差的拟合多项式中的拟合系数是负值时,所得误差项的拟合结果随着相关时间的微小改变变化很大,拟合误差很大,可信度差。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Allan方差分析是一种用于评估随机变量测量误差的方法。在MATLAB中,可以编写程序来计算Allan方差的值。 首先,需要准备一个包含时间序列数据的dat文件。该文件应包含一个测量的观测值列表,这些观测值是以时间为单位的。这些观测值可以是任何随机变量的测量结果,例如振荡器频率或陀螺仪加速度。 在MATLAB程序中,可以使用函数load来加载dat文件中的数据到一个变量中。然后,可以使用allanvar函数来计算Allan方差的值。allanvar函数接受一个向量作为输入,并返回一个包含不同时间间隔的Allan方差的向量。 例如,以下是一个MATLAB程序示例,用于计算dat文件中数据的Allan方差: ```MATLAB % 加载dat文件中的数据 data = load('dat文件路径'); % 计算Allan方差 allan_var = allanvar(data); ``` 此程序将加载dat文件中的数据并计算其Allan方差。allanvar函数返回一个包含不同时间间隔的Allan方差值的向量。可以使用这些值来分析随机变量的测量误差,并确定最佳的测量采样频率。 总之,通过在MATLAB中编写程序读取dat文件并使用allanvar函数计算Allan方差的值,可以对随机变量的测量误差进行评估并确定最佳的测量采样频率。 ### 回答2: Allan方差分析方法是一种用于分析连续时间数据序列的统计方法,常用于精密仪器的性能评估和时钟信号的稳定性分析。在Matlab程序中,可以通过使用相应的函数和算法来实现Allan方差分析。 通常,Allan方差分析方法的输入数据是一个时间序列的连续测量值。在Matlab中,可以将这个数据保存在一个dat文件中。dat文件是一种常用的数据格式,可以包含多个列的数据,每列表示一个测量值。 在Matlab程序中读取dat文件的数据,可以使用文件读取函数,如fscanf或textscan函数。这些函数可以读取dat文件的每一行,并将其转换为Matlab中的数值数组。读取完数据后,就可以开始进行Allan方差分析了。 在Matlab中,实现Allan方差分析可以使用Signal Processing Toolbox中的allanvar函数。这个函数可以计算输入数据序列的Allan方差,并返回一组时间间隔和对应的方差值。根据这些结果,可以绘制Allan方差曲线,以便分析数据的特性和性能。 另外,Matlab还提供了其他用于统计分析和数据可视化的函数,如mean和plot函数。这些函数可以用于计算均值、绘制数据图表等步骤,以便更全面地分析数据。 总之,Allan方差分析方法在Matlab程序中可以通过读取dat文件的数据,并使用Signal Processing Toolbox中的函数来进行计算和分析。这样可以方便地评估仪器的性能和信号的稳定性。 ### 回答3: Allan方差分析是一种常用的时间序列处理方法,用于分析信号的频率稳定性。MATLAB是一种常用的数值计算和数据分析软件,可以编写Allan方差分析的程序。 在MATLAB中,我们可以使用一维数组来表示样本的时间序列数据,将其保存为.dat格式。.dat格式是一种简单的二进制文件格式,可以方便地保存和读取数值数据。 编写Allan方差分析程序的步骤如下: 1. 读取.dat文件中的数据,可以使用MATLAB中的load命令或fread命令进行读取。 2. 对数据进行预处理,比如去除噪声或异常值。 3. 计算Allan方差,可以根据Allan方差的定义编写相应的计算函数。这个函数的输入是时间序列数据数组,输出是Allan方差结果。 4. 绘制Allan方差曲线,可以使用MATLAB中的plot函数将Allan方差结果以曲线的形式绘制出来。 在程序运行过程中,可能还需要设置一些参数,比如采样时间间隔和Allan方差计算的时间窗口大小。这些参数可以根据具体实际需求进行设置。 总之,通过MATLAB编写Allan方差分析程序可以对时间序列数据进行频率稳定性的评估,帮助我们了解信号的稳定性特性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值