diff m-toolbox/test/test_ao_filtfilt.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/test_ao_filtfilt.m	Wed Nov 23 19:22:13 2011 +0100
@@ -0,0 +1,193 @@
+% Test script for ao/filter with matrix input
+% 
+% L. Ferraioli 02-12-08
+% 
+% $Id: test_ao_filtfilt.m,v 1.3 2011/05/12 13:23:35 luigi Exp $
+
+%% Test a filter matrix with a single filter object
+
+% get filter
+pl = plist('type', 'lowpass', ...
+                           'order', 2,         ...
+                           'gain',  1.0,       ...
+                           'fs',    10,        ...
+                           'fc',    0.2);
+
+filt = miir(pl);
+fresp = resp(filt,plist('f',[logspace(-4,0,100)].'));
+
+% put filter into a matrix
+mfilt = matrix(filt);
+
+% gen white noise data
+b = ao(plist('tsfcn', 'randn(size(t))', 'fs', 10, 'nsecs', 1e4));
+
+% do filtering with matrix
+c = filter(b,mfilt);
+sc = tfe(b,c);
+sc.setName;
+
+% do filtering with matrix inside plist
+d = filtfilt(b,plist('filter',mfilt));
+sd = tfe(b,d);
+sd.setName;
+
+% test rebuild
+g = rebuild(c);
+sg = tfe(b,g);
+sg.setName;
+
+h = rebuild(d);
+sh = tfe(b,h);
+sh.setName;
+
+% check
+iplot(sc,sd,sg,sh,fresp)
+
+%% Test a filter with a single filterbank object
+
+% get filter and response
+pl = plist('type', 'lowpass', ...
+                           'order', 2,         ...
+                           'gain',  1.0,       ...
+                           'fs',    10,        ...
+                           'fc',    0.2);
+
+filt = miir(pl);
+fresp = resp(filt,plist('f',[logspace(-4,0,100)].'));
+
+% generate a filterbank with zDomainFit
+pl_fit = plist('FS',10,...
+  'AutoSearch','on',...
+  'StartPoles',[],...
+  'StartPolesOpt','clin',...
+  'maxiter',40,...
+  'minorder',3,...
+  'maxorder',25,...
+  'weights',[],...
+  'weightparam','abs',...
+  'CONDTYPE','MSE',...
+  'FITTOL',1e-4,... % check if MSE is lower than 1e-4
+  'MSEVARTOL',1e-2,...
+  'Plot','off',...
+  'ForceStability','on',...
+  'CheckProgress','off');
+
+% Do fit
+fbk_filt = zDomainFit(fresp, pl_fit);
+
+% gen white noise data
+b = ao(plist('tsfcn', 'randn(size(t))', 'fs', 10, 'nsecs', 1e4));
+
+% do filtering with filterbank
+c = filtfilt(b,fbk_filt);
+sc = tfe(b,c);
+sc.setName('direct filterbank')
+
+d = filter(b,fbk_filt);
+sd = tfe(b,d);
+sd.setName('direct filter')
+
+% % do filtering with filterbank inside plist
+% d = filtfilt(b,plist('filter',fbk_filt));
+% sd = tfe(b,d);
+% sd.setName('plist filterbank')
+
+
+% check
+iplot(abs(sc),abs(sd).^2,abs(fresp).^2)
+
+
+%% test filter with 2dim matrix
+
+% test that filter trow an error when a N-dim matrix is input
+pl1 = plist('type', 'lowpass', ...
+                           'order', 2,         ...
+                           'gain',  1.0,       ...
+                           'fs',    10,        ...
+                           'fc',    0.2);
+                         
+pl2 = plist('type', 'lowpass', ...
+                           'order', 1,         ...
+                           'gain',  1e-1,       ...
+                           'fs',    10,        ...
+                           'fc',    0.01);
+
+filt1 = miir(pl1);
+fresp1 = resp(filt1,plist('f',[logspace(-4,0,100)].'));
+filt2 = miir(pl2);
+fresp2 = resp(filt2,plist('f',[logspace(-4,0,100)].'));
+
+mfilt = matrix(filt1,filt2);
+
+% gen white noise data
+b = ao(plist('tsfcn', 'randn(size(t))', 'fs', 10, 'nsecs', 1e4));
+
+% do filtering with matrix
+try
+  c = filter(b,mfilt);
+catch err
+  disp(err.message)
+end
+
+try
+  c = filter(b,plist('filter',mfilt));
+catch err
+  disp(err.message)
+end
+
+%% test filter with 2dim matrix
+
+% test that filter trow an error when a N-dim matrix is input
+pl1 = plist('type', 'lowpass', ...
+                           'order', 2,         ...
+                           'gain',  1.0,       ...
+                           'fs',    10,        ...
+                           'fc',    0.2);
+                         
+pl2 = plist('type', 'lowpass', ...
+                           'order', 1,         ...
+                           'gain',  1e-1,       ...
+                           'fs',    10,        ...
+                           'fc',    0.01);
+
+filt1 = miir(pl1);
+fresp1 = resp(filt1,plist('f',[logspace(-4,0,100)].'));
+filt2 = miir(pl2);
+fresp2 = resp(filt2,plist('f',[logspace(-4,0,100)].'));
+
+% Fitting parameter list
+pl_fit = plist('FS',10,...
+  'AutoSearch','on',...
+  'StartPoles',[],...
+  'StartPolesOpt','clog',...
+  'maxiter',40,...
+  'minorder',3,...
+  'maxorder',25,...
+  'weights',[],...
+  'weightparam','abs',...
+  'CONDTYPE','MSE',...
+  'FITTOL',1e-4,... % check if MSE is lower than 1e-4
+  'MSEVARTOL',1e-2,...
+  'Plot','off',...
+  'ForceStability','on',...
+  'CheckProgress','off');
+
+% Do fit
+mod = zDomainFit(fresp1,fresp2,pl_fit);
+
+b = ao(plist('tsfcn', 'randn(size(t))', 'fs', 10, 'nsecs', 1e4));
+
+try
+  c = filter(b,mfilt);
+catch err
+  disp(err.message)
+end
+
+try
+  c = filter(b,plist('filter',mfilt));
+catch err
+  disp(err.message)
+end
+
+