我想使用 STFT 进行多音高分析。我意识到检测信号中存在的部分只是一个开始。我仍然有问题。
假设我有以“CD”频率采样的信号44100Hz
。有了1024
样本窗口,我得到的频域分辨率为22500Hz/512=43Hz
. 这仅足以辨别高音钢琴音符,例如:
C5 = 523.251Hz
和C#5 = 554.365
。
我以前认为1024
是一个相当大的窗口。但也许不是,通常更大的窗口用于检测部分?
除了增加窗口大小之外,是否可以通过其他方法来增加频率分辨率,这会降低时间分辨率?我想到了两种方法:
方法1:
0-11.25Hz
使用带通滤波器(例如和)将信号划分为频带11.25-22.5Hz
。- 对较高频段进行下采样,以便原来的高频现在变为低频(第二个频段也是如此
11.25-22.5Hz -> 0Hz-22.5Hz
) - 不确定这是否可能。 - 使用调整后的标签连接生成的 bin 集。
方法2:
- 使用一系列限制增加的低通滤波器。
- 对增加的频率范围执行 FFT。
- 对于每个频率,使用可能的最佳分辨率(来自包含该频率的第一个 FFT 的 bin)。
- 这将导致低频具有更好的分辨率,但我认为这没关系,因为对于更高的音符,频率差异更大。
我将不胜感激有关此问题的任何评论。
我还在这里阅读: 窗口大小、采样率如何影响 FFT 音高估计? 关于提高拾峰结果的方法。我想会尝试使用它。