无滞后因果带通滤波器核公式

信息处理 有限脉冲响应 声音 带通
2022-02-10 19:29:24

谁能指出一个好的(对于“好”的任何值)无滞后因果带通滤波器的公式?

我正在做声音处理,我需要识别某些声音的起点(目标精度 <10 毫秒)。我一直在使用 Lanczos 滤波器,然后使用正弦波卷积来进行频谱分析,但这给了我偏斜的结果,因为任何给定时间的幅度都受到稍后发生的事情的影响(过滤器是非因果的)。

简单地切断 Lanczos 滤波器的右半部分就可以解决这个特定问题,但是产生的频谱被严重搞砸了(我得到了严重的边带溢出)。我尝试过的所有其他简单过滤器都更糟。

半小时的谷歌搜索出现了几次提到巴特沃斯滤波器,许多传递函数(我不太关心),但没有实际内核的公式。

编辑:让我尝试更具体。我从一个具有脉冲响应的窄带滤波器开始:

h(t)={Cei2πt/Tsinc2(tNT)|t|NT0|t|>NT

其中sinc(u)sin(πu)πu.

T= 2 ms 和N= 10,在N=500 Hz 时为 0 dB,在 440 以下或 560 Hz 以上时 <-40 dB。支持为2NT =40 ms。如果我在 t_0 时间从零到纯 500 Hz 正弦波的输入上使用它,则响应在t0时从恰好零到略高于零,在t_0 +NTt0时达到最大水平的一半,并在整个区域稳定时滤波器下方是正弦波。“有效”滞后(达到 50% 水平的时间)为 20 毫秒。t0+NT

我想做的是使这种“有效”滞后尽可能接近零,同时保持整体辨别能力(能够区分 440 Hz 正弦波和 500 Hz 正弦波。)

3个回答

您需要的不是“无滞后”过滤器,因为如果过滤器仍然是因果关系,那么这样的事情就不存在(它应该如何过滤,不知道未来并且不大声等待)。

您需要的是具有恒定群延迟的滤波器。任何线性相位滤波器都有。任何时间对称滤波器都有线性相位。通过将时间对称滤波器移动一半长度的简单方法,您可以使其成为因果关系。并且在任何频率下都有一半的延迟长度。

因此,任何对称的过滤器内核都可以工作。具有线性相位的带通滤波器太多了,您将使用哪一个完全取决于您的应用程序。但是,找到设计线性相位滤波器的工具通常比找到提供不同类型滤波器的工具更容易,所以你应该没问题。

如果您想要大致相同的频率响应但不关心相位。那么线性相位 FIR 滤波器的最小相位近似值可能会起作用。

您可以使用倒谱近似。就像是:

y = real(ifft(exp(fft(wn.*real(ifft(log(abs(fft(x)))))))));

或者可能有一个创建类似过滤器的 matlab 命令。

如果 IIR 滤波器符合您的要求,则尝试将所有零翻转到单位圆内以将其转换为最小相位。

响应比最小相位滤波器更短的滤波器会扭曲您想要的频率响应。如果您可以削弱您的滤波器要求(通过加宽所有过渡带,允许更多纹波等),这通常会导致线性相位和最小相位滤波器的滤波器滞后更短(无论您如何测量),但要求更宽松.

在 remez 交换之前,线性规划被提出作为滤波器设计方法。Rabinier 和 Gold 1975 年的书中有一节。LP 的优点是除了频率规范之外,您还可以对脉冲响应施加约束。

有一个使用 Matlab 的教程:

http://eeweb.poly.edu/iselesni/EL713/linprog/linprog.pdf

您也许可以按照这些方式进行权衡

您也可以使用最小二乘法来解决这个问题。在最小最大或最小二乘的任何一种情况下,您都应该包括时域和频域约束。