跳转到内容

MATLAB 编程/伯德图

来自维基教科书,开放的书籍,用于开放的世界

本文介绍了在 MATLAB 中创建伯德图的主题。简而言之,使用 bode 命令。但是,bode 命令有几个选项,并且由 bode 命令生成的图难以重新格式化。大多数 MATLAB 图的默认格式对于分析来说很好,但对于插入 Word 和 PowerPoint 文档甚至本网站来说不太理想。因此,本文介绍了一种替代方法,它需要更多代码行,但提供通用 plot 命令的完全格式化灵活性。

MATLAB 的 Bode 命令

[编辑 | 编辑源代码]

基本的 bode 命令如下

>> bode(LTI_SYS)

其中

  • LTI_SYS 是一个 LTI 对象 - TFSSZPKFRD

bode 命令将自动调用 gcf,它将把伯德图放在当前的 figure 上。如果不存在 figure,则 gcf 会创建一个。

如果您想指定绘制 LTI_SYS 的频率点,则使用 logspacelinspace 创建一个频率向量,如下所示

>> freqVec = logspace(-1, 3, 5000);
>> bode(LTI_SYS, freqVec * (2*pi))

其中

  • freqVec 是一个包含 5000 个频率的向量,以赫兹为单位,在对数刻度上从 10-1 到 103 均匀间隔
  • pi 是一个 MATLAB 常量,等于 的值,在本例中,它用于将 freqVec 转换为 rad/sec,因为它被传递给 bode 命令

为了获得每个频率点的幅度和相位,bode 命令必须使用输出参数调用,例如

>> [mag, phase] = bode(LTI_SYS);

或者

>> [mag, phase] = bode(LTI_SYS, freqVec * (2*pi));

其中

  • mag 是每个 freqVec 点的幅度(不是以 dB 为单位)
  • phase 是每个 freqVec 点的相位(以度为单位)

mag 和 phase 变量必须作为 3D 数组出现。假设 LTI_SYS 是 SISO,则以下命令将 mag 和 phase 转换为您预期的向量

>> mag = mag(:);
>> phase = phase(:);
>> mag = db(mag);                % to get the magnitude in 20log dB

bode 命令的问题

[编辑 | 编辑源代码]

bode 命令的主要问题是图的重新格式化。bode 命令似乎使用了一个普通的 semilogx 图,然后对 figure 应用补丁或类似的东西。这会导致在尝试创建多行标题、重新格式化线宽或字体大小等时出现奇怪的行为。轴与 figure 的正常关系并不完全存在。

[编辑 | 编辑源代码]
华夏公益教科书