Mercurial > hg > ltpda
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 + +