我想使用interp1
函数在样本点之间进行(线性)插值。对于采样点之间的均匀插值,我可以使用
test = [-1 -2 0 3];
new = interp1(test,1:.5:numel(test));
将给出一个插值序列,其中新系列现在在每个原始(test
)系列点之间包含一个额外的插值点。
我想要做的是,创建一个new
系列,根据test
系列点之间的差异进行插值。对于上面的情况,结果输出看起来像
[-1 -2 -1 0 1 2 3];
我已经完成了http://au.mathworks.com/help/matlab/ref/interp1.html的例子,但答案仍然没有找到。我很欣赏这个简单查询的方向。
答案 0 :(得分:2)
interp1
的一般语法是
vq = interp1(x,v,xq);
其中x
和v
是输入,xq
和vq
是插值向量。您使用的是较短的语法
vq = interp1(v,xq);
假设x
为1:length(v)
。
在我看来,创建一个允许您使用x
进行插值的xq=1:length(vq)
向量比制作x=1:length(v)
和计算xq
更容易。要构建正确的x
向量,您可以执行以下操作:
diff(test)
查找v
值之间的差异。这将告诉您中间需要多少个插值。abs(diff(test))
。x
值,我们可以对此结果cumsum
进行1
,从cumsum([1, abs(diff(test))]);
开始。那就是:test
。对于[1 2 4 7]
输入,这给了我们:-1
这似乎是正确的:-2
和-2
之间没有其他值,0
和{{1之间的一个值最后是0
和3
之间的两个值。我们可以将此向量用作x
,然后将向量xq
作为所有元素从1到x
中的最大值:
x = cumsum([1, abs(diff(test))]);
xq = 1:max(x);
然后我们可以进行插值:
vq = interp1(x,test,xq);
给了我们
vq =
-1 -2 -1 0 1 2 3