Python - 如何从频谱图输出中获得相同数量的行?

时间:2017-12-16 22:12:37

标签: python-3.x signal-processing spectrum spectrogram

假设我有一个七列的数据集,我只需要一个大小为1,415,684行的列(xyz_magnitude),然后我将它输入以计算该列的光谱图,我希望得到一列具有相同大小的光谱图作为输入(xyz_magnitude),但它得到一个超过1,415,684的列。它实际上打印了7,087,647行

为什么这个数量庞大的谱图行,以及为什么它与输入的行数不一样

这是我的代码

dataset = np.loadtxt("dataset.txt", delimiter=",")
magnitude = dataset[:,5]
ls, freqs, bins, im = plt.specgram(magnitude, NFFT=1000, Fs=1.0, noverlap=900)
merged = list(itertools.chain(*ls))

1 个答案:

答案 0 :(得分:0)

specgram计算输入信号的多个段的离散傅里叶变换,以给出输出矩阵,该矩阵随时间呈现频率内容(沿着每个给定列的行)(每列表示不同的时刻)。

在您的特定情况下,将参数NFFT设置为1000时,您将获得1000/2 + 1或501行的输出(即包括501个频率分档)。时间片的数量由NFFTnoverlap参数的组合控制,以给出14,147行。然后,这会产生501 * 14,147 = 7,087,647值(与您的连接输出一致)。

要获得单个时间片(与NFFT=1000一样使用更多频率分片),您可以设置NFFT=1,415,684(这会为sides=default提供707,843值的输出/ sides=onesided,或sides=twosided的1,415,684个值与plt.specgram,或使用numpy.fft之类的FFT原语。