我有一个具有 48 个特征值的 SISO 系统(以 tf 形式),我想找到主导极点(假设将其减少到一阶或二阶)。我需要知道它们以近似计算我系统的阻尼和带宽。我不想依赖时间响应的识别,也不想看 pzmap(因为我必须做很多次)。有没有人有解决它的想法?提前感谢您的帮助。
问问题
4110 次
1 回答
0
如果您已经给出了传递函数,您可以做的是分析极点并根据它们的实际值进行排序。稳定的极点或复极点对(即在复平面的左侧)并且最靠近虚轴将是您选择的最主要的极点。
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
于 2015-11-13T21:56:42.250 回答