实验一: 计算机控制系统性能分析
考虑如图1所示的计算机控制系统
一、系统稳定性分析
1.1 离散系统的稳定性分析
离散系统稳定的充要条件为,系统的特征根全部位于z平面的单位圆中,只要有一个根位于单位圆外,系统就不稳定。(教材P104)观察下图并使用rlocfind(sysd)可以寻找到令系统稳定的K的取值范围大致为为:0<K<4.3581。
1.2 连续系统稳定性
连续系统稳定取决于闭环系统的特征根在s平面上的位置,若特征根全在s平面左半平面则系统稳定,只要有一个根在s平面右半平面或虚轴上,则系统不稳定。从下图根轨迹图中可以看出,系统根轨迹位于左半平面,无论K(K>0)的取值如何,系统恒定处于稳定状态。
1.3 分析导致上述两种情况下K取值范围差异的原因
在本例中,连续系统的稳定性比离散系统好,增大K值会使得离散系统变得不稳定。加入采样开关以后,采样周期越大,离散系统系统稳定性越差,能使系统稳定的K的范围越小。
二、时域特性分析
2.1 连续系统阶跃响应信号及性能指标
infoc=stepinfo(Phic);%计算性能指标
2.2 离散化系统阶跃响应波形及性能指标
infod=stepinfo(Phid);%计算性能指标
2.3 离散系统与连续系统动态性能及性能指标之间的比较
由于采样开关和零阶保持器的存在,使得离散系统的时域响应与连续系统相比发生变化,稳定性相对降低,动态性能相对变差。
s=[infod,infoc];%合并数据,进行比较
info=struct2table(orderfields(s,[1,5,2,8,3,4,7,6]),'RowNames',label)
info = 2×8 table
| RiseTime | Overshoot | SettlingTime | PeakTime | SettlingMin | SettlingMax | Peak | Undershoot |
---|
1 离散系统 | 1.0000 | 55.6419 | 15.0000 | 2.5000 | 0.6879 | 1.5564 | 1.5564 | 0 |
---|
2 连续系统 | 0.9887 | 30.4890 | 7.7420 | 2.3947 | 0.9071 | 1.3049 | 1.3049 | 0 |
---|
绘制两个响应曲线如下
title("离散系统和响应的连续系统的阶跃响应曲线比较")
三、频域特性
3.1 连续系统频率特性
3.2 离散系统频率特性
w=linspace(-2*ws,2*ws,40000);
[magd,phased,woutd] = bode(sysd,w);
phased = mod(phased+180,360)-180;
magd=(magd<10).*magd+(magd>=10)*10;
xlabel('频率');ylabel('幅度');
xlabel('频率');ylabel('相位');
3.3 考虑采样保持前后系统频率特性比较
从频率响应曲线中,可以看出离散系统的频率特性的特点:
- 以采样频率为周期的周期函数,连续系统无该特性
- 其幅频特性为偶函数,相频特性为奇函数,连续系统也有该特性
- 离散系统仅仅在较小的采样周期或低频段与连续系统频率特性相近
- 离散系统高频时会出现多个峰值
- 离散系统会出现正相位
由于离散环节频率特性不是ω的有理分式函数,在绘制对数频率特性时,不能像连续系统那样使用渐进对数频率特性。但由于对数很坐标能压缩频率区间、简化运算等优点,因此,在离散系统频域分析时还常常使用对数频率特性。 figure('position',[0,0,800,300]);
w=linspace(-2*ws,2*ws,40000);
[magd,phased,woutd] = bode(sysd,w);
[magc,phasec,woutc] = bode(sysc,w);
phased = mod(phased+180,360)-180;
phasec = mod(phasec+180,360)-180;
magd=(magd<10).*magd+(magd>=10)*10;
magc=(magc<10).*magc+(magc>=10)*10;
附:关于MATLAB离散系统波特图中高频部分的分析
使用MATLAB绘制离散系统频率特性时(如下图的左图),MATLAB省略了离散系统传递函数频率大于的部分,由上节可知,此时频率响应应为上一周期的不断重复。我们可以通过指定w参数,来设置需要绘制波特图的频率范围(如下右图),乍一看离散系统的频率特性似乎不像是周期函数,但是考虑到如下因素可以发现频率特性仍然是周期函数。 - 横坐标是对数坐标系,所以有一些变形是正常的
- 对于相位,如果将相位限制到之间,那么显然将会呈现周期函数特性
figure('Position',[0,0,800,400]);
legend(label,"Location","southwest");
legend(label,"Location","southwest");
附: 差拍现象
[u,t]=gensig('sine',tau,Tf,0.1);
[u2,t2]=gensig('sine',tau,Tf,1.1);
lsimplot(sysc,u,t,0,'zoh');
lsimplot(sysc,u2,t2,0,'zoh');