【发布时间】:2013-12-25 09:11:52
【问题描述】:
最近我一直在尝试音频和 FFT,特别是 Processing 中的 Minim 库(基本上是 Java,这对于这个问题并不是特别重要)。我所了解的是,在缓冲区/样本大小 N 和采样率 K 的情况下,在执行前向 FFT 后,我将获得 N 个频率箱(只有 N/2 个可用数据,实际上 Minim 只返回 N/2 个箱)线性间隔表示从 0 到 K/2 HZ 的光谱。
使用 Minim(以及其他典型的 FFT 实现),您等待收集 N 个样本,然后执行正向变换,然后等待 N 个更多样本,依此类推。为了获得合理的帧速率(用于音频可视化、节拍检测等),我必须使用相对于采样频率较小的样本大小。
不过,问题在于,当我计算对数间隔的平均值时,小样本量会导致频谱低端的分辨率非常低(因为低音八度音程比高音八度音程窄得多)。
我想知道是否有一种可能的方法来压缩更明显的分辨率,即在比我目前使用的稍大的样本量上比每 N 个样本更频繁地执行 FFT。 (即输入缓冲区大小为 2048,每 100 个样本,将这些样本添加到输入缓冲区并删除最旧的 100 个样本,然后执行 FFT)。看起来这可能会产生滚动平均类型的影响(我可以忍受),但我不太确定。
这种方法的优缺点是什么?有没有其他方法可以提高我的表观分辨率,同时还能进行实时可视化和分析?
【问题讨论】:
标签: signal-processing fft processing