algorithm - FFT 算法 : What goes IN/OUT?(关于:实时音调检测)

标签 algorithm real-time fft pitch

我正在尝试从音频流中提取音高数据。据我所知,FFT 似乎是最适合使用的算法。

与其直接深入数学,有人可以帮助我理解这个 FFT 算法的作用吗?

请不要说“FFT 从原始信号中提取频率数据”这样明显的话。我需要更详细的信息。

我传入什么,输出什么?

一旦我清楚地理解了接口(interface),这将帮助我理解实现。

我认为我需要传入一个音频缓冲区,我需要告诉它每次计算要使用多少字节(比如说来自这个缓冲区的最近的 1024 个字节)。也许我需要指定我希望它检测的音高范围。现在它要传回去什么?一组频率仓?这些是什么?

(编辑:)我找到了一个可以使用的 C++ 算法(如果我只能理解它的话)

Performous从麦克风中提取音高。而且代码是开源的。以下是编写算法的人对算法功能的描述。

  • PCM 输入(带缓冲)
  • FFT(一次 1024 个样本,之后从缓冲区前面移除 200 个样本)
  • 重新分配方法(针对之前的 200 个样本的 FFT)
  • 峰值过滤(这部分可以做得更好,甚至可以忽略)
  • 将峰值组合成谐波集(我们称这种组合为音调)
  • 音调的时间过滤(更新较早检测到的音调集,而不是简单地使用新检测到的音调)
  • 选择最好的声调(频率限制、加权,也可以使用谐波阵列,但我认为我们不会)

但是有人可以帮助我理解这是如何工作的吗?从 FFT 发送到重新分配方法的是什么?

最佳答案

FFT 只是该过程中的一个组成部分,它可能不是音调检测的最佳方法。阅读音高检测并决定您首先要使用哪种算法(这将取决于您尝试测量音高的具体内容 - 语音、单一乐器、其他类型的声音等。在进入低音之前做好这项工作级细节,例如 FFT(一些但不是所有音高检测算法在内部使用 FFT)。

SO 上已经有很多类似的问题,例如Real-time pitch detection using FFTPitch detection using FFT for trumpet ,还有很好的overview material on Wikipedia等等 - 阅读这些内容,然后决定您是仍想推出自己的基于 FFT 的解决方案,还是使用适合您特定应用的现有库。

关于algorithm - FFT 算法 : What goes IN/OUT?(关于:实时音调检测),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4067976/

相关文章:

hadoop - Spark Streaming 不持久化信息

ios - iOS 上的 fft numpy 风格以非二次方数据长度加速

python - OpenCV/Python:彩条的数量级

OpenCV DFT_INVERSE 不同于Matlab的ifft

计算 AVL 树中节点数的算法

algorithm - 对于矩阵中的所有标记区域,找到它们的顶点进行绘制

real-time - 什么定义了实时/近实时系统?

java - 使用涉及每个元素索引的计算在数组中赋值

c# - 非递归地找到迷宫中的方法数

linux - 所有系统调用都不是实时安全的吗?