diff m-toolbox/test/MDC1/test_mdc1_conv2acc_utn.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/MDC1/test_mdc1_conv2acc_utn.m	Wed Nov 23 19:22:13 2011 +0100
@@ -0,0 +1,204 @@
+% MDC1 Conversion to acceleration
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Test script for the MDC1 conversion to acceleration of IFO data
+% 
+% $Id: test_mdc1_conv2acc_utn.m,v 1.1 2009/03/24 10:31:13 luigi Exp $
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Clear
+
+clear all
+
+%% Loading data
+
+currPath = cd;
+cd 'C:\Dati\mock_data\interferometer\';
+
+j=1;
+fs = 10;
+
+disp(sprintf('*** Reading data %d', j));
+in = load(sprintf('mockdata_16_48_17_11_2007_%d.dat', j));
+d1  = in(:,2);
+d12 = in(:,3);
+
+% Build O1
+  eval('ts = tsdata(d1, fs);');
+  eval(sprintf('o1_%d = ao(ts);', j));
+  eval(sprintf('o1_%d = setName(o1_%d, ''o1'');', j, j));
+  eval(sprintf('o1_%d = setXunits(o1_%d, ''s'');', j, j));
+  eval(sprintf('o1_%d = setYunits(o1_%d, ''m'');', j, j));
+    
+% Build O12
+  eval('ts = tsdata(d12, fs);');
+  eval(sprintf('o12_%d = ao(ts);', j));
+  eval(sprintf('o12_%d = setName(o12_%d, ''o12'');', j, j));
+  eval(sprintf('o12_%d = setXunits(o12_%d, ''s'');', j, j));
+  eval(sprintf('o12_%d = setYunits(o12_%d, ''m'');', j, j));
+  
+global LTPDAinvar
+
+LTPDAinvar = { o1_1  , 1 , 'From file';...
+               o12_1 , 1 , 'From file'};
+
+cd(currPath)
+
+            
+%% =============================================================
+
+channel1 = LTPDAinvar{1,1};
+channel2 = LTPDAinvar{2,1};
+
+%%
+
+CH1 = channel1.lpsd;
+CH2 = channel2.lpsd;
+iplot(CH1)
+iplot(CH2)
+
+%% DRAG FREE
+
+rat1pl    = plist('NUM', [0.0004659;0.1349;4.37;0.8304;0.07449;0.002978;4.403e-005], 'DEN', [1;5.046;9.609;11.05;0.01221;3.401e-006;0]);
+control1 = mdc1_ifo2cont_utn(channel1,rat1pl);
+
+%% retarded actuaction - thrusters:
+
+retard1pl = plist('TAU', 0.1, 'DELTAT', 0.315, 'FS', 10, 'TOL', 1e-007, 'AMP', 1);
+actuation1   = mdc1_cont2act_utn(control1,retard1pl);
+
+%% LOW FREQ SUSP
+
+rat2pl    = plist('NUM', [-2.726e-007;1.665e-005;1.303e-007;8.381e-010], 'DEN', [1;0.2189;0.01922;0.0007803;0]);
+control2 = mdc1_ifo2cont_utn(channel2,rat2pl);
+
+%% retarded actuaction - electrical actuators:
+
+retard2pl = plist('TAU', 0.01, 'DELTAT', 0.305, 'FS', 10, 'TOL', 1e-007, 'AMP', 1);
+actuation2   = mdc1_cont2act_utn(control2,retard2pl);
+
+%%  Free dynamics:
+
+plfd = plist('pstiff1', -1.3e-6,'pstiff2', -2e-6,'cross_talk', -1e-4,'METHOD', 'PARFIT');
+freeDynamics = mdc1_ifo2acc_fd_utn(channel1,channel2,plfd);
+
+%%  Output
+
+output1 = freeDynamics.index(1) + actuation1;
+output2 = freeDynamics.index(2) + actuation2;
+% output1 = freeDynamics(1) + control1;
+% output2 = freeDynamics(2) + control2;
+
+%% ******************************************
+% plotting output psd
+
+psd1 = output1.lpsd;
+psd2 = output2.lpsd;
+iplot(psd1)
+iplot(psd2)
+
+%% ====================== More checks =====================================
+
+%% Extracting filters
+
+miir1Obj = find(control1.procinfo,'CONT_FILTER');
+retard1 = find(actuation1.procinfo,'ACT_FILTER');
+miir2Obj = find(control2.procinfo,'CONT_FILTER');
+retard2 = find(actuation2.procinfo,'ACT_FILTER');
+
+%% Checking controllers
+
+% frequencies
+f = logspace(-6,log10(5),300);
+% f = logspace(-6,0,300);
+f = f.';
+
+% response of continuous drag free
+Rcdf = resp(rat1Obj,f);
+Rcdf.setName('Continuous DF');
+
+% response of discrete drag free
+tRddf = resp(miir1Obj,plist('f',f));
+Rddf = tRddf(1);
+for ii = 2:numel(tRddf)
+  Rddf = Rddf + tRddf(ii);
+end
+Rddf.setName('Discrete DF');
+
+% response of continuous low freq susp
+Rclfs = resp(rat2Obj,f);
+Rclfs.setName('Continuous LFS');
+
+% response of discrete low freq susp
+tRdlfs = resp(miir2Obj,plist('f',f));
+Rdlfs = tRdlfs(1);
+for ii = 2:numel(tRdlfs)
+  Rdlfs = Rdlfs + tRdlfs(ii);
+end
+Rdlfs.setName('Discrete LFS');
+
+% response of actuation filter 1
+Ract1 = resp(retard1,plist('f',f));
+Ract1.setName('Thrusters');
+
+% response of actuation filter 2
+Ract2 = resp(retard2,plist('f',f));
+Ract1.setName('Actuators');
+
+%% Plotting reposnse
+
+% Continuous and discrete controllers
+pl = plist('Legends', {'cH_{df}','dH_{df}','cH_{lfs}','dH_{lfs}'},...
+  'LineStyles', {'', '--', '', '--'});
+iplot(Rcdf,Rddf,Rclfs,Rdlfs,pl)
+
+% Ratio between discrete and continuous
+pl = plist('Legends', {'dH_{df}/cH_{df}','dH_{lfs}/cH_{lfs}'},...
+  'YScales',{'All','lin'});
+iplot(Rddf./Rddf,Rdlfs./Rclfs,pl)
+
+% Actuators
+pl = plist('Legends', {'Thrusters','El. Act.'},...
+  'YScales',{'All','lin'});
+iplot(Ract1,Ract2,pl)
+
+% discrete controllers + actuation
+pl = plist('Legends', {'dH_{df}','dH_{df} + Tht','dH_{lfs}','dH_{lfs} + Act'},...
+  'LineStyles', {'', '--', '', '--'});
+iplot(Rddf,Rddf.*Ract1,Rdlfs,Rdlfs.*Ract2,pl)
+
+%% Calculating transfer functions
+
+% controller ***
+pl  = plist('Nfft', fs*1000);
+tfdf = tfe(channel1,control1,pl);
+tflfs = tfe(channel2,control2,pl);
+plpl = plist('Legends', {'H_{df}','H_{df} data','H_{lfs}','H_{lfs} data'},...
+  'LineStyles', {'', '--', '', '--'});
+iplot(Rddf,tfdf(1,2),Rdlfs,tflfs(1,2),plpl)
+
+% Actuation ***
+pl  = plist('Nfft', fs*1000);
+tfact1 = tfe(control1,actuation1,pl);
+tfact2 = tfe(control2,actuation2,pl);
+plpl = plist('Legends', {'Tht','Tht data','El Act','El Act data'},...
+  'LineStyles', {'', '--', '', '--'});
+iplot(Ract1,tfact1(1,2),Ract2,tfact2(1,2),plpl)
+
+% Free Dynamics TFs ***
+pl  = plist('Nfft', fs*10000);
+tffd1 = tfe(channel1,freeDynamics(1),pl);
+tffd2 = tfe(channel2,freeDynamics(2),pl);
+
+% Theorethical
+% w1 = -1.3e-6;
+% w2 = -2e-6;
+% D1 = -1e-4;
+% s = 2.*pi.*1i.*f;
+% FD1 = s.^2 + w1;
+% FD2 = -D1.*s.^2 + w2 - w1 - D1*w2 + s.^2 + w2;
+FD1 = ao(plist('fsfcn', '(2.*pi.*1i.*f).^2 + -1.3e-6', 'f', f));
+FD2 = ao(plist('fsfcn', '-(-1e-4).*(2.*pi.*1i.*f).^2 + (-2e-6) - (-1.3e-6) - (-1e-4)*(-2e-6) + (2.*pi.*1i.*f).^2 + (-2e-6)', 'f', f));
+
+plpl = plist('Legends', {'FD1','FD1 data','FD2','FD2 data'},...
+  'LineStyles', {'', '--', '', '--'});
+iplot(abs(FD1),abs(tffd1(1,2)),abs(FD2),abs(tffd2(1,2)),plpl)
+