简介(Introduction)

本文介绍如何在 MATLAB 中创建波特图(Bode 图)。
最简单的方法是使用 bode 命令。然而,虽然 bode 命令非常方便,它生成的图形却不容易重新排版或美化。MATLAB 的默认图形格式适合做分析,但并不适合直接插入 Word、PowerPoint 或网站中。
因此,本文将介绍一种更灵活的替代方法:虽然代码更多,但它能利用通用的 plot 命令,实现完全的图形格式控制。


MATLAB 的 bode 命令(MATLAB's Bode Command)

基本的 bode 命令格式如下:

>> bode(LTI_SYS)

其中:

  • LTI_SYS 是一个 LTI(线性时不变)系统对象,例如:传递函数(TF)、状态空间(SS)、零极点增益(ZPK)或频率响应数据(FRD)。

bode 命令会自动调用 gcf(当前图形窗口),将波特图绘制在当前 figure 中;如果没有当前图形,gcf 会创建一个。


自定义频率向量

若想自定义频率点,可使用 logspacelinspace 创建频率向量:

>> freqVec = logspace(-1, 3, 5000);               % 从 10^-1 到 10^3 的 5000 个对数均匀点(单位为 Hz)
>> bode(LTI_SYS, freqVec * (2*pi))               % 将频率转换为 rad/s 后传给 bode 命令

说明:pi 是 MATLAB 中的常数 π,这里用于将 Hz 转换为 rad/s。


获取幅度和相位数据

如果想获取每个频率点的幅值和相位数据,可以使用输出参数的形式调用 bode

>> [mag, phase] = bode(LTI_SYS);                 % 默认频率点
或
>> [mag, phase] = bode(LTI_SYS, freqVec * (2*pi));  % 指定频率点

其中:

  • mag 表示幅值(注意:不是 dB 单位);

  • phase 表示相位(单位为度)。

由于 magphase 是三维数组(即使是 SISO 系统也是如此),若需要将它们转换为一维向量,可使用如下命令:

>> mag = mag(:);                  % 转换为列向量
>> phase = phase(:);              % 转换为列向量
>> mag = db(mag);                 % 将幅度转换为 dB(20*log10 形式)

bode 命令的问题(Issues with the bode command)

bode 命令的主要问题在于图形难以重排或格式化。例如:

  • 无法方便地设置多行标题;

  • 无法统一更改线宽、字体大小等;

  • bode 图似乎在普通 semilogx 图基础上额外添加了补丁或特殊设置,使得图形对象与常规轴的关系变得复杂。

因此,在需要高自定义度的情况下,建议使用通用 plot 命令自行绘制波特图。


外部链接(External Links)


Last modified: Wednesday, 16 April 2025, 10:15 AM