python - `scipy.signal.residue` 或 `scipy.signal.residuez` 使用滤波器的零极点增益表示
问题描述
在 Scipy信号处理模块中有两个函数residue
和resideuz
计算有理传递函数的部分分数分解。
这两个函数都需要分子和分母的多项式系数作为输入。我想知道是否有一个版本可以接受分子和分母的根,即零 - 极点 - 获得传递函数的表示?
我实际上认为在这种情况下计算应该更容易。
显然,理论上,人们总是可以使用tf2zpk
and来从一种表示形式转换到另一种表示形式zpk2tf
。然而,在实践中,这种转变并不总是可逆的。可以找到不能精确重构的零点、极点和增益值(称为、z
、p
)k
的示例。tf2zpk(*zpk2tf(z, p, k))
z
p
k
解决方案
具有零点和极点确实是有利的,因为获得分子和分母多项式非常简单,只涉及乘法。另一方面,反过来更复杂,因为我们必须找到多项式的根。一种典型的方法是对伴随矩阵进行对角化,例如由numpy.roots使用
如果我们检查残差的实现,我们会看到,正如预期的那样,第一步是计算极点。剩下的就是对残留物的或多或少直接的评估。
我不知道任何实现,但调整scipy
实现非常简单。主要的改进应该是用poles = np.roots(a)
你的杆子代替线。这避免了矩阵对角化。对于分子,您可以将零点和增益转换为分子多项式。
如果你渴望,你可以直接使用零和增益来计算残差,但我不期望有太大的改进。
免责声明:我当然不是该主题的专家,所以不要盲目依赖我的答案。
推荐阅读
- python - 结果按钮消失并且条件代码不起作用
- python - 在 Django 中按字段区分分组
- node.js - 添加“less”和“less-loader”模块后如何修复损坏的vuejs项目
- pytest - 如何将场景特定的参数传递给 pytest bdd after_scenario 挂钩?
- python - 熊猫使用 loc 更改特定行的数据集值
- c# - 未修改的 asp.net 模板中的 NullReferenceException (Visual Studio)
- mysql - 我想知道是否有任何方法可以添加新的元组而不干扰mysql中的当前数据序列?
- ios - func tableView 中的异步函数
- intersystems-iris - 将表格和其他组件动态添加到 ZEN PDF 报告
- python - TypeError: QThread(parent: QObject = None): 参数 1 具有意外类型 'Ui_Form'