Mercurial > hg > ltpda
diff m-toolbox/test/LTPDA_training/topic5/TrainigSession_T5_Ex02.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/LTPDA_training/topic5/TrainigSession_T5_Ex02.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,105 @@ +% Training session Topic 5 exercise 02 +% +% System identification in z-domain 2 +% +% 1) Load fsdata object from file +% 2) Fit loaded TF data with zDomainFit and fixed order +% 3) Compare results +% +% L FERRAIOLI 22-02-09 +% +% $Id: TrainigSession_T5_Ex02.m,v 1.3 2009/02/25 18:18:45 luigi Exp $ +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%% 1) load fsdata + +% load AO from file +rfilt = ao(plist('filename', 'topic5\T5_Ex02_rfilt.xml')); +iplot(rfilt) + +%% 2) Fitting TF - fixed model order + +% Loaded fsdata are the response of an order 19 partial fractioned filter. +% We now try to fitting the loaded filter response with zDomainFit with a +% fixed model order. +% We set Autosearch to off, in this case the function do not perform +% accuracy test but simply run how far maximum number of iteration is +% reached. Model order is fixed by minorder parameter. + +plfit1 = plist('FS',10,... % Sampling frequency for the model filters + 'AutoSearch','off',... % Automatically search for a good model + 'StartPolesOpt','c1',... % Define the properties of the starting poles - complex distributed in the unitary circle + 'maxiter',30,... % maximum number of iteration per model order + 'minorder',19,... % fixed model order + 'weightparam','abs',... % assign weights as 1./abs(data) + 'Plot','on',... % set the plot on or off + 'ForceStability','on',... % force to output a stable ploes model + 'CheckProgress','off'); % display fitting progress on the command window + +% Do the fit +fobj = zDomainFit(rfilt,plfit1); +% setting input and output units for fitted model + +%% 3) Compare results + +% Extracting residues and poles from fit results +fRes = zeros(numel(fobj),1); % fit residue vector initialization +fPoles = zeros(numel(fobj),1); % fit poles vector initialization + +% extracting data from fitted filters +for ii = 1:numel(fobj) + fRes(ii,1) = fobj(ii).a(1); + fPoles(ii,1) = -1*fobj(ii).b(2); +end +[fRes,idx] = sort(fRes); +fPoles = fPoles(idx); + +% starting model residues and poles +mRes = [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]; +[mRes,idx] = sort(mRes); + +mPoles = [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]; +mPoles = mPoles(idx); + +% Check the relative difference +(mRes-fRes)./abs(mRes) +(mPoles-fPoles)./abs(mPoles) +% Results are accurate to the 7th decimal digit +