我有一个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')
答案 0 :(得分:0)
通常,一个频谱图是多个(可能是重叠的)STFT,并且图中的时间与信号中的时间成比例。您的问题看起来可以解决,只需将x轴放大8倍即可解决(N-fft / 2048),尽管我不知道为什么要这么做。
答案 1 :(得分:0)
频率仓的频率分辨率为
freq resolution per bin = ( sampling_freq ) / number_of_samples
注意两侧的频率图,这将是
两侧的镜像Nyquist_Limit = (sampling_freq) / 2
因为匹配的镜像值在此限制处被截断,并且只需将值折叠即可有效地将值向左翻倍