Bode frequency response of dynamic system
collapse all in page
Syntax
[mag,phase,wout]= bode(sys)
[mag,phase,wout]= bode(sys,w)
[mag,phase,wout,sdmag,sdphase]= bode(sys,w)
bode(___)
Description
[mag,phase,wout]= bode(sys)
computes the frequency response of dynamic system model sys
and returns the magnitude and phase of the response at each frequency in the vector wout
. The function automatically determines frequencies in wout
based on system dynamics.
example
[mag,phase,wout]= bode(sys,w)
returns the response data at the frequencies specified by w
. You can specify a frequency range or a vector of frequencies.
example
[mag,phase,wout,sdmag,sdphase]= bode(sys,w)
returns the estimated standard deviation of the magnitude and phase values for identified model sys
.
example
bode(___)
plots the frequency response of sys with default plotting options for all of the previous input argument combinations. The plot displays the magnitude (in dB) and phase (in degrees) of the system response as a function of frequency. For more plot customization options, use bodeplot.
To plot responses for multiple dynamic systems on the same plot, you can specify
sys
as a comma-separated list of models. For example,bode(sys1,sys2,sys3)
plots the responses for three models on the same plot.To specify a color, line style, and marker for each system in the plot, specify a
LineSpec
value for each system. For example,bode(sys1,LineSpec1,sys2,LineSpec2)
plots two models and specifies their plot style. For more information on specifying aLineSpec
value, see bodeplot.
example
Examples
collapse all
Bode Plot of Dynamic System
This example uses:
- Control System ToolboxControl System Toolbox
Open Live Script
Create a Bode plot of the following continuous-time SISO dynamic system.
H = tf([1 0.1 7.5],[1 0.12 9 0 0]);bode(H)
bode
automatically selects the plot range based on the system dynamics.
Bode Plot at Specified Frequencies
This example uses:
- Control System ToolboxControl System Toolbox
Open Live Script
Create a Bode plot over a specified frequency range. Use this approach when you want to focus on the dynamics in a particular range of frequencies.
H = tf([-0.1,-2.4,-181,-1950],[1,3.3,990,2600]);bode(H,{1,100})grid on
The cell array {1,100}
specifies the minimum and maximum frequency values in the Bode plot. When you provide frequency bounds in this way, the function selects intermediate points for frequency response data.
Alternatively, specify a vector of frequency points to use for evaluating and plotting the frequency response.
w = [1 5 10 15 20 23 31 40 44 50 85 100];bode(H,w,'.-')grid on
bode
plots the frequency response at the specified frequencies only.
Compare Bode Plots of Several Dynamic Systems
This example uses:
- Control System ToolboxControl System Toolbox
Open Live Script
Compare the frequency response of a continuous-time system to an equivalent discretized system on the same Bode plot.
Create continuous-time and discrete-time dynamic systems.
H = tf([1 0.1 7.5],[1 0.12 9 0 0]);Hd = c2d(H,0.5,'zoh');
Create a Bode plot that displays both systems.
bode(H,Hd)
The Bode plot of a discrete-time system includes a vertical line marking the Nyquist frequency of the system.
Bode Plot with Specified Line Attributes
This example uses:
- Control System ToolboxControl System Toolbox
Open Live Script
Specify the line style, color, or marker for each system in a Bode plot using the LineSpec
input argument.
H = tf([1 0.1 7.5],[1 0.12 9 0 0]);Hd = c2d(H,0.5,'zoh');bode(H,'r',Hd,'b--')
The first LineSpec
, 'r'
, specifies a solid red line for the response of H
. The second LineSpec
, 'b--'
, specifies a dashed blue line for the response of Hd
.
Obtain Magnitude and Phase Data
This example uses:
- Control System ToolboxControl System Toolbox
Open Live Script
Compute the magnitude and phase of the frequency response of a SISO system.
If you do not specify frequencies, bode
chooses frequencies based on the system dynamics and returns them in the third output argument.
H = tf([1 0.1 7.5],[1 0.12 9 0 0]);[mag,phase,wout] = bode(H);
Because H
is a SISO model, the first two dimensions of mag
and phase
are both 1. The third dimension is the number of frequencies in wout
.
size(mag)
ans = 1×3 1 1 41
length(wout)
ans = 41
Thus, each entry along the third dimension of mag
gives the magnitude of the response at the corresponding frequency in wout
.
Magnitude and Phase of MIMO System
This example uses:
- Control System ToolboxControl System Toolbox
Open Live Script
For this example, create a 2-output, 3-input system.
rng(0,'twister'); % For reproducibilityH = rss(4,2,3);
For this system, bode
plots the frequency responses of each I/O channel in a separate plot in a single figure.
bode(H)
Compute the magnitude and phase of these responses at 20 frequencies between 1 and 10 radians.
w = logspace(0,1,20);[mag,phase] = bode(H,w);
mag
and phase
are three-dimensional arrays, in which the first two dimensions correspond to the output and input dimensions of H
, and the third dimension is the number of frequencies. For instance, examine the dimensions of mag
.
size(mag)
ans = 1×3 2 3 20
Thus, for example, mag(1,3,10)
is the magnitude of the response from the third input to the first output, computed at the 10th frequency in w
. Similarly, phase(1,3,10)
contains the phase of the same response.
Bode Plot of Identified Model
Open Live Script
Compare the frequency response of a parametric model, identified from input/output data, to a nonparametric model identified using the same data.
Identify parametric and nonparametric models based on data.
load iddata2 z2;w = linspace(0,10*pi,128);sys_np = spa(z2,[],w);sys_p = tfest(z2,2);
Using the spa
and tfest
commands requires System Identification Toolbox™ software.
sys_np
is a nonparametric identified model. sys_p
is a parametric identified model.
Create a Bode plot that includes both systems.
bode(sys_np,sys_p,w);legend('sys-np','sys-p')
ans = Legend (sys-np, sys-p) with properties: String: {'sys-np' 'sys-p'} Location: 'northeast' Orientation: 'vertical' FontSize: 8.1000 Position: [0.8049 0.8257 0.1736 0.0884] Units: 'normalized' Use GET to show all properties
You can display the confidence region on the Bode plot by right-clicking the plot and selecting Characteristics > Confidence Region.
Obtain Magnitude and Phase Standard Deviation Data of Identified Model
Open Live Script
Compute the standard deviation of the magnitude and phase of an identified model. Use this data to create a 3σ plot of the response uncertainty.
Identify a transfer function model based on data. Obtain the standard deviation data for the magnitude and phase of the frequency response.
load iddata2 z2;sys_p = tfest(z2,2);w = linspace(0,10*pi,128);[mag,ph,w,sdmag,sdphase] = bode(sys_p,w);
Using the tfest
command requires System Identification Toolbox™ software.
sys_p
is an identified transfer function model. sdmag
and sdphase
contain the standard deviation data for the magnitude and phase of the frequency response, respectively.
Use the standard deviation data to create a 3σ plot corresponding to the confidence region.
mag = squeeze(mag);sdmag = squeeze(sdmag);semilogx(w,mag,'b',w,mag+3*sdmag,'k:',w,mag-3*sdmag,'k:');
Bode Plot of Model with Complex Coefficients
This example uses:
- Control System ToolboxControl System Toolbox
Open Live Script
Create a Bode plot of a model with complex coefficients and a model with real coefficients on the same plot.
rng(0)A = [-3.50,-1.25-0.25i;2,0];B = [1;0];C = [-0.75-0.5i,0.625-0.125i];D = 0.5;Gc = ss(A,B,C,D);Gr = rss(5);bodeplot(Gc,Gr)legend("Complex-coefficient model","Real-coefficient model",Location="southwest");
In log frequency scale, the plot shows two branches for complex-coefficient models, one for positive frequencies, with a right-pointing arrow, and one for negative frequencies, with a left-pointing arrow. In both branches, the arrows indicate the direction of increasing frequencies. The plots for real-coefficient models always contain a single branch with no arrows.
You can change the frequency scale of the Bode plot by right-clicking the plot and selecting Properties. In the Property Editor dialog, on the Units tab, set the frequency scale to linear scale
. Alternatively, you can use the bodeplot
function and modify the returned chart object.
bp = bodeplot(Gc,Gr);bp.FrequencyScale = "linear";legend("Complex-coefficient model","Real-coefficient model",Location="southwest");
In linear frequency scale, the plot shows a single branch with a symmetric frequency range centered at a frequency value of zero. The plot also shows the negative-frequency response of a real-coefficient model when you plot the response along with a complex-coefficient model.
Input Arguments
collapse all
sys
— Dynamic system
dynamic system model | model array
Dynamic system, specified as a SISO or MIMO dynamic system model or array of dynamic system models. Dynamic systems that you can use include:
Continuous-time or discrete-time numeric LTI models, such as tf (Control System Toolbox), zpk (Control System Toolbox), or ss (Control System Toolbox) models.
Sparse state-space models, such as sparss (Control System Toolbox) or mechss (Control System Toolbox) models. Frequency grid w must be specified for sparse models.
Generalized or uncertain LTI models such as genss (Control System Toolbox) or uss (Robust Control Toolbox) models. Using uncertain models requires Robust Control Toolbox™ software.
For tunable control design blocks, the function evaluates the model at its current value to plot the response.
For uncertain control design blocks, the function plots the nominal value and random samples of the model.
Frequency-response data models such as
frd
models. For such models, the function plots the response at the frequencies defined in the model.Identified LTI models, such as idtf, idss, or idproc models.
If sys
is an array of models, the plot shows responses of all models in the array on the same axes.
w
— Frequencies
{wmin,wmax}
| vector | []
Frequencies at which to compute the response, specified as one of the following:
Cell array of the form
{wmin,wmax}
— Compute the response at frequencies in the range fromwmin
towmax
. Ifwmax
is greater than the Nyquist frequency of sys, the response is computed only up to the Nyquist frequency.Vector of frequencies — Compute the response at each specified frequency. For example, use logspace to generate a row vector with logarithmically spaced frequency values. The vector
w
can contain both positive and negative frequencies.[]
— Automatically select frequencies based on system dynamics.
For models with complex coefficients, if you specify a frequency range of [wmin,wmax] for your plot, then in:
Log frequency scale, the plot frequency limits are set to [wmin,wmax] and the plot shows two branches, one for positive frequencies [wmin,wmax] and one for negative frequencies [–wmax,–wmin].
Linear frequency scale, the plot frequency limits are set to [–wmax,wmax] and the plot shows a single branch with a symmetric frequency range centered at a frequency value of zero.
Specify frequencies in units of rad/TimeUnit
, where TimeUnit
is the TimeUnit
property of the model.
Output Arguments
collapse all
mag
— Magnitude of system response
3-D array
Magnitude of the system response in absolute units, returned as a 3-D array. The dimensions of this array are (number of system outputs)-by-(number of system inputs)-by-(number of frequency points).
For SISO systems,
mag(1,1,k)
gives the magnitude of the response at thek
th frequency in wout. For an example, see Obtain Magnitude and Phase Data.For MIMO systems,
mag(i,j,k)
givesthe magnitude of the response at thek
th frequencyfrom thej
th input to thei
thoutput. For an example, see Magnitude and Phase of MIMO System.
To convert the magnitude from absolute units to decibels, use:
magdb = 20*log10(mag)
phase
— Phase of system response
3-D array
Phase of the system response in degrees, returned as a 3-D array. The dimensions of this array are (number of system outputs)-by-(number of system inputs)-by-(number of frequency points).
For SISO systems,
phase(1,1,k)
gives the phase of the response at thek
th frequency in wout. For an example, see Obtain Magnitude and Phase Data.For MIMO systems,
phase(i,j,k)
gives the phase of the response at thek
th frequency from thej
th input to thei
th output. For an example, see Magnitude and Phase of MIMO System.
wout
— Frequencies
vector
Frequencies at which the function returns the system response, returned as a column vector. The function chooses the frequency values based on the model dynamics, unless you specify frequencies using the input argument w.
wout
also contains negative frequency values for models with complex coefficients.
Frequency values are in radians/TimeUnit
, where TimeUnit
is the value of the TimeUnit
property of sys.
sdmag
— Standard deviation of magnitude
3-D array | []
Estimated standard deviation of the magnitude for identified models, returned as a 3-D array with the same dimensions as mag.
If sys is not an identified LTI model, sdmag
is []
.
sdphase
— Standard deviation of phase
3-D array | []
Estimated standard deviation of the phase for identified models returned as a 3-D array with the same dimensions as phase.
If sys is not an identified LTI model, sdphase
is []
.
Tips
When you need additional plot customization options,use bodeplot (Control System Toolbox) instead.
Algorithms
The software computes the frequency response as follows:
Compute the zero-pole-gain (zpk (Control System Toolbox)) representation of the dynamic system.
Evaluate the gain and phase of the frequency response based on the zero, pole, and gain data for each input/output channel of the system.
For continuous-time systems,
bode
evaluates the frequency response on the imaginary axis s = jω and considers only positive frequencies.For discrete-time systems,
bode
evaluates the frequency response on the unit circle. To facilitate interpretation, the command parameterizes the upper half of the unit circle as:where Ts is the sample time and ωN is the Nyquist frequency. The equivalent continuous-time frequency ω is then used as the x-axis variable. Because is periodic with period 2ωN,
bode
plots the response only up to the Nyquist frequency ωN. If sys is a discrete-time model with unspecified sample time,bode
uses Ts = 1.
Version History
Introduced before R2006a
See Also
bodeplot | freqresp | nyquist | spectrum | step
Topics
- Plot Bode and Nyquist Plots at the Command Line
- Dynamic System Models
External Websites
- Transfer Function Analysis of Dynamic Systems (MathWorks Teaching Resources)
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- Deutsch
- English
- Français
- United Kingdom (English)
Contact your local office