- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试确定要完成的最佳DSP方法,如下所示:
实时地从一组不同的预定义频率(在1000Hz范围内,不超过40个不同的频率)中检测到某个频率的存在。即使有其他频率(超出此设置或范围)更占主导地位,我也必须能够做到这一点。
据我了解,FFT可能不是最好的方法,因为它告诉您在任何给定时间的最主要的频率(幅度)。这似乎是行不通的,因为如果我试图检测到某个频率为1650Hz(存在),但是还有一个500Hz的频率更强,那么它不会告诉我当前的频率为1650Hz 。
我听说可能Goertzel算法可能更适合我想做的事,即实时检测单个频率或一组频率,即使在声音中的主导频率比试图检测的频率高的声音中被发现。
非常感谢您提供任何指导,如果我对这些假设有误,请纠正我。谢谢!
最佳答案
用模糊和有些不准确的术语来说,FFT的输出是所有[1]频率的幅度和相位。也就是说,您的说法“[[FFT]告诉您在任何给定时间的最主要的频率(幅度)”是不正确的。 FFT通常被用作确定最主要频率的第一步,但事实并非如此。实际上,如果您对最主要的频率感兴趣,则需要在FFT之外进行额外的操作:您需要获取FFT输出的所有频率的幅度,然后求出最大值。相应的频率是主频率。
就您所了解的应用而言,FFT是正确的算法。
Goertzel算法与FFT密切相关。如果您只对一小部分频率的幅度和/或相位感兴趣,则可以对FFT进行一些优化。根据所讨论的频率数,它可能是您应用程序的正确选择,但仅是一种优化-除性能外,它无法解决FFT无法解决的任何问题。因为关于FFT的文章更多,所以我建议您从那里开始,并且仅在FFT证明不够快并且可以确定Goertzel会更快的情况下使用Goertzel算法。
[1]出于实际目的,此陈述最不准确的地方是将频率分组在“箱”中。分析的分辨率有限,这取决于多种因素。
关于math - DSP方法来检测可能不是当前声音中最主要的特定频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21434900/
我是一名优秀的程序员,十分优秀!