Python - 如何从频谱图输出中获得相同数量的行?
Posted
技术标签:
【中文标题】Python - 如何从频谱图输出中获得相同数量的行?【英文标题】:Python - how to get the same number of rows from a spectrogram output? 【发布时间】:2017-12-16 22:12:37 【问题描述】:假设我有一个七列的数据集,我只取一列 (xyz_magnitude) 大小为 1,415,684 行,然后输入它来计算该列的频谱图,我希望得到一列大小相同的频谱图作为输入(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】: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
/sides=onesided
的707,843 个值的输出,或者1,415,684 个值,sides=twosided
) 和 plt.specgram
,或使用 FFT 原语,例如 numpy.fft
。
【讨论】:
以上是关于Python - 如何从频谱图输出中获得相同数量的行?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 python 获得像 audacity 这样的音频频谱?