我正在搞乱一些音频和算法我试图实现对等式给出的带通二阶FIR滤波器的调用
H(z) = z - z^(-1)
如何在C中实现这样的带通滤波器?
我有原始音频数据以及可用于我的音频数据的FFT,但我仍然不确定如何实现此过滤器,我也不确定该等式的含义。
在下图中,我正在尝试实施HF3:
答案 0 :(得分:7)
z^-1
是一个单位(一个样本)延迟,z
是未来的一个样本。因此,样本i
的过滤器输出取决于i-1
和i+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个抽头可能太短。