我是一个非常有经验的软件工程师,我在大学里上过一些EE课程。我正在iPhone和Android上编程,我想实现数字滤波器(例如低通、带通、带阻等等)。用于实时麦克风和加速度计数据。
我知道,在时域样本窗口上实现数字滤波器的方法有多种,这是相当的。我正在研究的两种方法是:
现在,通过阅读各种在线资源,我发现C/Java编程的首选传统智慧方法是(1),实现了一个差分方程。这是正确的结论吗?
以下是我的发现:
总之,我的问题是:
发布于 2011-12-07 19:22:42
时域差分方程为卷积方程。你所想到的基于FFT的方法是频域卷积,也就是快速卷积,这实际上只是一种性能优化--它在数学上相当于时域卷积。通常,对于较小的滤波器长度,直接时域卷积更快,而频域方法在滤波器长度较大时获胜。根据经验,一维过滤“大”意味着,比如说,N> 50。
在上面的一段中,我们只讨论FIR滤波器。对于IIR滤波器,频域卷积不是一种选择(除非在任意点截断脉冲响应),但通常IIR滤波器与FIR滤波器相比往往相对较短。
以便生成滤波器系数(即。通常从筛选器规范开始,然后使用许多现有软件包中的一个生成系数。您可以实现您自己的过滤器设计例程,如果您真的想-查看算法,如雷米兹交换。
发布于 2011-12-07 20:19:23
低阶IIR滤波器(使用短差分方程)可以比FIR卷积或FFT快速卷积更快地计算,如果它们符合您的滤波器规格。它们也类似于电路设计者可能熟悉的低分量模拟滤波器。
如果您没有复杂的过滤器规范或要求(不能在极和零中足够接近),那么为什么在FIR或FFT上消耗更多的CPU周期?但是如果你确实需要一个更专门的过滤器,那么你就需要。
下面是一个非常常用的确定双四角的IIR系数的方法。双四进制IIR滤波器也可以级联进行高阶滤波。
发布于 2011-12-07 19:09:37
我将再次建议使用传统的时域数字滤波器,即使用延迟、加法器和乘法器.对于简单的实时过滤,这种方法可能更快,更不复杂.
在实时应用程序中使用FFT是可以的,这取决于目标。例如,如果您想要进行实时频谱分析(例如,对于涉及音频的机器学习任务),那么FFT可以很好地工作,因为它们速度快、容易,并且可以提供高光谱分辨率。
你对FIR和IIR的评论是正确的。如果您给出了一些(例如)过滤器规范,那么我们可能能够提供更多的帮助来选择哪种过滤器类型,以及如何定义过滤器龙头(即系数)。例如,如果您可以访问Matlab或Python,您可以使用这些工具来设计过滤器。
(有关信号处理的更多信息,请查看dsp.stackexchange。)
https://stackoverflow.com/questions/8420611
复制相似问题