如何实现此等式给出的带通滤波器?

时间:2011-12-01 09:13:32

标签: c audio signal-processing fft

我正在搞乱一些音频和算法我试图实现对等式给出的带通二阶FIR滤波器的调用

H(z) = z - z^(-1)

如何在C中实现这样的带通滤波器?

我有原始音频数据以及可用于我的音频数据的FFT,但我仍然不确定如何实现此过滤器,我也不确定该等式的含义。

在下图中,我正在尝试实施HF3:

Band Pass Filter

2 个答案:

答案 0 :(得分:7)

z^-1是一个单位(一个样本)延迟,z是未来的一个样本。因此,样本i的过滤器输出取决于i-1i+1的输入样本。 (一般来说,您可以认为z^-n是一个n样本延迟。)

如果您在输入缓冲区x[]中有时域样本,并且想要将这些样本过滤到输出缓冲区y[],那么您将实现给定的传递函数,如下所示:

y[i] = x[i+1] - x[i-1]

E.g。在C中你可以像这样处理N个样本的缓冲区:

for (i = 1; i < N - 1; ++i)
{
    y[i] = x[i + 1] - x[i - 1];
}

这是一个非常简单的一阶非递归高通滤波器 - 它在+1和-1处为零,因此在DC(0)和Nyquist(Fs / 2)处的幅度响应为零,并且它在Fs / 4处达到峰值。因此它是一个非常宽的带通滤波器。

答案 1 :(得分:1)

FIR滤波器乘以系数,并为每个输出数据样本累加一堆相邻的输入数据样本。系数的数量将与Z变换的正确大小上的z项的数量相同。

请注意,带通FIR滤波器通常需要更多的项或系数,大致与所需带通转换的陡度成正比,因此对于任何有用的带通滤波,2个抽头可能太短。