【发布时间】:2012-01-15 06:38:44
【问题描述】:
我是一位经验丰富的软件工程师,我在大学里参加过一些 EE 课程。我在 iPhone 和 Android 上编程,我想为实时麦克风和加速度计数据实现数字滤波器(例如低通、带通、带阻等)。
我知道有多种等效方法可以在时域样本窗口上实现数字滤波器。我正在研究的两种方法是:
直接在 C/Java 代码中实现 差分方程(例如 y[i] = y[i-1] + 2 * x[i])。我相信这可以在 O(N) 时间内运行, 其中 N 是样本窗口的长度,例如N=512。
实现样本窗口和样本窗口之间的卷积 FIR 滤波器的时域表示,通常是某种形式的 sinc 功能。不久前我问过this question。这可以在 O(N lg N) 如果您使用涉及 FFT 和 IFFT 的快速卷积。
现在,通过阅读各种在线资源,我发现 C/Java 编程的首选传统智慧方法是上面的 (1),实现差分方程。这是一个正确的结论吗?
这是我发现的:
Apple 的加速度计过滤器code 实现了不同 等式。
How to implement a LowPass Filter? 的这个 Stackoverflow 问题建议使用差异 等式。
低通滤波器上的Wikipedia article 提供了一种算法 使用差分方程。
总之,我的问题是:
实现差分方程(而不是通过快速卷积)是在 C/Java 中编写过滤器的方法吗?
以上参考资料均未说明如何在给定特定截止频率或带阻频率的情况下设计差分方程。我知道我不久前研究过这个。有这种信息的程序员有过滤器参考吗?
【问题讨论】:
-
三个问题: 1. 如果你实现你的过滤器为 y[n] = x[n] + 2*x[n-1] + 3*x[n-2] + 1*x [n-3],你会称之为差分方程还是卷积? 2. 你想做 IIR 还是 FIR 滤波器? 3.定点还是浮点实现?
-
1.我认为这是一个差分方程,对吧?卷积运算使用信号和 FFT 值之间的典型乘加运算,而快速卷积使用 FFT 和 IFFT。 2. IIR 或 FIR 无所谓,只要它快,但如果我没记错的话,FIR 总是稳定的,但需要更多的系数。 3. 我猜是浮点数,因为麦克风和加速度计数据可以是浮点数?
标签: android iphone audio signal-processing fft