结果我得到了很多随机值!
当然,我也得到了一些正确的答案,但这还不够!
我发现了 自相关 ...
有人能给我一个关于如何使用它的例子吗?
或者链接,或者甚至来自其他脚本语言的示例脚本来掌握它?
问候
初始化代码
最佳答案
听起来您已经了解如何获得 FFT 频谱,对吗?
http://flic.kr/p/7notw6
但是,如果您正在寻找基本面(绿点),则不能只使用最高峰。这不一定是根本。在我的示例中,实际基波是 100 Hz,但最高峰值是 300 Hz。
有很多不同的方法可以找到真正的基本原理,每种方法在不同的环境中都可以更好地发挥作用。 comp.dsp 上的一个线程提到“FFT、倒谱、自动/互相关、AMDF/ASDF”。
举一个简单的例子,每个红点与其相邻点的距离为 100 Hz,因此如果您使用寻峰算法,然后将每个谐波与下一个谐波之间的距离平均在一起,您将找到基波,但这会如果任何一个峰值被遗漏,或者包含额外的峰值,或者如果信号是对称的并且只包含奇次谐波(1f、3f、5f),则失败。您需要找到模式,然后丢弃异常值,然后进行平均。这可能是一种容易出错的方法。
您还可以对原始波形进行自相关。从概念上讲,这意味着将波形的副本滑过自身,并找到与自身最佳对齐的延迟(这将是一个完整的周期)。在正常实现中,we use the FFT, though, to speed it up .自相关基本上是
其中 * 表示复共轭或时间反转。 In Python, for instance :
correlation = fftconvolve(sig, sig[::-1], mode='full')
并且 fftconvolve() 的来源比较简单:https://github.com/scipy/scipy/blob/master/scipy/signal/signaltools.py#L133
关于flash - 使用 computeSpectrum() 进行音调检测返回 FFT 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6283104/