cupyx.scipy.signal.minimum_phase#
- cupyx.scipy.signal.minimum_phase(h, method='homomorphic', n_fft=None)[source]#
将线性相位 FIR 滤波器转换为最小相位滤波器
- 参数:
h (数组) – 线性相位 FIR 滤波器系数。
method ({'hilbert', 'homomorphic'}) –
使用的方法
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]。更多信息请参阅:
参考文献