Audio 快速频率测量

Audio 快速频率测量,audio,signal-processing,fft,pitch-tracking,pitch-detection,Audio,Signal Processing,Fft,Pitch Tracking,Pitch Detection,我需要在音乐家演奏音乐时测量信号频率,而对于FFT(快速傅立叶变换),它恰好有点太快了 音乐家以90-140 bpm的速度播放音乐。这意味着每分钟有90-140组音符,每组中最多有8个(更频繁的是,最多4个)音符(60/140/8=0.0536秒,60/90/4=0.167秒),也就是说,音符可能以每秒6-19个音符的速率变化 音乐使用对数音阶:比如说,440Hz到880Hz之间的范围被分成12个音符,其中只有7个用于旋律。(基本上,他们只使用钢琴上的白键;当他们想要改变起始频率时,他们使用一些

我需要在音乐家演奏音乐时测量信号频率,而对于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

为了使事情更复杂,频率可能从438到446赫兹不等。弦乐器理论上是可以调谐的,而管乐器则取决于空气的温度和湿度,因此音乐人在检查声音时会重新协商频率

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

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

df = 1/T
等待1秒以获得1Hz分辨率

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

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

UPD 这是一幅非常好的图画:

UPD2

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


(这些页面也可通过web archive service获得:==)

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

但FFT报告的峰值频谱频率与人类感知的基音频率不同(因为声音和许多乐器在泛音序列中可以辐射比基音频率更多的声谱能量,有时会稍微不和谐)。有一些算法比FFT更适合基音估计(单独)。此答案中有部分列表:


许多关于音乐音高估计方法的学术论文都可以在music ir/MIREX网站上找到:

你说的是频率,但我怀疑你的意思是音高?事实上,这不仅仅是迂腐-如果你在处理音乐,它会产生显著的不同。频率是一个物理量,而音高是一个感知,并且有一个相当复杂的关系与给定声音成分的频率和振幅相关。FFT(或更准确地说,FFT衍生的功率谱)将告诉您成分的频率和振幅,但从这里到感知的音调并非易事(也就是说,这不仅仅是基频分量或最大声音分量的频率)参见:谐波积谱。您可能缺少的另一个谜题:听起来您假设样本窗口是连续的,因此每个窗口只能得到1个基音估计值,但一种常用的技术是重叠连续的样本窗口,例如,如果每个窗口重叠75%,则可以得到4个基音估计值mes速率,但分辨率相同(尽管由于重叠,连续窗口之间存在一些相关性)@18446744073709551615:这只是给你一个N/4点FFT,输出插值到N点-它不会神奇地给你一个N点FFT的分辨率。顺便说一句,因为你在这里只处于理论阶段,我建议你把这个带到这里。它将更多地讨论这个话题,你可能会从更多知识的人那里得到更好的答案e比I。