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 Inline Diff
sim_fft-adev/ad_cov.m
File was created | 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 |
sim_fft-adev/adev_averaging.m
File was created | 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 |
sim_fft-adev/adev_tf.m
File was created | 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; |
sim_fft-adev/psd_tf.m
File was created | 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 |