function [fit_Aslow, sigma_Aslow, fit_slow_pole, sigma_slow_pole, dt, sigma_dt, tf_slow] = Fit_Atemp(FitServo_0dB, Act, Cav, varargin) %UNTITLED9 Summary of this function goes here % Detailed explanation goes here % plot or not if mnismember(varargin,'Plot') doplot = 'Plot'; else doplot = 'noPlot'; end Freq = containers.Map; Abs = containers.Map; Phase = containers.Map; Servo = containers.Map; CG = 26; FG = 30; fast_pol = -1; K1PSL_TTFSS_TEMP_FILTER_GAIN = 20; init_Aslow = -2e9; init_Apole = 1e-1; % importdata mnimportdata('O1206_3.txt',Freq,Abs,Phase,'CROSS_FSS','tf'); Servo('TTFSS_PZT') = FitServo_0dB('TTFSS_PZT')*10^(CG/20)*10^(FG/20)*fast_pol; Servo('TTFSS_SLOW') = FitServo_0dB('TTFSS_SLOW')*10^(CG/20)*10^(FG/20)*fast_pol*K1PSL_TTFSS_TEMP_FILTER_GAIN; [fit_Aslow, sigma_Aslow, fit_slow_pole, sigma_slow_pole, dt, sigma_dt] = mn_estimate_Aslow(Freq('CROSS_FSS'),Abs('CROSS_FSS'),Phase('CROSS_FSS'),Cav('LPF_RefCav_1124'),... init_Aslow, init_Apole, Servo('TTFSS_PZT'),Servo('TTFSS_SLOW'),Act('NPRO_PZT'),doplot); tf_slow = fit_Aslow*tf(1,[1/fit_slow_pole/2/pi 1]); end function [fit_Aslow, sigma_Aslow, fit_slow_pole, sigma_slow_pole, dt, sigma_dt] = mn_estimate_Aslow(freq, gain, phase, Hpc, predict_Aslow, predict_pole_slow, servo_model_pzt,servo_model_slow,Apzt,varargin) %mn_estimate_Apzt % the script to estimate the actuator efficiency of NPRO PZT [xData, yData] = prepareCurveData( freq*2*pi, gain ); % create string of fitting equation [z,p,k] = zpkdata(Hpc); [real_zero_index,comp_zero_index] = class_real_comp(z{1}); [real_pole_index,comp_pole_index] = class_real_comp(p{1}); Hrefcav_str = make_tf_str(z{1},p{1},k,[],[],real_zero_index,comp_zero_index,real_pole_index,comp_pole_index); SLOW_str = ['(1+dAslow)*' num2str(predict_Aslow) '/(1i*w/(' num2str(predict_pole_slow*2*pi) '*(1+dpole_slow))+1)']; PZT_str = num2str(Apzt); [z,p,k] = zpkdata(servo_model_pzt); [real_zero_index,comp_zero_index] = class_real_comp(z{1}); [real_pole_index,comp_pole_index] = class_real_comp(p{1}); servo_str_pzt = make_tf_str(z{1},p{1},k,[],[],real_zero_index,comp_zero_index,real_pole_index,comp_pole_index); [z,p,k] = zpkdata(servo_model_slow); [real_zero_index,comp_zero_index] = class_real_comp(z{1}); [real_pole_index,comp_pole_index] = class_real_comp(p{1}); servo_str_slow = make_tf_str(z{1},p{1},k,[],[],real_zero_index,comp_zero_index,real_pole_index,comp_pole_index); fit_str = ['abs(' Hrefcav_str '*' servo_str_slow '*' SLOW_str '/'... '(1+' Hrefcav_str '*' servo_str_pzt '*' PZT_str '))']; % Set up fittype and options. ft = fittype( fit_str, 'independent', 'w', 'dependent', 'y' ); opts = fitoptions( 'Method', 'NonlinearLeastSquares' ); opts.Display = 'Off'; opts.StartPoint = [0. 0.]; opts.Robust = 'Bisquare'; % Fit model to data. [fitresult, ~] = fit( xData, yData, ft, opts ); fit_Aslow = (1+fitresult.dAslow)*predict_Aslow fit_slow_pole = (1+fitresult.dpole_slow)*predict_pole_slow tf_slow = fit_Aslow*tf(1,[1/fit_slow_pole/2/pi 1]); fit_model = Hpc*servo_model_slow*tf_slow / (1+Hpc*servo_model_pzt*Apzt); sigma = confint(fitresult,0.6827); namelist = coeffnames(fitresult); sigma_Aslow = abs(fitresult.dAslow-sigma(mnismember(namelist,'dAslow')))*predict_Aslow; sigma_slow_pole = abs(fitresult.dpole_slow-sigma(mnismember(namelist,'dpole_slow')))*predict_pole_slow; % [z,p,k] = zpkdata(fit_model); % [real_zero_index,comp_zero_index] = class_real_comp(z{1}); % [real_pole_index,comp_pole_index] = class_real_comp(p{1}); % str_olg = make_tf_str(z{1},p{1},k,[],[],real_zero_index,comp_zero_index,real_pole_index,comp_pole_index); % str_fit = ['unwrap(angle(' str_olg '*exp(-1i*w*dt)))']; % fitting_data_c = gain.*exp(1i*phase*pi/180); % fitting_angle = unwrap(angle(fitting_data_c)); % % [xData, yData] = prepareCurveData( freq*2*pi, fitting_angle ); % % Set up fittype and options. % ft = fittype( str_fit, 'independent', 'w', 'dependent', 'y' ); % opts = fitoptions( 'Method', 'NonlinearLeastSquares' ); % opts.Display = 'Off'; % opts.StartPoint = [0.]; % opts.Robust = 'LAR'; % % Fit model to data. % [fitresult, ~] = fit( xData, yData, ft, opts ); % dt = fitresult.dt; % sigma = confint(fitresult,0.6827); % sigma_dt = sigma(1); % % % fit_model = fit_model*tf(1,1,'InputDelay',dt); if mnismember(varargin,'Plot') model_c = mnbode_list(fit_model,freq,'c'); mnbode(freq,gain,phase,freq,abs(model_c),angle(model_c)*180/pi,... 'linestyle',{'*','-','-'},'title','C_{aompzt} fitting'); end end