我拿了一个文件,这是一个干净,重复的音符F2的波形(我通过在虚拟钢琴上播放F2并演奏波浪,并比较)在钢琴上演绎。当我完成信号的fft时,通过使用保存的wav文件的wavread,我获得了176.4 Hz的峰值频率,这是音符F2的正确频率的一个八度音程。
当我分析另一个音符时,这段时间是从物理钢琴录制的,我得到了完全相同的峰值频率。这怎么可能? MATLAB有可能将峰值频率存储在其内存中以存储多个文件吗?如果是这样,我该如何解决这个问题?
P.S。当我们分析一首完整的歌曲,即一个包含许多音符的wav文件时,我们得到了许多峰值,这证实了我们没有使用相同的图表。
答案 0 :(得分:1)
这不是Matlab的FFT中的错误。
音高不同于峰值频率。这是一种心理声学现象。人类将听到的声音作为单个音调可以包含许多频率峰值,其中最强的频谱峰值可能是以完全不同的音调等级为中心的泛音,和/或比感知音高更高的八度音程。在听力学和声音感知的神经心理学等领域,有一些书籍涵盖了这一主题。一本关于音乐物理学的书可以解释为什么钢琴会创造出更加丰富和复杂的频谱内容。
要找到音高,需要使用pitch detection/estimation算法,而不仅仅是FFT。使用这些关键字在此处搜索。