stft中的时间段数与信号中的实际时间之间有什么关系?

时间:2019-07-17 12:06:31

标签: python fft frequency-analysis spectrogram time-frequency

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

如果我用N-fft = 2048绘制频谱图,那么我的频谱图的形状为(1025,16876),x_轴显示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

2 个答案:

答案 0 :(得分:0)

通常,一个频谱图是多个(可能是重叠的)STFT,并且图中的时间与信号中的时间成比例。您的问题看起来可以解决,只需将x轴放大8倍即可解决(N-fft / 2048),尽管我不知道为什么要这么做。

答案 1 :(得分:0)

频率仓的频率分辨率为

freq resolution per bin = ( sampling_freq ) / number_of_samples

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

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

因为匹配的镜像值在此限制处被截断,并且只需将值折叠即可有效地将值向左翻倍