Main Content

bode

频率响应或幅值和相位数据的波特图

说明

示例

bode(sys) 创建 动态系统模型 sys 的频率响应波特图。该图显示了系统响应的幅值(以 dB 为单位)和相位(以度为单位)随频率变化的函数关系。bode 根据系统动态特性自动确定要绘制的频率。

如果 sys 是多输入多输出 (MIMO) 模型,则 bode 产生一个波特图数组,每个图显示一个 I/O 对组的频率响应。

如果 sys 是具有复系数的模型,则有如下情形:

  • 在对数频率刻度中,图显示两个分支,一个分支用于正频率,另一个分支用于负频率。图中还显示了箭头,以指示各分支的频率值增大的方向。请参阅具有复系数的模型的波特图

  • 在线性频率刻度中,图显示单个分支,其对称频率范围以频率值零为中心。

示例

bode(sys1,sys2,...,sysN) 在同一图上绘制多个动态系统的频率响应。所有系统必须有相同数目的输入和输出。

示例

bode(sys1,LineSpec1,...,sysN,LineSpecN) 为图中的每个系统分别指定一种颜色、线型和标记。

示例

bode(___,w) 绘制在 w 指定的频率下的系统响应。

  • 如果 w{wmin,wmax} 形式的元胞数组,则 bodewminwmax 之间的频率范围内绘制响应。

  • 如果 w 是频率向量,则 bode 绘制每个指定频率下的响应。向量 w 可以同时包含负频率和正频率。

在上述语法中,您可以将 w 与任何输入-参量组合结合使用。

示例

[mag,phase,wout] = bode(sys) 返回在向量 wout 中每个频率下的响应的幅值和相位。该函数根据系统动态特性自动确定 wout 中的频率。此语法不会生成图表。

示例

[mag,phase,wout] = bode(sys,w) 返回在 w 指定的频率下的响应数据。

  • 如果 w{wmin,wmax} 形式的元胞数组,则 wout 包含范围在 wminwmax 之间的频率。

  • 如果 w 是频率向量,则 wout = w

示例

[mag,phase,wout,sdmag,sdphase] = bode(sys,w) 还返回辨识模型 sys 的幅值和相位值的估计标准差。如果省略 w,则函数会根据系统动态特性自动确定 wout 中的频率。

示例

全部折叠

创建以下连续时间 SISO 动态系统的波特图。

H(s)=s2+0.1s+7.5s4+0.12s3+9s2.

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

bode 根据系统动态特性自动选择绘图范围。

基于指定的频率范围创建波特图。当您要关注特定频率范围内的动态特性时,请使用这种方法。

H = tf([-0.1,-2.4,-181,-1950],[1,3.3,990,2600]);
bode(H,{1,100})
grid on

元胞数组 {1,100} 指定波特图中的最小和最大频率值。当您以这种方式提供频率界限时,该函数会选择频率响应数据的中间点。

或者,指定用于计算和绘制频率响应的频率点向量。

w = [1 5 10 15 20 23 31 40 44 50 85 100];
bode(H,w,'.-')
grid on

bode 仅绘制在指定频率下的频率响应。

在同一波特图上比较连续时间系统和等效的离散系统的频率响应。

创建连续时间和离散时间动态系统。

H = tf([1 0.1 7.5],[1 0.12 9 0 0]);
Hd = c2d(H,0.5,'zoh');

创建一个显示这两个系统的波特图。

bode(H,Hd)

离散时间系统的波特图包括一条用于标记系统的奈奎斯特频率的垂直线。

使用 LineSpec 输入参量为波特图中的每个系统指定线型、颜色或标记。

H = tf([1 0.1 7.5],[1 0.12 9 0 0]);
Hd = c2d(H,0.5,'zoh');
bode(H,'r',Hd,'b--')

第一个 LineSpec,即 'r',为 H 的响应指定红色实线。第二个 LineSpec,即 'b--',为 Hd 的响应指定蓝色虚线。

计算一个 SISO 系统的频率响应的幅值和相位。

如果不指定频率,bode 会根据系统动态特性选择频率,并在第三个输出参量中返回这些频率。

H = tf([1 0.1 7.5],[1 0.12 9 0 0]);
[mag,phase,wout] = bode(H);

由于 H 是 SISO 模型,因此 magphase 的前两个维度均为 1。第三个维度是 wout 中频率的数目。

size(mag)
ans = 1×3

     1     1    41

length(wout)
ans = 41

