matlab传递函数延时相关

matlab传递函数中一共有四种延时:

inputs

Outputs

Between individual I/O pairs

Internally (for example, inside a feedback loop)

其中前两种很好理解,第三种是特定io与多输出输出有关,第四种(InternalDelay )的含义如下(只能用在状态空间ss表示的传递函数上):

h=ss(tf(1,[1 2],'inputdelay',2))

a =
       x1
   x1 -2

b =
       u1
   x1   1

c =
       x1
   y1   1

d =
       u1
   y1   0

Input delays (listed by channel): 2

f=feedback(h,1);

bodemag(f);

出现增益纹波如下:

考虑延时后的一些有趣现象:

1.增益纹波,如上图

2.增益振荡,如下:

锯齿形的阶跃响应:

G = exp(-s) * (0.8*s^2+s+2)/(s^2+s);
T = feedback(ss(G),1);
step(T)

4、混沌响应

G = ss(1/(s+1)) + exp(-4*s);
T = feedback(1,G);

step(T)


用伯德近似法处理延时环节,考虑如下系统:

其中补偿器采用PI。matlab代码如下:

s = tf('s');
P = exp(-2.6*s)*(s+3)/(s^2+0.3*s+1);
C = 0.06 * (1 + 1/s);
T = feedback(ss(P*C),1);

采取一阶近似和实际系统阶跃响应的对比如下:

T1 = pade(T,1);
step(T,'b--',T1,'r',100)
grid, legend('Exact','First-Order Pade')


可见误差很大,采用二阶近似后的效果如下:


对延时环节的敏感性测试:

对上面的控制系统加入陷波滤波器,考虑延时时间在2-3秒之间: notch = tf([1 0.2 1],[1 .8 1]);
C = 0.05 * (1 + 1/s);
Tnotch = feedback(ss(P*C*notch),1);

tau = linspace(2,3,5);               % 5 delay values 
Tsens = repsys(Tnotch,[1 1 5]);      % 5 copies of Tnotch 
for j=1:5
Tsens(:,:,j).InternalDelay = tau(j); % jth delay value 
end 
% Use step to create an envelope plot. 
step(Tsens) 
grid
title('Closed-loop response for 5 delay values between 2.0 and 3.0')
可见延时环节对控制效果的影响不大。
不考虑延时环节的bode图对比如下:
Tnotch0 = Tnotch; 
Tnotch0.InternalDelay = 0; 
bode(Tnotch,'b',Tnotch0,'r',{1e-2,3}) 
grid, legend('Delay = 2.6','No delay','Location','SouthWest')

你可能感兴趣的:(matlab传递函数延时相关)