stft中的time bin数量和signal中的实际时间是什么关系?

问题描述 投票:0回答:3

我有一个 9 分钟的文件,其采样率为 16000。我的信号总共有 9*60*16000= 8640000 个样本。我正在用 python(librosa 包)做一个 stft 并绘制频谱图。我知道频谱图的频率分辨率等于 Fs(采样频率)/N(FFT 点数)。

如果我用 N-fft= 2048 绘制频谱图,那么我的频谱图的形状为 (1025, 16876) 并且 x_axis 显示 9 分钟的时间。如果用 N-fft= 16384 绘制它,那么我的频谱图的形状为 (8193, 2110),x_axis 显示 1 分 10 秒的时间。 我不明白频谱图的形状与我们在时间轴上看到的时间之间的关系。另外我想知道频谱图轴上的时间与信号中的实际时间之间的关系。

file = ('mm.wav')
k=1
v, sr = librosa.load( file, sr=16000)
t, phase = librosa.magphase(librosa.stft(v, n_fft= 2048))
librosa.display.specshow(librosa.power_to_db(t,ref=np.max),y_axis='linear',x_axis='time',sr=sr)
t.shape
fig.savefig ('2048.png')

spectrogram for n-fft=16384

Spectrogram for n-fft=2048

python fft frequency-analysis spectrogram time-frequency
3个回答
0
投票

一般来说,频谱图是多个(可能重叠的)STFT,图中的时间与信号中的时间成正比。你的问题看起来可以通过将 x 轴放大 8 倍(N-fft/2048)来解决,尽管我不知道为什么。


0
投票

频率仓的频率分辨率为

freq resolution per bin = ( sampling_freq ) / number_of_samples

注意两侧的频率图,这将是

两侧的镜子
Nyquist_Limit = (sampling_freq) / 2

因为镜像值在这个限制处匹配截断并简单地折叠值以有效地将值加倍到左边


0
投票

在几秒钟内,

Length of each time bin
=
FFT LENGTH / SAMPLE RATE
。 所以在你的第一个例子中,每次bin是
(2048/16000) = 0.128
秒;你的音频是 540 秒,所以如果 FFT 没有重叠,你将有一个
total number of FFT bins
=
audio length / bin length
=(540 秒/0.128 秒每箱)= 4218.75 箱剪辑。 现在,只需对后续 FFT 的重叠做一个小的修正:看起来你有 25% 的 fft 重叠,所以它需要 4 倍的箱子来覆盖整个音频:4218.75 个箱子变成 around 16875 个箱子。 (也许有一个+1)

© www.soinside.com 2019 - 2024. All rights reserved.