cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
  • Don’t miss your chance to experience Discovery Summit Europe at our best available rate! Early bird registration through 31 Oct.
  • Image to Table JMP extension imports single or batch images as data tables. Useful to extract curves from pictures or convert image data to curve data to use in analyses like Functional Data Explorer. Download and install the extension.

Discussions

Solve problems, and share tips and tricks with other JMP users.
Choose Language Hide Translation Bar

How to resample / interpolate unevenly spaced time series?

I have an dataset consisting of two columns, X and Y, resulting from a measurement (cyclic voltammetry using PAR potentiostat). Unfortunately, the spacing of X is not equal (varies between 0.0005 and 0.0015), and the instrument's software cannot fix this. I would like to resample or interpolate the data to get equal spacing of, say, 0.001 in X. Is there a fast way to do it?

2 REPLIES 2
ian_jmp
Level X

Re: How to resample / interpolate unevenly spaced time series?

The answer to your question depends on how irregular your x values are, and what, precisely, you mean by 'interpolate'.

So the script below is definitely not a recommendation, just an example of the kind of thing that's possible. If you don't need a script, you should be able to follow similar steps manually.

Probably, though, the important question is what will you use the final values for?

NamesDefaultToHere(1);

// (0) Make some evenly spaced data using a particular function

h = Function( {x}, {Default Local}, 0.5 + 0.4 * Sin( 2 * Pi() * x ) );

N = 100;                                                       // Number of (equally-spaced) x values in [0,1]

xVals = Index( 0, 1, 1 / (N - 1) )`;                           // x values as a column vector

yVals = h( xVals ) + J( N, 1, Random Normal( 0, 0.1 ) );       // y values as a column vector

// (1) Randomly decimate three quarters the data to simulate uneven x values (but still on the original grid)

del = RandomIndex(N, Round(3*N/4, 0));

xVals[del] = [];

yVals[del] = [];

dt = NewTable("Uneven x",

  NewColumn("x", Numeric, Continuous, Values(xVals)),

  NewColumn("y", Numeric, Continuous, Values(yVals))

  );

// (2) Fit a kernel smoother and save the prediction formula

biv = dt << Bivariate( Y( :y ), X( :x ) );

biv << Kernel Smoother( 1, 1, 0.48261, 0, {Save Prediction Formula});

// (3) Get the prerdiction formula

pForm = Column(dt, "Loess Predictor for y") << getProperty("Formula");

// (4) Build a new table to hold equally-spaced x values

CMD = Expr(

  dt2 = NewTable("Even x",

  NewColumn("x", Numeric, Continuous),

  NewColumn("Predicted y", Numeric, Continuous, Formula(TBD))

  )

  );

SubstituteInto(CMD, Expr(TBD), EvalExpr(pForm));

CMD;

// (5) Get the simulated measured data into two vectors

xVals = Column(dt, "x") << GetAsMatrix;

yVals = Column(dt, "y") << GetAsMatrix;

// (6) Find the smallest x increment in the data

xDel = Min(xVals[2::NRow(xVals)] - xVals[1::(NRow(xVals)-1)]);

// (7) Fill the table with the interpolated data using an equal spacing of, say 3*xDel

xVals2 = Index( 0, 1, 3*xDel )`;

Column(dt2, "x") << SetValues(xVals2);

// (8) Look at the result

dt2 << Graph Builder(

  Size( 534, 454 ),

  Show Control Panel( 0 ),

  Variables( X( :x ), Y( :Predicted y ) ),

  Elements( Points( X, Y, Legend( 5 ) ) )

  );

Re: How to resample / interpolate unevenly spaced time series?

Thank you!

Recommended Articles