Matlab中用Simulink快速画Bode图及 .m 文件画Bode图

Matlab中用Simulink快速画Bode图及 .m 文件画Bode图

  • Simulink画Bode图
  • .m 文件画Bode图

Simulink画Bode图

一万年没用matlab画过Bode图了,但是以后应该是要经常用到的,所以掏出自控原理,再学一遍Bode图的画法。通过代码来画实在是脑阔疼(不过习惯后应该还是会很得心应手的吧),经过师兄指点,发现了一个简单又快捷的画法,特此记录。

首先打开simulink,拖出一个传递函数框(Transfer Fcn),写入自己想画的传递函数,如下图所示:
Matlab中用Simulink快速画Bode图及 .m 文件画Bode图_第1张图片
然后右键传递函数(上图中为 Transfer Fcn2),选择 Linear Analysis,选择 Linearize Block,如下图所示:
Matlab中用Simulink快速画Bode图及 .m 文件画Bode图_第2张图片
然后出现下图,点击右上方的 bode 选项即大功告成了。
Matlab中用Simulink快速画Bode图及 .m 文件画Bode图_第3张图片
对于其他传递函数的 bode 图,可以同样的方式操作,最后选择 Bode Plot 1 则会在 Bode Plot 1 中继续画出新的 Bode 图,如下如示,这样就可以轻松比对各个 Bode 图了。若继续选择 Bode ,则会另开一个 Bode Plot 2 画出新的 Bode 图。
Matlab中用Simulink快速画Bode图及 .m 文件画Bode图_第4张图片
对于Bode图中的数据,显然就在左边"Linear Analysis Workspace"中的"linsys1"和"linsys2"中,想提取出来再用其他画图工具自行绘制的可以用鼠标选中比如"linsys1",将其拖到左上方的"MATLAB Workspace"中,这样我们就能在Matlab的workspace中找到该变量了,再通过如下语句即可获得幅频、相频数据:

>> [mag,phase,freq] = bode(linsys1)

此处参考文献:https://www.mathworks.com/matlabcentral/answers/273363-how-to-export-data-from-bode-in-linear-analysis-tool

最后可能是我对Simulink的理解还不够深入吧,我放弃了使用Simulink画Bode图。原因在于"Linear Analysis Tool"虽然可以快速画出Bode图,但也仅止于此了,我没找到可以设置图中点的个数或者说点与点间距的地方(设置横轴单位、设置横轴范围的地方倒是有),所以Simulink画出的Bode图也就只能看看,放到文章里还得上 .m 文件。

.m 文件画Bode图

这个没什么好说的,无非就是几个函数的使用,所以直接上代码:

Hz = logspace(-1, 5, 10000);
w = 2 * pi * Hz;

num = [2 * pi * 25];
% den = [1 0];
% num = [2 * pi * 25];
den = [1 2 * pi * 25];

% bode(num, den, w);

[mag, pha, w1] = bode(num, den, w);
% log10w1 = log10(w1);
mag_plot = 20 * log10(mag);

subplot(2, 1, 1); 
semilogx(Hz, mag_plot);
% plot(log10w1, mag_plot)

subplot(2, 1, 2);
semilogx(Hz, pha);
% plot(log10w1, pha);

这是一个截止频率为25Hz的低通滤波器。另外我这里画出的图的横轴单位是Hz。其中的函数也就:logspace、bode、subplot、semilogx。这样来看好像 .m 文件来画Bode图也不比 Simulink 复杂呀,甚至更简单。(文件先保存了,免得后面又忘记怎么画Bode图了)

你可能感兴趣的:(Matlab)