【发布时间】:2017-02-11 13:26:07
【问题描述】:
我正在使用scipy.signal.spectrogram() 分析包含电流值的数据集。我对该函数的输入如下:
f, t, Sxx = signal.spectrogram(y, fs)
(用于在子图 3 中绘制(从顶部开始)我使用 plt.pcolormesh(t, f, Sxx))
其中y 是一个包含 10002 个值的列表,其中包含第一个图中绿色图形的 y 值(从顶部开始)。 fs = 1/T 其中T = x[1]-x[0] 其中x 是属于y 值(当前)的x 值(时间)列表。
我的问题是
t[-1]-t[0] != x[-1]-x[0]
含义:我想将图 3 与图 1 中的绿色图进行比较,当这两者不在同一时间跨度范围内时,频谱图变得无用。从图中可以看出total_length_x > total_length_t
为什么会这样?我该怎么做才能使光谱范围与我的原始数据在相同的时间跨度内?
【问题讨论】:
-
请阅读docs.scipy.org/doc/scipy/reference/generated/… 了解此函数返回的内容。要生成频谱图,必须使用一组点(窗口)并计算这些值的 FFT。默认情况下,您使用的是 256 点非重叠窗口。这意味着,您的 1002 数据集将提供 40 个数据集。我假设你有 40 分 t。因此,对于每个 Sxx 列(以及每个 t),这对应于 256 个原始输入时间值。
-
我已经阅读了文档,但我仍然不明白输出。以下是一些数字:len(t) = 44。t[-1]-t[0] = 1.92639999。 x[-1]-x[0] = 2.0001997。所以你看,我“丢失”了 0.0738 微秒的数据。
-
我在上面关于重叠的问题上犯了一个错误。在文档中,如果未提供,则假定重叠为
256/8 = 32。这意味着,您的积分将是1 + floor((10002 - 256) / (256 - 32)) = 44。t点是窗口的中间点,即t[0] = x[128]和n > 0,t[n] = x[128 + (n - 1) * (256 - 32)]。我希望这能解释它。
标签: python scipy signal-processing fft spectrogram