【问题标题】:Resampling two vectors with interp1 or spline用 interp1 或 spline 重新采样两个向量
【发布时间】:2018-05-17 02:38:06
【问题描述】:

情况

我试图比较具有不同长度 (len(y1)=1000>len(y2)=800) 的两个信号向量(y1 和 y2 与时间向量 x1 和 x2)。为此,我遵循了几乎无处不在的主要建议:使用 interp1 或 spline。为了通过插值将 y2 向 y1 的样本数量“扩展”。 所以我想要:

length(y1)=length(y2_interp)

但是,在这些函数中,您必须将点“x”指定到插值 (xq) 的位置,因此我使用要计算的重采样点生成一个向量:

xq = x2(1):(length(x2))/length(x1):x2(length(x2));
y2_interp = interp1(x2,y2,xq,'spline'); % or spline method directly

RMS = rms(y1-y2_interp)

问题:

当我对“xq”变量中的 x 向量重新采样时,因为长度不是整数,它给我的“y2_interp”长度与“y1”不同。我无法解决同样的问题。

我尝试使用“重采样”函数进行插值:

 y2_interp=resample(y2,length(y1),length(y2),n);

但我遇到了一个别名问题,我想尽可能避免使用过滤器。如果 n=0(没有过滤器),我会遇到一些采样问题和更多 RMS。

这两个向量很长,所以我的错位只有 2 或 3 个点。

我在寻找什么:

我想找到一种插值向量的方法,但以另一个向量的长度为参考,而不是我想要插值的点。

我希望我已经解释清楚了......也许我有一些误解。这不仅仅是我对任何可能的想法感到好奇。

谢谢!!

【问题讨论】:

    标签: arrays matlab spline resampling


    【解决方案1】:

    你在这里寻找的函数是linspace

    要获得与x2 相同端点但与x1 相同长度的均匀间隔向量xq

    xq = (x2(1),x2(end),length(x1));

    【讨论】:

    • 这给出了正确的点数,但仍然不能正确计算RMS
    【解决方案2】:

    插入y2 不足以获得正确数量的样本,样本应位于与y1 的样本对应的位置。

    因此,您希望在您拥有y1 样本的 x 坐标处插入 y2,该样本由 x1 给出:

    y2_interp = interp1(x2,y2,x1,'spline'); 
    RMS = rms(y1-y2_interp)
    

    【讨论】:

    • 感谢您的回答,对我迟到的回复感到抱歉。我尝试了这个解决方案,但是当我使用“interp1”函数进行外推而不是插值时,它是否可能给我沿 x1 向量的巨大差异?
    • 是的,永远不要外推。仅在定义它们的域中比较这两个信号。
    猜你喜欢
    • 2012-12-16
    • 1970-01-01
    • 2019-01-18
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多