Mercurial > hg > ltpda
comparison m-toolbox/test/MDC2/test_mdc2_noisegen_accuracy_v2.m @ 0:f0afece42f48
Import.
author | Daniele Nicolodi <nicolodi@science.unitn.it> |
---|---|
date | Wed, 23 Nov 2011 19:22:13 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:f0afece42f48 |
---|---|
1 % A test script for to check the accuracy of the noise generation procedure | |
2 % for the MDC2 | |
3 % | |
4 % | |
5 % L. Ferraioli 04-02-2009 | |
6 % | |
7 % $Id: test_mdc2_noisegen_accuracy_v2.m,v 1.3 2009/04/20 14:34:12 luigi Exp $ | |
8 % | |
9 | |
10 %% General use variables and vectors | |
11 | |
12 fs = 1; | |
13 f = logspace(-6,log10(fs/2),300); | |
14 f = f.'; | |
15 Nsecs = 1e6; % number of seconds | |
16 Nfft1 = 1e5; | |
17 plsp1 = plist('Nfft',Nfft1,'order',2); | |
18 Nfft2 = 5e3; | |
19 plsp2 = plist('Nfft',Nfft2); | |
20 | |
21 %% MDC2 Models | |
22 | |
23 b = ao(plist('built-in','mdc2r2_fd_ltpnoise','f',f)); | |
24 | |
25 %% | |
26 | |
27 iplot(b) | |
28 | |
29 %% | |
30 | |
31 CSD = [b(1) b(2);conj(b(2)) b(3)]; | |
32 MSC = b(2).*conj(b(2))./(b(1).*b(3)); | |
33 | |
34 %% some ploting | |
35 | |
36 iplot(CSD(1,1),CSD(2,2),MSC) | |
37 iplot(CSD(1,1),CSD(2,2),CSD(1,2),CSD(2,1)) | |
38 | |
39 %% Make white noise | |
40 | |
41 a1 = ao(plist('tsfcn', 'randn(size(t))', 'fs', fs, 'nsecs', Nsecs, 'yunits', 'm')); | |
42 a2 = ao(plist('tsfcn', 'randn(size(t))', 'fs', fs, 'nsecs', Nsecs, 'yunits', 'm')); | |
43 | |
44 %% Noise generation | |
45 | |
46 plng = plist(... | |
47 'csd11', CSD(1,1), ... | |
48 'csd12', CSD(1,2), ... | |
49 'csd21', CSD(2,1), ... | |
50 'csd22', CSD(2,2), ... | |
51 'MaxIter', 80, ... | |
52 'PoleType', 2, ... | |
53 'MinOrder', 35, ... | |
54 'MaxOrder', 40, ... | |
55 'Weights', 2, ... | |
56 'Plot', false,... | |
57 'MSEVARTOL', 1e-2,... | |
58 'FITTOL', 1e-5,... | |
59 'UseSym', 0,... | |
60 'Disp', false); | |
61 | |
62 [ac1,ac2] = noisegen2D(a1,a2, plng); | |
63 | |
64 % extracting filters | |
65 h11 = ac1.procinfo.find('Filt11'); | |
66 h12 = ac1.procinfo.find('Filt12'); | |
67 h21 = ac2.procinfo.find('Filt21'); | |
68 h22 = ac2.procinfo.find('Filt22'); | |
69 | |
70 %% Find stationary filter state | |
71 | |
72 Nrun = 20; | |
73 | |
74 for jj = 1:Nrun % filter state evolution | |
75 disp(num2str(jj)) | |
76 ac11 = filter(a1,h11); | |
77 h11 = ac11.procinfo.find('Filters'); % prooagate histout | |
78 ac12 = filter(a2,h12); | |
79 h12 = ac12.procinfo.find('Filters'); | |
80 ac21 = filter(a1,h21); | |
81 h21 = ac21.procinfo.find('Filters'); | |
82 ac22 = filter(a2,h22); | |
83 h22 = ac22.procinfo.find('Filters'); | |
84 end | |
85 | |
86 % re-define ac1 and ac2 | |
87 ac1 = ac11 + ac12; | |
88 ac1.setName; | |
89 ac2 = ac21 + ac22; | |
90 ac2.setName; | |
91 | |
92 %% spectra calculation | |
93 | |
94 acxx1 = psd(ac1,plsp1); | |
95 acxx2 = psd(ac2,plsp1); | |
96 acxx12 = cohere(ac1,ac2,plsp2); | |
97 | |
98 % %% | |
99 % iplot(CSD11,acxx1,CSD22,acxx2) | |
100 % iplot(MSC,acxx12) | |
101 % | |
102 % %% | |
103 | |
104 % get dofs | |
105 dof1 = getdof(acxx1,plist('method','psd')); | |
106 dof2 = getdof(acxx2,plist('method','psd')); | |
107 dof12 = getdof(acxx12,plist('method','mscohere')); | |
108 | |
109 % Interpolate theorethical data | |
110 CSD11 = interp(CSD(1,1),plist('vertices',acxx1.data.x)); | |
111 CSD22 = interp(CSD(2,2),plist('vertices',acxx2.data.x)); | |
112 MSC = interp(MSC,plist('vertices',acxx12.data.x)); | |
113 | |
114 % getting variance | |
115 [lw1,up1,sig1] = confint(acxx1,plist('method','psd')); | |
116 [lw2,up2,sig2] = confint(acxx2,plist('method','psd')); | |
117 [lw12,up12,sig12] = confint(acxx12,plist('method','mscohere')); | |
118 | |
119 % set limits of reliable regions | |
120 [a,b] = size(acxx12.x); | |
121 la = round(a*0.0212); | |
122 | |
123 % chi square | |
124 k1 = acxx1 - CSD11; | |
125 k1 = k1.^2; | |
126 k1 = k1./sig1; | |
127 k1 = split(k1,plist('split_type','samples','samples',[la a])); | |
128 chi1 = sum(k1)./length(k1.data.x); | |
129 | |
130 k2 = acxx2 - CSD22; | |
131 k2 = k2.^2; | |
132 k2 = k2./sig2; | |
133 k2 = split(k2,plist('split_type','samples','samples',[la a])); | |
134 chi2 = sum(k2)./length(k2.data.x); | |
135 | |
136 k12 = acxx12 - MSC; | |
137 k12= k12.^2; | |
138 k12 = k12./sig12; | |
139 k12 = split(k12,plist('split_type','samples','samples',[la a])); | |
140 chi12 = sum(k12)./length(k12.data.x); | |
141 | |
142 proc1 = acxx1.procinfo; | |
143 proc2 = acxx2.procinfo; | |
144 proc12 = acxx12.procinfo; | |
145 | |
146 %% | |
147 | |
148 iplot(CSD11,acxx1,lw1,up1) | |
149 iplot(CSD22,acxx2,lw2,up2) | |
150 iplot(MSC,acxx12,lw12,up12) | |
151 | |
152 %% Running the loop | |
153 | |
154 N = 100; | |
155 | |
156 for ii = 2:N | |
157 disp(num2str(ii)) | |
158 | |
159 a1 = ao(plist('tsfcn', 'randn(size(t))', 'fs', fs, 'nsecs', Nsecs, 'yunits', 'm')); | |
160 a2 = ao(plist('tsfcn', 'randn(size(t))', 'fs', fs, 'nsecs', Nsecs, 'yunits', 'm')); | |
161 | |
162 x11 = filter(a1,h11); | |
163 x12 = filter(a2,h12); | |
164 x21 = filter(a1,h21); | |
165 x22 = filter(a2,h22); | |
166 | |
167 x1 = x11 + x12; | |
168 x2 = x21 + x22; | |
169 | |
170 % sectra | |
171 xx1 = psd(x1,plsp1); | |
172 xx2 = psd(x2,plsp1); | |
173 xx12 = cohere(x1,x2,plsp2); | |
174 % xx12 = xx12(1,2); | |
175 | |
176 % sum spectra | |
177 acxx1 = acxx1 + xx1; | |
178 acxx2 = acxx2 + xx2; | |
179 acxx12 = acxx12 + xx12; | |
180 | |
181 % getting variance | |
182 [lw,up,sig1] = confint(xx1,plist('method','psd')); | |
183 [lw,up,sig2] = confint(xx2,plist('method','psd')); | |
184 [lw,up,sig12] = confint(xx12,plist('method','mscohere')); | |
185 | |
186 % chi square | |
187 k1 = xx1 - CSD11; | |
188 k1 = k1.^2; | |
189 k1 = k1./sig1; | |
190 k1 = split(k1,plist('split_type','samples','samples',[la a])); | |
191 xc1 = sum(k1)./length(k1.data.x); | |
192 | |
193 k2 = xx2 - CSD22; | |
194 k2 = k2.^2; | |
195 k2 = k2./sig2; | |
196 k2 = split(k2,plist('split_type','samples','samples',[la a])); | |
197 xc2 = sum(k2)./length(k2.data.x); | |
198 | |
199 k12 = xx12 - MSC; | |
200 k12= k12.^2; | |
201 k12 = k12./sig12; | |
202 k12 = split(k12,plist('split_type','samples','samples',[la a])); | |
203 xc12 = sum(k12)./length(k12.data.x); | |
204 | |
205 % adding chisquare | |
206 chi1 = chi1 + xc1; | |
207 chi2 = chi2 + xc2; | |
208 chi12 = chi12 + xc12; | |
209 | |
210 end | |
211 | |
212 %% Do Averages | |
213 | |
214 % do average | |
215 acxx1 = acxx1./N; | |
216 acxx1.setName; | |
217 acxx2 = acxx2./N; | |
218 acxx2.setName; | |
219 acxx12 = acxx12./N; | |
220 acxx12.setName; | |
221 | |
222 % average chi square | |
223 chi1 = chi1./N; | |
224 chi2 = chi2./N; | |
225 chi12 = chi12./N; | |
226 | |
227 % dofs for the averages | |
228 adof1 = dof1.*N; | |
229 adof2 = dof2.*N; | |
230 adof12 = dof12.*N; | |
231 | |
232 % get confidence bounds for the 'true' spactra | |
233 [lw1,up1,sig1] = confint(acxx1,plist('method','psd','dof',adof1)); | |
234 [lw2,up2,sig2] = confint(acxx2,plist('method','psd','dof',adof2)); | |
235 [lw12,up12,sig12] = confint(acxx12,plist('method','mscohere','dof',adof12)); | |
236 | |
237 %% plotting | |
238 | |
239 iplot(CSD(1,1),acxx1) | |
240 iplot(CSD(2,2),acxx2) | |
241 iplot(MSC,acxx12) | |
242 | |
243 iplot(CSD(1,1),lw1,up1) | |
244 iplot(CSD(2,2),lw2,up2) | |
245 iplot(MSC,lw12,up12) | |
246 | |
247 %% plotting conflevels 1 | |
248 | |
249 x = lw1.data.x; | |
250 y1 = lw1.data.y; | |
251 y2 = up1.data.y; | |
252 | |
253 figure | |
254 y = [y1 (y2-y1)]; % y1 and y2 are columns | |
255 ha = area(x, y); | |
256 set(ha(1), 'FaceColor', 'none') % this makes the bottom area invisible | |
257 set(ha(2), 'FaceColor', 'r') | |
258 set(ha, 'LineStyle', 'none') | |
259 grid on | |
260 | |
261 % plot the line edges | |
262 hold on | |
263 hb = plot(x, y1, 'LineWidth', 1, 'Color', 'r'); | |
264 hc = plot(x, y2, 'LineWidth', 1, 'Color', 'r'); | |
265 hd = plot(CSD(1,1).data.x, CSD(1,1).data.y); | |
266 | |
267 set(gca,'xscale','log','yscale','log'); | |
268 % set(gca,'Layer','top') | |
269 ylabel('Power Spectrum [m^{2} / Hz]'); | |
270 xlabel('Frequency [Hz]'); | |
271 legend([hd hb],{'Model CSD(1,1)','95% Conf. level'}); | |
272 | |
273 %% plotting conflevels 2 | |
274 | |
275 x = lw2.data.x; | |
276 y1 = lw2.data.y; | |
277 y2 = up2.data.y; | |
278 | |
279 figure | |
280 y = [y1 (y2-y1)]; % y1 and y2 are columns | |
281 ha = area(x, y); | |
282 set(ha(1), 'FaceColor', 'none') % this makes the bottom area invisible | |
283 set(ha(2), 'FaceColor', 'r') | |
284 set(ha, 'LineStyle', 'none') | |
285 grid on | |
286 | |
287 % plot the line edges | |
288 hold on | |
289 hb = plot(x, y1, 'LineWidth', 1, 'Color', 'r'); | |
290 hc = plot(x, y2, 'LineWidth', 1, 'Color', 'r'); | |
291 hd = plot(CSD(2,2).data.x, CSD(2,2).data.y); | |
292 | |
293 set(gca,'xscale','log','yscale','log'); | |
294 % set(gca,'Layer','top') | |
295 ylabel('Power Spectrum [m^{2} / Hz]'); | |
296 xlabel('Frequency [Hz]'); | |
297 legend([hd hb],{'Model CSD(2,2)','95% Conf. level'}); | |
298 | |
299 %% plotting conflevels 3 | |
300 | |
301 x = lw12.data.x; | |
302 y1 = lw12.data.y; | |
303 y2 = up12.data.y; | |
304 | |
305 figure | |
306 y = [y1 (y2-y1)]; % y1 and y2 are columns | |
307 ha = area(x, y); | |
308 set(ha(1), 'FaceColor', 'none') % this makes the bottom area invisible | |
309 set(ha(2), 'FaceColor', 'r') | |
310 set(ha, 'LineStyle', 'none') | |
311 grid on | |
312 | |
313 % plot the line edges | |
314 hold on | |
315 hb = plot(x, y1, 'LineWidth', 1, 'Color', 'r'); | |
316 hc = plot(x, y2, 'LineWidth', 1, 'Color', 'r'); | |
317 hd = plot(MSC.data.x, MSC.data.y); | |
318 | |
319 set(gca,'yscale','log'); | |
320 % set(gca,'Layer','top') | |
321 ylabel('Magnitude Square Coherence'); | |
322 xlabel('Frequency [Hz]'); | |
323 legend([hd hb],{'Model MSC','95% Conf. level'}); |