MATLAB 编程/伯德图
外观
本文介绍了在 MATLAB 中创建伯德图的主题。简而言之,使用 bode 命令。但是,bode 命令有几个选项,并且由 bode 命令生成的图难以重新格式化。大多数 MATLAB 图的默认格式对于分析来说很好,但对于插入 Word 和 PowerPoint 文档甚至本网站来说不太理想。因此,本文介绍了一种替代方法,它需要更多代码行,但提供通用 plot 命令的完全格式化灵活性。
基本的 bode 命令如下
>> bode(LTI_SYS)
其中
bode 命令将自动调用 gcf,它将把伯德图放在当前的 figure 上。如果不存在 figure,则 gcf 会创建一个。
如果您想指定绘制 LTI_SYS 的频率点,则使用 logspace 或 linspace 创建一个频率向量,如下所示
>> 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 命令似乎使用了一个普通的 semilogx 图,然后对 figure 应用补丁或类似的东西。这会导致在尝试创建多行标题、重新格式化线宽或字体大小等时出现奇怪的行为。轴与 figure 的正常关系并不完全存在。