首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >scipy.signal.spectrogram输出与预期不符

scipy.signal.spectrogram输出与预期不符
EN

Stack Overflow用户
提问于 2016-10-03 22:45:16
回答 1查看 3.6K关注 0票数 2

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

代码语言:javascript
复制
f, t, Sxx = signal.spectrogram(y, fs)

(对于子图3中的绘图(从顶部开始),我使用plt.pcolormesh(t, f, Sxx))

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

我的问题是

代码语言:javascript
复制
t[-1]-t[0] != x[-1]-x[0]

含义:我想将图3与图1中的绿色图进行比较,当这两个图在相同的时间跨度内变化时,频谱图就变得无用了。你可以从图中看出total_length_x > total_length_t

为何会这样呢?我可以做什么来使频谱范围与我的原始数据在相同的时间范围内?

EN

回答 1

Stack Overflow用户

发布于 2016-10-05 23:00:15

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

代码语言:javascript
复制
#!/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"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39834345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档