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 |