How to compute Allan Variance without allanvar?
Show older comments
Hi,
I would like to compute the Allan Variance to study a signal but without the existing Matlab function. Actually I wanted to see how matlab computes it but we don't have access to it (*.p file, btw I wonder why this function is not accessible?).
Actually I have a good article ( Techniques Ingénieur, VERNOTTE, R681) Stabilité temporelle et fréquentielle des oscillateurs : outils d’analyse that gives all the basics to compute by hand the Allan Variance.
I tried to reproduce the result displayed at the allanvar matlab page but I didn't manage. I don't have the trend as the figure displayed. Can anyone take a look at my code? Maybe i mistyped the formula? My
function is:
function out = AllanVar(sig,n,dt)
y1 = sum(sig(1:1+n));
y2 = sum(sig(2:2+n));
out = (y2-y1)^2/2/(n*dt)^2;
end
And to remove the noise we can average it over multiple draws with:
numSamples = 1e6;
Pow = nextpow2(numSamples)-1;
N = 100;
m = 2.^(1:Pow);
aVar = zeros(N,length(m));
for k = 1:N
Fs = 100;
nStd = 1e-3;
kStd = 1e-7;
nNoise = nStd.*randn(numSamples,1);
kNoise = kStd.*cumsum(randn(numSamples,1));
omega = nNoise+kNoise;
for j = 1:length(m)
aVar(k,j) = AllanVar(omega,m(j),1/Fs);
end
end
tau = m*dt;
figure
loglog(tau,sqrt(mean(aVar)),'k')
But I get a straight line only...
Attached an output figure. Thanks in advance! :)
Accepted Answer
More Answers (0)
Categories
Find more on MATLAB in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!