图5五阶模型的匹配结果
? 对六阶系统的验证 在MATLAB指令窗中键入: >> Z=iddata(y,u,0.05) >> M=arx(Z,[6,3,0]) >>compare(M,Z)
得到结果如图6所示
图6六阶模型的匹配结果
? 对七阶系统的验证 在MATLAB指令窗中键入: >> Z=iddata(y,u,0.05) >> M=arx(Z,[7,2,0]) >>compare(M,Z)
得到结果如图7所示
6 / 16
图7七阶模型的匹配结果
? 对八阶系统的验证 在MATLAB指令窗中键入: >> Z=iddata(y,u,0.05) >> M=arx(Z,[8,2,0]) >>compare(M,Z)
得到结果如图8所示
图8八阶模型的匹配结果
? 模型阶次的选取
从图2~8可以看出,八阶模型的拟合率已高达93%,符合要求。因此,为简便起见,不再选用更高阶系统,本次试验选用八阶系统模型。 在MATLAB指令窗中键入:
>> H=tf(M)
得到如下结果:
Transfer function from input \
7 / 16
0.2012 z^8 + 0.2012 z^7
----------------------------------------------------------------------------------
z^8 - 1.082 z^7 - 0.1049 z^6 + 0.3345 z^5 + 0.1519 z^4 + 0.2915 z^3 + 0.02519 z^2
- 0.6381 z + 0.4242
Transfer function from input \ 0.0161 z^8
----------------------------------------------------------------------------------
z^8 - 1.082 z^7 - 0.1049 z^6 + 0.3345 z^5 + 0.1519 z^4 + 0.2915 z^3 + 0.02519 z^2
- 0.6381 z + 0.4242 Input groups: Name Channels
Measured 1 Noise 2 Sampling time: 0.05
上述模型为离散时间系统模型,为了得到连续时间系统模型,在MATLAB指令窗中键入: >> G=d2c(H(1))
得到如下结果:
Transfer function from input \
0.2012 s^8 + 10.33 s^7 + 1133 s^6 + 4.305e004 s^5 + 1.764e006 s^4 + 4.255e007 s^3 + 7.547e008 s^2 + 8.042e009 s
+ 4.182e010
----------------------------------------------------------------------------------------------------------------
s^8 + 17.15 s^7 + 4570 s^6 + 5.992e004 s^5 + 4.939e006 s^4 + 4.392e007 s^3 + 9.317e008 s^2 + 3.74e009 s
+ 4.177e010
Input groups: Name Channels Measured 1
8 / 16
2.3传递函数模型系数的修正
得到了系统传递函数,对其使用阶跃响应step命令,并与原数据线对比,看是否吻合。命令如下: plot(t,y,'red'); hold on; step(G)
得到的结果:
图9 修正后的曲线匹配
从上图可以看出,由arx模型得到的传递函数的阶跃响应曲线并不能与原始数据线很好的拟合。故考虑在该传递函数的基础上,对其系数修改。 1) 考虑忽略传递函数分子的高次项
G=tf([8.042e009 4.182e010],[ 1 17.15 4570 5.992e004 4.939e006 4.392e007 9.317e008 3.74e009 4.177e010]); plot(t,y,'red'); hold on step(G)
9 / 16
图10忽略高次项后的曲线匹配
由上图看到,忽略高次项对系统的阶跃响应并无多大影响,但是使系统结构简化,在此基础上继续对传递函数的系数做修改。 2) 调整系统的零点。
由于系统零点的作用为减小峰值时间,使系统响应速度加快,并且零点越接近虚轴,这种作用越显著。但对分子常数项的修改,则会影响到系统的收敛值,较麻烦,故考虑只对分子一次项的系数进行修改。经过多次尝试,最后得到的系统传递函数如下:
G=tf([4.255e007 4.182e010],[ 1 17.15 4570 5.992e004 4.939e006 4.392e007 9.317e008 3.74e009 4.177e010]); plot(t,y,'red'); hold on step(G)
10 / 16