You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Librosa中fft_frequencies()函数输出含义及是否包含泛音的疑问

librosa.fft_frequencies() 输出含义说明

函数输出的本质

librosa.fft_frequencies(sr=sr, n_fft=Nfft) 返回的是FFT运算对应的频率轴刻度数组,仅由传入的采样率sr和FFT点数n_fft两个参数决定,和你输入的音频内容完全无关。
计算逻辑非常简单:

  • 音频的奈奎斯特频率为 sr / 2,也是可分析的最高频率
  • n_fft点FFT的正频率区间共 n_fft // 2 + 1 个均匀分布的频点,相邻频点的间隔为 sr / n_fft
    你示例中sr默认是22050Hz,n_fft=256,所以频点间隔为 22050 / 256 ≈ 86.13Hz,和你输出的数值步长完全匹配。

关于泛音的疑问解答

这个频率刻度数组本身不包含任何音频的泛音信息,它的作用只是给你后续STFT的结果做频率标注:

  • 你代码中得到的stft复数矩阵,每一行对应freqs里的一个频率值,每一列对应一个时间帧
  • 音频里的基频、各次泛音的能量信息,都存储在stft矩阵的数值大小里。比如你音频里存在基频440Hz的音符,那么它的基频、880Hz二次泛音、1320Hz三次泛音等成分,都会在stft对应频率行的位置呈现较高的能量值,你可以通过freqs定位到这些能量峰值对应的实际频率。
    简单来说:freqs是尺子上的刻度,而你音频的泛音是要测量的对象的属性,刻度本身不包含测量对象的信息,只是帮你读数用的。

参考代码与输出

import librosa
from scipy import signal

y, sr = librosa.load('./data/dreamy.wav')
Nfft = 256
stft = librosa.stft(y, n_fft=Nfft, window=signal.windows.hamming)
freqs = librosa.fft_frequencies(sr=sr, n_fft=Nfft)

print(freqs)

输出示例:

[    0.           86.1328125   172.265625    258.3984375   344.53125
   430.6640625   516.796875    602.9296875   689.0625      775.1953125
   861.328125    947.4609375  1033.59375    1119.7265625  1205.859375
   ... ]

内容的提问来源于stack exchange,提问作者Ahyun Lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 00:51:03