scipy.signal.

group_delay#

scipy.signal.group_delay(system, w=512, whole=False, fs=6.283185307179586)[源代码]#

计算数字滤波器的群延迟。

群延迟衡量的是信号的各种频谱分量的幅度包络被滤波器延迟了多少个采样。它正式定义为连续(展开的)相位的导数

          d        jw
D(w) = - -- arg H(e)
         dw
参数
systemarray_like 元组 (b, a)

滤波器传递函数的分子和分母系数。

w{None, int, array_like}, 可选

如果是一个整数,则计算该数量的频率(默认为 N=512)。

如果是一个 array_like,则计算给定频率的延迟。这些频率的单位与 fs 相同。

wholebool, 可选

通常,频率的计算范围是从 0 到奈奎斯特频率 fs/2(单位圆的上半部分)。如果 whole 为 True,则计算频率从 0 到 fs。如果 w 是 array_like,则忽略此参数。

fsfloat, 可选

数字系统的采样频率。默认为 2*pi 弧度/采样(因此 w 的范围是从 0 到 pi)。

1.2.0 版本中新增。

返回
wndarray

计算群延迟的频率,单位与 fs 相同。默认情况下,w 被归一化到 [0, pi) 范围内(弧度/采样)。

gdndarray

群延迟。

参见

freqz

数字滤波器的频率响应

备注

MATLAB 中的类似函数称为 grpdelay

如果传递函数 \(H(z)\) 在单位圆上有零点或极点,则相应频率下的群延迟未定义。当出现这种情况时,会发出警告,并且在这些频率下群延迟设置为 0。

有关群延迟数值计算的详细信息,请参阅 [1][2]

0.16.0 版本中新增。

参考文献

[1]

Richard G. Lyons, “Understanding Digital Signal Processing, 3rd edition”, p. 830.

[2]

Julius O. Smith III, “Numerical Computation of Group Delay”, in “Introduction to Digital Filters with Audio Applications”, online book, 2007, https://ccrma.stanford.edu/~jos/fp/Numerical_Computation_Group_Delay.html

示例

>>> from scipy import signal
>>> b, a = signal.iirdesign(0.1, 0.3, 5, 50, ftype='cheby1')
>>> w, gd = signal.group_delay((b, a))
>>> import matplotlib.pyplot as plt
>>> plt.title('Digital filter group delay')
>>> plt.plot(w, gd)
>>> plt.ylabel('Group delay [samples]')
>>> plt.xlabel('Frequency [rad/sample]')
>>> plt.show()
../../_images/scipy-signal-group_delay-1.png