MATLAB中bode图绘制技巧
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Matlab中Bode图的绘制技巧
学术收藏 2010-06-04 21:21:48 阅读54 评论0 字号:大中小订阅
我们经常会遇到使用Matlab画伯德图的情况,可能我们我们都知道bode这个函数是用来画bode图的,这个函数是Matlab内部提供的一个函数,我们可以很方便的用它来画伯德图,但是对于初学者来说,可能用起来就没有那么方便了。
譬如我们要画出下面这个传递函数的伯德图:
1.576e010 s^2
H(s)=
------------------------------------------------------------------------------------------
s^4 + 1.775e005 s^3 + 1.579e010 s^2 + 2.804e012 s + 2.494e014 (这是一个用butter函数产生的2阶的,频率范围为[20 20K]HZ的带通滤波器。) 我们可以用下面的语句:
num=[1.576e010 0 0];
den=[1
1.775e005 1.579e010
2.804e012 2.494e014 ];
H=tf(num,den);
bode(H)
这样,我们就可以得到以下的伯德图:
可能我们会对这个图很不满意,第一,它的横坐标是rad/s,而我们一般希望横坐标是HZ;第二,横坐标的范围让我们看起来很不爽;第三,网格没有打开(这点当然我们可以通过在后面加上grid on解决)。
下面,我们来看看如何定制我们自己的伯德图风格:
在命令窗口中输入:bodeoptions
我们可以看到以下内容:
ans =
Title: [1x1 struct]
XLabel: [1x1 struct]
YLabel: [1x1 struct]
TickLabel: [1x1 struct]
Grid: 'off'
XLim: {[1 10]}
XLimMode: {'auto'}
YLim: {[1 10]}
YLimMode: {'auto'}
IOGrouping: 'none'
InputLabels: [1x1 struct]
OutputLabels: [1x1 struct]
InputVisible: {'on'}
OutputVisible: {'on'}
FreqUnits: 'rad/sec'
FreqScale: 'log'
MagUnits: 'dB'
MagScale: 'linear'
MagVisible: 'on'
MagLowerLimMode: 'auto'
MagLowerLim: 0
PhaseUnits: 'deg'
PhaseVisible: 'on'
PhaseWrapping: 'off'
PhaseMatching: 'off'
PhaseMatchingFreq: 0
PhaseMatchingValue: 0
我们可以通过修改上面的每一项修改伯德图的风格,比如我们使用下面的语句画我们的伯德图:
P=bodeoptions;
P.Grid='on';
P.XLim={[10 40000]};
P.XLimMode={'manual'};
P.FreqUnits='HZ';
num=[1.576e010 0 0];
den=[1
1.775e005 1.579e010
2.804e012 2.494e014 ];
H=tf(num,den);
bode(H,P)
这时,我们将会看到以下的伯德图:
上面这张图相对就比较好了,它的横坐标单位是HZ,范围是[10 40K]HZ,而且打开了网格,便于我们观察-3DB处的频率值。
当然,你也可以改变bodeoptions中的其它参数,做出符合你的风格的伯德图。
simulink常见问题2
2007年04月24日星期二上午 09:29
怎样求两个空间向量的夹角,如[1,0,0]和[1,1,1] ang=A'*B/(norm(A)*norm();
------------------------------------------------------------------------- --------------
如何把使用save workspace as保存过大量变量重新导出?应该用load能全部导出 simulink仿真时间和实际物理系统的时间有什么关系?(是否相等?),谢谢仿真时间应该表示物理时间,比如说你选则终止时间为10,不管你花多长时间
仿真,得到的结果表示10秒内的系统性能。
------------------------------------------------------------------------- -------
在simulink中,变量y从1变化到1000,我希望将y=300时(或者是y大于300的时刻)的当前时间t提取出来,并定义为一个workspace中的变量,或者作为simulink中的一个标量,请问如何做到?将y作为一个输出信号,这样就可以对其后处理了。另外,如果想在线使用该量,则加一个判断,如用比较模块判断y>=300, 300可以是常数输入
------------------------------------------------------------------------- -------
请问在simulink里面的低通滤波器在哪里你可以用离散模块组中的filter,低通参数应该由信号处理工具箱中函数设计
------------------------------------------------------------------------- -------
请问怎样用matlab命令调出simulink文件中的scope的波形有一个自编的小程序 function myfigure_scope(无效) a=size(无效.signals); b=a(1,2);%b 为信号的个数 c=1;%c为循环变量 while c<=b; subplot(b,1,c) plot(无效.time,无效.signals(1,c).values) c=c+1; grid end 其中无效为示波器中保存的structure with time数据
------------------------------------------------------------------------- -------
怎样把simulink中的图形输出转到m文件下进行编程输出用outport模块表示输出,然后用sim函数进行仿真,而不是用simulation菜单
------------------------------------------------------------------------- -------
我是用的from workspace比较多,所以每次赋值比较麻烦。我想设一个默认值,不知如何设?请各位赐教谢谢只能逐个设置,另外,建议使用outport而不使用toworkspace。使用前者将在工作空间中产生yout变量
------------------------------------------------------------------------- -------
如何在matlab的 simulink中读入dat文件可以用from file模块!
---------------------------------------------------------------------