Mercurial > hg > ltpda
diff m-toolbox/test/MDC2/test_mdc2_filtimpresp.m @ 0:f0afece42f48
Import.
author | Daniele Nicolodi <nicolodi@science.unitn.it> |
---|---|
date | Wed, 23 Nov 2011 19:22:13 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/m-toolbox/test/MDC2/test_mdc2_filtimpresp.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,215 @@ +% A test script for to check the filters impulse response +% +% +% L. Ferraioli 04-02-2009 +% +% $Id: test_mdc2_filtimpresp.m,v 1.3 2009/04/20 14:34:12 luigi Exp $ +% + +%% General use variables and vectors + +fs = 1; +f = logspace(-7,log10(fs/2),500); +f = f.'; +Nsecs = 1e6; % number of seconds + +%% MDC2 Models + +b = ao(plist('built-in','mdc2r2_fd_ltpnoise','f',f)); + +%% + +iplot(b) + +%% + +CSD = [b(1) b(2);conj(b(2)) b(3)]; +MSC = b(2).*conj(b(2))./(b(1).*b(3)); + +%% some ploting + +iplot(CSD(1,1),CSD(2,2),MSC) +iplot(CSD(1,1),CSD(2,2),CSD(1,2),CSD(2,1)) + +%% Make white noise + +a1 = ao(plist('tsfcn', 'randn(size(t))', 'fs', fs, 'nsecs', Nsecs, 'yunits', 'm')); +a2 = ao(plist('tsfcn', 'randn(size(t))', 'fs', fs, 'nsecs', Nsecs, 'yunits', 'm')); + +%% Noise generation + +plng = plist(... + 'csd11', CSD(1,1), ... + 'csd12', CSD(1,2), ... + 'csd21', CSD(2,1), ... + 'csd22', CSD(2,2), ... + 'MaxIter', 90, ... + 'PoleType', 2, ... + 'MinOrder', 35, ... + 'MaxOrder', 50, ... + 'Weights', 2, ... + 'Plot', false,... + 'MSEVARTOL', 1e-2,... + 'FITTOL', 1e-5,... + 'UseSym', 0,... + 'Disp', false); + +[ac1,ac2] = noisegen2D(a1,a2, plng); + +% extracting filters +h11 = ac1.procinfo.find('Filt11'); +h12 = ac1.procinfo.find('Filt12'); +h21 = ac2.procinfo.find('Filt21'); +h22 = ac2.procinfo.find('Filt22'); + +%% Calculate Impulse response with LTPDA filter + +% LTPDA filter initialize the filters before the filtering process + +imp = zeros(Nsecs,1); +imp(1,1) = 1; +imp = tsdata(imp,fs); +imp = ao(imp); +imp.setYunits('m'); +imp.setXunits('s'); + +irh11 = filter(imp,h11); +irh12 = filter(imp,h12); +irh21 = filter(imp,h21); +irh22 = filter(imp,h22); + +irh11.setName; +irh12.setName; +irh21.setName; +irh22.setName; + +% iplot(irh11,irh12,irh21,irh22) +%% Plot impulse response + +iplot(irh11,plist('Yscales','linear')) +iplot(irh12,plist('Yscales','linear')) +iplot(irh21,plist('Yscales','linear')) +iplot(irh22,plist('Yscales','linear')) + +%% Impluse response with Matlab filter + +% No filter initialization + +idat = [1; zeros(999999,1)]; + +Nfilt11 = numel(h11); +num11 = h11(1).a; +den11 = h11(1).b; +irh11 = filter(num11,den11,idat); + +for ii = 2:Nfilt11 + num11 = h11(ii).a; + den11 = h11(ii).b; + todat = filter(num11,den11,idat); + irh11 = irh11 + todat; +end + +Nfilt12 = numel(h12); +num12 = h12(1).a; +den12 = h12(1).b; +irh12 = filter(num12,den12,idat); + +for ii = 2:Nfilt12 + num12 = h12(ii).a; + den12 = h12(ii).b; + todat = filter(num12,den12,idat); + irh12 = irh12 + todat; +end + +Nfilt21 = numel(h21); +num21 = h21(1).a; +den21 = h21(1).b; +irh21 = filter(num21,den21,idat); + +for ii = 2:Nfilt21 + num21 = h21(ii).a; + den21 = h21(ii).b; + todat = filter(num21,den21,idat); + irh21 = irh21 + todat; +end + +Nfilt22 = numel(h22); +num22 = h22(1).a; +den22 = h22(1).b; +irh22 = filter(num22,den22,idat); + +for ii = 2:Nfilt22 + num22 = h22(ii).a; + den22 = h22(ii).b; + todat = filter(num22,den22,idat); + irh22 = irh22 + todat; +end + +%% + +figure +plot(irh11) + +figure +plot(irh12) + +figure +plot(irh21) + +figure +plot(irh22) + +%% Filter state + +ac11 = filter(a1,h11); +h11 = ac11.procinfo.find('Filters'); % prooagate histout +ac12 = filter(a2,h12); +h12 = ac12.procinfo.find('Filters'); +ac21 = filter(a1,h21); +h21 = ac21.procinfo.find('Filters'); +ac22 = filter(a2,h22); +h22 = ac22.procinfo.find('Filters'); + +iplot(ac11) +iplot(ac12) +iplot(ac21) +iplot(ac22) + +%% Filter state evolution + +Nrun = 20; + +for jj = 1:Nrun % filter state evolution + disp(num2str(jj)) + ac11 = filter(a1,h11); + h11 = ac11.procinfo.find('Filters'); % prooagate histout + ac12 = filter(a2,h12); + h12 = ac12.procinfo.find('Filters'); + ac21 = filter(a1,h21); + h21 = ac21.procinfo.find('Filters'); + ac22 = filter(a2,h22); + h22 = ac22.procinfo.find('Filters'); +end +%% +iplot(ac11) +iplot(ac12) +iplot(ac21) +iplot(ac22) + +%% + +ac1 = ac11 + ac12; +ac2 = ac21 + ac22; + +iplot(ac1) +iplot(ac2) + +%% + +ac1xx = ac1.lpsd(plist('Nfft',1e5,'order',2)); +ac2xx = ac2.lpsd(plist('Nfft',1e5,'order',2)); + +%% +iplot(CSD(1,1),ac1xx,CSD(2,2),ac2xx) + +