Modeling, Simulation, and Flight Control Design of an Aircraft with Simulink
In this webinar, you will learn how you can apply Model-Based Design with MATLAB and Simulink for air vehicle design and automatic flight control. Engineers working in the aerospace field can use MATLAB and Simulink to improve the design workflow for:
• Defining aircraft geometry and importing DATCOM data to define vehicle forces and moments
• Creating a simulation to understand the vehicle dynamics
• Designing a flight control system with automatic gain generation to stabilize the vehicle and meet requirements
• Performing simulations to verify the design and visualize the simulation in a realistic 3D environment
The primary focus is for engineers whose workflow involves modeling, simulation, and control of aircraft. Many of the Model-Based Design and control concepts shown in this webinar can be applied to a variety of applications.
About the Presenter: Ryan Gordon is the product manager for Aerospace Toolbox and Aerospace Blockset at MathWorks. Before joining MathWorks, Ryan developed models and control algorithms for autonomous UAVs using Simulink at Northrop Grumman Aerospace Systems. He has a bachelor’s degree in aerospace engineering from Saint Louis University and a master’s degree in aerospace engineering focusing on dynamics and control from USC.
Recorded: 18 Jun 2013
Hello and welcome to the Modeling Simulation and Flight Control Design of an Aircraft with Simulink. My name is Ryan Gordon. I'm a product manager here at the MathWorks for the Aerospace Toolbox and Aerospace Blockset. To show you what we'll be doing today, I'm going to jump right over to Simulink and show you the model that we'll be designing.
Let me start by running the model, and here you'll see our full dynamic model along with control system for the aircraft seen visualized here on the left with the FlightGear. If I come into the pilot block, I have three main commands that I can send to the autopilot system that I'll actually be utilizing today. First, I have an altitude command, and when I'm in altitude hold mode I can send a command to the altitude, the aircraft will pitch to achieve the altitude and hold the altitude. I have a speed command to vary the speed using an auto throttle, and I have this auto climb engage command that will let me change between the altitude hold mode and a climbing mode where I go to max power and the aircraft will pitch to achieve the speed.
And when I activate that, you'll see the aircraft is now at max power and it's pitching up to achieve that 85 meters per second speed. And if I slow it down, you'll see it pitches up even more, because to achieve a 75 meters per second speed it needs a higher pitch angle. And if I disengage the auto climb, it will pitch back down to achieve that 2100 meter altitude command. And so today, I'm going to show you how you can design a dynamic system in Simulink for this aircraft. I'm going to show you how you can design this autopilot system for this aircraft and how you can visualize it in FlightGear using the Aerospace Blockset.
So how does this all work with MATLAB and Simulink? Well first, let's talk about the iterative design process for designing aircraft flight control. First, you need to design the dynamic model. So how do you do that? You'll start by determining the geometry of your vehicle, determining the aerodynamic characteristics of the vehicle based on that geometry-- this can be done through a number of different methods including wind tunnel testing. You'll create a simulation to verify that design, and once you have a simulation, you can design the flight control laws based on that model.
As an aircraft flight control designer, you may have to iterate through this process several times before you achieve your desired results, and while you're iterating through this design there are additional steps that you may also be working on such as creating a hardware in the loop simulation, building hardware and software such as the actual vehicle to do flight testing and then analyzing and visualizing those results from the flight test. Today, we'll focus on the top four highlighted blocks, but there are tools available to help you throughout this entire design process.
And this is how those first four steps map over to the webinar that I'm showing today. First, I'm going to model the aircraft dynamic system. I'll model the aerodynamics from DATCOM. DATCOM Is software designed by the US Air Force that allows you to input aircraft geometry, and it will tell you what the aerodynamic characteristics and coefficients of that geometry are based on the inputs. I won't cover how the DATCOM system actually works, but I will cover how you can use the results of DATCOM in MATLAB and Simulink.
I'll build up a three degree of freedom longitudinal dynamic model. I'll design the environment for my dynamic model for wind, gust, turbulence, and gravity. I'll design a flight control for two modes of flight-- the altitude tracking mode, and that maximum thrust climb mode that will allow me to make big step changes in climb by going to maximum power and controlling speed with pitch. I'll do that by using automatic PID tuners, and then I'll be able to visualize the transition between those two different modes of flight using state flow. And throughout this entire process, I can visualize the results in three dimensions using the Simulink to FlightGear interface as part of the Aerospace Blockset.
So let's start with that first step, modeling the aircraft dynamic system. For this step, I'll primarily be using, on top of MATLAB and Simulink, the Aerospace Toolbox and the Aerospace Blockset. These tools are going to allow me to rapidly design, simulate, and visualize my entire modeling design process. So this is where the Simulink to FlightGear lives, where the three DOF block lives that will allow me to just simply drag and drop a single block in to have a full three degree of freedom dynamics in Simulink. One of the first features I'll be showing is the DATCOM import and Simulink DATCOM interface. And this is where all of my environment models also live for my atmosphere, wind, and turbulence. So let's go back over to MATLAB and Simulink so I can show you what these are all about.
The first thing I want to do is visualize what my DATCOM data looks like. To do that, I found this function on the MathWorks File Exchange. So the MathWorks File Exchange is a place where current MATLAB users can go and share files that they've created that they think other people will find useful. And I used to show people this by just showing what the DATCOM input file looked like. But after looking at the File Exchange for some useful files I thought might help me, I found this Draw DATCOM Aircraft file. So this is available on the MathWorks File Exchange if you're interested. And if I run that file, it will create this three view drawing of the aircraft specification from the file that I input into DATCOM.
So you see, it's a wing, body, tail design. You can see the air foils that are input into the DATCOM system. And again, that three view of the aircraft. So like I said before, I won't cover how DATCOM works, but I will show you what the output looks like. And when we look here, you see the output isn't very useful in MATLAB. It's a text file. It's got all the information I need, but not in a very useful format. So what I'm going to use is the DATCOM Import tool with the Aerospace Toolbox. And we can see the line I run here. DATCOM Import on that output file from the DATCOM. And it processes the data. And if I take a look at that data, we can see now I've got a structure of all my aerodynamic coefficients for my flight conditions that I defined in my DATCOM file.
So what we see here is the two mach numbers, two altitudes, and five different values for angle of attack. And again, five different values of angle of attack, two altitudes, two mach numbers. Now, what you might need to do if you use the DATCOM import tool, DATCOM may not give you all the information you need when you run your input file through it. So if I take a look at my pitching moment, you see that it gave me these values-- I think this is 99,999, something way outside the scope of what that value could possibly be, and that tells me that I need to fill in those missing values. So I'll do that real quick by running a simple for loop to fill in the data. And after I've done that, now I've got-- I've simply just repeated the first data value throughout my system.
Now that I have all my data in a format where I have realistic values for all of the parameters, I can go over to Simulink and import this into Simulink using the DATCOM block available with the Aerospace Blockset. So this is the model I showed you at the beginning of the webinar. And in here is the aircraft dynamics, and this is where I'll be building up my dynamic model. What you'll notice is as of R2012B is we have these badges in the corner on some of these blocks. And what that means is this is a variant subsystem. And so for the purposes of this webinar, I have two variants. I have one variant that's fully done, because it takes a long time to build these up more than you want to watch me do in a webinar, and one vision that's got these holes where I'm going to fill in the holes with the blocks that are available in the Aerospace Blockset to help me build up the model.
To change the variants, you can come in here and use the Override option. There's also options available that you can use in the workspace to define the variant. So here's where the final version is. In the preliminary version there's three main subsystems. This is where the three degree of freedom simulation lives. And there's also a six DOF interface so that way, later on if I want to build the lateral directional dynamics, I can quickly iterate this process by dropping in a six DOF block instead of a three DOF block. I don't have the aerodynamics for the lateral directional derivatives, so I'm going to leave this as a three DOF right now.
The propulsion system is just a look-up table, really simple, not doing propulsion design today. So that's a very basic model. Here in the aerodynamics I've left these spaces open where I need to fill in the DATCOM data, the forces and moments, and I need to build my mach and dynamic pressure. And if I open up my Simulink Library browser, and I go to the Aerospace Blockset, we'll see there's a number of different utilities that are available in here. You see aerodynamics, actuators, environment, equations of motion. These are all common things that are used in the aircraft and spacecraft design that we've made available to you as part of the Aerospace Blockset to help simplify the iterative design process that I'm showing you today-- that one iteration that I'm doing today.
To get the aerodynamics for the DATCOM, I come into the aerodynamics sub library and I'll drag in the digital DATCOM forces and moments. And so it's pre-filled with this fact struct which isn't what I have mine named as. I actually have a prebuilt structure called static dynamics. And if I apply these changes, you'll notice after I click OK, that the inputs actually change to match the inputs required for that DATCOM structure. So what this allows me to do is quickly know what inputs are needed to look up the data from DATCOM, because this block will automatically determine what inputs are needed. And then I can just build out the inputs on the left hand side from my three DOF block that I'll put in later. And then I can bring this in, resize it, but I won't spend too much time resizing and filling in these blocks. I'll show you it all in the finished version because I don't want to waste your time showing you how to resize blocks and fit everything in.
For the forces and moments I have these aerodynamic coefficients. If I come in here, you'll see we have pre-lookup tables to get an index and a fraction of that index for angle of attack, mach number, altitude, and the elevator deflection that feeds into this elevator block subsystem. And we have things like our pitching moment that are defined as lookup tables, again in that static dynamic structure. Now, since they are only coefficients, I need to convert those coefficients to forces and moments. And how I'm going to do that is using my aerodynamic forces and moments block. And so here I can connect up the aerodynamic forces and moments, and all I need to put in is the reference area span and reference length, which are known characteristics of the aircraft, and that will allow me to quickly compute the forces and moments based on those coefficients.
Now again, I have these field out on the final version and I'll show you then a moment. Then finally, we have utilities to build up the common aircraft characteristics such as mach and dynamic pressure. So if I go into my search term here I can search right in the Aerospace Blockset from my library browser, I can find a mach block, bring this in. And the great thing here is again, it tells you what you need to calculate this. So you don't need-- if you're working on a team with many different engineers, maybe not every engineer is as familiar with aircraft. If you're working with someone who maybe does the gear, they're not necessarily going to know all that aircraft terminology that a GNC engineer is very comfortable with. So looking at the interface here, you know exactly what you need and it has a common interface between all these blocks.
And the final block I'll need is a dynamic pressure. And again, I could drag that in and we see they're using the same velocity, and then I just need to put in the density here and the speed of sound here. So again, I'm not going to connect these right now. I have these all connected up in the final version. And lastly, I want to build up a three degree of freedom simulation. This is a custom interface block I built. Again, so as I iterate through the design process I can just delete this and put in a six DOF block. And what we have in the Aerospace Blockset is a number of three degree of freedom and six degree of freedom models. So for six degree of freedom you can use Euler angles, or if you have a highly dynamic vehicle where you're worried about something like gimbal lock you could use the [INAUDIBLE] version of that block.
So for now, I'll use the simple three degree of freedom block. And you see I have a gravity input, but I have gravity defined in my environment so I'll say it's an internal gravity defined as zero and that will remove that input port. There's a number of initial conditions that need to be filled out here, so I'll show you then the final version. And this just drops right in. You know your forces-- your x-force, your z-force and your moment-- and you have a common interface that will allow you to interact with other aerospace [? block set ?] components because they all share common interface names to allow you to quickly iterate through this design process.
So now I'll come back to the top level of my model and change over to the final version to show you what that looks like when it's completed. And now you see using the variant subsystem that the final version is now highlighted since I've done the override. So here you see it's the same basic layout of those subsystems. If I come to my aerodynamics, you see the DATCOM block here, I've highlighted the Aerospace Blockset blocks in this pinkish red color to show you which blocks are in the Aerospace Blockset. You see the aerodynamic forces and moments. We've used model workspace variables, so those variables are actually connected to this model to define our references here. You see the mach number and dynamic pressure are simply connected in this subsystem. Same blocks I was showing you before. And our three DOF block. Again, using model workspace parameters defined inside of the model we have the initial conditions of the three degree of freedom block.
So now I can show you what I did to define the environment. So this is just kind of a tour of my system, because it doesn't really make sense in this short time frame to build up all these components individually. Take too long and it's really quite simple because of the Aerospace Blockset. Here you see the standard atmosphere model I'm using. And because it's an Aerospace Blockset block I have these dropdown menus that will allow me to define different atmospheric models depending on the flight scenario I want to simulate. So if I need a hot day, I can do a hot day. I can do a cold day. Different densities and pressures using this different model. For today we'll stick with the standard atmosphere model. This is the first iteration through our design process, right, so you want everything to be somewhat standard.
Our gravity is defined by the WGS84 model. And if I come in here to the wind model, we see I have a wind shear model, a gust model, and a turbulence model. And the turbulence model has a dropdown to define either Von Karman or Dryden turbulence. So this right here what you see in the picture is our truth plant model. The aircraft dynamics goes into the environment and the environment goes into the aircraft dynamics. We have this loop here where we have our entire system defined. Now, I'll go through the rest of the model and show you what else we have in here just to give you an idea of what all these other blocks represent.
We have the airframe actuators, which again, is a variant subsystem. This will allow me to change between maybe a feed through model, maybe I use SimScape SimHydraulics to build up this highly dynamic model, or maybe I just use a transfer function. This variant subsystem setup will allow me to change between those versions quickly. I have the flight sensors, and you see here I have used the Aerospace Blockset to build up a quick ideal airspeed correction, inertial measurement unit, and pressure altitude to model the actual sensors. And the air data computer is simply a series of first order holds to discreetize the data coming through. So we don't have an air data system models yet. As we iterate through this design process, we would build up something like a higher fidelity air data system.
And finally, we have that visualization that I've been talking about that I showed you at the very beginning. And I'm using a variance subsystem here, because there's two different ways you can send data to FlightGear-- you can use a simple version or a complex version that will allow you to visualize things like the cockpit displays, the deflections of the control surfaces-- but for today, I just use a simple FlightGear interface that we have where all I need to send is latitude, longitude, altitude, and the body angles to the FlightGear animation block, and that will allow me to visualize in FlightGear. And again, because this block is that reddish pink color, it's part of the Aerospace Blockset. It allows you to just drag and drop these components in, understand exactly what these components need to function properly, and then quickly interface, in this particular instance, with FlightGear.
And that's pretty much it for the model. So I've shown you how to model the dynamic system. Now, let's talk about how to design the flight control for two modes of flight. This is equally as complex as what I just showed, but I think I've got a good way to show you how you can use our automatic PID tuners to quickly design a flight control system, or any type of control system for that matter, based on what your design workflow is. As I mentioned twice before, I'm going to design two different control loops that I can change between using state flow that will allow me to visualize this change and simplify my control logic design process. First, I'll be designing the altitude tracking air path where I'll feedback altitude in the outer loop to allow the aircraft to pitch and control altitude while maintaining airspeed. The second is the max thrust climb air path where I can send a maximum throttle command to the engine and then pitch up and down to achieve the desired airspeed for fast step altitude changes.
I'll tune the gains for my system using the automatic PID tuning functionality available with Simulink control design. This will give me many options to tune for things like bandwidth, gain and phase margin-- I can observe the results in the time domain with a step response plot, or I can look in the frequency domain with Bodie response plots. In the two flight modes, using the state flow diagram as you see in the bottom right will simplify how I change between these two different flight modes and actively visualize which flight mode I'm in while I'm simulating this model.
So when you look at the control system, this is a basic control system diagram where you have your compensator, your model and your sensor. We're going to be focusing on the flight controls now. And if I was going to map this over to my full system, you see it's just this GNC avionics block that we'll be focusing on. So now I'll go back over to Simulink, dig into this GNC avionics block, and show you how you can design your flight controls based on the plant model that we already designed using MATLAB, Simulink, and Simulink control design. I won't need my library browser anymore, and I can make this full screen. Again, the GNC avionics-- oh, I guess that was an older version I had in that picture. This is now tuned flight controls is what I've called it.
The guidance system is simple feed through so we won't go into the guidance system. Again, iterate through the design process I have these subsystem layout. Allows me to quickly iterate. And in fact, I could have someone else design this entirely because it's separated from the actual autopilot system. And when I go into the autopilot system, we see my design. Now, I know you're thinking this looks a little complicated. So first, I'll remind you that I'm going to be taking questions at the end so feel free to ask me any questions at the end. But it's actually-- it's a lot simpler than it looks. And if you've never used Simulink before, when I show you some of the control design processes you can perform in this type of environment then I think you'll understand why this is such a powerful tool.
So what I have coming in here is this is my pitch rate into a PI controller. This is my z acceleration into a proportional controller, which is the equivalent of just having a gain there. So if you're familiar with gain blocks in Simulink, a p controller as part of the PID block is just a gain. It's nothing more complicated than that. Although, you could make it more complicated if you want using the additional functionality in there. But this allows you to use the PID tuner on an individual gain where you don't need to actually tune the full PID controller using the tuning functionality which I'll show in a moment. So backing up a little bit more, this is the flight path or gamma path where you have a gamma command coming into a proportional controller-- gamma error, excuse me.
Then we have this state flow diagram, which will determine which outer loop we use. If we're in altitude hold mode, the altitude error path comes into a proportional integral controller and that will feed into the gamma command. And I also have an auto throttle here which will feed into my throttle command. If I'm in that auto climb mode where I'm at max power and I want to pitch the aircraft up and down to hold my airspeed, I feedback calibrated airspeed and that will now feed into my gamma command. So it can actually switch between outer loops using this state flow diagram.
So I'll take a moment to go into the state flow diagram so that you can understand what that's all about. And then I can come back out here and show you what tuning these PID controllers is all about. So here's my state flow diagram. Not too much going on here. Only two modes. There could be state flow diagrams with hundreds of modes, so this is a pretty simple diagram by comparison. It comes into this normal flight mode. I could build this up to have failure modes, takeoff and landing modes, ground control mode, all sorts of different flight modes and have these separated in state flow. When it comes in, it determines if that auto climb's engaged. If it is, we're in that-- I call it takeoff climb mode because that's typically where you see that. And if you're in takeoff climb mode, the gamma command equals that takeoff climb command generated by the calibrated airspeed and my throttle goes to max which is 1, which is 100%.
Now, if the auto climb is no longer engaged or the pilot decides to override with an altitude command, we'll go into the altitude hold mode where we send the altitude command to the gamma controller, and the throttle command will follow the auto throttle. If the auto climb is reengaged and the pilot is not trying to override it, we'll come back over to the takeoff climb mode. To show what this looks like, I'll open up this pilot block in a new tab. This is one of the new features with R2012B is now we have tabs, so I can have that pilot block and quickly toggle-- now I've got to dig back down in here-- toggle between these two modes. So let me set this up to the default condition I started with and hit the Play button.
And what we see is OK, we're in the altitude hold mode because our auto climb is not engaged. Now, watch what happens when I engage the auto climb. Transitions over to that takeoff climb command. And when I turn off the auto climb, back into altitude hold where it allows you to toggle between these two modes and if I'm debugging my model and my flight control system real time while I'm actually playing this model, I can visualize which mode I'm in. So if it's not doing what I expect it to, I can come into the state flow diagram and say OK, well, I know I'm in the right mode, I know I'm in this altitude hold mode, so I know what I expect it to do while I'm in this mode and there's no guessing. I don't have to put scopes throughout my diagram to figure this out. It's all visualized right here for me.
OK, so that's state flow. It's a little bit different than Simulink. I hope it wasn't too complicated for you. Again, I'm taking questions at the end. So please, if you have any questions about this stuff I'll be answering them for you. So ask away. So I don't want anything to scare you away, think, oh, this is too complicated, because it's really great, helpful tool if you're doing this type of control design. OK, so we're back here. So I've shown you how I'm going to toggle between those two modes. Let me zoom all the way in to the very inside of the loop here. In aircraft design, at least the way I learned it, is you tune your controllers loop by loop. First I'll tune the pitch rate loop and then the z acceleration loop and then the flight path loop.
Now, we have tools that can tune all these loops at once available with the robust control toolbox, which unfortunately I won't have time to show you today. But I can show you the PID tuners which is really a way to visualize each one of these loops and tune the loops graphically. So the first thing I want to do is I will comment out this block. And essentially what that's like is if I deleted that block and the path was no longer connected. So I'm opening the loop here by using the comment out functionality available with the new Simulink. Now, all I have feeding into the elevator is this pitch rate error loop in the PI controller. When I open up the PID block, you'll see there's a lot of options here. This has already been tuned before, but just so you don't think I'm cheating, I'll set this to the default parameters.
I can choose between a number of different options, but I only need a proportional and integral. So if you're tuning a simple gain feedback, you don't have an integrator, you don't have a derivative, you can still use the PID tuner with that proportional path. So that gives you a lot of options and a lot of variability depending on what you want to do with this block, the PID block. So I've selected the PI controller, and I can use continuous time if I wanted to. But of course, this being something that I want to generate code for eventually, I'll leave this as discrete time. I set my sample time to TC. That's defined as 1 over 60 seconds.
I've actually put a limit here. The limit of my elevator is 20 degrees. So I said OK, I want to limit this between 20 and minus 20 degrees, and I put an anti-windup in here so that once it hits 20 degrees it won't keep integrating-- the integrator won't keep integrating. If I only had a proportional controller-- let's see if this works-- it doesn't give me the anti-windup option because there's nothing that can wind up. As soon as I drag in proportional integral it remembers what my choice was and puts it back on there. So the PID block is doing things that maybe you're already doing manually with integrators and gain blocks, but it makes it a little easier to integrate advanced functionality.
Now, the PID block itself is available with Simulink-- don't need any other tools for it. But what's not available with Simulink is this tune function. This is what Simulink control design is for. So let's check this out what happens when I hit this button. You see that it's launching the PID tuner. When the PID tuner comes up, it will choose what it thinks is a good response, and it looks at the linear system that it designs when you hit the tune button to determine that. So one thing you have to make sure of is that your system can be linearized using something like the linear analysis tool before you use the PID tuner to make sure it will work properly.
If this shows you 0, or it may give you a warning saying I can't linearized system, then you may need to make some changes to troubleshoot why your system is not linearizable. But in my case the system could be linearized, and it chose some parameters for an initial proportional integral values. Now, when I look at these parameters, I can also see what my time domain characteristics are as well as my frequency domain characteristics such as gain margin and phase margin-- very useful stuff for a controls engineer. I can use these sliders to get a faster response but sacrificing some gain margin. And I can observe the frequency domain and see that I'm actually really just adjusting the bandwidth, and the gains are changing accordingly. And we see the active update of the diagram here.
And I can observe not just the step reference tracking, I can also observe the controller effort. So I know I have 20 degree range positive and negative on the elevator, so maybe I want to limit the amount of effort the elevator is giving me. So here, I'd be using about three degrees of elevator to achieve that step response. I can also use Bodie response plot to look at things such as output disturbance rejection, the plant model, and the open loop response. And again, I've got everything I need here as a control designer to get my gains tuned for my flight control system. And once I hit Apply, I can see that my gains have been updated here.
But I'm going to set these back to the original values, which having practiced this a couple of times I know are minus 9.4 and minus 2, because all my other loops are tuned based on those values. So if I left that newly tuned values there, I'd have to re-tune all my loops and I don't want to do that, because I just go through the same process. Except here, you see I just have a proportional controller, and like I said previously, the PID tuner works for a proportional controller as well.
I've also tuned the altitude control that way, the climb speed controller, and the air speed controller. The altitude controller will also allow me to tune around the state flow diagram. So when I hit the tune button, it looks like my linear system's not quite as easily tuned, but I can tune with state flow in the loop. It knows what state I'm in when I hit that tune button, and it linearizes the system accordingly. It allows me to use this full control system without having to break it out into a simpler version, and still be able to tune my control loops.
Throughout this process I can turn on my record button. I've got a number of signals ready to record. And I can play the model. Maybe put in a new step for my altitude command. Wait for it to achieve that step response command. Once I hit Stop, all my recorded data will now be available in the simulation data inspector. So as I iterate throughout my design process, I can observe my signals run to run to see how things change. And I could see how my altitude command and my actual altitude control compare. And here I see it looks like a pretty good response.
I didn't let it run long enough. I could have used that visualization-- 3D visualization. A little hard to toggle back and forth in this webinar environment. But you can see the response tracked quite nicely to my altitude command. So it looks like things are working pretty good. And as I iterate through the process, re-tune my controllers, achieve my desired requirements, I can use the simulation data inspector and it will store all my runs here for comparison.
So to wrap this up, I've showed you how to model your dynamic aircraft system in Simulink, including the aerodynamics and the environment. I've shown you how you can use Simulink control design and state flow for complex flight controller design, and how to automatically tune gains with the PID tuner. So you can tune gains for systems that use proportional feedback loops, proportional integral, or PID control loops. Any combination can be tuned with the PID tuner. And I've shown you how you could visualize your results in 3D using the FlightGear interface from the Aerospace Blockset.
I want to remind you that I used the file exchange to get that visualization of the DATCOM data. I think the user community is a great asset where you can find files that are useful to you in the file exchange, check out MATLAB answers if you have a question, or check out one of the several blogs that we have so you can see what's new in MATLAB and Simulink and how it can be applied to your design challenges. Thank you.