化学信号谱图输出不符合预期

2024-04-28 05:14:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用scipy.signal.spectrogram()来分析包含当前值的数据集。我对函数的输入如下:

f, t, Sxx = signal.spectrogram(y, fs)

{cd2>在子图中使用

其中y是10002个值的列表,包含第一个图中绿色图形的y值(从顶部开始)。fs = 1/T其中T = x[1]-x[0]其中x是属于y值(当前)的x值(时间)列表。在

我的问题是

^{pr2}$

意思:我想把图3和图1中的绿色图进行比较,当这两个图的范围不在同一时间范围内时,谱图就变得无用了。从图片中可以看出total_length_x > total_length_t

enter image description here

为什么会这样?我该怎么做才能使光谱范围与原始数据的时间跨度相同呢?在


Tags: 数据函数图形列表signal时间scipyfs
1条回答
网友
1楼 · 发布于 2024-04-28 05:14:53

我写了一些代码来解释我上面关于数据大小的评论:

#!/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"

相关问题 更多 >