Contenuto principale

bodeplot

Plot Bode frequency response of dynamic system

    Description

    The bodeplot function plots the Bode magnitude and phase of a dynamic system model. To customize the plot, you can return an BodePlot object and modify it using dot notation. For more information, see Customize Linear Analysis Plots at Command Line (Control System Toolbox).

    To obtain frequency response data, use the bode function.

    bodeplot(sys) plots the Bode magnitude and phase of the dynamic system model sys.

    If sys is a multi-input, multi-output (MIMO) model, then the bodeplot function creates a grid of Bode plots with each plot displaying the frequency response of one input-output pair.

    If sys is a model with complex coefficients, then in:

    • Log frequency scale, the plot shows two branches, one for positive frequencies and one for negative frequencies. The plot also shows arrows to indicate the direction of increasing frequency values for each branch.

    • Linear frequency scale, the plot shows a single branch with a symmetric frequency range centered at a frequency value of zero.

    example

    bodeplot(sys1,sys2,...,sysN) plots the frequency response of multiple dynamic systems sys1,sys2,…,sysN on the same plot.

    example

    bodeplot(sys1,LineSpec1,...,sysN,LineSpecN) sets the line style, marker type, and color for the Bode response of each specified system.

    example

    bodeplot(___,w) plots responses for frequencies specified in w. You can specify a frequency range or a vector of frequencies. You can use w with any of the previous syntaxes.

    example

    bodeplot(___,plotoptions) plots the Bode frequency response with the plotting options specified in plotoptions. Settings you specify in plotoptions override the plotting preferences for the current MATLAB® session. This syntax is useful when you want to write a script to generate multiple plots that look the same regardless of the local preferences.

    example

    bodeplot(___,Name=Value) specifies response properties using one or more name-value arguments. For example, bodeplot(sys,LineWidth=1) sets the plot line width to 1. (since R2026a)

    • When plotting responses for multiple systems, the specified name-value arguments apply to all responses.

    • The following name-value arguments override values specified in other input arguments.

      • FrequencySpec — Overrides frequency values specified using w

      • Color — Overrides colors specified using LineSpec

      • MarkerStyle — Overrides marker styles specified using LineSpec

      • LineStyle — Overrides line styles specified using LineSpec

    bodeplot(parent,___) plots the Bode response in the specified parent graphics container, such as a Figure or TiledChartLayout, and sets the Parent property. Use this syntax when you want to create a plot in a specified open figure or when creating apps in App Designer.

    bp = bodeplot(___) plots the Bode response and returns the corresponding chart object. To customize the appearance and behavior of the response plot, modify the chart object properties using dot notation.

    Examples

    collapse all

    For this example, use the plot handle to change the frequency units to Hz and turn off the phase plot.

    Generate a random state-space model with 5 states and create the Bode plot with chart object bp.

    rng("default")
    sys = rss(5);
    bp = bodeplot(sys);

    MATLAB figure

    Change the units to Hz and suppress the phase plot by modifying the chart object.

    bp.FrequencyUnit = "Hz";
    bp.PhaseVisible = "off";

    MATLAB figure

    The Bode plot automatically updates when you modify the chart object.

    For this example, create a Bode plot that uses 15-point red text for the title and sets a custom title. When you specify plot properties explicitly using bodeoptions, the specified properties override the MATLAB session preferences. Thus, the plot looks the same regardless of the preferences of the MATLAB session in which it is generated.

    First, create a default options set using bodeoptions.

    opts = bodeoptions;

    Next, change the required properties of the options set opts. Because opt.Title is a structure, specify the properties of the plot title by specifying the fields and values of that structure.

    opts.Title.FontSize = 15;
    opts.Title.Color = [1 0 0];
    opts.Title.String = 'System Frequency Response';
    opts.FreqUnits = 'Hz';

    Now, create a Bode plot using the options set opts.

    bodeplot(tf(1,[1,1]),opts);

    MATLAB figure

    Because opts begins with a fixed set of options, the plot result is independent of the toolbox preferences of the MATLAB session.

    For this example, create a Bode plot of the following continuous-time SISO dynamic system. Then, turn the grid on, rename the plot and change the frequency scale.

    sys(s)=s2+0.1s+7.5s4+0.12s3+9s2.Continuous-time SISO dynamic system

    Create the transfer function sys.

    sys = tf([1 0.1 7.5],[1 0.12 9 0 0]);

    Create the Bode plot. Specify plot properties by modifying the returned chart object.

    bp = bodeplot(sys);
    bp.FrequencyScale = "linear";
    title("Bode Plot of Transfer Function");
    grid on

    MATLAB figure

    bodeplot automatically selects the plot range based on the system dynamics.

    For this example, consider a MIMO state-space model with 3 inputs, 3 outputs and 3 states. Create a Bode plot with linear frequency scale, specify frequency units in Hz and turn the grid on.

    Create the MIMO state-space model sys_mimo.

    J = [8 -3 -3; -3 8 -3; -3 -3 8];
    F = 0.2*eye(3);
    A = -J\F;
    B = inv(J);
    C = eye(3);
    D = 0;
    sys_mimo = ss(A,B,C,D);
    size(sys_mimo)
    State-space model with 3 outputs, 3 inputs, and 3 states.
    

    Create a Bode plot and return the corresponding chart object.

    bp = bodeplot(sys_mimo);

    Customize the plot by updating properties of the chart object.

    bp.FrequencyScale = "linear";
    bp.FrequencyUnit = "Hz";
    grid on

    MATLAB figure

    The Bode plot automatically updates when you modify the chart object properties. For MIMO models, bodeplot produces an array of Bode plots, each plot displaying the frequency response of one I/O pair.

    For this example, match the phase of your system response such that the phase at 1 rad/sec is 150 degrees.

    First, create a Bode plot of a transfer function system with chart object bp.

    sys = tf(1,[1 1]); 
    bp = bodeplot(sys);

    MATLAB figure

    Enable phase matching and set the phase matching frequency and value.

    bp.PhaseMatchingEnabled = "on"; 
    bp.PhaseMatchingFrequency = 1; 
    bp.PhaseMatchingValue = 150;

    MATLAB figure

    The first bode plot has a phase of -45 degrees at a frequency of 1 rad/s. Setting the phase matching options so that at 1 rad/s the phase is near 150 degrees yields the second Bode plot. Note that, however, the phase can only be -45 + N*360, where N is an integer. So the plot is set to the nearest allowable phase, namely 315 degrees (or 1*360-45=315oEquation of how the allowable phase is calculated).

    For this example, compare the frequency responses of two identified state-space models with 2 and 6 states along with their 2 σ confidence regions.

    Load the identified state-space model data and estimate the two models using n4sid. Using n4sid requires a System Identification Toolbox™ license.

    load iddata1
    sys1 = n4sid(z1,2); 
    sys2 = n4sid(z1,6);

    Create a Bode plot of the two systems.

    bodeplot(sys1,'r',sys2,'b');
    legend('sys1','sys2');

    MATLAB figure

    From the plot, observe that both models produce about 70% fit to data. However, sys2 shows higher uncertainty in its frequency response, especially close to the Nyquist frequency. Now, use linspace to create a vector of frequencies and plot the Bode response using the frequency vector w.

    w = linspace(8,10*pi,256);
    bp = bodeplot(sys1,sys2,w);
    legend('sys1','sys2');

    Enable phase matching, specify the standard deviation of the confidence region, and display the confidence region.

    bp.PhaseMatchingEnabled = "on";
    bp.Characteristics.ConfidenceRegion.NumberOfStandardDeviations = 2;
    bp.Characteristics.ConfidenceRegion.Visible = "on";

    MATLAB figure

    Alternatively, you can use the showconfidence command to display the confidence regions on the Bode plot.

    showConfidence(bp)
    

    For this example, compare the frequency response of a parametric model, identified from input/output data, to a non-parametric model identified using the same data. Identify parametric and non-parametric models based on the data.

    Load the data and create the parametric and non-parametric models using tfest and spa, respectively.

    load iddata2 z2;
    w = linspace(0,10*pi,128);
    sys_np = spa(z2,[],w);
    sys_p = tfest(z2,2);

    spa and tfest require System Identification Toolbox™ software. The model sys_np is a non-parametric identified model while, sys_p is a parametric identified model.

    Create a Bode plot that includes both systems. Enable phase macthing for this plot.

    bp = bodeplot(sys_p,sys_np,w);
    bp.PhaseMatchingEnabled = "on";
    grid on
    legend('Parametric Model','Non-Parametric model');

    MATLAB figure

    Input Arguments

    collapse all

    Dynamic system, specified as a SISO or MIMO dynamic system model or array of dynamic system models. You can use these types of dynamic systems:

    • 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.

    Line style, marker, and color, specified as a string or character vector containing symbols. The symbols can appear in any order. You do not need to specify all three characteristics. For example, specify the marker and omit the line style, then the plot shows only the marker and no line.

    Example: '--or' is a red dashed line with circle markers.

    Line StyleDescription
    "-"Solid line
    "--"Dashed line
    ":"Dotted line
    "-."Dash-dotted line
    MarkerDescription
    "o"Circle
    "+"Plus sign
    "*"Asterisk
    "."Point
    "x"Cross
    "_"Horizontal line
    "|"Vertical line
    "s"Square
    "d"Diamond
    "^"Upward-pointing triangle
    "v"Downward-pointing triangle
    ">"Right-pointing triangle
    "<"Left-pointing triangle
    "p"Pentagram
    "h"Hexagram
    ColorDescription
    "r"red
    "g"green
    "b"blue
    "c"cyan
    "m"magenta
    "y"yellow
    "k"black
    "w"white

    Frequencies at which to compute the response, specified as one of these values:

    • Cell array of the form {wmin,wmax} — Compute the response at frequencies in the range from wmin to wmax. If wmax 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.

    Bode plot options, specified as a bodeoptions object. You can use these options to customize the Bode plot appearance. Settings you specify in plotoptions override the preference settings for the current MATLAB session.

    Parent graphics container, specified as one of these objects:

    • Figure

    • TiledChartLayout

    • UIFigure

    • UIGridLayout

    • UIPanel

    • UITab

    Name-Value Arguments

    collapse all

    Specify optional pairs of arguments as Name1=Value1,...,NameN=ValueN, where Name is the argument name and Value is the corresponding value. Name-value arguments must appear after other arguments, but the order of the pairs does not matter.

    Example: bodeplot(sys,LegendDisplay="off") hides the response of sys from the plot legend.

    Frequencies at which to compute the response, specified as one of these values:

    • Cell array of the form {wmin,wmax} — Compute the response at frequencies in the range from wmin to wmax. If wmax 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 FrequencySpec 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.

    Response name, specified as a string or character vector and stored as a string.

    Response visibility, specified as one of these logical on/off values:

    • "on", 1, or true — Display the response in the plot.

    • "off", 0, or false — Do not display the response in the plot.

    The value is stored as an on/off logical value of type matlab.lang.OnOffSwitchState.

    Option to list the response in the legend, specified as one of these logical on/off values:

    • "on", 1, or true — List the response in the legend.

    • "off", 0, or false — Do not list the response in the legend.

    The value is stored as an on/off logical value of type matlab.lang.OnOffSwitchState.

    Marker style, specified as one of these values. Specifying a marker style using a name-value argument overrides any marker style that you specify using LineSpec.

    MarkerDescription
    "none"No marker
    "o"Circle
    "+"Plus sign
    "*"Asterisk
    "."Point
    "x"Cross
    "_"Horizontal line
    "|"Vertical line
    "s"Square
    "d"Diamond
    "^"Upward-pointing triangle
    "v"Downward-pointing triangle
    ">"Right-pointing triangle
    "<"Left-pointing triangle
    "p"Pentagram
    "h"Hexagram

    Plot color, specified as an RGB triplet or a hexadecimal color code and stored as an RGB triplet. Specifying a color using a name-value argument overrides any color that you specify using LineSpec.

    You can also specify some common colors by name. This table lists these colors and their corresponding RGB triplets and hexadecimal color codes.

    Color NameRGB TripletHexadecimal Color Code

    "red" or "r"

    [1 0 0]#FF0000

    "green" or "g"

    [0 1 0]#00FF00

    "blue" or "b"

    [0 0 1]#0000FF

    "cyan" or "c"

    [0 1 1]#00FFFF

    "magenta" or "m"

    [1 0 1]#FF00FF

    "yellow" or "y"

    [1 1 0]#FFFF00

    "black" or "k"

    [0 0 0]#000000

    "white" or "w"

    [1 1 1]#FFFFFF

    Line style, specified as one of these values. Specifying a line style using a name-value argument overrides any line style that you specify using LineSpec.

    Line StyleDescription
    "-"Solid line
    "--"Dashed line
    ":"Dotted line
    "-."Dash-dotted line
    "none"No line

    Marker size, specified as a positive scalar.

    Line width, specified as a positive scalar.

    Series index, specified as a positive integer or "none".

    By default, the SeriesIndex property is a number that corresponds to the order in which the response was added to the chart, starting at 1. MATLAB uses the number to calculate indices for automatically assigning color, line style, or markers for responses. Any responses in the chart that have the same SeriesIndex number also have the same color, line style, and markers.

    A SeriesIndex value of "none" indicates that a response does not participate in the indexing scheme.

    Output Arguments

    collapse all

    Chart object, returned as a BodePlot object. To customize your plot appearance and behavior, modify the properties of this object using dot notation. For more information, see BodePlot Properties (Control System Toolbox).

    Algorithms

    The software computes the frequency response as follows:

    1. Compute the zero-pole-gain (zpk (Control System Toolbox)) representation of the dynamic system.

    2. 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, the bodeplot function evaluates the frequency response on the imaginary axis s = and considers only positive frequencies.

      • For discrete-time systems, the bodeplot function evaluates the frequency response on the unit circle. To facilitate interpretation, the command parameterizes the upper half of the unit circle as:

        z=ejωTs,0ωωN=πTs,

        where Ts is the sample time and ωN is the Nyquist frequency. The software then uses the equivalent continuous-time frequency ω as the x-axis variable. Because H(ejωTs) is periodic with period 2ωN, the bodeplot function plots the response only up to the Nyquist frequency ωN. If sys is a discrete-time model with an unspecified sample time, the bodeplot function uses Ts = 1.

    Version History

    Introduced before R2006a

    expand all