And*_*ewH 6 processing signal-processing fft
最近我一直在试验音频和FFT,特别是Processing中的Minim库(基本上是Java,而不是它对这个问题特别重要).我所了解的是,使用缓冲区/样本大小N和采样率K,在执行正向FFT之后,我将获得N个频率区间(仅N/2个可用数据,实际上Minim仅返回N/2个区间)线性间隔表示从0到K/2HZ的光谱.
使用Minim(以及其他典型的FFT实现),您需要等待收集N个样本,然后执行正向变换,然后再等待N个样本,依此类推.为了获得合理的帧速率(用于音频可视化,节拍检测等),我必须使用相对于采样频率的小样本量.
然而,问题在于,当我计算对数间隔平均值时,小样本量导致频谱低端的分辨率非常低(因为低音八度音程比高音调八度音程窄得多).
我想知道一种可能的方法来挤出更明显的分辨率是否比在我目前使用的稍大的样本大小上每N个样本更频繁地执行FFT.(输入缓冲区大小为2048的IE,每100个样本,将这些样本添加到输入缓冲区并删除最旧的100个样本,并执行FFT).看起来这可能会产生滚动平均类型的影响(我可以忍受),但我不太确定.
这种方法的优点和缺点是什么?有没有其他方法可以提高我的表观分辨率,同时仍然能够进行实时可视化和分析?
这种方法的名称是短时傅里叶变换.您可以在维基百科上获得所有问题的答案:https://en.wikipedia.org/wiki/Short-time_Fourier_transform
它在实践中运行良好,你甚至可以通过使用fft之间的相位差来获得更好的分辨率.
这是一篇做音频信号音高变换的文章.如何获得更高频率分辨率的方法有很好的解释:http://www.dspdimension.com/admin/pitch-shifting-using-the-ft/