因此,沿 mag 的第三个维度的每个条目给出在 wout 中的对应频率下的响应的幅值。

对于此示例,创建一个 2 输出 3 输入的系统。

rng(0,'twister'); % For reproducibility
H = rss(4,2,3);

对于此系统,bode 在一个图窗中的一个单独绘图中绘制每个 I/O 通道的频率响应。

bode(H)

计算这些响应在 1 和 10 弧度之间的 20 个频率下的幅值和相位。

w = logspace(0,1,20);
[mag,phase] = bode(H,w);

magphase 是三维数组,其中前两个维度对应于 H 的输出和输入维度,第三个维度是频率的数目。例如,检查 mag 的维度。

size(mag)
ans = 1×3

     2     3    20

因此可以得到如下示例:mag(1,3,10) 是从第三个输入到第一个输出的响应的幅值,在 w 中的第 10 个频率处计算。同样,phase(1,3,10) 包含相同响应的相位。

将根据输入/输出数据辨识的参数化模型的频率响应与使用相同数据辨识的非参数化模型进行比较。

基于数据辨识参数化和非参数化模型。

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

使用 spatfest 命令需要 System Identification Toolbox™ 软件。

sys_np 是非参数化辨识模型。sys_p 是参数化辨识模型。

创建一个包含这两个系统的波特图。

bode(sys_np,sys_p,w);
legend('sys-np','sys-p')

右键点击该波特图并选择特征 > 置信域可在波特图上显示置信域。

计算一个辨识模型的幅值和相位的标准差。使用此数据创建响应不确定性的 3σ 图。

基于数据辨识一个传递函数模型。获取频率响应的幅值和相位的标准差数据。

load iddata2 z2;
sys_p = tfest(z2,2);
w = linspace(0,10*pi,128);
[mag,ph,w,sdmag,sdphase] = bode(sys_p,w);

使用 tfest 命令需要 System Identification Toolbox™ 软件。

sys_p 是一个辨识传递函数模型。sdmagsdphase 分别包含频率响应的幅值和相位的标准差数据。

使用标准差数据创建一个对应于置信域的 3σ 图。

mag = squeeze(mag);
sdmag = squeeze(sdmag);
semilogx(w,mag,'b',w,mag+3*sdmag,'k:',w,mag-3*sdmag,'k:');

在同一图上创建一个具有复系数的模型和一个具有实系数的模型的波特图。

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);
bode(Gc,Gr)
legend('Complex-coefficient model','Real-coefficient model','Location','southwest')

在对数频率刻度中,图显示复系数模型的两个分支,一个分支用于正频率,带向右箭头;另一个分支用于负频率,带向左箭头。在这两个分支中,箭头指示频率增大的方向。实系数模型的图始终包含没有箭头的单个分支。

右键点击波特图并选择属性可更改波特图的频率范围。在属性编辑器对话框中的单位选项卡上,将频率刻度设置为 linear scale。您也可以使用 bodeplot 函数和 bodeoptions 对象来创建自定义绘图。

opt = bodeoptions;
opt.FreqScale = 'Linear';

使用自定义选项创建绘图。

bodeplot(Gc,Gr,opt)
legend('Complex-coefficient model','Real-coefficient model','Location','southwest')

在线性频率刻度中,图显示单个分支,其对称频率范围以频率值零为中心。该图还显示在同时绘制复系数模型和实系数模型的响应时,实系数模型响应频率为负。

输入参数

全部折叠

动态系统,指定为 SISO 或 MIMO 动态系统模型或动态系统模型数组。您可以使用的动态系统包括:

  • 连续时间或离散时间数值 LTI 模型,如 tfzpkss 模型。

  • 广义或不确定的 LTI 模型,如 genssuss (Robust Control Toolbox) 模型。(使用不确定模型需要 Robust Control Toolbox™ 软件。)

    • 对于可调控制设计模块,该函数在绘图和返回频率响应数据时,都会根据其当前值评估模型。

    • 对于不确定的控制设计模块,该函数绘制模型的标称值和随机样本。使用输出参量时,该函数仅返回标称模型的频率响应数据。

  • 频率响应数据模型,如 frd 模型。对于此类模型,该函数绘制在模型中定义的频率下的响应。

  • 辨识的 LTI 模型,如 idtf (System Identification Toolbox)idss (System Identification Toolbox)idproc (System Identification Toolbox) 模型。对于此类模型,该函数还可以绘制置信区间并返回频率响应的标准差。请参阅辨识模型的波特图(使用辨识模型需要 System Identification Toolbox™ 软件。)

