计算 FIR 的最小相位版本

信息处理 Python scipy 分解 最小相位 hrtf
2022-02-13 00:49:47

我正在使用HRIR滤波器,特别是我正在尝试对它们进行插值。文献中执行 HRIR 插值的一种常用方法是使用最小相位分解并分别插值滤波器的最小相位部分和全通部分。

您可以在这里找到更多信息:https ://www.researchgate.net/publication/277879431_On_the_Minimum-Phase_Nature_of_Head-Related_Transfer_Functions

我想要做的是将我的任意 HRIR FIR 转换为最小的第一阶段。特别是,我在 Python 中工作,我一直在使用这个函数

但是,在执行从原始 FIR 到最小阶段一的转换时,我收到以下错误:

RuntimeWarning: h 似乎不是对称的,转换可能会失败

使用以下代码:

min_phase_HRIR_0 = minimum_phase(hrtf[0], 'hilbert')

从 HRIR 数据库(特别是HUTUBS 数据库hrtf[0]中提取的 256 长 FIR在哪里。

如果我绘制原始 FIR 的幅度和最小相位的幅度,我会得到以下图表: 阴谋

这显然是错误的,因为我期望最小相位和原始 FIR 具有相同的幅度谱。

我猜 Scipy 函数有问题。Python有什么可以将FIR转换为最小相位版本的吗?

1个回答

最后,我使用希尔伯特变换来计算我的 FIR 的最小相位相位。

我使用了以下公式: 公式

其中 H 是所需滤波器的光谱。

已用于:

  1. 个性化 d'indices acoustiques pour la synthèse binaurale
  2. 头部相关传递函数球面插值的相位展开
  3. 人外耳的转换特性

但是我不确定我得到的结果。

可以在此处找到讨论结果和实现的后续问题:通过希尔伯特变换返回值的最小相位相位