MATLAB编程-简介
简介(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
会创建一个。
自定义频率向量
若想自定义频率点,可使用 logspace
或 linspace
创建频率向量:
>> 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
表示相位(单位为度)。
由于 mag
和 phase
是三维数组(即使是 SISO 系统也是如此),若需要将它们转换为一维向量,可使用如下命令:
>> mag = mag(:); % 转换为列向量
>> phase = phase(:); % 转换为列向量
>> mag = db(mag); % 将幅度转换为 dB(20*log10 形式)
bode
命令的问题(Issues with the bode command)
bode
命令的主要问题在于图形难以重排或格式化。例如:
-
无法方便地设置多行标题;
-
无法统一更改线宽、字体大小等;
-
bode
图似乎在普通semilogx
图基础上额外添加了补丁或特殊设置,使得图形对象与常规轴的关系变得复杂。
因此,在需要高自定义度的情况下,建议使用通用 plot
命令自行绘制波特图。