首页 > 解决方案 > `scipy.signal.residue` 或 `scipy.signal.residuez` 使用滤波器的零极点增益表示

问题描述

在 Scipy信号处理模块中有两个函数residueresideuz计算有理传递函数的部分分数分解

这两个函数都需要分子和分母的多项式系数作为输入。我想知道是否有一个版本可以接受分子和分母的根,即零 - 极点 - 获得传递函数的表示?

我实际上认为在这种情况下计算应该更容易。

显然,理论上,人们总是可以使用tf2zpkand来从一种表示形式转换到另一种表示形式zpk2tf。然而,在实践中,这种转变并不总是可逆的。可以找到不能精确重构的零点、极点和增益值(称为、zpk的示例。tf2zpk(*zpk2tf(z, p, k))zpk

标签: pythonnumpyscipy

解决方案


具有零点和极点确实是有利的,因为获得分子和分母多项式非常简单,只涉及乘法。另一方面,反过来更复杂,因为我们必须找到多项式的根。一种典型的方法是对伴随矩阵进行对角化,例如由numpy.roots使用

如果我们检查残差的实现,我们会看到,正如预期的那样,第一步是计算极点。剩下的就是对残留物的或多或少直接的评估。

我不知道任何实现,但调整scipy实现非常简单。主要的改进应该是用poles = np.roots(a)你的杆子代替线。这避免了矩阵对角化。对于分子,您可以将零点和增益转换为分子多项式。

如果你渴望,你可以直接使用零和增益来计算残差,但我不期望有太大的改进。


免责声明:我当然不是该主题的专家,所以不要盲目依赖我的答案。


推荐阅读