Commit 0cbce28efb0bcd6eb69b658f0a0a8ff732e12456

Authored by bmarechal
1 parent f893fd827f
Exists in master

sim_fft-adev: add octave simulations about fft-adev

Showing 4 changed files with 174 additions and 0 deletions Side-by-side Diff

sim_fft-adev/ad_cov.m
  1 +clear all
  2 +close all
  3 +clc
  4 +
  5 +N = 1e5;
  6 +Ts = 1;
  7 +
  8 +dc.rate = Ts;
  9 +d1.rate = Ts;
  10 +d2.rate = Ts;
  11 +dd.rate = Ts;
  12 +
  13 +r = 10;
  14 +
  15 +com = noise(N, 1, 'brown');
  16 +n1 = r.*noise(N, 1, 'brown');
  17 +n2 = r.*noise(N, 1, 'brown');
  18 +
  19 +dc.freq = com;
  20 +d1.freq = com.+n1;
  21 +d2.freq = com.+n2;
  22 +dd.freq = d1.freq;
  23 +dd.freq2 = d2.freq;
  24 +
  25 +[ad_dc, S, err_dc, tau_dc] = allan(dc,2.^[0:20],'dc',0);
  26 +[ad_d1, S, err_d1, tau_d1] = allan(d1,2.^[0:20],'d1',0);
  27 +[ad_d2, S, err_d2, tau_d2] = allan(d2,2.^[0:20],'d2',0);
  28 +[ad_dd, S, err_dd, tau_dd] = allan_cov(dd,2.^[0:20],'dd',0);
  29 +
  30 +figure
  31 +hold on
  32 +loglogerr(tau_dc, ad_dc, err_dc, 'mo')
  33 +loglogerr(tau_d1, ad_d1, err_d1, 'b')
  34 +loglogerr(tau_d2, ad_d2, err_d2, 'r')
  35 +loglogerr(tau_dd, ad_dd, err_dd, 'k')
  36 +grid on
  37 +
  38 +ad_dd./ad_dc
