Main Content

Airframe Trim and Linearize with Simulink Control Design

This example shows how to trim and linearize an airframe using Simulink® Control Design™ 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 Simulink Control Design 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

Define the state values for trimming:

  • Height [m]

  • Mach Number

  • Incidence [rad]

  • Flightpath Angle [rad]

  • Total Velocity [m/s]

  • Initial Pitch Body Rate [rad/sec]

heightIC    = 10000/m2ft;
machIC      = 3;
alphaIC     = -10*d2r;
thetaIC     = 0*d2r;
velocityIC  = machIC*(340+(295-340)*heightIC/11000);
pitchRateIC = 0;

Set Operating Point and State Specifications

The first state specifications are Position states. The second state specification is Theta. Both are known, but not at steady state. The third state specifications are body axis angular rates, of which the variable w is at steady state.

opspec = operspec('aeroblk_guidance_airframe');
opspec.States(1).Known = [1;1];
opspec.States(1).SteadyState = [0;0];
opspec.States(2).Known = 1;
opspec.States(2).SteadyState = 0;
opspec.States(3).Known = [1 1];
opspec.States(3).SteadyState = [0 1];

Search for Operating Point, Set I/O, Then Linearize

Find the operating point that meets the state specification and then derive the linear model using the specified input and outputs.

op = findop('aeroblk_guidance_airframe',opspec);

io(1) = linio('aeroblk_guidance_airframe/Fin Deflection',1,'input');
io(2) = linio('aeroblk_guidance_airframe/Selector',1,'output');
io(3) = linio(sprintf(['aeroblk_guidance_airframe/Aerodynamics &\n', ...
                       'Equations of Motion']),3,'output');

sys = linearize('aeroblk_guidance_airframe',op,io);
 Operating point search report:
---------------------------------

opreport = 


 Operating point search report for the Model aeroblk_guidance_airframe.
 (Time-Varying Components Evaluated at time t=0)

Operating point specifications were successfully met.
States: 
----------
   Min         x         Max       dxMin        dx       dxMax   
__________ __________ __________ __________ __________ __________
                                                                 
(1.) aeroblk_guidance_airframe/Aerodynamics & Equations of Motion/3DOF (Body Axes)/Position
    0          0          0         -Inf     967.6649     Inf    
-3047.9999 -3047.9999 -3047.9999    -Inf    -170.6254     Inf    
(2.) aeroblk_guidance_airframe/Aerodynamics & Equations of Motion/3DOF (Body Axes)/Theta
    0          0          0         -Inf     -0.21604     Inf    
(3.) aeroblk_guidance_airframe/Aerodynamics & Equations of Motion/3DOF (Body Axes)/U,w
 967.6649   967.6649   967.6649     -Inf     -14.0977     Inf    
-170.6254  -170.6254  -170.6254      0      -7.439e-08     0     
(4.) aeroblk_guidance_airframe/Aerodynamics & Equations of Motion/3DOF (Body Axes)/q
   -Inf     -0.21604     Inf         0      3.3582e-08     0     

Inputs: 
----------
  Min      u      Max  
_______ _______ _______
                       
(1.) aeroblk_guidance_airframe/Fin Deflection
 -Inf   0.13615   Inf  

Outputs: 
----------
   Min         y         Max    
__________ __________ __________
                                
(1.) aeroblk_guidance_airframe/q
   -Inf     -0.21604     Inf    
(2.) aeroblk_guidance_airframe/az
   -Inf    -7.439e-08    Inf    

Select Trimmed States, Create LTI Object, and Plot Bode Response

Find index of desired states in the state vector. Then create the LTI object and view the frequency response as a Bode diagram.

names = sys.StateName;
q_idx = find(strcmp('q',names));
az_idx = find(strcmp('U,w(2)',names));

airframe = ss(sys.A([az_idx q_idx],[az_idx q_idx]),sys.B([az_idx q_idx],:),sys.C(:,[az_idx q_idx]),sys.D);

set(airframe,'inputname',{'Elevator'}, ...
             'outputname',[{'az'} {'q'}]);

linearSystemAnalyzer('bode',airframe);

Copyright 1990-2023 The MathWorks, Inc.

See Also

Blocks

Functions