使用scipy.signal.resample重新采样时间

8

我有一个信号,其采样不是等间隔的;为了进一步处理它,需要进行等间距采样。我认为scipy.signal.resample可以做到这一点,但我不理解它的行为。

信号在y中,相应的时间在x中。期望在yy中进行重新采样,所有相应的时间在xx中。有谁知道我做错了什么或如何实现我所需的功能吗?

这段代码无法工作:xx不是时间:

import numpy as np
from scipy import signal
import matplotlib.pyplot as plt

x = np.array([0,1,2,3,4,5,6,6.5,7,7.5,8,8.5,9])
y = np.cos(-x**2/4.0)
num=50
z=signal.resample(y, num, x, axis=0, window=None)
yy=z[0]
xx=z[1]
plt.plot(x,y)
plt.plot(xx,yy)
plt.show()
1个回答

14
即使您提供了x坐标(对应于t参数),resample 也会假设采样是均匀的。
考虑使用scipy.interpolate中的单变量插值器。
例如,这个脚本:
import numpy as np
from scipy import interpolate
import matplotlib.pyplot as plt

x = np.array([0,1,2,3,4,5,6,6.5,7,7.5,8,8.5,9])
y = np.cos(-x**2/4.0)

f = interpolate.interp1d(x, y)

num = 50
xx = np.linspace(x[0], x[-1], num)
yy = f(xx)

plt.plot(x,y, 'bo-')
plt.plot(xx,yy, 'g.-')
plt.show()

生成这个图:

plot

查看 interp1d 的文档字符串以获取控制插值的选项,并查看其他插值类。


谢谢您的回复。我尝试了一些在numpy中实现的插值技术。时间方面可以,但是由于源的特性,.resample构建的信号要好得多。我将搜索scipy存储库,看看是否能找到一个与.resample类似的重构特性的插值方法。 - frits
@frits,你最后的结论是什么?我有同样的问题。 - rll

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接