关于 scipy.fft 函数的困惑

Confusion about scipy.fft function

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

当我绘制完整样本的 fft 时,我得到一个具有 660k x 值和相应 y 值的对称图,如图所示:

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

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

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

幅度(Y(n)) = 频率为(n * fs)/N赫兹。

其中 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。