MATLAB中时间序列数据的插值

时间:2014-10-02 03:40:25

标签: matlab interpolation

我在MATLAB中有一个多维时间序列。让我们说它是M维,N个样本,因此我把它存储在NxM矩阵中。

我想插入时间序列,以适应新的长度(N1),其中N总是小于N1。

换句话说,如果我有多个时间序列(所有时间序列都以相同的速率采样,只是长度不同),我想将它们全部插入到N0的长度。

如何用MATLAB实现这一目标?

编辑:可以用imresize实现这个目标吗?

即:

A = randn(5,10) % 10 dimensions, 5 samples
desiredLength = 15; % we want 15 samples in lenght
newA = imresize(A, [desiredLength 10], 'bilinear');

2 个答案:

答案 0 :(得分:2)

如下所示的程序可能会执行您想要的操作。新数据将是旧数据的线性插值。

[initSize1, initSize2] = ndgrid(1:size(Data, 1), 1:size(Data, 2));
[newSize1, newSize2] = ndgrid(linspace(1, size(Data, 1), newlength), 1:size(Data, 2));
newData = interpn(initSize1, initSize2, Data, newSize1, newSize2);

编码后,只有第1维度应该更改,因为第一次和第二次调用ndgrid时第二个网格维度相同。

答案 1 :(得分:0)

如果您有timeseries个对象,您可能还想查看resample对象的timeseries方法:

http://www.mathworks.co.uk/help/matlab/ref/timeseries.resample.html