【发布时间】:2023-03-18 07:01:01
【问题描述】:
我在x 中有一个采样率不均匀的(x, y) 信号。 (采样率大致与 1/x 成正比)。我尝试使用scipy.signal 的resample 函数对其进行统一重新采样。根据我从文档中了解到的情况,我可以将以下参数传递给它:
scipy.resample(array_of_y_values, number_of_sample_points, array_of_x_values)
它会返回
的数组[[resampled_y_values],[new_sample_points]]
我希望它返回一个与原始形式大致相同的均匀采样数据,具有相同的最小和最大x 值。但它没有:
# nu_data = [[x1, x2, ..., xn], [y1, y2, ..., yn]]
# with x values in ascending order
length = len(nu_data[0])
resampled = sg.resample(nu_data[1], length, nu_data[0])
uniform_data = np.array([resampled[1], resampled[0]])
plt.plot(nu_data[0], nu_data[1], uniform_data[0], uniform_data[1])
plt.show()
它看起来并没有改变,并且 x 比例也已调整大小。如果我尝试修复范围:自己构建所需的统一 x 值并改用它们,失真仍然存在:
length = len(nu_data[0])
resampled = sg.resample(nu_data[1], length, nu_data[0])
delta = (nu_data[0,-1] - nu_data[0,0]) / length
new_samplepoints = np.arange(nu_data[0,0], nu_data[0,-1], delta)
uniform_data = np.array([new_samplepoints, resampled[0]])
plt.plot(nu_data[0], nu_data[1], uniform_data[0], uniform_data[1])
plt.show()
如果不是这样,对我的数据进行统一重新采样的正确方法是什么?
【问题讨论】:
-
interpolation 怎么样?我会选择较小的一组点,比如 4,这样就可以找到特定的点。问题是您的数据集有多大...
-
@MichałZaborowski 它似乎工作得很好,使用线性样条。感谢您的提示,我会使用它。现在我不明白为什么我得到错误的结果?
resample不是应该管理非均匀采样的数据,统一重采样吗?... -
在此处查看我对相关(重复?)问题的回答:stackoverflow.com/questions/20889501/…
标签: python python-3.x numpy scipy signal-processing