android– 实现数字滤波器 – 通过卷积或差分方程?

android– 实现数字滤波器 – 通过卷积或差分方程?,第1张

概述我是一位非常有经验的软件工程师,我在大学里学过一些EE课程.我在iPhone和Android上编程,我想为实时麦克风和加速度计数据实现数字滤波器(例如低通,带通,带阻等).我知道有多种等效方法可以在时域样本窗口上实现数字滤波器.我正在研究的两种方法是:>直接在C/Java代码中实现差分方

我是一位非常有经验的软件工程师,我在大学里学过一些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 on low-pass滤波器提供了一种算法
使用差分方程.

总而言之,我的问题确实是:

>在C / Java中编写过滤器的方法是实现差分方程(而不是通过快速卷积)吗?
>上述参考文献均未说明如何在给定特定截止频率或带阻频率的情况下设计差分方程.我知道我前一段时间研究过这个.对于拥有此类信息的程序员,是否有任何过滤器参考?

解决方法:

时域差分方程是卷积.您在基于FFT的方法中所考虑的是频域卷积,即快速卷积,这实际上只是一种性能优化 – 它在数学上等同于时域卷积.通常,对于小的滤波器长度,直接时域卷积更快,而当滤波器长度大时,频域方法获胜.根据经验,对于1D过滤,“大”意味着,例如,N> 1. 50.

在上一段中,我们只讨论FIR滤波器.对于IIR滤波器,频域卷积不是一种选择(除非您在某个任意点处截断脉冲响应),但通常IIR滤波器与FIR滤波器相比往往相对较短.

为了生成滤波器系数(即设计滤波器),通常从滤波器规范开始,然后使用许多现有软件包中的一个来生成系数.如果您真的想要,可以实现自己的过滤器设计例程 – 查看Remez exchange等算法.

总结

以上是内存溢出为你收集整理的android – 实现数字滤波器 – 通过卷积或差分方程?全部内容,希望文章能够帮你解决android – 实现数字滤波器 – 通过卷积或差分方程?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1109611.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存