不过在系统辨识工具箱中有相应的函数能够完成该功能。
应该是invfrqs函数。但这个是由频率响应得到的,所以你的对输入输出信号做傅里叶变换得到频率响应后在用这个函数拟合传递函数。
使用matlab工具箱更为方便和直观:
1. 把u,y信号导入到工作空间里。
2. 用ident命令打开matlab系统辨识工具箱,然后点击import data,从新打开界面里导入工作空间的数据。然后可以通过图形查看该输入输出信号,或者在proprocess进行信号预处理。
3. 根据你的模型在estimate里选择linear parameter models,个人觉得你应该选择ARX 结构,确定阶数,然后进行估计。
4. 在主界面里查看估计模型,并且可以和实际输出比较,看看拟合度。
详细使用方面参考帮助文档System Identification Toolbox User's Guide
也只能是拟合吧,拟合的目标也只能是有限的一些典型传递函数。
做过这个,就是拟合吧
在sisotool工具里放置合适的零极点,尽量使曲线吻合,得到传递函数
我是大概知道实测的曲线的零极点分布的,然后去拟合的,这样好做点
如果已经得到Bode plot,就幅度vs频率,相位vs频率曲线,根据+/-20db/dec,+/-40db/dec 渐近线先预测几个pole,zero,double pole double zero,然后再去近似了。
还有几个比较困难的地方是:
1)实际系统引入的杂散参数和群延迟特性,才是拟合和预测的难点。
2)实际测量时仪器已经采用了离散化的数字处理手段,还有测量系统处理误差和测量时注入的扰动幅度所引起的误差,对低频还好,对高频都是很大的影响。
3)所以目前已有的模型,多是对1/2开关频率之前的预测,V2等新模型有所改进,但是还是有其局限性
以我测试的为例吧,
R=1e3; C=1e-7; L=0.1; Rl=1000;
magdb_LCR=zeros(1,1e5);% -sL-R-|(1/sC)
mag_LCR=zeros(1,1e5);
phase_LCR=zeros(1,1e5);
freq=(1:1e5);
RCplot=zeros(1,1e5);
LCRplot=zeros(1,1e5);
for f=1:1:1e5
LCR=1/((1i*2*pi*f)^2*L*C+1i*2*pi*f*C*Rl+1);
LCRplot(f)=LCR;
mag_LCR(f)=abs(LCR);
magdb_LCR(f)=20*log10(abs(LCR));
phase_LCR(f)=angle(LCR)*180/pi;
end
我用上方的函数写一个已知的传递函数,生成对应频率下的幅值和相位。频率响应曲线如下,需要注意的是,幅值的纵坐标不是dB。
然后在tool box中导入数据,得到一个确定零点和极点个数的传函。在command window 里,我是用zpk函数来查验拟合的结果。结果如下:
zpk(arx21)
Zero/pole/gain from input "u1" to output "y1":
100000000
----------------------
(s^2 + 1e004s + 1e008)
拟合得到的结果与测试用的传递函数完全一致。但是比较麻烦的是在拟合之前,需要先确定传函的零极点个数,可能是因为我选择sampling interval是0(continuous system)而不是discrete time system。选择后者的话,可以让tool box自行选择合适的阶数。
在matlab里可以用[Mag,Phase]=bode(sys)得到频率响应的数据点。
用matlab来拟合高阶的传递函数比较容易出错
Matlab中Bode图的绘制技巧 我们经常会遇到使用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'
控制系统的开环频率特性 目的:掌握开环Bode 图的绘制 根据Bode 图确定最小相位系统的传递函数 重点:开环Bode 图的绘制、根据Bode 图确定最小相位系统的传递函数 1 开环伯德图手工作图的一般步骤: 1)将开环传递函数表示为时间常数表达形式,计算各个典型环节的交接频率 2)求20lgK 的值,并明确积分环节的个数ν 3)通过(1,20lgK )绘制斜率为-20vdB/dec 低频段 4)随着频率增加,每遇到一个典型环节的交接频率,就改变一次斜率 最小相位系统定义: 递函数的零点、极点全部位于S 左半平面,同时又无纯滞后环节的系统称为最小相位系统。否则就是非最小相位系统。 对数幅频特性与相频特性之间存在确定的对应关系。对于一个最小相位系统,我们若知道了其幅频特性,它的相频特性也就唯一地确定了。也就是说:只要知道其幅频特性,就能写出此最小相位系统所对应的传递函数,而无需再画出相频特性。 非最小相位系统高频时相角迟后大,起动性能差,响应缓慢。对响应要求快的系统,不宜采用非最小相位元件。 2 典型环节的伯德图 绘制曲线在MA TLAB 中实现,利用下述的程序段: num=[b2 b1 b0]; den=[1 a2 a1 a0]; H=tf(num,den); bode(H) margin(H) hold on 2.1 比例环节 传递函数:()G s K = 频率特性:()G j K ω= 对数幅频特性:()20lg L j K ω= 对数相频特性:()0?ω= 程序段: num=[0 10]; den=[0 1]; H=tf(num,den); bode(H) margin(H) hold on 结论:放大环节的对数幅频特性是一条幅值为20lgK 分贝,且平行于横轴的直线,相频特性是一条和横轴重合的直线。 K>1时,20lgK>0dB ;K<1时,20lgK<0dB 。 2.2 惯性环节(低通滤波特性) 传递函数:1()1G s s τ= + 频率特性:()()()j G j A e ?ωωω= 对数幅频特性:2 1()20lg 1() L ωτω=+ 对数相频特性:()arctan ?ωτω=- 绘制1()10.1G s s =+的Bode 图 程序段: num=[0 1]; den=[0.1 1];H=tf(num,den); bode(H) margin(H) hold on 结论:惯性环节的对数幅频特性可以用在1ωτ= 处相交于0分贝的两条渐近直线来近似表示:当1ωτ 时,是一条0分贝的直线; 当1ωτ 时,是一条斜率为-20dB/dec 的直线。 惯性环节具有低通特性,对低频输入能精确地复现,而对高频输入要衰减,且产生相位迟后。因此,它只能复现定常或缓慢变化的信号。 2.3 积分环节 传递函数:1 ()G s s τ= 频率特性:()()()j G j A e ?ωωω= 对数幅频特性:1 ()20lg L j ωτω = 对数相频特性:()2 π?ω=- 在同一坐标中绘制1()G s s = 、1()0.1G s s = 和 1()0.01G s s = 的Bode 图 num1=[0 1];den1=[1 1];H1=tf(num1,den1); bode(H1)margin(H1)hold on
关于一阶二阶传递函数的伯德图 一阶惯性系统的通式为: 将式子两边同时除以a0得 令0 0a K b =为系统静态灵敏度; 0 1a a =τ为系统时间常数; 则有 )()()1( s KX s Y s =+τ 故有 ) 1()()()(+==s K s X s Y s H τ 以液柱式温度计为例,传递函数为 )1(1)()()(+==s s X s Y s H τ 可得频率响应函数 )1j (1)(+= τωs H )()()(001t x b t y a dt t dy a =+)()()(0001t x a b t y dt t dy a a =+
可得传递函数的幅频与相频特性 2)1(1 )()(τωωω+==j H A ωτωω?arctan )()(-=∠=j H 在MATLAB 上输入程序(此时令1=τ) num=[1]; den=[1,1]; figure sys=tf(num,den); bode(sys);grid on 可得bode 图
二阶惯性系统的通式为: 将式子两边同时除以a 0得 令0 0a K b =为系统静态灵敏度; 20n a a = ω为系统无阻尼固有频率; 1 012a a a =ξ为系统阻尼器 传递函数为 12) ()()(22++==n n s s K s X s Y s H ωξω 可得传递函数的幅频与相频特性 2222)(4)1(1 )()(2n n K j H A ωωξωωωω+-== )()()()(001222t x b t y a dt t dy a dt t y d a =++)()()()(00012202t x a b t y dt t dy a a dt t y d a a =++
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: 0PhaseUnits: '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中的其它参数,做出符合你的风格的伯
一、求下图所示系统的传递函数)(/)(0s U s U i 。 (10分) ) 1()()(3132320+++-=CS R R R R CS R R s U s U i 一、控制系统方块图如图所示: (1)当a =0时,求系统的阻尼比ξ,无阻尼自振频率n ω和单位斜坡函数输入时的稳态误差; (2)当ξ=时,试确定系统中的a 值和单位斜坡函数输入时系统的稳态误差; 系统的开环传函为 s a s s G )82(8)(2++=闭环传函为8)82(8)()(2+++=s a s s R s Y 25.0 83.2 36.0===ss n e ωξ 4 25.0==ss e a 设某控制系统的开环传递函数为 ) 22()(2++=s s s k s G 试绘制参量k 由0变至∞时的根轨迹图,并求开环增益临界值。 (15分) 1)j p j p p --=+-==110 321 2)πππ?σ3 5,,332=-=a a (10分) 3)ω=j 2±,c k =4,开环增益临界值为K=2 设某系统的特征方程为23)(234+--+=s s s s s D ,试求该系统的特征根。 列劳斯表如下 0000220112311 2 3 4 s s s s --- (4分) 得 辅助方程为0222=+-s ,解得1,121-==s s (4分)
最后得1,243=-=s s 设某控制系统的开环传递函数为 )()(s H s G =) 10016()12.0(752+++s s s s 试绘制该系统的Bode 图,并确定剪切频率c ω的值 剪切频率为s rad c /75.0=ω 某系统的结构图和Nyquist 图如图(a)和(b)所示,图中 2)1(1)(+=s s s G 23 ) 1()(+=s s s H 试判断闭环系统稳定性,并决定闭环特征方程正实部根的个数。 (16分) 解:由系统方框图求得内环传递函数为: s s s s s s s H s G s G +++++=+23452 474)1()()(1)( (3分) 内环的特征方程:04742345=++++s s s s s (1 分) 由Routh 稳定判据: 01: 03 10 :16 :044: 171: 01234s s s s s 七、设某二阶非线性系统方框图如图所示,其中 4 , 2.0 , 2.00===K M e 及s T 1=, 试画出输入信号)(12)(t t r ?=时系统相轨迹的大致图形,设系统原处于静止状态。 (16分) 解:根据饱和非线性特性,相平面可分成三个区域,运动方程分别为
典型环节的B o d e图
控制系统的开环频率特性 目的:掌握开环Bode图的绘制 根据Bode图确定最小相位系统的传递函数 重点:开环Bode图的绘制、根据Bode图确定最小相位系统的传递函数 1 开环伯德图手工作图的一般步骤: 1)将开环传递函数表示为时间常数表达形式,计算各个典型环节的交接频率 2)求20lgK的值,并明确积分环节的个数ν3)通过(1,20lgK)绘制斜率为-20vdB/dec 低频段 4)随着频率增加,每遇到一个典型环节的交接频率,就改变一次斜率 最小相位系统定义:递函数的零点、极点全部位于S 左半平面,同时又无纯滞后环节的系统称为最小相位系统。否则就是非最小相位系统。 对数幅频特性与相频特性之间存在确定的对应关系。对于一个最小相位系统,我们若知道了其幅频特性,它的相频特性也就唯一地确定了。也就是说:只要知道其幅频特性,就能写出此最小相位系统所对应的传递函数,而无需再画出相频特性。 非最小相位系统高频时相角迟后大,起动性能差,响应缓慢。对响应要求快的系统,不宜采用非最小相位元件。 Tf函数用来建立实部或复数传递函数模型或将状态方程、或零级增益模型转化成传递函数形式。sys = tf(num,den)命令可以建立一个传递函数,其中分子和分母分别为num和den。输出sys是储存传递函数数据的传递函数目标。单输入单输出情况下,num和den是s的递减幂级数构成的实数或复数行向量。这两个向量并不要求维数相同。如h = tf([1 0],1)就明确定义了纯导数形式h(s)=s。若要构建多输入多输出传递函数,要分别定义每一个单输入单输出系统的端口的分子与分母。 2 典型环节的伯德图 绘制曲线在MATLAB中实现,利用下述的程序段: num=[b2 b1 b0]; den=[1 a2 a1 a0];H=tf(num,den); bode(H) margin(H) hold on 2.1 比例环节 传递函数:() G s K = 频率特性:() G j K ω= 对数幅频特性:()20lg L j K ω= 对数相频特性:()0 ?ω= 程序段: num=[0 10]; den=[0 1]; H=tf(num,den); bode(H) margin(H) hold on 结论:放大环节的对数幅频特性是一条幅值为20lgK分贝,且平行于横轴的直线,相频特性是一条和横轴重合的直线。 K>1时,20lgK>0dB;K<1时,20lgK<0dB。2.2 惯性环节(低通滤波特性) 传递函数:1 () 1 G s sτ = + 频率特性:() ()()j G j A e?ω ωω = 对数幅频特性: 2 () 1() Lω τω = + 对数相频特性:()arctan ?ωτω =- 绘制1 () 10.1 G s s = + 的Bode图 程序段: num=[0 1]; den=[0.1 1];H=tf(num,den); bode(H) margin(H) hold on
在Matlab中,大多时候,我们都是用M语言,输入系统的传递函数后,用bode函数绘制bode图对系统进行频率分析,这样做,本人觉得效率远不如Simulink建模高。如何在Matlab/Simulink中画bode图,以前也在网上查过些资料,没看到太多有用的参考。今天做助教课的仿真,又要画电机控制中电流环的bode图,模型已经建好,step response也很容易看出来,可这bode图怎么也出不来,又不愿意用m语言写出传递函数再画。baidu和google 了好一阵,几乎没有一个帖子说的清清楚楚的,经过一番摸索,终于掌握了Simulink里画bode图的方法。.其实,Simulink里画bode图,非常的easy,也很方便。写此文的目的是希望对那些常用Simulink进行仿真希望画bode图又不愿用M语言的新手有所帮助。 以下均是以Matlab R2008a为例。 首先,在simulink里建好model。如图1,这里需要注意的是,输入和输出要用input port 和output port,这样以后画bode图的时候,系统就会知道是这两个变量之间的关系。 图1 建好model 其次,选择线性分析。Tools->Control Design ->Linear Analysis。如图2。 图2 选择Linear Ansysis 将出现如图3所示的Control and Estimation Tools Manager窗口。
图3 Control and Estimation Tools Manager窗口 第三步,激动人心的时刻到了,哈哈。如果你是按照前面的步骤来的,那么这时候,你就应该可以直接画出bode图,在窗口的下方,将“Plot linear analysis result in a ”前面的方框打上勾,已打的就不用管了,再在后面的下拉框里选择“bode response plot”,即画output port和input port之间的bode图,再点击“Linearize Model”按钮,就OK了。其实除了bode图,还可以画其他很多响应曲线,比如step response、impulse response和Nyquist图等等,只需选择相应的step response plot,inpulse response plot或者Nyquist plot等等。方法都是相同的。选择选择“bode response plot”,如图4所示。 图4 画出bode图
电机定位系统校正(BODE图) MATLAB软件具有强大的计算能力和绘图功能,能够快速、准确地做出频域特性曲线。利用MATLAB绘制系统的Bode图,为控制系统设计和分析提供了极大的方便。 1. 创建M-file文挡,并输入如下程序,运行后生成LTI对象my_sys: J=3.2284e-6; b=3.5077e-6; K=0.0274; R=4; L=2.75e-6; num=[0 0 0 K]; den=[(J*K) (J*R+(L*b)) ((b*R)+K^2) 0]; my_sys=tf(num,den); 打开Matlab7.0软件,并新建一个空文档,将程序复制到文档内,如图1所示: 图1 2.运行程序并保存运行结果。如图2所示: 图2
3.打开Start-Toolboxes—Control System—SISO Design Tool。启动SISO Design,如图3所示 图3 4.将my_sys程序导入到SISO Design Tool中,如图4所示 图4
5.在View菜单中,关闭根轨迹显示,只显示开环的Bode图。如图5所示 图5 6. 加积分环节;加零点(60角频率)将各个参数进行积分:空白处右键—Add Pole/Zero—Integrator。如图6所示: 图6
7.在magnitude曲线加零点,然后Analysis菜单下Response to Step Command 指令。如图7所示: 图7 8.在管理反馈界面中,只显示闭环的r与y的关系—LT1 Viewer For SISO Design Tool界面空白处右键—Systems—Closed Loop :r to u (green),如图8所示: 图8
一、求下图所示系统的传递函数 ) (/)(0s U s U i 。 (10分) ) 1()()(313 2320+++-=CS R R R R CS R R s U s U i 一、控制系统方块图如图所示: (1)当a =0时,求系统的阻尼比ξ,无阻尼自振频率n ω和单位斜坡函数输入时的稳态误差; (2)当ξ=0.7时,试确定系统中的a 值和单位斜坡函数输入时系统的稳态误差; 系统的开环传函为 s a s s G )82(8)(2++= 闭环传函为8)82(8 )()(2 +++=s a s s R s Y 25.0 83.2 36.0===ss n e ωξ 4 25.0==ss e a 设某控制系统的开环传递函数为 ) 22()(2 ++= s s s k s G 试绘制参量k 由0变至∞时的根轨迹图,并求开环增益临界值。 (15分) 1)j p j p p --=+-==110321 2) πππ?σ3 5 ,,332=- =a a (10分) 3)ω=j 2±,c k =4,开环增益临界值为K=2 设某系统的特征方程为23)(2 3 4 +--+=s s s s s D ,试求该系统的特征根。 列劳斯表如下 022******* 2 34 s s s s ---
得辅 助 方 程 为 222=+-s ,解得 1,121-==s s (4分) 最后得1, 243=-=s s 设某控制系统的开环传递函数为 )()(s H s G = ) 10016() 12.0(752+++s s s s 试绘制该系统的Bode 图,并确定剪切频率c ω的值 剪切频率为s rad c /75.0=ω 某系统的结构图和Nyquist 图如图(a)和(b)所示,图中 2)1(1)(+=s s s G 2 3 ) 1()(+=s s s H 试判断闭环系统稳定性,并决定闭环特征方程正实部根的个数。 (16分) 解:由系统方框图求得内环传递函数为: s s s s s s s H s G s G +++++= +23452 474)1()()(1)(
6-1试求图示有源网络的传递甫数和Bode 图,并说明其网络特性。 6-2已知单位反馈控制系统的开环传递函数为 G(f)二 10 5(0.25 +1) 当串联校正装置的传递函数G c ($)如下所示时: (1) G c (5)= 0.2s +1 0.05s +1 2($ +1) (10s+ 1) 1?试绘出两种校正时校正前和校正后系统Bode 图; 2.试比较两种校正方案的优缺点。 6-3已知单位反馈系统的对数幅频特性Illi 线如图屮厶)@), 串联校正装置G c (s)的对 数幅频特性如图中&9),要求: 1. 在图小画出系统校止后的对数幅频特性厶(e); 2. 写出校正后系统的开环传递函数; 3. 分析校止装置G c (5)对系统的作用。 6-4系统的结构图如图所示,试利用根轨迹法设计超前校止装置,使系统满足下列性 能指标:=0.7 , t s =1.45, K v = 。 6—5已知一单位反馈系统的开环传递函数为 习题6— 1图
试设计一?校正装置,使系统的相角裕量厂> 45° ,剪切频率0. > 50$ j 0 6-6单位反馈系统的开环传递函数为 设计一串联滞后校正装置,使系统相角裕量/ > 40° ,并保持原有的开环增益。 6-7设单位反馈系统的开环传递函数为 G(s)= --------------- ------------ 5(0.15 + 1)(0.255 + 1) 试设计--校正装置,使系统满足下列性能指标,速度误差系数K,, 相角裕量 / > 40° ,剪切频率 > 0.5s~} o 6-8单位反馈系统的开环传递函数为 若耍求校正后系统的谐振峰值=1.4,谐振频率> lor 1,试确定校正装置的形 式与参数。 6-9单位反馈系统的结构如图所示,现用速度反馈来校正系统,校正后系统具有临界 G(s) = 200 5(0.15 + 1) G() = 4 s(2s +1) G(s)= 10 5(0.255 +1)(0.055 +1) 习题6 —3图
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) 这时,我们将会看到以下的伯德图:
Matlab/Simulink中bode图的画法 在Matlab中,大多时候,我们都是用M语言,输入系统的传递函数后,用bode函数绘制bode图对系统进行频率分析,这样做,本人觉得效率远不如Simulink建模高。如何在Matlab/Simulink中画bode图,以前也在网上查过些资料,没看到太多有用的参考。今天做助教课的仿真,又要画电机控制中电流环的bode图,模型已经建好,step response也很容易看出来,可这bode图怎么也出不来,又不愿意用m语言写出传递函数再画。baidu和google了好一阵,几乎没有一个帖子说的清清楚楚的,经过一番摸索,终于掌握了Simulink里画bode图的方法。.其实,Simulink里画bode图,非常的easy,也很方便。写此文的目的是希望对那些常用Simulink进行仿真希望画bode图又不愿用M语言的新手有所帮助。 以下均是以Matlab R2008a为例。 首先,在simulink里建好model。如图1,这里需要注意的是,输入和输出要用input port和output port,这样以后画bode图的时候,系统就会知道是这两个变量之间的关系。 图1 建好model 其次,选择线性分析。Tools->Control Design ->Linear Analysis。如图2。
图2 选择Linear Ansysis 将出现如图3所示的Control and Estimation Tools Manager窗口。
图3 Control and Estimation Tools Manager窗口 第三步,激动人心的时刻到了,哈哈。如果你是按照前面的步骤来的,那么这时候,你就应该可以直接画出bode图,在窗口的下方,将“Plot linear an alysis result in a ”前面的方框打上勾,已打的就不用管了,再在后面的下拉框里选择“bode response plot”,即画output port和input port之间的bode图,再点击“Linearize Model”按钮,就OK了。其实除了bode图,还可以画其他很多响应曲线,比如step response、impulse response和Nyquist图等等,只需选择相应的step response plot,inpulse response plot或者Nyquist plot等等。方法都是相同的。选择选择“bode response plot”,如图4所示。 图4 画出bode图 稍等片刻,便出现了图1中output port和input port的bode图了。是不是很简单?!
使用MATLAB 绘制频率特性曲线 姓名 黄勇 班级 16电气本三 学号 4702160186 一、频率特性 在定义谐波输入下,输出响应中与输入同频率的谐波分量与谐波输入的幅值之比A(ω)为幅频特性,相位之差)(ω?为相频特性,并称其指数表达形式: ()()()j G j A e ?ω ωω= 为系统的频率特性。 总结上述我们可知:频率特性由两个部分组合而成,分别是幅频特性和相频特性。稳态系统的输出信号与输入信号的相位之差我们称其为相频特性。稳态系统输出与输入的幅值之比称为幅频特性。另外频率响应对稳定系统和不稳定系统都适应,其中稳定系统的频率特性可以通过实验的方法确定。 二、频率特性的几何表示法 ? 幅相频率特性曲线 简称幅相特性曲线,或幅相特性,或极坐标图。 ? 对数频率特性曲线 又称为伯德曲线或伯德图。 ? 对数幅相曲线 又称为尼科尔斯曲线或尼科尔斯图。 三、惯性环节频率特性的绘制 惯性环节的表达式为: () 1 1G s Ts = + T 的取值分别为2、4、7,使用MATLAB 软件绘制
MATLABA的函数指令如下: 指令说明:num为分子指令;den为分母指令;此次画图调用了伯德图画法(bode指令)。绘制图如下:
T=2时。 MATLABA的函数指令如下: 绘制图如下: 同理当T=4时。MATLABA的函数指令如下:
绘制图如下: 四、振荡环节频率特性的绘制 振荡环节的传递函数为: ()22 1=21 n n G s s s ζωω+ +
在 2 01取值,本次取值分别为0.1 0.3 0.5 0.707 0.85 0.91 1。 方法一:使用伯德图画MATLAB函数程序指令如下: MATLAB图形显示如下:
我们经常会遇到使用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) 这时,我们将会看到以下的伯德图:
习 题 6-1 试求图示有源网络的传递函数和Bode 图,并说明其网络特性。 6—2 已知单位反馈控制系统的开环传递函数为 ) 12.0(10)(+=s s s G 当串联校正装置的传递函数)(s G c 如下所示时: (1)1 05.012.0)(++=s s s G c (2))110()1(2)(++=s s s G c 1.试绘出两种校正时校正前和校正后系统Bode 图; 2 6—3 已知单位反馈系统的对数幅频特性曲线如图中)(0ωL ,串联校正装置)(s G c 的对数幅频特性如图中)(ωc L ,要求: 1.在图中画出系统校正后的对数幅频特性)(ωL ; 2 3.分析校正装置)(s G c 对系统的作用。 6—4系统的结构图如图所示,试利用根轨迹法设计超前校正装置,使系统满足下列性 能指标7.0=ζ,s t s 4.1=,12-=s K v 。 6—5 已知一单位反馈系统的开环传递函数为
) 11.0(200)(+= s s s G 试设计一校正装置,使系统的相角裕量?≥45γ,剪切频率150-≥s c ω。 6—6 单位反馈系统的开环传递函数为 ) 12(4)(+=s s s G c 设计一串联滞后校正装置,使系统相角裕量?≥40γ,并保持原有的开环增益。 6—7 设单位反馈系统的开环传递函数为 ) 125.0)(11.0(5)(++=s s s s G 试设计一校正装置,使系统满足下列性能指标,速度误差系数15-=s K v ,相角裕量 ?≥40γ,剪切频率15.0-≥s c ω。 6—8 单位反馈系统的开环传递函数为 ) 105.0)(125.0(10)(++=s s s s G 若要求校正后系统的谐振峰值4.1=r M ,谐振频率110-≥s r ω,试确定校正装置的形 式与参数。 6—9 单位反馈系统的结构如图所示,现用速度反馈来校正系统,校正后系统具有临界
我们经常会遇到使用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) 这时,我们将会看到以下的伯德图:
不过在系统辨识工具箱中有相应的函数能够完成该功能。 应该是invfrqs函数。但这个是由频率响应得到的,所以你的对输入输出信号做傅里叶变换得到频率响应后在用这个函数拟合传递函数。 使用matlab工具箱更为方便和直观: 1. 把u,y信号导入到工作空间里。 2. 用ident命令打开matlab系统辨识工具箱,然后点击import data,从新打开界面里导入工作空间的数据。然后可以通过图形查看该输入输出信号,或者在proprocess进行信号预处理。 3. 根据你的模型在estimate里选择linear parameter models,个人觉得你应该选择ARX 结构,确定阶数,然后进行估计。 4. 在主界面里查看估计模型,并且可以和实际输出比较,看看拟合度。 详细使用方面参考帮助文档System Identification Toolbox User's Guide 也只能是拟合吧,拟合的目标也只能是有限的一些典型传递函数。 做过这个,就是拟合吧 在sisotool工具里放置合适的零极点,尽量使曲线吻合,得到传递函数 我是大概知道实测的曲线的零极点分布的,然后去拟合的,这样好做点 如果已经得到Bode plot,就幅度vs频率,相位vs频率曲线,根据+/-20db/dec,+/-40db/dec 渐近线先预测几个pole,zero,double pole double zero,然后再去近似了。
还有几个比较困难的地方是: 1)实际系统引入的杂散参数和群延迟特性,才是拟合和预测的难点。 2)实际测量时仪器已经采用了离散化的数字处理手段,还有测量系统处理误差和测量时注入的扰动幅度所引起的误差,对低频还好,对高频都是很大的影响。 3)所以目前已有的模型,多是对1/2开关频率之前的预测,V2等新模型有所改进,但是还是有其局限性 以我测试的为例吧, R=1e3; C=1e-7; L=0.1; Rl=1000; magdb_LCR=zeros(1,1e5);% -sL-R-|(1/sC) mag_LCR=zeros(1,1e5); phase_LCR=zeros(1,1e5); freq=(1:1e5); RCplot=zeros(1,1e5); LCRplot=zeros(1,1e5); for f=1:1:1e5 LCR=1/((1i*2*pi*f)^2*L*C+1i*2*pi*f*C*Rl+1); LCRplot(f)=LCR; mag_LCR(f)=abs(LCR); magdb_LCR(f)=20*log10(abs(LCR)); phase_LCR(f)=angle(LCR)*180/pi; end 我用上方的函数写一个已知的传递函数,生成对应频率下的幅值和相位。频率响应曲线如下,需要注意的是,幅值的纵坐标不是dB。