Mercurial > hg > ltpda
view m-toolbox/test/LTPDA_training/topic5/TrainigSession_T5_Ex03.m @ 22:b11e88004fca database-connection-manager
Update collection.fromRepository
author | Daniele Nicolodi <nicolodi@science.unitn.it> |
---|---|
date | Mon, 05 Dec 2011 16:20:06 +0100 |
parents | f0afece42f48 |
children |
line wrap: on
line source
% Training session Topic 5 exercise 03 % % Generation of noise with given psd % % 1) Load fsdata object from file % 2) Fit psd of test data with zDomainFit % 3) Genarate noise from fitted model % 4) Fit psd of test data with curvefit % 5) Genarate noise from fitted model % 6) Compare results % % L FERRAIOLI 22-02-09 % % $Id: TrainigSession_T5_Ex03.m,v 1.3 2009/02/25 18:18:45 luigi Exp $ % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% 1) load fsdata % load test noise AO from file tn = ao(plist('filename', 'topic5\T5_Ex03_TestNoise.xml')); tn.setName; %% 2) Fitting psd of test data with zDomainFit %% 2.1) We try to identify a proper model for the psd of loaded data % making psd ot test data - we need some average otherwise the fitting % algorithm is not able to run correctly tnxx1 = tn.psd(plist('Nfft',2000)); % Removing first bins tnxx1r = split(tnxx1,plist('split_type', 'frequencies', 'frequencies', [2e-3 5e-1])); iplot(tnxx1r) % finding proper weights for noisy data stnxx = smoother(tnxx1r); wgh = 1./(abs(stnxx.data.y)); %% 2.2) Fitting plfit1 = plist('FS',1,... % Sampling frequency for the model filters 'AutoSearch','on',... % Automatically search for a good model 'StartPolesOpt','c1',... % Define the properties of the starting poles - complex distributed in the unitary circle 'maxiter',50,... % maximum number of iteration per model order 'minorder',10,... % minimum model order 'maxorder',45,... % maximum model order 'weights',wgh,... % assign externally calculated weights 'ResLogDiff',[],... % Residuals log difference (no need to assign this parameter for the moment) 'ResFlat',0.77,... % Rsiduals spectral flatness 'RMSE',5,... % Root Mean Squared Error Variation 'Plot','on',... % set the plot on or off 'ForceStability','off',... % we do not need a stable filter 'CheckProgress','off'); % display fitting progress on the command window % Do the fit [param1,fmod1] = zDomainFit(tnxx1r,plfit1); %% 3) Generating noise from model psd % noisegen1D is a noise coloring tool. It accept as input a white noise % time series and output a colored noise time series with one sided psd % matching the model specifiend into the parameters % Generate white noise a1 = ao(plist('tsfcn', 'randn(size(t))', 'fs', 1, 'nsecs', 10000,'yunits','m')); plng = plist(... 'model', abs(fmod1), ... % model for colored noise psd 'MaxIter', 50, ... % maximum number of fit iteration per model order 'PoleType', 2, ... % generates complex poles distributed in the unitary circle 'MinOrder', 20, ... % minimum model order 'MaxOrder', 50, ... % maximum model order 'Weights', 2, ... % weight with 1/abs(model) 'Plot', false,... % on to show the plot 'Disp', false,... % on to display fit progress on the command window 'RMSEVar', 7,... % Root Mean Squared Error Variation 'FitTolerance', 2); % Residuals log difference ac1 = noisegen1D(a1, plng); %% 4) Checking results % Calculating psd of generated data acxx1 = ac1.psd(plist('Nfft',2000)); % Comparing with starting data iplot(tnxx1,acxx1)