Accelerating the pace of engineering and science

# Documentation Center

• Trials

## Airframe Trim and Linearize

This example shows how to trim and linearize an airframe in the Simulink environment using the Control System Toolbox™ software

Designing an autopilot with classical design techniques requires linear models of the airframe pitch dynamics for several trimmed flight conditions. The MATLAB technical computing environment can determine the trim conditions and derive linear state-space models directly from the nonlinear Simulink and Aerospace Blockset™ model. This step saves time and helps to validate the model. The Control System Toolbox functions allow you to visualize the motion of the airframe in terms of open-loop frequency or time responses.

Initialize Guidance Model

The first problem is to find the elevator deflection, and the resulting trimmed body rate (q), which will generate a given incidence value when the missile is traveling at a set speed. Once the trim condition is found, a linear model can be derived for the dynamics of the perturbations in the states around the trim condition.

```open_system('aeroblk_guidance_airframe');
```

Define State Values

```h_ini     = 10000/m2ft;      % Trim Height [m]
M_ini     = 3;               % Trim Mach Number
alpha_ini = -10*d2r;         % Trim Incidence [rad]
theta_ini = 0*d2r;           % Trim Flightpath Angle [rad]
v_ini = M_ini*(340+(295-340)*h_ini/11000); 	% Total Velocity [m/s]

q_ini = 0;               % Initial pitch Body Rate [rad/sec]
```

Find Names and Ordering of States from Simulink Model

```[sizes,x0,names]=aeroblk_guidance_airframe([],[],[],0);

state_names = cell(1,numel(names));
for i = 1:numel(names)
n = max(strfind(names{i},'/'));
state_names{i}=names{i}(n+1:end);
end
```

Specify Which States to Trim and Which States Remain Fixed

```fixed_states            = [{'U,w'} {'Theta'} {'Position'}];
fixed_derivatives       = [{'U,w'} {'q'}];        % w and q
fixed_outputs           = [];                     % Velocity
fixed_inputs            = [];

n_states=[];n_deriv=[];
for i = 1:length(fixed_states)
n_states=[n_states find(strcmp(fixed_states{i},state_names))]; %#ok<AGROW>
end
for i = 1:length(fixed_derivatives)
n_deriv=[n_deriv find(strcmp(fixed_derivatives{i},state_names))]; %#ok<AGROW>
end
n_deriv=n_deriv(2:end);                          % Ignore U
```

Trim Model

```[X_trim,U_trim,Y_trim,DX]=trim('aeroblk_guidance_airframe',x0,0,[0 0 v_ini]', ...
n_states,fixed_inputs,fixed_outputs, ...
[],n_deriv)  %#ok<NOPTS>
```
```X_trim =

1.0e+03 *

-0.0002
0.9677
-0.1706
0
0
-3.0480

U_trim =

0.1362

Y_trim =

-0.2160
199.2481

DX =

0
-14.0977
0.0000
-0.2160
967.6649
-170.6254

```

Derive Linear Model and View Frequency Response

```[A,B,C,D]=linmod('aeroblk_guidance_airframe',X_trim,U_trim);
if exist('control','dir')
airframe = ss(A(n_deriv,n_deriv),B(n_deriv,:),C([2 1],n_deriv),D([2 1],:));
set(airframe,'StateName',state_names(n_deriv), ...
'InputName',{'Elevator'}, ...
'OutputName',[{'az'} {'q'}]);

zpk(airframe)
ltiview('bode',airframe)
end
```
```ans =

From input "Elevator" to output...
-170.45 (s-28.61) (s+56.96)
az:  ---------------------------
(s^2 + 30.04s + 288.9)

-194.66 (s+1.475)
q:  ----------------------
(s^2 + 30.04s + 288.9)

Continuous-time zero/pole/gain model.

```