慣性組合導航原理—[4] 步長可變的快速Allan Variance:傳感器隨機誤差建模

所有程序代碼和數據已經上傳至Github:

https://github.com/yzmj0986/VariableStep-AllanVariance.git

基於步長可變序列的快速Allan方差算法見文章:Noise Identification and Analysis in MEMS Sensors Using an Optimized Variable Step Allan variance.

目錄導航:


應用背景:

       根據誤差特性將傳感器誤差分爲確定性誤差和隨機性誤差,確定性誤差,例如未對準誤差和比例因子不穩定,可以通過轉檯或者溫度試驗進行提前標定,並在傳感器內部進行修正。隨機誤差是指在輸出信號中混合的附加隨機噪聲,通常包括量化噪聲,角度隨機遊走,偏置不穩定性,速率隨機遊走和速率斜坡,可以通過在線補償消除。與功率譜密度(PSD)和自迴歸移動平均(ARMA)模型相比,Allan方差是識別和分析噪聲的最簡單的時域方法,從1998年起IEEE建議使用AV方法來確定光學陀螺儀和MEMS慣性傳感器的誤差。

Allan方差的計算原理:

        Allan方差的計算基於整羣抽樣技術。假設以採樣間隔T_{s}採集MEMS傳感器的信號,首先將N個採樣數據分成K簇,每個簇包括m個採樣數據,簇長度爲m的時間表示爲\tau =mT_{s}。那麼典型的Allan方差可以基於均方誤差表示爲:

                                                                     

        其中<·>表示求平均操作,通過平均歸一化頻率偏差\omega (t)來計算\varpi (t)

                                                                                

        但其實大多數信號都是在相位和頻率偏差的離散值(也就是離散信號),假設θ是相位偏差,平均頻率偏差\omega (t)可以定義爲:

                                                                             

        因此,離散時間信號的Allan方差可以改寫爲:

                                                              

        其中,\tau _{0}是離散採樣時間, \theta (n) 是n時刻時的相位偏差,且n=t/\tau _{0} 。離散時間採樣間隔爲k=\tau /\tau _{0}=1,2,...,N_{max}

傳感器隨機誤差建模

       下圖爲MEMS傳感器中的主要誤差分類。對於零偏、刻度因子誤差等靜態誤差,可通過卡爾曼濾波、遞歸最小二乘等方法實現在線補償。但在線濾波器無法對具有隨機特性的噪聲進行有效估計,因此應使用Allan方差進行各項隨機誤差辨識,並通過擬合求出各項噪聲的係數,實現對隨機誤差的建模過程。由於Allan方差是MEMS傳感器噪聲穩定性的表徵,因此Allan方差與隨機過程PSD的積分關係爲:

                                                                         

       通過替換上式的積分計算可以導出Allan方差作爲典型隨機誤差的時間函數,通過 \sigma _{\omega }(\tau )t的對數圖,能夠清楚表徵MEMS傳感器中的隨機誤差,如下圖所示。其中\sigma _{\omega }(\tau )是Allan方差的平方根,也稱爲Allan標準偏差。

                                                  

       根據每種噪聲的Allan方差及其斜率係數,假設各種誤差來源統計獨立,總的Allan方差可以表示爲各誤差的和:

                                                             

程序代碼:

%Allan Variance的原始實現,並設置了可變的步長d,實現對求取時間的控制。
%**********author:zytjasper 2018/12/10.************%
%Reference:Noise Identification and Analysis in MEMS Sensors Using an  Optimized Variable Step Allan variance 
clc;
clear all;
tic;
data = xlsread('data.xlsx');
X = data(1:720000,1)*3600;   %讀取數據,以陀螺儀某一軸爲例

Ts = 0.01; %採樣時間
[N,M] = size(X);
N_max = floor(N/3);%(N/3)
T = zeros(N_max,10);
R = zeros(N_max,10);

for d = 1  %設置迭代的步長爲d,當d=1時爲傳統的Allan方差
    Allan = zeros(N_max,2);
    Cluster_mean = zeros(N,1);
    for n = 1:d:N_max    %每一簇的簇長
    K = floor(N/n);
    for k = 1:K
        Cluster_mean(k,1) = mean(X((n*(k-1)+1):(n*k),1));
    end
    Cluster_diff = diff(Cluster_mean(1:K),1);
    Allan(n,1) = n*Ts;  %Time tau
    Allan(n,2) = sum((Cluster_diff.^2))/(2*(K-1));
    end
    Allan(any(Allan,2)==0,:)=[]
    TUP = ceil(N_max/d);
    RUP = ceil(N_max/d);
    T(1:TUP,d)=Allan(:,1);
    R(1:RUP,d)=Allan(:,2);
end
x1 = T(:,1);
y1 = R(:,1);

a= [1 2 3 4 5];%函數擬合過程
a(1:5)=lsqcurvefit(@test,a,x1,y1);
f=a(1)*x1.^(-2)+a(2)*x1.^(-1)+a(3)*x1.^(0)+a(4)*x1.^(1)+a(5)*x1.^(2);

figure(1)=figure('color',[1 1 1]);
loglog(T(:,1),R(:,1),'color',[255/255,215/255,0/255]);   
hold on;
loglog(x1, f,'r','LineWidth',1.3);
hold on;
xlabel('Cluster Time (sec)'); 
ylabel('Allan Deviation (deg/h)');
grid on;
legend('   Step size=1','   Step size=2','   Step size=3','   Fitting Curve')
toc; 

test擬合程序:

function f=test(a,x)
    f=a(1)*x.^(-2)+a(2)*x.^(-1)+a(3)*x.^(0)+a(4)*x.^(1)+a(5)*x.^(2);
end

運行結果:(別介意標註,紅線應該是擬合曲線)

運行時間會在1K-1.2K秒左右,這是正常範圍,Allan方差的迭代原理就是很慢很慢很慢,我在Reference中做了加速的優化,終稿刊號出來了我就會附上原文的。【2019.11.20更新,文章已經貼出,改變步長後的Allan方差速度有大幅度的提升】

                                    

改進思路

給採樣序列m中加入可變步長(等比等差都可以,文中用的是等差),即:

步長可變的Allan方差算法原理示意圖如下:

分別將步長設置爲1,5,10,15,20,25,30,35,40,並將誤差擬合曲線疊加可得到下面的誤差辨識結果:

該方法顯著的減少了誤差建模的計算量,在確保誤差估計精度的同時實現了對傳感器時變穩定性的快速跟蹤。此外該步長可變序列的思路還可以應用在DAVAR方法中,具體過程見論文。

只是一篇普通的EI論文,不足之處歡迎各位學習與指正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章