admin 发表于 2022-9-10 21:32:07

allon方差计算方法

function =allan_cal(N,dt)
%% 计算Allan方差 %%%%%%%%%%%%%%%%%%%%%
n=length(N);            %%%%%N:样本(浓度);n:样本数量
for j=2:length(N)         %%%%%j:分组数(从2组--n组)
    A(j)=0;               %%%%%每组的Allan方差初值为0
    for k=1:j         %%%%%每组平均值的计算
      y(k)=0;         %%%%%每组平均值初值为0
      for p=1:1:fix(n/j)                           %%%%%每组的样本数量为 fix(n/j)
            y(k)=y(k)+N(p+fix(n/j)*(k-1));         %%%%%每组加和的计算
      end
      y(k)=y(k)/fix(n/j);                        %%%%%每组平均值的计算
      if k>1
            A(j)=A(j)+1/(j-1)/2*(y(k)-y(k-1))^2;   %%%%%每组Allan方差的计算
      end
    end
end

m=2:length(N);                  %%%%%分组数
T1=fix(n./m)*dt;                %%%%%每组的样本数量为fix(n./m),间隔率为dt,则积分时间为T1;

for j=1:length(A)-1
    Allan1(j)=sqrt(A(j+1));      %%%%%每个积分时间所对应的Allan方差
end

dT=diff(T1);
ndT=find(dT~=0);
T=T1(ndT);
Allan=Allan1(ndT);

subplot(211)
loglog(T,Allan);                %%%%%画对数坐标图
subplot(212)
plot(N)
   
%% 验证浓度分布是否满足Gauss分布 %%%%%%%%%%%%%%%%%%%%%
n1=0;n2=0;n3=0;n4=0;n5=0;
dN=(max(N)-min(N))/5;
for j=1:length(N)
if N(j)<min(N)+dN
    n1=n1+1;
end
if N(j)>=min(N)+dN && N(j)<min(N)+2*dN
    n2=n2+1;
end
if N(j)>=min(N)+2*dN && N(j)<min(N)+3*dN
    n3=n3+1;
end
if N(j)>=min(N)+3*dN && N(j)<min(N)+4*dN
    n4=n4+1;
end
if N(j)>=min(N)+4*dN && N(j)<max(N)
    n5=n5+1;
end
end
nn=;
x=;
bar(x,nn);
end
页: [1]
查看完整版本: allon方差计算方法