关于scipy.fft功能的困惑

时间:2015-02-08 11:38:10

标签: python audio scipy fft

我有一个音频样本,以 22k Hz 采样,总样本= 660k,持续时间为30秒。 (22k * 30 = 660k)

当我绘制完整样本的fft时,我得到一个具有660k x值的对称图,并显示相应的y值:enter image description here

这似乎是因为声音样本的最大频率为330k Hz(我有一点认为它在fft变换的一半之后重复,因为负频率和正频率具有相同的值)。如果我调整声音样本的长度,fft图形的最大频率会相应地改变 (长度/ 2 - >最大频率/ 2), enter image description here 这不应该发生,因为频率与样本长度无关。

有什么建议吗?我无法理解这一点。

1 个答案:

答案 0 :(得分:2)

当您以采样率 fs 计算长度 N 的音频(或任何数据)的FFT时,结果将是一个数组, Y N 复数

幅度( Y(n))=频率(n * fs )/ N Hz时的幅度。

其中n = 0,1,2,... N。

意味着Y包含从0到 fs 的频率信息(在某些软件中,如matlab,返回的范围是从-fs / 2到fs / 2)。

在你的情况下 fs = 22000Hz, N = 660000所以

幅度( Y(n))=频率(n * 22000)/ 660000 Hz的幅度; n = 0,1,2,... 660000。

因此,x轴应该从0Hz到22000Hz而不是从0到660000。