使用interp1或样条线

时间:2018-05-16 15:10:37

标签: arrays matlab spline resampling

场合

我试图比较具有不同长度的两个信号矢量(y1和y2与时间矢量x1和x2)(len(y1)= 1000> len(y2)= 800)。为此,我遵循几乎无处不在的主要建议:使用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' as' y1'。我无法解决同样的问题。

我尝试使用' resample'进行插值。功能:

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

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

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

我在寻找什么:

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

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

谢谢!

2 个答案:

答案 0 :(得分:2)

您在这里寻找的功能是linspace

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

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

答案 1 :(得分:1)

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

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

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