cupyx.scipy.signal.minimum_phase#

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

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

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

  • method ({'hilbert', 'homomorphic'}) –

    使用的方法

    ’homomorphic’(默认)

    此方法 [4] [5] 最适用于奇数抽头的滤波器,并且生成的最小相位滤波器将具有近似于原始滤波器幅度响应平方根的幅度响应。

    ’hilbert’

    此方法 [1] 设计用于等波纹滤波器(例如,通过 remez 生成),具有单位或零增益区域。

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

返回值:

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

返回类型:

数组

注意

希尔伯特 [1] 和同态 [4] [5] 方法都需要选择 FFT 长度来估计滤波器的复倒谱。

对于希尔伯特方法,与理想频谱的偏差 epsilon 与阻带零点数 n_stop 和 FFT 长度 n_fft 的关系如下:

epsilon = 2. * n_stop / n_fft

例如,当阻带零点数为 100 且 FFT 长度为 2048 时,epsilon = 0.0976。如果我们保守地假设阻带零点数比滤波器长度小一,我们可以将 FFT 长度取为满足 epsilon=0.01 的下一个 2 的幂次,如下所示:

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

这对于希尔伯特方法和同态方法都能给出合理的结果,并且是在 n_fft=None 时使用的值。

存在其他用于创建最小相位滤波器的实现,包括零点反转 [2] 和谱分解 [3] [4] [5]。更多信息请参阅:

参考文献