使用 scipy.signal.dstep 绘制离散传递函数

问题描述

我正在尝试使用 python 绘制离散传递函数 H(z) = (0.5 - 0.50z)/(z-1.0) 但我不断收到绘图错误。我试图在 scipy.signal 中使用 dstep 函数。连续绘图工作正常,但我在行 plt.plot(t,y,'k-',label=name) 中遇到错误。我将它用于连续传递函数并且工作正常。我认为其中一个论点肯定是不正确的

from scipy import signal
import matplotlib.pyplot as plt

name = 'discrete Transfer Function'
num = [-0.50,0.50]
den = [1.0,-1.0]
sys3 = signal.TransferFunction(num,den,dt = 0.001)
t,y = signal.dstep(sys3)
plt.figure(3)
plt.plot(t,label=name)
plt.legend(loc='best')
plt.show()

解决方法

y 是一个 numpy 数组的元组,所以它需要被索引为 y[0] 并用 ravel() 展平(似乎 matplotlib 可以计算出来没有展平):

plt.plot(t,y[0],'k-',label=name)