Mercurial > hg > ltpda
view m-toolbox/test/utils/test2_csd2tf.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 source
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % TEST csd2tf 2dim identification % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % HISTORY: 23-04-2009 L Ferraioli % Creation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% VERSION '$Id: test2_csd2tf.m,v 1.1 2009/04/23 10:11:26 luigi Exp $'; %% Clear clear all %% Loading spectra load ..\m-toolbox\test\mpsd.mat % load mpsd.mat first column is f then psd1, csd and psd2 f = mpsd(:,1); % psd1 = mpsd(:,2); % csd12 = mpsd(:,3); % psd2 = mpsd(:,4); csd = zeros(2,2,numel(f)); for ii = 1:numel(f) csd(:,:,ii) = [mpsd(ii,2) mpsd(ii,3);conj(mpsd(ii,3)) mpsd(ii,4)]; end %% identification in z-domain % identification params params = struct('Nmaxiter',70, 'minorder',20,... 'maxorder',40, 'spolesopt',2, 'weightparam',2, 'plot',0,... 'ctp','chival','lrscond',4,'msevar',2,... 'fs',10,'dterm',0, 'spy',0, 'fullauto',1,... 'extweights', []); ostruct = utils.math.csd2tf(csd,f,params); %% Model response TF11 pfparams.type = 'disc'; pfparams.freq = f; pfparams.fs = 10; pfparams.res = ostruct(1).res(:,1); pfparams.pol = ostruct(1).poles(:,1); pfparams.dterm = ostruct(1).dterm(:,1); % response of the model filter pfr = utils.math.pfresp(pfparams); y11 = pfr.resp; %% Model response TF12 pfparams.type = 'disc'; pfparams.freq = f; pfparams.fs = 10; pfparams.res = ostruct(2).res(:,1); pfparams.pol = ostruct(2).poles(:,1); pfparams.dterm = ostruct(2).dterm(:,1); % response of the model filter pfr = utils.math.pfresp(pfparams); y12 = pfr.resp; %% Model response TF21 pfparams.type = 'disc'; pfparams.freq = f; pfparams.fs = 10; pfparams.res = ostruct(1).res(:,2); pfparams.pol = ostruct(1).poles(:,1); pfparams.dterm = ostruct(1).dterm(:,2); % response of the model filter pfr = utils.math.pfresp(pfparams); y21 = pfr.resp; %% Model response TF22 pfparams.type = 'disc'; pfparams.freq = f; pfparams.fs = 10; pfparams.res = ostruct(2).res(:,2); pfparams.pol = ostruct(2).poles(:,1); pfparams.dterm = ostruct(2).dterm(:,2); % response of the model filter pfr = utils.math.pfresp(pfparams); y22 = pfr.resp; %% Model PSD calculation % psd1(f) = tf11(f)*conj(tf11(f))+tf12(f)*conj(tf12(f)) % csd(f) = tf11(f)*conj(tf21(f))+tf12(f)*conj(tf22(f)) % psd2(f) = tf21(f)*conj(tf21(f))+tf22(f)*conj(tf22(f)) % mpsd1 = y11.*conj(y11)+y12.*conj(y12); % mcsd = y11.*conj(y21)+y12.*conj(y22); % mpsd2 = y21.*conj(y21)+y22.*conj(y22); mpsd1 = conj(y11).*y11+conj(y12).*y12; mcsd = conj(y11).*y21+conj(y12).*y22; mpsd2 = conj(y21).*y21+conj(y22).*y22; %% Checking result figure() loglog(f,squeeze(csd(1,1,:)),'k') hold on loglog(f,mpsd1,'r') xlabel('Frequency [Hz]') ylabel('psd') legend('Original', 'Model') figure() loglog(f,abs(squeeze(csd(1,2,:))),'k') hold on loglog(f,abs(mcsd),'r') xlabel('Frequency [Hz]') ylabel('psd') legend('Original', 'Model') figure() loglog(f,squeeze(csd(2,2,:)),'k') hold on loglog(f,mpsd2,'r') xlabel('Frequency [Hz]') ylabel('psd') legend('Original', 'Model') figure() semilogy(ostruct(1).mse) xlabel('Iteration') ylabel('MSE') legend('Mean Squared Error Progression for filters 11 and 21') figure() semilogy(ostruct(2).mse) xlabel('Iteration') ylabel('MSE') legend('Mean Squared Error Progression for filters 12 and 22')