我最近问了这个问题:
我正在寻找一种算法来检测音高。其中一个答案建议我使用初始 FFT 来获得基本频率响应,找出哪些频率正在发声,然后在每个感兴趣的区域使用带通滤波器:
一个稍微高级的算法可以做这样的事情:
- 粗略检测音调频率(可以用 DFT 完成)。
- 带通信号过滤隔离音调频率。
- 计算滤波信号中两个峰值之间的样本数。
现在我可以做第一步了(我正在为 iOS 编码,Apple 有一个框架(加速框架)用于执行 FFT 等。
我已经从这里开始了:但我可以看到问题:一个 FFT 可以区分一个人可以唱的所有可能的音符需要大量的样本,而且我不想执行太多不必要的计算,因为我是针对移动设备。
所以我试图弄清楚上面的这个答案,但我不明白如何将带通滤波器的概念应用到代码中。
任何人都可以帮忙吗?