阶跃响应采样数据如下
所示,求出传递
的估计值。
0
0
0.20
0.0338
0.90
0.4409
0.02
0.0001
0.22
0.0395
1.00
0.4924
0.04
0.0005
0.24
0.0480
1.50
0.6904
0.06
0.0014
0.26
0.0571
2.00
0.8121
0.08
0.0031
0.28
0.0668
2.50
0.8860
0.10
0.0057
0.30
0.0771
3.00
0.9309
0.12
0.0091
0.50
0.1979
3.50
0.9581
0.14
0.0135
0.60
0.2624
4.00
0.9746
0.16
0.0187
0.70
0.3253
5.00
0.9907
0.18
0.0248
0.80
0.3851
解:
MATLAB程序如下:
t=[0:0.02:0.30 0.50:0.10:1.00 1.50:0.50:4.00 5.00];
yt=[0 0.0001 0.0005 0.0014 0.0031 0.0057 0.0091 0.0135 0.0187 0.0248 0.0338 ...
0.0395 0.0480 0.0571 0.0668 0.0771 0.1979 0.2624 0.3253 0.3851 0.4409 ...
0.4924 0.6904 0.8121 0.8860 0.9309 0.9581 0.9746 0.9907];
yinf=1;
%firstly fitting euqation
y1=log(yinf-yt);
p=polyfit(t,y1,1);
alpha=-p(1);
A=-exp(p(2));
yt1=yinf+A*exp(-alpha*t);
figure(1)
plot(t,yt,'*',t,yt1)
grid on;
figure(2)
plot(t,p(1)*t+p(2),t,y1,'*');
grid on;
e1=yt1-yt;
figure(3)
plot(t,e1)
grid on;
shg
a1=find(abs(e1)<=0.05);
a11=find(t(a1)>1.0);
y11=log(yinf-yt(a1(a11(1)):29));
p=polyfit(t(a1(a11(1)):29),y11,1);
alpha=-p(1);
A=-exp(p(2));
figure(4)
plot(t,p(1)*t+p(2),t,y1,'*');
grid on;
yt11=yinf+A*exp(-alpha*t);
figure(5)
plot(t,yt,'*',t,yt11)
grid on;
%secondly fitting euqation
ys2=yt-yt11;
a2=find(ys2>=0.0001);
y2=log(ys2(a2));
t2=t(a2);
p2=polyfit(t2,y2,1);
beta=-p2(1);
B=exp(p2(2));
yt2=yt11+B*exp(-beta*t);
figure(6)
plot(t,yt,'*',t,yt2)
grid on;
e2=yt2-yt;
figure(7)
plot(t,e2)
grid on;
shg
b=find(abs(e2)<=0.001);
b2=find(t(b)>0.5);
y22=log(ys2(b(b2(1)):29));
p=polyfit(t(b(b2(1)):29),y22,1);
beta=-p2(1);
B=exp(p2(2));
yt22=yt11+B*exp(-beta*t);
figure(8)
plot(t,e2)
grid on;
shg
figure(9)
plot(t,yt,'*',t,yt22)
grid on;
hold on;
e2=yt22-yt;
syms xf
f=(x+alpha)*(x+beta)+A*(x+beta)*x+B*(x+alpha)*x;
f=collect(f);
num=sym2poly(f);
den=conv(conv([1,0],[1,alpha]),[1,beta]);
tf(num,den(1:3))
[y,t3]=step(tf(num,den(1:3)));
figure(10)
plot(t3,y,'k',t,yt,'*')
结果如下:(只给出主要的结果)