【问题标题】:Error while performing fft in MATLAB在 MATLAB 中执行 fft 时出错
【发布时间】:2013-03-06 06:41:02
【问题描述】:

我在钢琴上拍摄了一个文件,该文件是音符 F2 的干净、重复波形(我通过在虚拟钢琴上弹奏 F2 并弹奏波形文件并比较来推断这一点)。当我对信号进行 fft 时,通过使用保存的 wav 文件的 wavread,我得到了 176.4 Hz 的峰值频率,这比音符 F2 的正确频率低了一个八度。

当我分析另一个音符时,这次是用物理钢琴录制的,我得到了完全相同的峰值频率。这怎么可能? MATLAB 有可能将峰值频率存储在内存中用于多个文件吗?如果是这样,我该如何解决这个问题?

附:当我们分析一首完整的歌曲(即包含许多音符的 wav 文件)时,我们得到了许多峰值,这证实了我们并未对所有内容都使用相同的图表。

【问题讨论】:

  • 您需要了解 pitch 是什么——仅仅因为钢琴音符等复杂的声音具有一定的pitch,这并不意味着功率谱中的最大峰值将在此频率。见:en.wikipedia.org/wiki/Pitch_(music)

标签: matlab fft


【解决方案1】:

这不是 Matlab 的 FFT 中的错误。

音乐音高与峰值频率不同。这是一种心理声学现象。人类将作为单个音乐音高听到的声音可能包含许多频率峰值,其中最强的频谱频率峰值可能是以完全不同的音高为中心的泛音,和/或比感知音高更高的八度音阶。在听力学和声音感知的神经心理学等领域,有一些书籍涵盖了这个主题。一本关于音乐物理学的书可能会解释为什么钢琴会产生如此丰富和复杂的频谱内容。

要找到音高,需要使用pitch detection/estimation 算法,而不仅仅是 FFT。使用这些关键字在此处搜索。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多