Ton Van Den Bogert

02-05-1990, 01:49 AM

John Scholz writes:

>I would like to know if anyonehas an algorithm or source code for a

>program that they would be willing to share which averages two or more

>time series collected under the same experimental conditions: e.g.,

>several gait cycles or reaches to a target under constrained conditions.

>The program would have to run on an IBM-386 compatible computer.

I don't have a ready-to-run program, but I could send you some Fortran

code. My approach is as follows: first, a program called CUT is used

to cut a series of strides (or trials) into pieces. Each stride is

then represented by a fixed number of equidistant samples. This is

done by the subroutine EQUISEL (see listing below). If you

have a stride with length of 92 samples, and you want to create a

record of 100 samples, you say:

call EQUISEL(data_raw, 92, data_norm, 100)

Where data_raw is an array with the raw samples. The result (time-

normalized data) is stored in the array data_norm.

Output of CUT is a file with all strides stored as a fixed-length

record. These records can then be plotted for visual detection of

abnormal strides. After that, a program AVFIL is used to create an

average of all `normal' strides from this file. This program also

calculates the variation between strides. This variation is

quantified in three different ways:

1. A time-average of the standard deviation.

2. The CV (coefficient of variation), see paper by D.A. Winter, Human

Movement Science 3:51-76(1984).

3. The VR (variance ratio), see paper by M.P. Kadaba, J. Orthopaed. Res.

3:350-359(1985).

I tend to prefer the VR as a measure of variability, as it is not

affected by a DC shift of the signal. Fortran source for AVFIL

is available.

John Wann made a good point about suitable

criteria for detecting begin and end of trials. In gait studies

however, the instant of foot impact is sufficiently well-defined to

avoid such difficulties. In my work on equine gait, I routinely

use an accelerometer on the hoof, which provides an excellent timing

trigger.

Good luck,

Ton van den Bogert

University of Utrecht, Netherlands.

--------------------------------------------------------

subroutine equisel(x,n,xsel,nsel)

c

c select nsel equidistant points from n points of array x

c by linear interpolation

c mapping: 1 --> 1

c n+1 --> nsel+1

c

c Input: x(n)........Raw data

c n...........Number of samples in raw data

c nsel........Number of samples you want in time-normalized data

c Output: xsel(n).....Time-normalized data

c

real xsel(nsel),x(n)

double precision step,frac

c

step = 1d0*n/nsel

iptr = 1

frac = 0d0

do j=1,nsel

xsel(j) = (1d0-frac)*x(iptr) + frac*x(iptr+1)

frac = frac + step

do while (frac .gt. 1d0)

frac = frac - 1d0

iptr = iptr + 1

end do

end do

return

end

>I would like to know if anyonehas an algorithm or source code for a

>program that they would be willing to share which averages two or more

>time series collected under the same experimental conditions: e.g.,

>several gait cycles or reaches to a target under constrained conditions.

>The program would have to run on an IBM-386 compatible computer.

I don't have a ready-to-run program, but I could send you some Fortran

code. My approach is as follows: first, a program called CUT is used

to cut a series of strides (or trials) into pieces. Each stride is

then represented by a fixed number of equidistant samples. This is

done by the subroutine EQUISEL (see listing below). If you

have a stride with length of 92 samples, and you want to create a

record of 100 samples, you say:

call EQUISEL(data_raw, 92, data_norm, 100)

Where data_raw is an array with the raw samples. The result (time-

normalized data) is stored in the array data_norm.

Output of CUT is a file with all strides stored as a fixed-length

record. These records can then be plotted for visual detection of

abnormal strides. After that, a program AVFIL is used to create an

average of all `normal' strides from this file. This program also

calculates the variation between strides. This variation is

quantified in three different ways:

1. A time-average of the standard deviation.

2. The CV (coefficient of variation), see paper by D.A. Winter, Human

Movement Science 3:51-76(1984).

3. The VR (variance ratio), see paper by M.P. Kadaba, J. Orthopaed. Res.

3:350-359(1985).

I tend to prefer the VR as a measure of variability, as it is not

affected by a DC shift of the signal. Fortran source for AVFIL

is available.

John Wann made a good point about suitable

criteria for detecting begin and end of trials. In gait studies

however, the instant of foot impact is sufficiently well-defined to

avoid such difficulties. In my work on equine gait, I routinely

use an accelerometer on the hoof, which provides an excellent timing

trigger.

Good luck,

Ton van den Bogert

University of Utrecht, Netherlands.

--------------------------------------------------------

subroutine equisel(x,n,xsel,nsel)

c

c select nsel equidistant points from n points of array x

c by linear interpolation

c mapping: 1 --> 1

c n+1 --> nsel+1

c

c Input: x(n)........Raw data

c n...........Number of samples in raw data

c nsel........Number of samples you want in time-normalized data

c Output: xsel(n).....Time-normalized data

c

real xsel(nsel),x(n)

double precision step,frac

c

step = 1d0*n/nsel

iptr = 1

frac = 0d0

do j=1,nsel

xsel(j) = (1d0-frac)*x(iptr) + frac*x(iptr+1)

frac = frac + step

do while (frac .gt. 1d0)

frac = frac - 1d0

iptr = iptr + 1

end do

end do

return

end