scipy.signal.
dfreqresp#
- scipy.signal.dfreqresp(system, w=None, n=10000, whole=False)[源]#
计算离散时间系统的频率响应。
- 参数:
- systemdlti | tuple
dlti
LTI 类的一个实例或描述该系统的元组。元组中元素的数量决定了其解释方式。即:system
:dlti
LTI 类的实例。请注意,也允许使用派生实例,例如TransferFunction
、ZerosPolesGain
或StateSpace
的实例。(num, den, dt)
:TransferFunction
中描述的有理多项式。多项式的系数应按降幂顺序指定,例如,z² + 3z + 5 将表示为[1, 3, 5]
。(zeros, poles, gain, dt)
:ZerosPolesGain
中描述的零点、极点、增益形式。(A, B, C, D, dt)
:StateSpace
中描述的状态空间形式。
- warray_like, optional
频率数组(以弧度/采样为单位)。将为该数组中的每个值计算幅度和相位数据。如果未给出,将计算一组合理的频率。
- nint, optional
如果未给出 w,则要计算的频率点数。n 个频率在选定区间内以对数方式等间距排列,以包含系统零极点的影响。
- wholebool, optional
通常,如果未给出“w”,则频率从 0 计算到奈奎斯特频率,即 π 弧度/采样(单位圆的上半部分)。如果 whole 为 True,则计算从 0 到 2π 弧度/采样的频率。
- 返回:
- w1D ndarray
频率数组 [弧度/采样]
- H1D ndarray
复数幅度值数组
备注
如果
system
传入 (num, den),则分子和分母的系数都应按降幂顺序指定(例如,z^2 + 3z + 5
将表示为[1, 3, 5]
)。0.18.0 版新增。
示例
以下示例生成了传递函数 \(H(z) = \frac{1}{z^2 + 2z + 3}\) 的奈奎斯特图,采样时间为 0.05 秒。
>>> from scipy import signal >>> import matplotlib.pyplot as plt >>> sys = signal.TransferFunction([1], [1, 2, 3], dt=0.05) # construct H(z) >>> w, H = signal.dfreqresp(sys) ... >>> fig0, ax0 = plt.subplots() >>> ax0.plot(H.real, H.imag, label=r"$H(z=e^{+j\omega})$") >>> ax0.plot(H.real, -H.imag, label=r"$H(z=e^{-j\omega})$") >>> ax0.set_title(r"Nyquist Plot of $H(z) = 1 / (z^2 + 2z + 3)$") >>> ax0.set(xlabel=r"$\text{Re}\{z\}$", ylabel=r"$\text{Im}\{z\}$", ... xlim=(-0.2, 0.65), aspect='equal') >>> ax0.plot(H[0].real, H[0].imag, 'k.') # mark H(exp(1j*w[0])) >>> ax0.text(0.2, 0, r"$H(e^{j0})$") >>> ax0.grid(True) >>> ax0.legend() >>> plt.show()