离散傅里叶变换 - 快速找到基础?

信息处理 声音的 fft 沥青
2021-12-19 16:32:03

首先,我道歉,因为我是一名软件开发人员,而且我已经很长时间没有深入研究纯数学了,所以我的问题可能看起来很愚蠢。我希望不是。

上下文是音乐中的音高识别。

如果你记下一个音符,并对其应用傅里叶变换,你将拥有给定频率的无限幅度和。例如,如果我弹奏一个基本音为F,在任何仪器上,经过傅里叶变换后,我将在F,2F,3F,,nF. 每个频率都有一个给定的幅度,它定义了乐器的音色(钢琴、人声、小号……都遵循这个规律,但是每个谐波都有不同的幅度)

现在我想做的是从给定的音频信号中,找到F. 只是。它比看起来更复杂,因为你总是会有背景噪音等等......此外,F不一定是振幅最高的频率!

所以我的想法是找到F是应用DFT(实际上是速度的FFT)并找到一个频率F, 以便F+2F+3F++nF在 FFT 输出中最大。

你认为这有可能吗?你认为这可能在很短的时间内(比如说 < 5 毫秒)吗?

1个回答

您所描述的与斯坦福 CCRMA 论文中列出的音高估计的谐波乘积谱方法非常相似。

FFT 不会为您提供“幅度的无限总和”,而是根据 FFT 的长度提供有限数量的结果箱。

5 mS 只是 200 Hz 音符的 1 个周期,并且只是 200 Hz 以下周期的一小部分。音乐音高识别通常需要聆听或分析音高声音周期性的多个周期。而且很多音乐使用G2以下的音符。如果您有足够长的数据,从该数据计算音高估计可能只需要微秒级,而不是现代 PC 或移动设备上的毫秒级。