Allan 方差计算方法实现

Part.I 原理

Chap.I 计算过程

具体原理可看 Reference 的前两个,下面仅仅列举一下计算过程:

  • 步骤:分块,块内求平均、平均值相减、求差值的均方值(RMS)
  • 根据分块方式不同可以分为标准分块方式和交叠式分块方式,其计算方法分别如下:

在这里插入图片描述
由随机过程理论可知,各种随机噪声都是由白噪声激励得到,一个谱密度为 q c q_c qc 的白噪声输入不同的系统函数,就会得到不同的随机噪声。Allan 方差分析的目的就是要识别随机噪声类型以及提取相应的白噪声谱密度 q c q_c qc 。不同性质的噪声具有不同的 Allan 方差,其双对数曲线具有不同的斜率。
在这里插入图片描述
其中

  • 斜率 -1:Quantization noise 量化噪声
  • 斜率 -0.5:Angle Random Walk 角度随机游走
  • 斜率 0:Bias Instability 零偏不稳定性
  • 斜率 0.5:Rate Random Walk 角速率随机游走
  • 斜率 1:Rate Ramp 速率斜坡

对上述几种阿伦方差分析结果进行比较整理如下表所示。
在这里插入图片描述

Chap.II 注意事项

摘自 参考 3

  1. Allan方差分析主要用于分析陀螺量化噪声、角度随机游走噪声(角速率白噪声)、零偏不稳定性、角速率随机游走(角加速度白噪声)和速率斜坡(角速率趋势项),等五种典型误差。有些文献也提到可用于分析周期项和一阶马尔可夫误差,但这不是Allan方差分析的强项,周期项更适合用功率谱分析,马尔可夫更适合于用相关分析(时间序列分析),不要试图以己之短攻人所长!
  2. Allan方差分析的是静态误差,陀螺必须在静基座下进行采集数据,否则要是动基座下采集的陀螺数据,分析的结果到底是陀螺误差还是基座运动特性?
  3. Allan方差计算中采用了“差分”计算操作,因此Allan方差无法分析陀螺随机常值漂移参数,若是将几个陀螺的Allan方差曲线同时绘制在一个双对数图上,曲线在左下角的对应的陀螺性能一般较好些,而右上角的差些。
  4. Allan方差可用于分析五种典型误差,但是某个陀螺中并不一定五种误差都有表现,不画Allan方差图/不看图而盲目的采用最小二乘回归方法强行地就想计算五个系数的人是典型的教条主义者,往往得不到好的结果。
  5. 如果画出的Allan方差图形不像典型的U型或V型图,不要感觉到诧异,也不要再试图用 Allan 方差去分析它(否则又是教条主义),没意义!此时Allan 分析失效,应试图从原始数据进行分析和解释。
  6. Allan 方差分析的一个用途是分析陀螺的性能或对比不同陀螺的性能,相比于其它分析法Allan法还是很好用的,比较全面。另一个用途是获得噪声参数,用于组合导航的 Kalman 滤波噪声参数设置。不是所有的 Allan 方差噪声系数都有用,主要有用的是角度随机游走系数(用于设置 Q 阵)和零偏不稳定性系数(用于设置一阶马氏过程的方差),其实这两个系数量级大小差不多就行了,太精细也没用,毕竟 Allan 方差分析得出的陀螺静态性能,鬼知道实际应用动态的时候陀螺误差会变化多大,存在数量级差别都很有可能。

Part.II 代码实现

下面使用 Python 对其计算方式进行了实现,函数如下

Chap.I 实现函数

def allan_cross(data,m):
    """
    Calculate Allan standard deviation, Overlapping grouping.
    
    > @param[in] data:          the data list, one line.
    > @param[in] m:             the length of a block.
    return: 
    < @param[out] sigma:        the allan standard deviation
    """
    N=len(data)
    m=math.floor(m)
    ylist=[]
    for i in range(N-m):
        j=i+m
        ave=np.mean(data[i:j])
        ylist.append(ave)
    sigma_sum=0
    for i in range(N-2*m):
        y1=ylist[i+m]
        y2=ylist[i]
        sigma_sum+=(y1-y2)**2
    sigma2=sigma_sum/(N-2*m+1)/2
    return math.sqrt(sigma2)


def allan_standard(data,m):
    """
    Calculate Allan standard deviation, standard grouping.
    
    > @param[in] data:          the data list, one line.
    > @param[in] m:             the length of a block.
    return: 
    < @param[out] sigma:        the allan standard deviation
    """
    N=len(data)
    m=math.floor(m)
    ylist=[]
    for i in range(0,N,m):
        j=i+m
        ave=np.mean(data[i:j])
        ylist.append(ave)
    sigma_sum=0
    n=len(ylist)
    for i in range(n-1):
        y1=ylist[i]
        y2=ylist[i+1]
        sigma_sum+=(y1-y2)**2
    sigma2=sigma_sum/(n-1)/2
    return math.sqrt(sigma2)

