Matlab中Bode图的绘制技巧
2010-06-04 21:21:48 阅读54 评论0 字号:大中小 订阅
我们经常会遇到使用Matlab画伯德图的情况,可能我们我们都知道bode这个函数是用来画bode图的,这个函数是Matlab内部提供的一个函数,我们可以很方便的用它来画伯德图,但是对于初学者来说,可能用起来就没有那么方便了。 譬如我们要画出下面这个传递函数的伯德图:
s^2 H(s)=
------------------------------------------------------------------------------------------
s^4 + s^3 + s^2 + s +
(这是一个用butter函数产生的2阶的,频率范围为[20 20K]HZ的带通滤波器。) 我们可以用下面的语句:
num=[ 0 0];
den=[1 ]; H=tf(num,den); bode(H)
这样,我们就可以得到以下的伯德图:
可能我们会对这个图很不满意,第一,它的横坐标是rad/s,而我们一般希望横坐标是HZ;第二,横坐标的范围让我们看起来很不爽;第三,网格没有打开(这点当然我们可以通过在后面加上grid on解决)。 下面,我们来看看如何定制我们自己的伯德图风格:
1
-
在命令窗口中输入: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; ='on';
={[10 40000]}; ={'manual'}; ='HZ';
num=[ 0 0];
den=[1 ]; H=tf(num,den); bode(H,P)
这时,我们将会看到以下的伯德图:
2
-
上面这张图相对就比较好了,它的横坐标单位是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中的变量,或者作
3
-
为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模块! ------------------------------------------------------------------------- -------
power system blockset与simulink的模块不能相连吗? 能相联,但之间需要转换,如应该使用电压表和电流表等将其连接到simulink模块上
---------------------------------------------------------------------
4
-
---- -------
SIMUKINK中有两个模块,一个是PID模块,一个是模糊控制模块,现在我想用模糊控制模块算出来的新的PID的参数值更改原来的PID参数,我不知道怎么做,请各位大侠指条明路,救命啊! 应急方法:将PID参数设置为全局变量试试 ------------------------------------------------------------------------- -------
我现在正在做毕业设计,遇到了一个问题。我要一边用m文件进行编程,做一些界面。一边用simulink进行仿真,在进行图形输出时,我遇到了一个问题,就是怎么样把simulink的输出而转到m文件下来。因为我要在图形输出的窗口中还要添加一些按钮。使它的外观更漂亮。 matlab的simulink的输出可以输出到工作空间种来 也可以通过输出到一个mat文件等 还可以直接用x-ygraph来做! java test!
------------------------------------------------------------------------- -------
SIMULINK仿真中的给定信号如果是非标准的(如非正弦波:由2个分段函数定义),怎么产生? 可以用matlab fcn模块自己编写
------------------------------------------------------------------------- -------
如何取得离散信号中某时刻(假定是k时刻)及k-1时刻、k+1时刻的值,用Simulink中的哪些模块可以实现 ? 接z(-1)和z即可
------------------------------------------------------------------------- -------
我从电气库中找到一个电机的模型,但是却和我前面的simulink组成的模型不相通,那是怎么回事,有知道的吗,请告诉我,谢谢了。 PowerSystems Toolbox中模块不是所有端口都能接收Simulink信号的,例如电机模型中,电压输入是需要电压源模块的(Power systems Blockset模块),而转矩可以输入simulink信号。如果实在想给电压端口输入simulink信号,需要给其先加一个受控电压源,用simulink信号控制受控信号
------------------------------------------------------------------------- -------
请问在simulink里面的施密特触发器在哪里. 在simulink extra组中
5
-
------------------------------------------------------------------------- -------
在用simulink进行仿真时,仿真过程中有信号是随时间衰减的波动信号,仿真时间为0~t,如何计算t(i)~t(i+1)时间内的信号的积分平均? check the \"integrator block with resetting\". You can re-set the integrator at any time you specified.
------------------------------------------------------------------------- -------
我用simulink画了一个单输入输出的开环控制系统,想得到该系统的bode图,用什么方法获得该系统的开环传递函数? 1) 修正原来的simulink模型,使其输入用inport表示,输出用outport表示。这些端口在6。1版中分别位于sources和sinks组。 2)用[a,b,c,d]=linmod2('模型名'); 提取状态方程模型 3) G=ss(a,b,c,d); 4)bode(G) 为什么我用simulink仿真时,只有ode5能运行而其他的不行呢? 是否是模型中包含离散模块或实时模块
------------------------------------------------------------------------- ----------------------------
我在用SIMULINK解二元微分方程组时,在MATLAB命令窗口输入X1,X2的初值如X01=1 ;X02=-2;然后启动仿真程序,但该初值似乎无法进入我的模型,查YOUT变量组, 值为0。而我直接在SIMULINK中分别双击X1,X2的积分模型,将INITIAL CONDITION 设为1和-2,然后仿真,可以得到结果。我觉得是MATLAB命令窗口与SIMULINK未联系 起来,但不知如何处理。 将积分模块的Initial Condition Source置为external。将From Workspace模块 加入积分模块的x0端口。From Workspace中设置你在matlab命令窗口中输入的变量 名。 ------------------------------------------------------------------------- ----------------------------
simulink 如何调用m文件 不用s函数,使用matlab function模块调用.m函数也行
------------------------------------------------------------------------- ----------------------------
simulink里是否有记忆历史数据的模块? Signal Routing\\Data Store Memory ------------------------------------------------------------------------- ----------------------------
我做系统辨识 请问大侠怎么产生m序列? 用simulink的异或门和DFlipFlop
6
-
------------------------------------------------------------------------- ----------------------------
在simulink模拟控制中,方框图如何以图片格式输出? 先选中,在用edit 中的copy model to clipboard,然后粘贴即可
------------------------------------------------------------------------- ----------------------------
Simulink仿真时Matlab Function对话框中的代码怎么设置? 自己编写matlab function,然后在matlab function模块里填写自编的.m函数名即 可。 ------------------------------------------------------------------------- ----------------------------
simulink中正弦sin的积分显示是1-cos,为何不是-cos 如果输入u(t),t0为初始时刻,则在t时刻积分器的输出y(t)是u(t)从t0至t的积分值 。所以如果t0=0,u(t)=sin(t),y(t)=-cos(t0)+cos(0)=1-cos(t)
------------------------------------------------------------------------- ----------------------------
在simulink下如何实现取余数? remain ------------------------------------------------------------------------- ----------------------------
7
-
用simulink提供的linmod()或者linmod2()两个函数,从连续系统中提取线性模型,两个函数命令执行后都可以得到一个【a,b,c,d】表达的状态空间模型。利用bode(sys)或者bode(a,b,c,d)函数绘制系统的对数幅频和相频特性曲线。
[A,B,C,D]=linmod(‘untitled1’) % untitled1’为系统的动态模型。 [num,den]=ss2tf(A,B,C,D); %转换成传递函数模型 printsys(num,den,’s’); %显示系统的传递函数模型
sys=ss(A,B,C,D); bode(sys); %即可绘制系统的开环系统bode图
8
因篇幅问题不能全部显示,请点此查看更多更全内容