如果 sys 是模型数组,该函数会在同一坐标区中绘制数组中所有模型的频率响应。

线型、标记和颜色,指定为字符串或由一个、两个或三个字符组成的向量。字符可以按任何顺序出现。您不需要同时指定所有三个特征(线型、标记和颜色)。例如,如果忽略线型,只指定标记,则绘图只显示标记,不显示线条。有关配置此参量的详细信息,请参阅 plot 函数的 LineSpec 输入参量。

示例: 'r--' 指定红色虚线

示例: '*b' 指定蓝色星号标记

示例: 'y' 指定黄线

计算和绘制频率响应时所处的频率,指定为元胞数组 {wmin,wmax} 或频率值向量。

  • 如果 w{wmin,wmax} 形式的元胞数组,则该函数计算频率范围在 wminwmax 之间的响应。

  • 如果 w 是频率向量,则该函数计算在每个指定频率下的响应。例如,使用 logspace 生成一个具有对数间距频率值的行向量。向量 w 可以同时包含正频率和负频率。

对于具有复系数的模型,如果您为绘图指定的频率范围为 [wmin,wmax],则有如下情形:

  • 在对数频率刻度中,图频率范围设置为 [wmin,wmax],图显示两个分支,一个分支用于正频率 [wmin,wmax],另一个分支用于负频率 [–wmax,–wmin]。

  • 在线性频率刻度中,图频率范围设置为 [–wmax,wmax],图显示单个分支,该分支的对称频率范围以频率值零为中心。

以 rad/TimeUnit 为单位指定频率,其中 TimeUnit 是模型的 TimeUnit 属性。

输出参量

全部折叠

以绝对单位表示的系统响应的幅值,返回为三维数组形式。此数组的维度为(系统输出数目)×(系统输入数目)×(频率点数目)。

  • 对于 SISO 系统,mag(1,1,k) 给出在 wwout 中第 k 个频率下的响应的幅值。有关示例,请参阅 获取幅值和相位数据

  • 对于 MIMO 系统,mag(i,j,k) 给出在第 k 个频率下从第 j 个输入到第 i 个输出的响应的幅值。有关示例,请参阅 MIMO 系统的幅值和相位

要将幅值从绝对单位转换为分贝,请使用:

magdb = 20*log10(mag)

系统响应的相位(以度为单位),以三维数组形式返回。此数组的维度为(输出数目)×(输入数目)×(频率点数目)。

  • 对于 SISO 系统,phase(1,1,k) 给出在 wwout 中第 k 个频率下的响应的相位。有关示例,请参阅 获取幅值和相位数据

  • 对于 MIMO 系统,phase(i,j,k) 给出在第 k 个频率下从第 j 个输入到第 i 个输出的响应的相位。有关示例,请参阅 MIMO 系统的幅值和相位

函数返回系统响应时所处的频率,以列向量形式返回。该函数根据模型动态特性选择频率值,除非您使用输入参量 w 指定频率。

wout 还包含具有复系数的模型的负频率值。

频率值以弧度/TimeUnit 为单位,其中 TimeUnitsysTimeUnit 属性的值。

每个频率点处的响应幅值的估计标准差,以三维数组形式返回。sdmag 具有与 mag 相同的维度。

如果 sys 不是辨识的 LTI 模型,则 sdmag[]

每个频率点处的响应相位的估计标准差,以三维数组形式返回。sdphase 具有与 phase 相同的维度。

如果 sys 不是辨识的 LTI 模型,则 sdphase[]

提示

  • 当您需要额外的绘图自定义选项时,请改用 bodeplot

算法

bode 通过如下步骤计算频率响应:

  1. 计算动态系统的零极点增益 (zpk) 表示。

  2. 根据系统各输入/输出通道的零点、极点和增益数据计算频率响应的增益和相位。

    • 对于连续时间系统,bode 计算虚轴 s = jω 处的频率响应,并且只考虑正频率。

    • 对于离散时间系统,bode 计算单位圆上的频率响应。为了便于解释,该命令将单位圆的上半部分参数化为:

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

      其中 Ts 是采样时间,ωN 是奈奎斯特频率。然后将等效连续时间频率 ω 用作 x 轴变量。由于 H(ejωTs) 呈周期性且周期为 2ωNbode 仅绘制最多到奈奎斯特频率 ωN 的响应。如果 sys 是具有未指定采样时间的离散时间模型,bode 使用 Ts = 1。

版本历史记录

在 R2006a 之前推出