我正在使用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
为什么会这样?我能做些什么来使频谱范围与我原始数据的时间跨度相同?
答案 0 :(得分:0)
我写了一些代码来解释我上面关于数据大小的评论:
#!/usr/bin/env python
import numpy as np
import scipy.signal
from scipy.signal import spectrogram
WINDOW_LEN = 256
OVERLAP_LEN = WINDOW_LEN / 8
DATA_LEN = 10002
DURATION = 2.0001997
fs = (DATA_LEN - 1) / DURATION
eps = 1/(fs * 1000.0)
y = np.random.rand(DATA_LEN)
x = np.arange(0, DURATION + 1/fs, 1/fs)
f, t, Sxx = spectrogram(y, fs=fs, nperseg=WINDOW_LEN)
T = np.zeros( int(1 + np.floor((len(y) - WINDOW_LEN) / (WINDOW_LEN - OVERLAP_LEN))) )
T[0] = x[WINDOW_LEN / 2]
T[1:] = [x[WINDOW_LEN / 2 + (n + 1) * (WINDOW_LEN - OVERLAP_LEN)] for n in np.arange(0,len(T) - 1)]
if all(t - T < eps):
print (t - T)
print "All are fine"
print x[-1] - x[0]
print t[-1] - t[0]
print T[-1] - T[0]
else:
print t
print T
print "Wrong estimates"