sim_fft-adev/adev_averaging.m
  1 +clc
  2 +close all
  3 +clear all
  4 +
  5 +Ts = 0.2;
  6 +N = 1e6;
  7 +D = 5;
  8 +
  9 +data_raw.rate = 1/Ts;
  10 +data_raw.freq = 1/2.*noise(N, 1, 'white') + 1.*noise(N, 1, 'pink') + 1.*noise(N, 1, 'brown') + 0e-8.*[0:N-1]';
  11 +t_raw = [0:length(data_raw.freq)-1];
  12 +[ad_raw, S, err_raw, tau_raw] = allan(data_raw, 2.^[0:20].*Ts, 'raw',0);
  13 +
  14 +data_avg.rate = 1/(Ts*D);
  15 +data_avg.freq = mean(reshape(data_raw.freq', [D, N/D]))';
  16 +t_avg = D.*[1:length(data_avg.freq)];
  17 +[ad_avg, S, err_avg, tau_avg] = allan(data_avg, 2.^[0:20].*Ts*D, 'avg',0);
  18 +
  19 +data_decim.rate = 1/(Ts*D);
  20 +data_decim.freq = reshape(data_raw.freq', [D, N/D])(1,:)';
  21 +t_decim = D.*[0:length(data_decim.freq)-1];
  22 +[ad_decim, S, err_decim, tau_decim] = allan(data_decim, 2.^[0:20].*Ts*D, 'decim',0);
  23 +
  24 +figure
  25 +hold on
  26 +loglogerr(tau_raw, ad_raw, err_raw, 'b')
  27 +loglogerr(tau_decim, ad_decim, err_decim, 'm')
  28 +loglogerr(tau_avg, ad_avg, err_avg, 'r')
  29 +grid on
  30 +
  31 +figure
  32 +hold on
  33 +plot(t_raw, data_raw.freq, 'b')
  34 +plot(t_decim, data_decim.freq, 'm')
  35 +plot(t_avg, data_avg.freq, 'r')
  36 +grid on
sim_fft-adev/adev_tf.m
  1 +clc
  2 +close all
  3 +clear all
  4 +
  5 +%%
  6 +
  7 +N = 1e5;
  8 +G = tf(1, [1e3,1]);
  9 +
  10 +%%
  11 +
  12 +data_white.rate = 1;
  13 +data_white.freq = noise(N, 1, 'white');
  14 +[ad_white, S, err_white, tau] = allan(data_white, 2.^[0:20], 'white noise',0);
  15 +
  16 +data_white_f.rate = 1;
  17 +data_white_f.freq = lsim(G, data_white.freq, 1:length(data_white.freq));
  18 +[ad_white_f, S, err_white_f, tau] = allan(data_white_f, 2.^[0:20], 'white noise filtered',0);
  19 +
  20 +%%
  21 +
  22 +data_pink.rate = 1;
  23 +data_pink.freq = noise(N, 1, 'pink');
  24 +[ad_pink, S, err_pink, tau] = allan(data_pink, 2.^[0:20], 'pink noise',0);
  25 +
  26 +data_pink_f.rate = 1;
  27 +data_pink_f.freq = lsim(G, data_pink.freq, 1:length(data_pink.freq));
  28 +[ad_pink_f, S, err_pink_f, tau] = allan(data_pink_f, 2.^[0:20], 'pink noise filtered',0);
  29 +
  30 +%%
  31 +
  32 +data_brown.rate = 1;
  33 +data_brown.freq = noise(N, 1, 'brown');
  34 +[ad_brown, S, err_brown, tau] = allan(data_brown, 2.^[0:20], 'brown noise',0);
  35 +
  36 +data_brown_f.rate = 1;
  37 +data_brown_f.freq = lsim(G, data_brown.freq, 1:length(data_brown.freq));
  38 +[ad_brown_f, S, err_brown_f, tau] = allan(data_brown_f, 2.^[0:20], 'brown noise filtered',0);
  39 +
  40 +%%
  41 +
  42 +data_red.rate = 1;
  43 +data_red.freq = noise(N, 1, 'red');
  44 +[ad_red, S, err_red, tau] = allan(data_red, 2.^[0:20], 'red noise',0);
  45 +
  46 +data_red_f.rate = 1;
  47 +data_red_f.freq = lsim(G, data_red.freq, 1:length(data_red.freq));
  48 +[ad_red_f, S, err_red_f, tau] = allan(data_red_f, 2.^[0:20], 'red noise filtered',0);
  49 +
  50 +%%
  51 +
  52 +figure
  53 +hold on
  54 +loglogerr(tau, ad_white, err_white, 'b')
  55 +loglogerr(tau, ad_white_f, err_white_f, 'r')
  56 +loglogerr(tau, ad_pink, err_pink, 'b-o')
  57 +loglogerr(tau, ad_pink_f, err_pink_f, 'r-o')
  58 +loglogerr(tau, ad_brown, err_brown, 'b-d')
  59 +loglogerr(tau, ad_brown_f, err_brown_f, 'r-d')
  60 +loglogerr(tau, ad_red, err_red, 'b-*')
  61 +loglogerr(tau, ad_red_f, err_red_f, 'r-*')
  62 +grid on
sim_fft-adev/psd_tf.m
  1 +clc
  2 +close all
  3 +clear all
  4 +
  5 +%%
  6 +N = 1e7;
  7 +Fs = 1000;
  8 +%%
  9 +
  10 +data_white.rate = Fs;
  11 +data_white.freq = noise(N, 1, 'white');
  12 +[ad_white, S, err_white, tau] = allan(data_white, 2.^[0:nextpow2(length(data_white.freq))]./Fs, 'white noise',0);
  13 +[p_white, f_white] = pwelch(data_white.freq, [], [], [], data_white.rate, 'onesided');
  14 +
  15 +data_pink.rate = Fs;
  16 +data_pink.freq = noise(N, 1, 'pink');
  17 +[ad_pink, S, err_pink, tau] = allan(data_pink, 2.^[0:nextpow2(length(data_pink.freq))]./Fs, 'pink noise',0);
  18 +[p_pink, f_pink] = pwelch(data_pink.freq, [], [], [], data_pink.rate, 'onesided');
  19 +
  20 +
  21 +data_brown.rate = Fs;
  22 +data_brown.freq = noise(N, 1, 'brown');
  23 +[ad_brown, S, err_brown, tau] = allan(data_brown, 2.^[0:nextpow2(length(data_brown.freq))]./Fs, 'brown noise',0);
  24 +[p_brown, f_brown] = pwelch(data_brown.freq, [], [], [], data_brown.rate, 'onesided');
  25 +
  26 +figure
  27 +hold on
  28 +loglogerr(tau, ad_white, err_white, 'b')
  29 +loglogerr(tau, ad_pink, err_pink, 'm')
  30 +loglogerr(tau, ad_brown, err_brown, 'k')
  31 +grid on
  32 +
  33 +figure
  34 +hold on
  35 +semilogx(f_white, 10*log10(p_white), 'b')
  36 +semilogx(f_pink, 10*log10(p_pink), 'm')
  37 +semilogx(f_brown, 10*log10(p_brown), 'k')
  38 +grid on