如何使用python sympy进行z变换?

时间:2017-04-06 06:35:40

标签: python signal-processing sympy

z变换在信号处理中非常重要。我可以在sympy教程中找到傅立叶,拉普拉斯,余弦变换等。但我不知道如何使用sympy进行z变换。你能告诉我怎么做吗?

3 个答案:

答案 0 :(得分:1)

SymPy尚未将其实现为转换函数,但您可以直接表示求和。然而,在玩了一些之后,看起来它实际上可以计算的总和是有限的。以下是一个有效的例子:

>>> pprint(summation(n*z**-n, (n, -oo, oo)))
⎧      z           1           │1│
⎪- ───────── + ──────────  for │─│ < 1 ∧ │z│ < 1
⎪          2            2      │z│
⎪  (-z + 1)      ⎛    1⎞
⎪              z⋅⎜1 - ─⎟
⎪                ⎝    z⎠
⎪
⎨        ∞
⎪       ___
⎪       ╲
⎪        ╲      -n
⎪        ╱   n⋅z                 otherwise
⎪       ╱
⎪       ‾‾‾
⎩      False

答案 1 :(得分:0)

我在代码示例中添加了两个注释,说明如何在此处进行转换,请注意它们并不总是有效。

https://github.com/sympy/sympy/issues/12502

答案 2 :(得分:0)

有一个不错的包 (lcapy),它基于 sympy 但可以进行 z 变换和逆以及更多其他时间离散的东西。

https://pypi.org/project/lcapy/

简单尝试

import lcapy as lc
from lcapy.discretetime import n

xk=n*2**n*lc.exp(3j*n)
X0=xk.ZT()
print(X0)