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

为何librosa.stft输出第二维不等于输入采样长度除以hop_length?

librosa.stft输出维度长度问题解答

你观察到的输出第二维长度等于ceil(输入采样长度/hop_length),是你当前输入长度非hop_length整数倍时的巧合,本质是librosa.stft的滑动窗口计数规则和center参数的补零逻辑共同作用的结果,具体原理如下:

1. 滑动窗口帧数基础计算规则

所有短时傅里叶变换的帧数计算都遵循滑动窗口的通用计数逻辑:

帧数 = (参与计算的总样本数 - 窗口长度) // 步长 + 1

你的参数中,STFT窗口长度n_fft=2048,帧移步长hop_length=512。

2. center=True的补零逻辑

当center=True(librosa默认配置)时,为了让第一帧窗口中心对齐原始音频第一个采样点、最后一帧窗口中心对齐原始音频最后一个采样点,避免边缘信号被截断,librosa会先对输入音频首尾各补n_fft//2个零。n_fft为偶数时,首尾补零总长度为n_fft//2 * 2 = n_fft,因此补零后参与计算的总样本数为:

补零后总长度 = 原始样本长度 + n_fft

3. 代入你的参数验证

将补零逻辑代入帧数公式:

帧数 = ( (原始长度 + n_fft) - n_fft ) // hop_length + 1 = 原始长度 // hop_length + 1

代入你提供的原始样本长度10848704计算:

10848704 // 512 + 1 = 21188 + 1 = 21189

和你拿到的输出第二维长度完全一致。

你观察到的结果等于ceil(原始长度/hop_length),是因为你当前的原始长度除以hop_length余448,非整数整除场景下x//y + 1的结果刚好和ceil(x/y)一致;如果原始长度刚好是hop_length的整数倍,输出帧数会比ceil(原始长度/hop_length)多1。


内容的提问来源于stack exchange,提问作者Martin Tin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:36:00