0

我需要在音乐家演奏音乐时测量信号频率,而对于 FFT(快速傅里叶变换)来说,它恰好有点太快了。

音乐家以 90-140 bpm 的速度演奏音乐。这意味着每分钟有 90-140 个音符组,每组最多 8 个(更频繁地,最多 4 个)音符(60/140/8 = 0.0536 秒,60/90/4 = 0.167 秒),即也就是说,音符可能会以每秒 6-19 个音符的速度变化。

音乐使用对数刻度:例如,440Hz 和 880Hz 之间的范围分为 12 个音符,其中只有 7 个用于旋律。(基本上,他们只使用钢琴上的白键;当他们想改变起始频率时,他们使用一些黑键而不使用一些白键。)也就是说,每个下一个音符的频率相乘乘以 2^(1/12) = 1.05946。

更复杂的是,A (La) 频率可能在 438 到 446 Hz 之间变化。弦乐器理论上可以调音,而管乐器则取决于空气的温度和湿度,因此音乐家在检查声音时会重新协商频率。

有时音乐家和歌手会在频率上出错,他们称之为“走调”。他们想要一种能够通知他们此类“失调错误”的设备。他们有调音器,但调音器需要播放相同的声音大约 1 秒才能开始显示任何内容。这适用于调音,但在播放音乐时不起作用。

最有可能的是,调谐器正在执行 FFT,并且由于公式

df = 1/T

等待 1 秒以获得 1Hz 分辨率。

对于 A=440Hz,两个音符之间的频率差为 440*0.05946 = 26.16 Hz,要获得该频率分辨率,必须使用 0.038 秒的采集时间,也就是说,在 tempo=196bpm 时,FFT 只能区分两个注意,在 98 bpm 时,只要它在音高变化的那一刻开始采集,它就能够分辨出 50% 的失调错误。如果我们在采集期间允许音高变化,我们会得到 49 bpm,这太慢了。此外,非常希望对频率更精确,例如检测 25% 的失调误差。

有没有比 FFT 更好地测量频率的方法,即在更短的采集时间内获得更好的分辨率?(至少好 2 倍,理想情况下,好 8 倍。)作为交换,我不需要区分不同八度的音符,例如 440 和 880 都可能被识别为 A。(可能,更多的权衡是可能的,只是现在我没有想到其他任何事情。)

UPD 这是一个非常好的绘图:

注意从维基百科链接的频率

UPD2

我在以下位置找到了一篇博士论文和开源软件(TARTINI——实时音乐分析工具):

http://miracle.otago.ac.nz/tartini/

(这些页面也可以通过网络存档服务获得:http: //web.archive.org = http://archive.org = http://waybackmachine.org

4

1 回答 1

2

关于 FFT,假设窄带频谱频率内容稀疏且在足够低的背景噪声中分离良好,则可以对频率峰值进行插值或相位声码编码,使其分辨率远高于 FFT 箱间距(箱间距与实际时域数据段的长度)。抛物线插值很常见,但还有其他更精确的插值内核。相位声码器频率估计方法需要跨 2 个重叠帧的平稳性,但是这 2 个帧的总跨度可能相对较短。

但是 FFT 报告的峰值频谱频率与人类感知的音高频率不同(因为声音和许多乐器在泛音系列中比音高频率辐射更多的声学频谱能量,有时会略微不和谐。)是比 FFT(单独)更适合音高估计的算法。部分列表在此答案中: FFT on iPhone to ignore background noise and find lower pitches

许多关于音乐音高估计方法的学术论文可以在 music-ir/MIREX 网站上找到:http: //www.music-ir.org/mirex/wiki/MIREX_HOME

于 2015-11-12T18:00:41.420 回答