PDA

View Full Version : Re: Summary of time normalization in matlab

M.a.chen
05-23-2002, 08:21 PM
List-members,
Here's a sample of some of the issues raised in the replies
to my original query on interpolation methods in matlab.
Thanks to all the people who replied. You've all been a
great help.

I'm still thinking what procedure is most appropriate for
my data set and i will be getting in touch with a few
people to discuss some of the points raised.

Cheers,

Mark.

FROM: Reed Ferber Ph.D. CAT(C) ATC

Mark,

Use the function interpft

INTERPFT 1-D interpolation using FFT method.
Y = INTERPFT(X,N) returns a vector Y of length N obtained by interpolation
in the Fourier transform of X.

Thus, Y is your interpolated data, X is your matrix of whatever length you
wish to change and N is the length you want it to be interpolated to. In
other words:

NEWDATA = INTERPFT (OLDDATA, 100)

will return data normalized to 100 points. However, be very careful about
"end-effects". You can find a very thorough discussion on this in the
Biomech-L archives. In brief, if you interpolate a matrix of less than 100
points, you will have irregular data at either end of your data set due to
the mathematics behind the fast fourier transformation. It is ideal to
have greater than 100 points in the original data set and then interpolate
DOWN to 100 points (or whatever length you choose).

Cheers,

Reed

FROM: Peter Mills

Hi Mark,

I have used the built-in function "interp1.m" for temporal
normalisation of multiple cycles. In the following example, cycrows
is the number of rows in the time series for a single cycle, rfc(i) is
the time index of initial right foot contact and rfc(i+1) is the time
index of the subsequent right foot contact, coord is the [x, y]
coordinate matrix for consecutive cycles and coord101 is the
temporally normalised coordinate matrix for a single cycle.

This is a simplified version of my code that will work for a single
cycle but feel free to modify it for batch processing.

Regards,
Pete

FROM: Robin Roithner

Dear Chen,

MATLAB offers the possibility of time normalization using spline interpolation. Look at help spline in MATLAB:

SPLINE Cubic spline data interpolation.
YY = SPLINE(X,Y,XX) uses cubic spline interpolation
to find a vector YY corresponding to XX. X and Y are the
given data vectors and XX is the new abscissa vector.

The ordinates Y may be vector-valued, in which case Y(:,j) is
the j-th ordinate.

PP = SPLINE(X,Y) returns the ppform of the cubic spline
interpolant instead, for later use with PPVAL, etc.

Ordinarily, the not-a-knot end conditions are used. However, if
Y contains two more ordinates than X has entries, then the first
and last ordinate in Y are used as the endslopes for the cubic spline.

Here's an example that generates a coarse sine curve, then
samples the spline over a finer mesh:

x = 0:10; y = sin(x);
xx = 0:.25:10;
yy = spline(x,y,xx);
plot(x,y,'o',xx,yy)

Here is an example that features a vector-valued spline, along with complete
spline interpolation, i.e., fitting to given end slopes (instead of using
the not-a-knot end condition); it uses SPLINE to generate a circle:

circle = spline( 0:4, [0 1 0 -1 0 1 0; pi/2 0 1 0 -1 0 pi/2] );
xx = 0:.1:4; cc = ppval(circle, xx); plot(cc(1,:), cc(2,:)), axis equal

Where you can use x as your old time base (old abscissa) and y as your values. Use XX as your new timebase ( e.g. 1:100) and spline will return YY as spline interpolated values at the new abscissa XX.

A similar function schould also exist for quintic spline. Look old biomech-L files. As I remember there was a posting some months ago.

hope I could help,

Robin

FROM: Daniel Roetenburg

Mark,

One of the options is the function:
Y = RESAMPLE(X,P,Q,N)

It resamples the sequence in vector X at P/Q times the original sample rate
using a polyphase implementation. Y is P/Q times the length of X (or the
ceiling of this if P/Q is not an integer). P and Q must be positive
integers. You can choose P and Q for example at 101 points. For N see help
function (I've used N=0).

Good luck.
Daniel

"M.A.CHEN" schreef:

On Sat, 18 May 2002 13:43:43 +0100 "M.A.CHEN"
wrote:

> List-members,
> I am doing some measures on gait coordination and have
> written a matlab program that calculates the
> continuous relative phase during the stance phase and/ or
> gait cycle. However i want to produce average
> curves over trials of different time duration,
> therefore i need a time normalization/
> interpolation program so that each trial has an equal
> number of data points.
>
> Does anybody know of any matlab programs that
> perform this function?
>
> Cheers,
>
> Mark.
>
> ----------------------
> M.A.CHEN
> Teaching Assistant
> University of HULL
> ENGLAND
> M.A.CHEN@psy.hull.ac.uk
>
> ---------------------------------------------------------------
> To unsubscribe send SIGNOFF BIOMCH-L to LISTSERV@nic.surfnet.nl
> For information and archives: http://isb.ri.ccf.org/biomch-l
> ---------------------------------------------------------------

----------------------
M.A.CHEN
M.A.CHEN@psy.hull.ac.uk

---------------------------------------------------------------
To unsubscribe send SIGNOFF BIOMCH-L to LISTSERV@nic.surfnet.nl
For information and archives: http://isb.ri.ccf.org/biomch-l
---------------------------------------------------------------