NOP
NOP

Reputation: 854

Interpolation of time series data in MATLAB

I have a multidimensional time series in MATLAB. Let's say it's of M dimensions, N samples, and as such I have it stored in terms of NxM matrix.

I want interpolate the time series, to fit a new length (N1), where always N is always less than N1.

In other words, if I have multiple time series (all sampled at the same rate, just of different lengths), I want to interpolate them all to be of length N0.

How can one achieve this with MATLAB?

EDIT: Could one achieve this with imresize?

i.e.:

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

Upvotes: 1

Views: 940

Answers (2)

am304
am304

Reputation: 13876

If you have a timeseries object, you might also want to look at the resample method for the timeseries object:

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

Upvotes: 0

KevinMc
KevinMc

Reputation: 526

A procedure like the following might do what you want. The new data will be a linear interpolation of the old data.

[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);

As coded up, only dimension 1 should change, as the second gridded dimension is the same in the first and second calls to ndgrid.

Upvotes: 2

Related Questions