2012-12-04 23 views
0

我有一个1x1点矩阵,它指定了驱动器相对于时间的速度。整个操作过程中速度都会改变;这意味着两点之间的差异正在改变。如何在MatLab中插值

举一个例子:M = [1; 2; 3; 5; 7; 9; 11; 15; 19]。 (只有这是一个892x1矩阵)

我想使这个矩阵长两倍(所以改变每个时间步的相对速度),同时保持速度变化的方式。例如:M' = [1; 1.5; 2; 2.5; 3; 4; 5; 6; 7; 8; 9; 10; 11; 13; 15; 17; 19].

在MatLab中有这样一个简单的方法吗?

到目前为止,我已经尝试过upsampling(用零填充时间步); interp(与低通插值来填充它。

谢谢!

+0

不知道你是否需要'插值'...听起来更像'移动' – bonCodigo

回答

4

尝试

M = [1; 2; 3; 5; 7; 9; 11; 15; 19]; 

% create new time, with twice as many sampling times 
t_new = linspace(1, numel(M), 2*numel(M)-1); 

% interpolate 
Mt = interp1(M, t_new), 

注意interp1也接受额外的参数,如splinepchip,让你specfify什么插值内核

或者,您可以使用类似

pp = spline(t, M); % creates a cubic-splines interpolator 
Mt = ppval(pp, t_new) % to evaluate M at all new times t_new 
+0

它的工作!非常感谢!!我现在一直在尝试不同的方式3个小时。 –

+0

@Acorbe:用户Amro在SO上创建了一个[用于Matlab语法突出显示的用户脚本](https://github.com/amroamroamro/prettify-matlab/raw/master/js/prettify-matlab.user.js)使那些'//'不必要。 –

+0

@RodyOldenhuis,真的很抱歉。我不知道。我回滚更改。 – Acorbe