首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >帮助使用FFT确定音频样本的频率

帮助使用FFT确定音频样本的频率
EN

Stack Overflow用户
提问于 2010-12-20 22:42:30
回答 2查看 2.7K关注 0票数 2

我目前正在开发一个打击乐教程程序。该程序要求我可以确定正在演奏的鼓,为此,我将分析鼓记录的频率,并查看频率是否在给定的范围内。

到目前为止,我一直在使用用于快速傅立叶变换的Apache math实现(http://commons.apache.org/math/),但我的问题是,一旦我完成了快速傅立叶变换,我如何使用结果数组来计算信号中包含的频率?

注意:我也尝试过使用自相关,但它似乎不能很好地使用鼓包中的样本

任何关于如何确定击鼓的帮助或替代建议都将不胜感激。

编辑:自从写了这篇文章以来,我发现了一个很棒的在线课程,关于在java中为时间/频率转换Spectrum Analysis in Java实现快速傅立叶变换

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-21 00:52:22

在音乐信息检索领域,人们经常使用一个相关的度量,称为mel频率倒谱系数(MFCC)。

对于任何N个采样的信号段,取FFT。这些得到的N个样本被转换成一组MFCC,例如,包含12个元素(即,系数)。此12元素向量用于对仪器进行分类,包括使用哪个鼓。

要进行监督分类,可以使用支持向量机(SVM)之类的工具。LIBSVM是一个具有Java兼容性(以及许多其他语言)的常用库。您可以使用这些MFCC及其相应的仪器标签来训练SVM。然后,您通过提供一个查询MFCC向量来测试它,它将告诉您它是哪种仪器。

所以,总结一下,基本步骤是:

  1. 获取FFT。
  2. 从FFT获取MFCC。
  3. 使用MFCC和仪器标签训练SVM。
  4. 使用查询信号的MFCC查询支持向量机。

检查执行这些操作的Java包。(它们必须存在。我只是不认识他们。)相对而言,鼓转录比大多数其他乐器组更容易,所以我乐观地认为这将会奏效。

为了进一步阅读,这里有一大堆articles on drum transcription

票数 5
EN

Stack Overflow用户

发布于 2017-02-08 07:24:03

当我使用DFT编写程序时,我让它为每个频率创建一个频率和振幅数组。然后我可以找到最大的振幅,并将它们与音符进行比较,从而很好地掌握演奏的内容。如果你知道鼓的大致频率,你应该能够做到这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4490633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档