我有一个未等距采样的信号;需要进一步处理。我认为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()
答案 0 :(得分:13)
即使您提供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()
生成此图:
检查interp1d
的文档字符串以获取控制插值的选项,并检查其他插值类。