如何使用allan方差进行估计imu参数

如何使用allan方差进行估计imu参数,第1张

1、从定义和原理去理解:

Allan方差的基本原理如下:设系统采样周期为τ,连续采样N个数据点.Y(i),i=1,2,3…N。对任意的时间r=mτ,m=1,2…N/2,由式(1)求该组时间内各点的均值序列Y(K),由式(2)求取差值序列D(K).

Y(K)=1/M K=1,2…N-M+1 (1)

D(K)=Y(K+M)-Y(K) K=1,2…N-2M+1 (2)

普通AlIan方差的定义如式(3)。其中<>表示取均值,σ=1,2,?,Round((N/m)-1)。

(τ)=1/2<D((P-1)M+1)>(3)

Allan方差反映了相邻两个采样段内平均频率差的起伏。它的最大优点在于对各类噪声的幂律谱项都是收敛的;此外每组测量N一2,大大缩短了测量的时间。 交叠式Allan方差由式(4)计算:

(τ)=1/2<D(P)2>P=1,2…N-2M+1 (4)

2、Allan方差简介:

Allan方差由美国人David AIlan于1966年提出。

最初该方法是用于分析振荡器的相位和频率不稳定性,高稳定度振荡器的频率稳定度的时域表征目前均采用Allan方差。由于陀螺等惯性传感器本身也具有振荡器的特征,因此该方法随后被广泛应用于各种惯性传感器的随机误差辨识中。

matlab的方差求算在matlab程序上输入下列例子:

Matlab 函数:var

>>X=[1,2,3,4]

>>var(X)=1.6667

>>sum((X(1,:)-mean(X)).^2)/length(X)=1.2500

>>sum((X(1,:)-mean(X)).^2)/(length(X)-1)=1.6667

var没有求矩阵的方差功能,可使用std先求均方差,再平方得到方差。

std,均方差,std(X,0,1)求列向量方差,std(X,0,2)求行向量方差。

>>X=[1 2

3 4]

>>std(X,0,1)=1.4142  1.4142

>>std(X,0,2)=0.7071

0.7071

若要求整个矩阵所有元素的均方差,则要使用std2函数:

>>std2(X)=1.2910

要注意的是var函数所采用公式中,分母不是 ,而是 。这是因为var函数实际上求的并不是方差,而是误差理论中“有限次测量数据的标准偏差的估计值”。

扩展资料:

matlab求方差时的注意事项:

1、装出错时,可换注册码继续安装,到同一目录;

2、谨记安装路径不要有中文名称;

3、成功安装完毕之后,如果遇到matlab启动后,窗口在打开一到两秒后就自动关闭了, 可按以下方法试试:【假设你安装的目录为c:\MATLAB\】(不过不建议安装到C盘,那样会影响系统速度)

参考资料:百度百科 matlab

直接上代码:

#include <stdio.h>

#include <conio.h>

#include <math.h>

double fangcha(double x[], int n){

 //求数组x(具有n个元素)的方差:S=(<x^2>-<x>)^0.5

 int i

 double xaver=0.0, x2aver=0.0

 for(i=0i<n++i){

  xaver+=x[i] x2aver+=x[i]*x[i]

 }

 xaver/=n x2aver/=n //求x的平均、x^2的平均

 return sqrt(x2aver-xaver*xaver)

}

int main(){

 double x[5]

 int i

 printf("Input 5 datas:\n")

 for(i=0i<5++i){

  scanf("%lf",&x[i])

 }

 printf("\nFangCha S=%.4lf",fangcha(x,5))

 printf("\nFinished!\n")

 getch()

 return 0

}

希望能帮助到你。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11891425.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-19
下一篇2023-05-19

发表评论

登录后才能评论

评论列表(0条)

    保存