c - 我如何实现这个等式给出的带通滤波器?

标签 c audio signal-processing fft

我正在处理一些音频内容和我正在尝试实现的算法,该算法需要由等式给出的带通二阶 FIR 滤波器

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

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

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

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

Band Pass Filter

最佳答案

z^-1 是单位(一个样本)延迟,z 是 future 的一个样本。因此,样本 i 处的滤波器输出取决于 i-1i+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/

相关文章:

c - 一次从一个结构中读取字节

将结构复制到C中的数组

java - 更改原始音频文件中的音调?

arrays - 一种比较峰值的算法 : are they in phase or not?

iphone - 如何在iPhone OS的声音信号中区分静音模式和蜂鸣模式

无法使用在 c 中处理多个客户端的服务器在客户端之间平均分配工作

c - 子进程如何打印其根父 ID

java - 为什么我添加的 SPI jar 不能在我的 Netbeans 平台项目中注册?

flash - 如何从浏览器捕获音频并将其保存在服务器上?

matlab - 在Matlab中将音频文件作为矩阵访问