Mercurial > hg > ltpda
diff testing/utp_1.1/utp_fcns/get_test_csd_ao_noisegen2D.m @ 44:409a22968d5e default
Add unit tests
author | Daniele Nicolodi <nicolodi@science.unitn.it> |
---|---|
date | Tue, 06 Dec 2011 18:42:11 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/testing/utp_1.1/utp_fcns/get_test_csd_ao_noisegen2D.m Tue Dec 06 18:42:11 2011 +0100 @@ -0,0 +1,377 @@ +% test csd for ao/noisegen2D +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% DESCRIPTION: Output a model for mdc1 cross spectral density +% +% CALL: +% [TF,CSD] = get_test_csd_ao_noisegen2D(pl) +% +% PARAMETERS: 'fs' - Sampling frequency +% 'f1' - the start frequency +% 'f2' - the stop frequency +% 'nf' - number of evaluation points +% 'scale' - spacing of frequencies: 'lin' or 'log' +% or +% 'f' - a vector of frequency values or an AO +% whereby the x-axis is taken for the frequency values +% +% OUTPUTS: +% CSD - a 2x2 matrix of analysis objects containing CSD +% models +% TF - a 2x2 matrix of analysis objects containing TF +% models +% +% M-FILE INFO: Get information about this methods by calling +% >> ao.getInfo('get_test_csd_ao_noisegen2D') +% +% Get information about a specified set-plist by calling: +% >> ao.getInfo('get_test_csd_ao_noisegen2D', 'none') +% +% VERSION: $Id: get_test_csd_ao_noisegen2D.m,v 1.4 2011/03/24 19:37:53 ingo Exp $ +% +% +% HISTORY: 22-12-2008 L Ferraioli +% Creation +% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function varargout = get_test_csd_ao_noisegen2D(varargin) + + % Check if this is a call for parameters + if utils.helper.isinfocall(varargin{:}) + varargout{1} = getInfo(varargin{3}); + return + end + + import utils.const.* + utils.helper.msg(msg.MNAME, 'running %s/%s', mfilename('class'), mfilename); + + % Collect input variable names + in_names = cell(size(varargin)); + for ii = 1:nargin,in_names{ii} = inputname(ii);end + + % Collect all AOs and plists + [as, ao_invars] = utils.helper.collect_objects(varargin(:), 'ao', in_names); + pl = utils.helper.collect_objects(varargin(:), 'plist', in_names); + + % Get frequency vector + f = find(pl, 'f'); + if isa(f, 'ao') && (isa(f.data, 'fsdata') || isa(f.data, 'xydata')) + f = f.data.getX; + end + + % Get sampling frequency + fs = find(pl, 'fs'); + + if isempty(f) + % Compute from frequency range + f1 = find(pl, 'f1'); + f2 = find(pl, 'f2'); + ndata = find(pl, 'nf'); + scale = find(pl, 'scale'); + + switch scale + case 'lin' + f = linspace(f1, f2, ndata); + case 'log' + f = logspace(log10(f1), log10(f2), ndata); + end + end + + + % Models response calculation + tf11 = calcTF11(f,fs); + tf12 = calcTF12(f,fs); + tf21 = calcTF21(f,fs); + tf22 = calcTF22(f,fs); + + % CSD calculation + csd11 = tf11.*conj(tf11)+tf12.*conj(tf12); + csd12 = tf11.*conj(tf21)+tf12.*conj(tf22); + csd22 = tf22.*conj(tf22)+tf21.*conj(tf21); + csd21 = conj(csd12); + csd11.setName('CSD11'); + csd12.setName('CSD12'); + csd21.setName('CSD21'); + csd22.setName('CSD22'); + + % Output data + if nargout == 1 + varargout{1} = [csd11 csd12;csd21 csd22]; + elseif nargout == 2 + varargout{1} = [csd11 csd12;csd21 csd22]; + varargout{2} = [tf11 tf12;tf21 tf22]; + end + +end + +%-------------------------------------------------------------------------- +% Get Info Object +%-------------------------------------------------------------------------- +function ii = getInfo(varargin) + if nargin == 1 && strcmpi(varargin{1}, 'None') + sets = {}; + pls = []; + elseif nargin == 1&& ~isempty(varargin{1}) && ischar(varargin{1}) + sets{1} = varargin{1}; + pls = getDefaultPlist(sets{1}); + else + sets = {'List', 'Range'}; + pls = []; + for kk=1:numel(sets) + pls = [pls getDefaultPlist(sets{kk})]; + end + end + % Build info object + ii = minfo(mfilename, 'ao', '', utils.const.categories.mdc01, '$Id: get_test_csd_ao_noisegen2D.m,v 1.4 2011/03/24 19:37:53 ingo Exp $', sets, pls); + ii.setModifier(false); +end + +%-------------------------------------------------------------------------- +% Get Default Plist +%-------------------------------------------------------------------------- +function plo = getDefaultPlist(set) + switch set + case 'List' + plo = plist('fs', 10, 'f', []); + case 'Range' + plo = plist('fs', 10, 'f1', -1, 'f2', -1, 'nf', 1000, 'scale', 'log'); + otherwise + error('### Unknown set [%s] for a default list.', set); + end +end + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% LOCAL FUNCTIONS +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function tf11 = calcTF11(f,fs) + + + + % Model Stefano TF11 coefficients + dRes11 = [2.44554138162509e-011 - 1.79482547894083e-011i; + 2.44554138162509e-011 + 1.79482547894083e-011i; + 2.66402334803101e-009 + 1.1025122049153e-009i; + 2.66402334803101e-009 - 1.1025122049153e-009i; + -7.3560293387644e-009; + -1.82811618589835e-009 - 1.21803627800855e-009i; + -1.82811618589835e-009 + 1.21803627800855e-009i; + 1.16258677367555e-009; + 1.65216557639319e-016; + -1.78092396888606e-016; + -2.80420398962379e-017; + 9.21305973049041e-013 - 8.24686706827269e-014i; + 9.21305973049041e-013 + 8.24686706827269e-014i; + 5.10730060739905e-010 - 3.76571756625722e-011i; + 5.10730060739905e-010 + 3.76571756625722e-011i; + 3.45893698149735e-009; + 3.98139182134446e-014 - 8.25503935419059e-014i; + 3.98139182134446e-014 + 8.25503935419059e-014i; + -1.40595719147164e-011]; + + dPoles11 = [0.843464045655194 - 0.0959986292915475i; + 0.843464045655194 + 0.0959986292915475i; + 0.953187595424927 - 0.0190043625473383i; + 0.953187595424927 + 0.0190043625473383i; + 0.967176277937188; + 0.995012027005247 - 0.00268322602801729i; + 0.995012027005247 + 0.00268322602801729i; + 0.996564761885673; + 0.999999366165445; + 0.999981722418555; + 0.999921882627659; + 0.999624431675213 - 0.000813407848742761i; + 0.999624431675213 + 0.000813407848742761i; + 0.997312006278751 - 0.00265611346834941i; + 0.997312006278751 + 0.00265611346834941i; + 0.990516544257531; + 0.477796923118318 - 0.311064085401834i; + 0.477796923118318 + 0.311064085401834i; + 0]; + + dDTerms11 = 0; + + % response calculation + pfparams.type = 'disc'; + pfparams.freq = f; + pfparams.fs = fs; + pfparams.res = dRes11; + pfparams.pol = dPoles11; + pfparams.dterm = dDTerms11; + pfr = utils.math.pfresp(pfparams); + mtf11 = pfr.resp; + + % building AOs + tf11 = ao(plist('xvals', f, 'yvals', mtf11, 'fs', fs, 'type', 'fsdata')); + % name for this object + tf11.setName('TF11'); + +end + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function tf12 = calcTF12(f,fs) + + % Model Stefano TF12 + dRes12 = [1.44258422208796e-017 + 7.07359428613009e-019i; + 1.44258422208796e-017 - 7.07359428613009e-019i; + -3.4918408053655e-021 - 1.05662874569329e-021i; + -3.4918408053655e-021 + 1.05662874569329e-021i; + -7.61773292876976e-021; + 4.84357724603939e-020 + 2.38824204294595e-019i; + 4.84357724603939e-020 - 2.38824204294595e-019i; + -4.07088520945753e-020 - 2.31474543846105e-019i; + -4.07088520945753e-020 + 2.31474543846105e-019i; + 8.73316588658882e-023; + -5.21840635377469e-020; + 1.8461911504859e-023; + 5.20105247464461e-020; + -4.68960092394415e-022; + -1.44261407664171e-017 + 6.8922564526833e-019i; + -1.44261407664171e-017 - 6.8922564526833e-019i; + 3.13688133935426e-022]; + + dPoles12 = [0.477546340377332 - 0.310830571032376i; + 0.477546340377332 + 0.310830571032376i; + 0.99790715414307 - 0.0028490561287024i; + 0.99790715414307 + 0.0028490561287024i; + 0.998014205354671 ; + 0.999585354543332 - 0.000780408757425194i; + 0.999585354543332 + 0.000780408757425194i; + 0.99966003029931 - 0.000830944038363768i; + 0.99966003029931 + 0.000830944038363768i; + 0.999962770401331 ; + 0.999981881865521 ; + 0.999999365763457 ; + 0.999981706320212 ; + 0.99992421574188 ; + 0.477898460791003 + 0.311001926610074i; + 0.477898460791003 - 0.311001926610074i; + 0]; + dDTerms12 = 0; + + % response calculation + pfparams.type = 'disc'; + pfparams.freq = f; + pfparams.fs = fs; + pfparams.res = dRes12; + pfparams.pol = dPoles12; + pfparams.dterm = dDTerms12; + pfr = utils.math.pfresp(pfparams); + mtf12 = pfr.resp; + + % building AOs + tf12 = ao(plist('xvals', f, 'yvals', mtf12, 'fs', fs, 'type', 'fsdata')); + % name for this object + tf12.setName('TF12'); + +end + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function tf21 = calcTF21(f,fs) + + % Model Stefano Tf21 + dRes21 = [-1.80035241582968e-016 + 1.99543917791863e-015i; + -1.80035241582968e-016 - 1.99543917791863e-015i; + -1.85590889333759e-013 - 1.23844418827409e-014i; + -1.85590889333759e-013 + 1.23844418827409e-014i; + 5.03656596876842e-013 ; + -2.62470963499904e-013 + 2.30024232938878e-012i; + -2.62470963499904e-013 - 2.30024232938878e-012i; + -9.83780507870955e-018 ; + 3.40426735130194e-021 ; + 9.78322351492755e-018 ; + -1.65010934542937e-020 ; + 2.60918565203438e-015 + 1.0546609464659e-015i; + 2.60918565203438e-015 - 1.0546609464659e-015i; + 3.18105585405455e-014 + 2.48839990780042e-013i; + 3.18105585405455e-014 - 2.48839990780042e-013i; + 3.23021641947666e-013 ; + 4.81265000078114e-016 - 3.18269170053848e-017i; + 4.81265000078114e-016 + 3.18269170053848e-017i; + 5.16260024128201e-018]; + + dPoles21 = [0.872004077421604 - 0.110344282822693i; + 0.872004077421604 + 0.110344282822693i; + 0.956884129232757 - 0.0225532091775074i; + 0.956884129232757 + 0.0225532091775074i; + 0.966514825697177 ; + 0.995140550419744 - 0.000755127639524413i; + 0.995140550419744 + 0.000755127639524413i; + 0.999981802194393 ; + 0.99999936576546 ; + 0.999981722418555 ; + 0.999921882627659 ; + 0.999624431675213 + 0.000813407848742761i; + 0.999624431675213 - 0.000813407848742761i; + 0.997312006278751 + 0.00265611346834941i; + 0.997312006278751 - 0.00265611346834941i; + 0.990516544257531 ; + 0.477796923118318 + 0.311064085401834i; + 0.477796923118318 - 0.311064085401834i; + 0]; + + dDTerms21 = 0; + + % response calculation + pfparams.type = 'disc'; + pfparams.freq = f; + pfparams.fs = fs; + pfparams.res = dRes21; + pfparams.pol = dPoles21; + pfparams.dterm = dDTerms21; + pfr = utils.math.pfresp(pfparams); + mtf21 = pfr.resp; + + % building AOs + tf21 = ao(plist('xvals', f, 'yvals', mtf21, 'fs', fs, 'type', 'fsdata')); + % name for this object + tf21.setName('TF21'); + +end + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function tf22 = calcTF22(f,fs) + + % Model Stefano Tf22 + dRes22 = [1.1284521501259e-014; + -3.72133611555879e-014 - 2.08232683444075e-014i; + -3.72133611555879e-014 + 2.08232683444075e-014i; + 9.84930639106637e-014 - 1.46640810672565e-013i; + 9.84930639106637e-014 + 1.46640810672565e-013i; + 2.51323684013671e-014 ; + -5.64078525288305e-014 ; + -1.62476406586366e-014 ; + -1.08424815979566e-011 + 8.32328079357669e-012i; + -1.08424815979566e-011 - 8.32328079357669e-012i; + 2.41831559776112e-011]; + + dPoles22 = [0.988511243978897; + 0.997305870640646 + 0.00211760900132725i; + 0.997305870640646 - 0.00211760900132725i; + 0.999626453270255 + 0.0008125673525946i; + 0.999626453270255 - 0.0008125673525946i; + 0.999999366366222 ; + 0.999981706320212 ; + 0.99992421574188 ; + 0.477898460791003 - 0.311001926610074i; + 0.477898460791003 + 0.311001926610074i; + 0]; + + dDTerms22 = 0; + + % response calculation + pfparams.type = 'disc'; + pfparams.freq = f; + pfparams.fs = fs; + pfparams.res = dRes22; + pfparams.pol = dPoles22; + pfparams.dterm = dDTerms22; + pfr = utils.math.pfresp(pfparams); + mtf22 = pfr.resp; + + % building AOs + tf22 = ao(plist('xvals', f, 'yvals', mtf22, 'fs', fs, 'type', 'fsdata')); + % name for this object + tf22.setName('TF22'); + +end