MATLAB - 缺少FFT的基波

Jon*_*ser 10 matlab signal-processing fft frequency

我目前正在从事我的第四年项目(计算机科学),该项目涉及音乐的自动转录 - >乐谱.我现在在Matlab中这样做,但是必须在某个阶段转换为java.

我的问题:我的程序返回纯正弦音的正确音符,现在我遇到了从自然乐器演奏的音符中检索基频的问题.对于某些音符,代表音符基础的峰值似乎完全没有.例如,当我从车库带播放G3音符时,它显示为G4,因为我的情节中只出现了第1,第3,第5和第7次谐波.我试图添加图像,但这是我的第一篇文章,它不允许我.任何指向正确方向的人都会非常感激.

hot*_*aw2 17

这并不罕见.对于男性的声音,大弦乐器和许多其他音调声源来说,基本的缺失或几乎是如此.

与正弦波函数发生器相反,这使得单独使用FFT峰值结果在确定来自实际乐器的音符方面极差.这是因为音高与峰值频谱频率不同.音高是一种心理声学感知现象.这就是你需要阅读的内容.有很多关于这个主题的研究论文.

所以你需要看一组完全不同的算法.尝试使用cepstrums(倒频谱分析),谐波产品频谱,自相关和类似(AMDF,ASDF等滞后),RAPT(用于音高跟踪的鲁棒算法),YAA​​PT等.

补充:我在博客文章中写了一个更详细的解释基础缺失的音调.

  • 谢谢你,这些算法有多容易实现?我已经进入了我的项目2个月,所以如果我必须改变它,这对我的进步是一个巨大的打击. (2认同)