我试着分析一首歌在数组中某个时刻的频率。
我使用scipy.signal.spectrogram函数来生成这些频率。歌曲的长度为2:44,或164秒,scipy.wavfile读取的采样率为44100。
当我使用谱图时:
f, t, Sxx= signal.spectrogram(data[:, 1], sr)F的长度很小,129个元素。T是更长的,在32322,但仍然是一个很长的机会离开7240320采样窗口在原始的wavfile.read。
(数据:,1是音频数据的正确通道)
发布于 2018-05-10 12:11:50
F的长度( stft 256的默认nperseg )除以2(仅为频率标度的正侧)+1(频率0)。时间上的样本数是通过
t.size = len(data[:, 1]) / nperseg * (1 + noverlap) 其中noverlap是256/8=32。
发布于 2019-09-08 12:10:43
频率阵列f被限制在nperseg的一半加上零频率,所以
f.size = int(1 + nperseg / 2)虽然时间数组受段数的限制,但您可以根据nperseg和noverlap从数据数组中提取片段,如下所示
t.size = int(len(data[:, 1]) - noverlap) / (nperseg - noverlap))如果您设想使用nperseg=8和noverlap=1有两个片段,您需要至少有15个样本的信号,这就更容易理解了。
https://stackoverflow.com/questions/49709861
复制相似问题