如果您已经给出了传递函数,您可以做的是分析极点并根据它们的实际值进行排序。 稳定(即在复平面的左侧)并且最接近虚轴的极点或复极点对将是您选择的最主要的极点.
考虑到您的传递函数存储在TF 对象中,我们将其称为T:
%// Get numerator and denominator data
[num,den] = tfdata(T, 'v');
%// Get the poles
pl = roots(den);
%// Get the stable poles only
pl_stable = pl(real(pl) < 0);
%// Determine the closest real location to the imaginary axis
[~,ind] = min(abs(real(pl_stable)));
%// Find all poles that share this same real location
tol = 1e-10;
ind_final = find(abs(real(pl_stable - pl_stable(ind))) <= tol);
final_poles = pl_stable(ind_final);
此代码的第一部分查找传递函数的分子和分母系数,并将它们分别存储在num 和den 中。之后,我们通过找到分母的根来获得传递函数的极点。之后,我们通过搜索实部为负的所有极点,仅分离出稳定极点。
一旦我们隔离出这些极点,我们就会通过使用min 并使用第二个输出来确定这个最小值的位置来确定最接近假想访问的极点。
之后,我们希望通过搜索在这个最小实数值的小容差范围内的所有极点来找到共享这个最小实分量的所有极点。我将此容差设置为1e-10。一旦我们找到这些位置,我们就可以索引到稳定的极点阵列并取出我们需要的东西。
这是一个小例子:
>> T = tf([1 1], [1 3 2 1])
T =
s + 1
---------------------
s^3 + 3 s^2 + 2 s + 1
Continuous-time transfer function.
检查两极,我们得到:
>> pl
pl =
-2.3247 + 0.0000i
-0.3376 + 0.5623i
-0.3376 - 0.5623i
如您所见,有一对主极点的实分量为-0.3376,而另一个更远的实极点位于-2.3247。 s = -0.3376 +/- 0.5623i 的那对极点是我们需要提取出来的。
运行上面的代码,我们得到:
>> final_poles
final_poles =
-0.3376 + 0.5623i
-0.3376 - 0.5623i