我想找到一个具有非最小零相位 z=36.6 的二阶传递函数,它具有 2% 的过冲和 0.2 秒的 2% 稳定时间。我创建了一个可调传递函数,但我不知道如何找到允许我想要的性能的可调参数 w 和 xi 的值。
有没有自动找到它们的方法?我尝试对变量进行采样,然后选择最佳函数,但我认为这不是最好的方法。
w = realp('w',25);
xi = realp('xi',0.8);
z = 36.6;
G = tf(w^2*[-1/z 1],[1 2*xi*w w^2]);
我想找到一个具有非最小零相位 z=36.6 的二阶传递函数,它具有 2% 的过冲和 0.2 秒的 2% 稳定时间。我创建了一个可调传递函数,但我不知道如何找到允许我想要的性能的可调参数 w 和 xi 的值。
有没有自动找到它们的方法?我尝试对变量进行采样,然后选择最佳函数,但我认为这不是最好的方法。
w = realp('w',25);
xi = realp('xi',0.8);
z = 36.6;
G = tf(w^2*[-1/z 1],[1 2*xi*w w^2]);
w = realp('w',25);
xi = realp('xi',0.8);
z = 36.6;
G = tf(w^2*[-1/z 1],[1 2*xi*w w^2]);
step(G);
val = stepinfo(G);
ts=val.SettlingTime;
Os=val.Overshoot;
希望这行得通……不过,阶跃响应有点奇怪。
我觉得这是一个类似的二阶系统,所以你可以直接从w
和计算zi
。
过冲由 sigma = exp(-pi*zeta/sqrt(1-zeta^2)) 给出,因此,对于 [0,1] 中给定的过冲 sigma,阻尼因子变为 zeta = -log(sigma)/ sqrt(pi^2+(log(sigma))^2)。
稳定时间近似为 ts = 4/(zeta*wn)。
一个例子:
ts = 0.5;
sigma = 0.2;
zeta = -log(sigma)/sqrt(pi^2+(log(sigma))^2);
wn = 4/zeta/ts;
K = 1;
H = tf(K*wn^2,[1,2*zeta*wn,wn^2])
val = stepinfo(H)
ts_meas = val.SettlingTime
Os = val.Overshoot