为什么正弦波的FFT在多个区间中具有大小

时间:2014-11-04 07:34:19

标签: fft web-audio

我一直在玩Web Audio。我有一个简单的振荡器节点以context.sampleRate / analyzerNode.fftSize * 5(在这种情况下为107.666015625)的频率播放。当我调用analyzer.getByteFrequencyData时,我希望它在第5个bin中有一个值,而在其他地方没有。我实际看到的是[0,0,0,240,255,255,255,240,0,0...]

为什么我在多个分档中获取值?

3 个答案:

答案 0 :(得分:1)

webaudio AnalyserNode在计算FFT之前应用Blackman窗口。这个窗口功能会涂抹单音。

答案 1 :(得分:0)

必须这样做,你的序列是有限的,因此你的信号应该持续有限的时间。当然,您正在使用矩形窗口计算FFT,即您的信号仅考虑生成样本的数量,并且#34;不连续性" (即信号具有有限数量的样本的事实)创建spectral leakage。为了最大限度地减少这种影响,您可以尝试几种窗口函数,这些函数在FFT计算之前应用于您的数据,可以减少这种影响。

答案 2 :(得分:0)

通过使用对您的数据或算术格式来说太大的测试信号,您可能会在计算中的某处剪切。请使用浮点格式再次尝试。