Commit 0cbce28efb0bcd6eb69b658f0a0a8ff732e12456
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 |