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

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

假设我有一个七列的数据集,我只需要一个大小为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))
python-3.x signal-processing spectrum spectrogram
1个回答
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(这将为sides=onesided / sides=twosided提供707,843个值,或使用plt.specgram为1,415,684个值),或者使用FFT原语,如numpy.fft

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