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 rad/sample(因此 w 从 0 到 pi)。

在版本 1.2.0 中添加。

返回:
wndarray

在与emxref py py-obj>fsem 相同的单位中计算群延迟的频率。默认情况下,emxref py py-obj>wem 归一化为范围 [0, pi)(rad/sample)。

gdndarray

群延迟。

另请参阅

freqz

数字滤波器的频率响应

注释

MATLAB 中类似的函数称为emxref py py-obj>grpdelayem

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

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

已添加至 0.16.0 版。

参考文献

[1]

Richard G. Lyons,"理解数字信号处理,第 3 版",第 830 页。

[2]

Julius O. Smith III,"群延迟的数值计算",发表于"数字滤波器与音频应用简介",在线书籍,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