group_delay#
- scipy.signal.group_delay(system, w=512, whole=False, fs=6.283185307179586)[源文件]#
计算数字滤波器的群延迟。
群延迟衡量了信号的各种频谱分量的幅度包络被滤波器延迟了多少个采样点。它被正式定义为连续(解缠绕)相位的导数
d jw D(w) = - -- arg H(e) dw
- 参数:
- system由类数组对象组成的元组 (b, a)
滤波器传递函数的分子和分母系数。
- w{None, 整数, 类数组对象}, 可选
如果是一个整数,则在该数量的频率点计算(默认值为 N=512)。
如果是一个类数组对象,则在给定频率处计算延迟。这些频率的单位与 fs 的单位相同。
- whole布尔值, 可选
通常,频率从 0 计算到奈奎斯特频率 fs/2(单位圆的上半部分)。如果 whole 为 True,则计算频率从 0 到 fs。如果 w 是类数组对象,则此参数将被忽略。
- fs浮点数, 可选
数字系统的采样频率。默认为 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()