# bode

Bode frequency response of dynamic system

## 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 a `LineSpec` value, see `bodeplot`.```

example

## Examples

collapse all

Create a Bode plot of the following continuous-time SISO dynamic system.

`$H\left(s\right)=\frac{{s}^{2}+0.1s+7.5}{{s}^{4}+0.12{s}^{3}+9{s}^{2}}.$`

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

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

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

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

For this example, create a 2-output, 3-input system.

```rng(0,'twister'); % For reproducibility H = 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.

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.

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:');```

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

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`, `zpk`, or `ss` models.

• Sparse state-space models, such as `sparss` or `mechss` models. Frequency grid `w` must be specified for sparse models.

• Generalized or uncertain LTI models such as `genss` 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` (System Identification Toolbox), `idss` (System Identification Toolbox), or `idproc` (System Identification Toolbox) models. Using identified models requires System Identification Toolbox™ software.

If `sys` is an array of models, the plot shows responses of all models in the array on the same axes.

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

## Output Arguments

collapse all

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 the `k`th frequency in `wout`. For an example, see Obtain Magnitude and Phase Data.

• For MIMO systems, `mag(i,j,k)` gives the magnitude of the response at the `k`th frequency from the `j`th input to the `i`th output. 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 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 the `k`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 the `k`th frequency from the `j`th input to the `i`th output. For an example, see Magnitude and Phase of MIMO System.

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

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 `[]`.

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 `[]`.

## Algorithms

The software computes the frequency response as follows:

1. Compute the zero-pole-gain (`zpk`) 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, `bode` evaluates the frequency response on the imaginary axis s = 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:

`$z={e}^{j\omega {T}_{s}},\text{ }0\le \omega \le {\omega }_{N}=\frac{\pi }{{T}_{s}},$`

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 $H\left({e}^{j\omega {T}_{s}}\right)$ 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