function [state_eq, obser_eq, Nx, Ny, Nu, NparSys, Nparam, NparID, dt, Ndata, ... t, Z, Uinp, param, parFlag, x0, iSD, SDyError, output_file] = mDefCase04c(test_case, target_log) % Definition of model, flight data, initial values etc. % test_case = 304 -- Longitudinal motion: UAVs % Nonlinear model in terms of dimensional derivatives as function of % variables in the stability axes (u, alfa): % states - u, alpha, theta, q % outputs - u, alpha, theta, q, qdot, ax, az % inputs - de, thrust % % Inputs % test_case test case number % % Outputs % state_eq function to code right hand sides of state equations % obser_eq function to code right hand sides of observation equations % Nx number of states % Ny number of observation variables % Nu number of input (control) variables % NparSys number of system parameters % Nparam total number of system and bias parameters % NparID total number of parameters to be estimated (free parameters) % dt sampling time % Ndata total number of data points for Nzi time segments % t time vector % Z observation variables: Data array of measured outputs (Ndata,Ny) % Uinp input variables: Data array of measured input (Ndata,Nu) % param initial starting values for unknown parameters (aerodynamic derivatives) % parFlag flags for free and fixed parameters % x0 initial conditions on state variables % iSD Flag to specify optionally initial R (default; 0) % SDyError standard-deviations of output errors to compute initial covariance % matrix R (required only for iSD ~= 0) if (nargin < 1), target_log = 0, end; % Constants d2r = pi/180; r2d = 180/pi; %---------------------------------------------------------------------------------------- % Model definition state_eq = 'xdot_TC04b_hfb_lon'; % Function for state equations obser_eq = 'obs_TC04c_hfb_lon'; % Function for observation equations Nx = 4; % Number of states Ny = 6; % Number of observation variables Nu = 1; % Number of input (control) variables NparSys = 10; % Number of system parameters Nparam = NparSys + Nx; % Total number of parameters to be estimated dt = 0.02; % Sampling time iSD = 0; % Initial R option (default; 0) disp(['Test Case = ', num2str(test_case)]); %---------------------------------------------------------------------------------------- % Load flight data for Nzi time segments to be analyzed and concatenate log_file = ''; output_file = sprintf('../CVS_IGNORE/FEM_out_%d_%d.csv', test_case, target_log); U0 = 20; % トリム状態における対気速度[m/s] W0 = 0; % トリム状態における下方向速度[m/s] THETA0 = 0; % トリム状態におけるピッチ角(安定軸) AOFFSET = 0; % ピトー管のオフセット DE_PARAM = [16; 2910; 0.00025]; % インデックス、オフセット、SF % Flags for free and fixed parameters parFlag = [1; 1; ... 1; 1; 1; 1; ... 1; 1; 1; 1; ... 1; 1; 1; 1]; % Initial starting values for unknown parameters (aerodynamic derivatives) % Xu, Xa, Zu, Za, Zq, Zde, Mu, Ma, Mq, Mde, f11, f22, f33, f44 %param = [....]; % Initial conditions on state variables u, alpha, theta, q %x0 = [....]; if (target_log < 100), disp('Longitudinal motion, nonlinear model -- Exective Jet R/C without dt: Nx=4, Ny=6, Nu=1') DE_PARAM = [17; 2910; 0.00025]; files = { ... '../276815', % 0 '../276887', % 1 '../../091228_si/CVS_IGNORE/080806_watarase/276815.0.e3', % 2 '../../091228_si/CVS_IGNORE/080806_watarase/276887.0.e3'};% 3 log_file = [char(files(target_log + 1)), '.csv']; output_file = [char(files(target_log + 1)), '.fem.csv']; param = [-3.00000D+00; 2.00000D+00; ... -1.00000D+00; -1.00000D+02; -3.00000D+00; -9.00000D+00; ... 0.00000D-00; -4.00000D+01; -8.00000D+00; -1.00000D+02; ... 1.00000D-00; 1.00000D-01; 1.00000D-02; 1.00000D-02]; U0 = 17.0; x0 = [3; 1*d2r; 1*d2r; 0*d2r]; iSD = 1; SDyError = 1./[1E0, 1E-3, 1E-4, 1E-4, 1E1, 1E0]'.^0.5; % V, alpha, theta, q, ax, az elseif (target_log < 200), disp('Longitudinal motion, nonlinear model -- MUAV without dt: Nx=4, Ny=6, Nu=1') DE_PARAM = [16; 3334; -0.0134 * d2r]; files = { '272738.96.e3'; % 100 '272974.95.e3'; % 101 '272752.ep'; % 102 '272777.8.ep'; % 103 '281508.95.e3'; % 104 '281680.95.e3'; % 105 '281699.5.ep'; % 106 '281872.6.ep', % 107 '272752.ep.ppmra'}; % 108 dirname = '../../091228_si/CVS_IGNORE/081105_katsuma/'; log_file = [dirname, char(files(target_log - 99)), '.csv']; output_file = [dirname, char(files(target_log - 99)), '.fem.csv']; param = [-3.00000D+00; 2.00000D+00; ... -1.00000D+00; -1.00000D+02; -3.00000D+00; -9.00000D+00; ... 0.00000D-00; -4.00000D+01; -8.00000D+00; -1.00000D+02; ... 1.00000D-00; 1.00000D-01; 1.00000D-02; 1.00000D-01]; AOFFSET = -4 * d2r; if target_log == 105, parFlag = [1; 1; ... 1; 1; 1; 1; ... 1; 1; 1; 1; ... 1; 1; 1; 0]; U0 = 16.0; THETA0 = 0 * d2r; %x0 = [2; 1*d2r; 1*d2r; 1*d2r]; iSD = 1; SDyError = 1./[1E0, 1E-3, 1E-2, 1E-2, 1E-1, 1E-0]'.^0.5; % V, alpha, theta, q, ax, az elseif target_log == 102, parFlag = [1; 1; ... 1; 1; 1; 1; ... 1; 1; 1; 1; ... 1; 1; 1; 1]; param = [-3.00000D+00; 2.00000D+00; ... -1.00000D+00; -1.00000D+02; -3.00000D+00; -9.00000D+00; ... 0.00000D-00; -4.00000D+01; -8.00000D+00; -1.00000D+02; ... 1.00000D-00; 1.00000D-01; 1.00000D-02; 1.00000D-01]; U0 = 17.0; THETA0 = 15 * d2r; x0 = [2; 1*d2r; 1*d2r; 1*d2r]; %iSD = 1; SDyError = 1./[1E0, 1E-3, 1E-2, 1E-1, 1E0, 1E0]'.^0.5; % V, alpha, theta, q, ax, az elseif target_log == 108, parFlag = [1; 1; ... 1; 1; 1; 1; ... 1; 1; 1; 1; ... 1; 1; 1; 0]; param = [-3.00000D+00; 2.00000D+00; ... -1.00000D+00; -1.00000D+02; -3.00000D+00; -9.00000D+00; ... 0.00000D-00; -4.00000D+01; -8.00000D+00; -1.00000D+02; ... 1.00000D-00; 1.00000D-01; 1.00000D-02; 4.00000D-01]; U0 = 17.0; AOFFSET = 0; THETA0 = 5 * d2r; %x0 = [1; 1*d2r; 1*d2r; 1*d2r]; %iSD = 1; SDyError = 1./[1E-0, 1E-1, 1E-2, 1E-3, 1E-0, 1E-0]'.^0.5; % V, alpha, theta, q, ax, az else U0 = 17.0; THETA0 = 15 * d2r; x0 = [3; 1*d2r; 1*d2r; 1*d2r]; %iSD = 1; %SDyError = 1./[1E0, 1E-3, 1E-2, 1E-4, 1E0, 1E0]'.^0.5; % V, alpha, theta, q, ax, az end elseif (target_log < 250), disp('Longitudinal motion, nonlinear model -- Orca without dt: Nx=4, Ny=6, Nu=1') DE_PARAM = [16; 2973; -0.03528 * d2r]; files = { '269086.0.e3', % 200 '269095.0.e3', % 201 '269138.0.ep', % 202 '269149.0.erc', % 203 '269161.0.erc', % 204 '269180.0.td', % 205 '269206.0.e3', % 206 '269209.5.e3', % 207 '269230.0.ep', % 208 '269237.0.ep', % 209 '269262.5.erc'};% 210 dirname = '../../091228_si/CVS_IGNORE/090623_taiki/'; log_file = [dirname, char(files(target_log - 199)), '.csv']; output_file = [dirname, char(files(target_log - 199)), '.fem.csv']; param = [-3.00000D+00; 2.00000D+00; ... -1.00000D+00; -1.00000D+02; -3.00000D+00; -9.00000D+00; ... 0.00000D-00; -4.00000D+01; -8.00000D+00; -1.00000D+02; ... 1.00000D+00; 1.00000D-02; 1.00000D-02; 1.00000D-01]; U0 = 22.0; elseif (target_log < 300), disp('Longitudinal motion, nonlinear model -- Orca without dt: Nx=4, Ny=6, Nu=1') %DE_PARAM = [16; 2910; 0.00025]; files = { '266802.8.e3', % 250 '266828.8.e3', % 251 '270377.5.e3', % 252 '270401.4.ep', % 253 '270445.7.erc', % 254 '371066.2.e3', % 255 '371192.5.erc'};% 256 dirname = '../../091228_si/CVS_IGNORE/091012_taiki/'; log_file = [dirname, char(files(target_log - 249)), '.csv']; output_file = [dirname, char(files(target_log - 249)), '.fem.csv']; end disp(['Log NO. = ', num2str(target_log), '; file => ', log_file]); data = load(log_file); % Number of data points Ndata = size(data,1); izhf = Ndata; % Generate new time axis t = [0:dt:Ndata*dt-dt]'; % Observation variables V, alpha, theta, q, qdot, ax, az Z = [data(:,12),data(:,13)-AOFFSET,data(:,9),data(:,35),data(:,31),data(:,33)]; % Input variables de Uinp = [(data(:,DE_PARAM(1)) - DE_PARAM(2)) * DE_PARAM(3)]; % トリム状態における対気速度[m/s], 下方向速度[m/s], ピッチ角(安定軸), ピトー管オフセット global stables; stables = [U0, W0, THETA0]; % Total number of free parameters NparID = size(find(parFlag~=0),1); % Initial conditions on state variables beta, p, r, phi, psi if ~exist('x0'), x0 = [mean(Z(1:10,1)) - stables(1); mean(Z(1:10,2)); mean(Z(1:10,3)); mean(Z(1:10,4))]; end if ~exist('SDyError'), SDyError = []; end