假设我有一个七列的数据集,我只需要一个大小为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))
答案 0 :(得分:0)
specgram
计算输入信号的多个段的离散傅里叶变换,以给出输出矩阵,该矩阵随时间呈现频率内容(沿着每个给定列的行)(每列表示不同的时刻)。
在您的特定情况下,将参数NFFT
设置为1000时,您将获得1000/2 + 1
或501行的输出(即包括501个频率分档)。时间片的数量由NFFT
和noverlap
参数的组合控制,以给出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原语。