def allan_curve(Data,mode=0):
    """
    Get the Allan standard deviation curve.
    
    > @param[in] Data:          [time,data] the raw data
    > @param[in] mode:          0:standard; 1:cross
    return: 
    < @param[out] [Tlist,allanList]:    the result for plotting
    """
    x=Data[0]
    dx=x[1]-x[0]
    data=Data[1]
    N=len(data)
    mi=math.log10(N)
    allanList=[]
    Tlist=[]
    for i in range(math.floor(10*mi)):
        m=10**(0.1*i)
        if mode==0:
            allanVal=allan_standard(data,m)
        else:
            allanVal=allan_cross(data,m)
        Tlist.append(dx*math.floor(m))
        allanList.append(allanVal)
    return [Tlist,allanList]

Chap.II 调用示例

调用示例如下:

def allan_proc():
    """
    The main function to call allan function.
    """
    sdir=r'C:\Users\OHanlon\Desktop\temp'
    f1=sdir+'\\'+'allan.png'
    N=1000
    x=list(range(1,N+1))
    data=[random.random() for i in range(N)]
    Data=[x,data]
    [x,y]=allan_curve(Data,1)
    plt.loglog(x,y)
    plt.savefig(f1,dpi=300)
    return 0

在这里插入图片描述

积分多的朋友可以赏点积分:https://download.csdn.net/download/Gou_Hailong/86756427

Reference

  • 4
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: MATLAB提供了计算Allan方差的函数。Allan方差是一种用于分析频率数据的统计方法,在许多领域,如惯性导航、原子钟和语音处理等中被广泛使用。下面是使用MATLAB计算Allan方差的基本步骤: 1. 准备频率数据:首先,你需要准备好频率数据。这些数据可以是时间序列,表示系统的频率随时间的变化。确保数据的采样率是一致的,以便正确计算Allan方差。 2. 使用MATLAB函数计算Allan方差:一旦你准备好频率数据,可以使用MATLAB中的'rwvar'函数计算Allan方差。该函数的语法如下:allanvar = rwvar(frequencyData),其中frequencyData是包含频率数据的向量。 3. 分析结果:计算完成后,你将得到一个包含Allan方差结果的向量。你可以使用MATLAB中的其他函数和工具来可视化和进一步分析这些结果,以了解系统的特性和性能。 需要注意的是,计算Allan方差需要足够长的数据序列,以保证结果的可靠性。数据序列的长度应该是足够长,以包含系统的典型变化和波动。 ### 回答2: MATLAB是一种用于科学计算和数据分析的强大软件工具。在MATLAB中,可以使用allan方差来测量信号的随机漂移和噪声特性。 为了计算allan方差,我们可以按照以下步骤进行操作: 1. 首先,获取要分析的信号。这可以是任何一个在时间上变化的信号,如加速度、速度或任何其他物理量。假设我们有一个长度为N的信号向量X,其中包含了我们要进行allan方差分析的数据。 2. 在MATLAB中,有一个函数名为'variance',它可以用来计算任何一维信号的方差。我们可以使用这个函数来计算每个时间间隔的方差。 3. 下一步是计算allan方差。使用allan方差公式,我们可以通过将不同时间间隔的方差进行平均来得到allan方差。如果我们假设方差从最小时间间隔开始逐渐增加,那么allan方差可以通过以下公式来计算allan_variance = (1 / (2 * (N - 1) * τ^2)) * sum((X(τ) - X(2τ))^2) 其中N是信号向量的长度,τ是不同时间间隔的值。 4. 最后,我们可以使用MATLAB的绘图功能来可视化allan方差的结果。我们可以将allan方差作为时间间隔τ的函数绘制成图表,以便更好地理解信号的随机漂移和噪声特性。 总结起来,MATLAB可以通过计算方差和使用allan方差公式来分析信号的随机漂移和噪声特性。通过可视化allan方差的结果,我们可以更好地理解信号的特性,并作出相应的决策和调整。 ### 回答3: MATLAB可以通过使用allanvar函数来计算Allan方差Allan方差是用于衡量稳定性和噪声特性的一种方法,在信号处理和控制系统中广泛使用。 要计算Allan方差,首先需要将数据导入MATLAB环境。该数据可以是一个时间序列,其中包含随时间变化的测量值。然后,可以使用allanvar函数来计算Allan方差。 该函数需要一个输入参数,即数据向量。可以在MATLAB命令窗口中使用以下语法调用allanvar函数: allanvar(data) 这里,data是包含要计算Allan方差的数据的向量。函数将返回一个包含计算Allan方差值的结果向量。 可以使用这个结果向量来分析数据的噪声特性和稳定性。Allan方差通常以对数的形式表示,因此通常会对结果应用对数变换以获得更直观的结果。 MATLAB的allanvar函数还有其他可选的输入参数,可以用来指定Allan方差估计的类型和长度。可以通过查看MATLAB文档或使用help命令来了解更多关于该函数的详细信息。 通过使用MATLAB的allanvar函数,可以方便地计算和分析信号的Allan方差,从而更好地了解信号的噪声特性和稳定性。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流浪猪头拯救地球

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值