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。
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()