我正在处理一些音频内容和我正在尝试实现的算法,该算法需要由等式给出的带通二阶 FIR 滤波器
H(z) = z - z^(-1)
如何在 C 中实现这样的带通滤波器?
我有原始音频数据以及对该音频数据的 FFT 可用,但我仍然不确定如何实现此滤波器,我也不确定方程式的确切含义。
在下图中,我正在尝试实现 HF3:
最佳答案
z^-1
是单位(一个样本)延迟,z
是 future 的一个样本。因此,样本 i
处的滤波器输出取决于 i-1
和 i+1
处的输入样本。 (通常你可以认为 z^-n
是一个 n 样本延迟。)
如果您在输入缓冲区 x[]
中有时域样本,并且您希望将这些样本过滤到输出缓冲区 y[]
,那么您将像这样实现给定的传递函数:
y[i] = x[i+1] - x[i-1]
例如在 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 处达到峰值。因此它是一个非常宽的带通滤波器。
关于c - 我如何实现这个等式给出的带通滤波器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8338856/