cupyx.scipy.signal.minimum_phase#

cupyx.scipy.signal.minimum_phase(h, method='homomorphic', n_fft=None)[源代码][源代码]#

将线性相位FIR滤波器转换为最小相位

参数:
  • h (array) – 线性相位 FIR 滤波器系数。

  • method ({'hilbert', 'homomorphic'}) – 使用方法: ‘同态’ (默认) 这种方法 [4] [5] 最适合用于具有奇数个抽头的滤波器,生成的最小相位滤波器的幅度响应将接近原始滤波器幅度响应的平方根。 ‘希尔伯特’ 这种方法 [1] 设计用于与等波纹滤波器(例如,来自 remez)一起使用,这些滤波器具有单位或零增益区域。

  • n_fft (int) – 用于FFT的点数。应至少比信号长度大几倍(参见注释)。

返回:

h_minimum – 滤波器的最小相位版本,长度为 (length(h) + 1) // 2

返回类型:

array

备注

Hilbert [1] 或同态 [4] [5] 方法都需要选择一个FFT长度来估计滤波器的复倒谱。

在Hilbert方法的情况下,与理想频谱 epsilon 的偏差与阻带零点的数量 n_stop 和FFT长度 n_fft 有关,如下:

epsilon = 2. * n_stop / n_fft

例如,如果有100个阻带零点和2048的FFT长度,epsilon = 0.0976。如果我们保守地假设阻带零点的数量比滤波器长度少一个,我们可以将FFT长度设为满足``epsilon=0.01``的下一个2的幂,如下:

n_fft = 2 ** int(np.ceil(np.log2(2 * (len(h) - 1) / 0.01)))

这为Hilbert方法和同态方法都提供了合理的结果,并且在 n_fft=None 时给出了使用的值。

存在多种创建最小相位滤波器的替代实现方法,包括零反转 [2] 和谱分解 [3] [4] [5]。更多信息,请参阅:

引用