MAL.Extrapolate

Previous  Next

 

ref_arr_out = MAL.Extrapolate( [BYREF arr_out       AS ARRAY],

                                BYREF arr_in        AS ARRAY,

                               [BYVAl nType         AS INTEGER=ML_SPLINE],

                               [BYVAL nInputs       AS INTEGER=3],

                               [BYVAL nParam        AS INTEGER=0],

                               [BYVAL nPoint        AS INTEGER=ML_ALL],

                               [BYVAL nFrameOffset  AS INTEGER=0] ) AS REFERENCE

 


 

Extrapolates a sample based on n number of valid input samples.  The extrapolated new sample will be output to nInputs + 1 index in the output array.  This will leave the first nInput samples as invalid in the output array.   The minimum length of the output array must be nInputs + 1 in order to generate at least one extrapolated value.

 

There are several different extrapolation methods available.  The nType parameter selects the method.  This can be one of the following:

 

' Extrapolation Type

CONST ML_EP_LINEAR            = 121          ' Linear Extrapolation

CONST ML_EP_LSQ               = 122          ' LSQ Quadratic Extrapolation

CONST ML_EP_POLINT            = 125          ' Polynomial Extrapolation

CONST ML_EP_RATINT            = 126          ' Rational Function Extrapolation

CONST ML_EP_POLRAT            = 127          ' Combo of ML_EP_POLINT and ML_EP_RATINT

                                            ' Note; You can also do a bitwise OR of

                                            '       ML_EP_POLINT and ML_EP_RATINT

 

The minimum and maximum number of inputs is 3 and 11 except for ML_EP_LINEAR where minimum is 2 and maximum 3.

 

The nParam parameter depends on the selected extrapolation method.  For ML_EP_LINEAR, it is an acceleration factor to add to the prediction.  Valid range is 0-200 where 0 is no acceleration factor and 200 is double the distance.  Normal range for this is between 0 and 75.  The less the velocity changes in the movement, the lower the acceleration factor.

 

For all the other methods, this is the next abscissa.  The default here is nInputs + 1.

 

Example:

 

OPTION EXPLICIT ON

OPTION BASE 1

 

' Include C3D Support

$INCLUDE "MyBASIC2_C3DFile"

$LIBRARY "MyBASIC2_C3DFileLib"

 

' Needed to extract and Display Version

$LIBRARY "MyBASIC2_ExtLib"

 

' Include the MaxMAL Library

$INCLUDE "MyBASIC2_MaxMAL"

$LIBRARY "MyBASIC2_MaxMALLib"

 

' Forward Declare PrintArray and DisplayVersion

DECLARE SUB PrintArray

DECLARE SUB DisplayVersion

 

' Declare variables and arrays

DIM nPoints AS INTEGER

DIM nFrames AS INTEGER

DIM hFile   AS INTEGER

 

' Test File

CONST cFileName = "e:\walk8Invalids3.c3d"

 

CLS

 

' Display the current Library Version

CALL DisplayVersion()

 

' Open the Test File

hFile = C3DFile.Open( cFileName );

 

IF NOT hFile > 0 THEN

  PRINT "Error Opening File ";cFileName,

  STOP

ENDIF

 

' Get the no of points and frames

nFrames = C3DFile.GetNoOfFrames( hFile )

nPoints = C3DFile.GetNoOfPoints( hFile )

 

' Dimension the arrays

DIM Position(nFrames,nPoints,3)     AS REAL

DIM Extrapolated(nFrames,nPoints,3) AS REAL

 

' Get the Point Coordinates from C3D file

IF C3DFile.GetPoints( hFile, Position ) <> nFrames THEN

  C3DFile.Close( hFile )

  PRINT "Error Reading ";nPoints;" from file ";cFileName,

  STOP

ENDIF

 

' Set the Frame Rate to use in the MaxMAL Library

MAL.FrameRate( C3DFile.GetFrameRate( hFile ) )

 

' Display the Position Coordinates

CALL PrintArray( REF( Position ) )

 

' Extrapolate the data

MAL.Extrapolate( Extrapolated, Position, ML_EP_LINEAR )

CALL PrintArray( REF( Extrapolated ) )

 

' Close File

C3DFile.Close( hFile )

 

END

 

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

' Print an array with up to 3 dimensions.  Array is passed as a reference

'

SUB PrintArray( arr AS REFERENCE )

  RUN( "ArrayPlot",  arr, TRUE )

END SUB

 

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

' Display the MaxMAL Extension Library Version

'

SUB DisplayVersion()

  DIM major AS INTEGER

  DIM minor AS INTEGER

  DIM build AS INTEGER

  DIM qfe   AS INTEGER

 

  major = BYTE.HI( WORD.HI( MAL.Version() ) )

  minor = BYTE.LO( WORD.HI( MAL.Version() ) )

  build = BYTE.HI( WORD.LO( MAL.Version() ) )

  qfe   = BYTE.LO( WORD.LO( MAL.Version() ) )

 

  PRINT "Library Version: ";FORMAT( "%d, %d, %d, %d", major, minor, build, qfe ),

  PRINT "Option Flags:    ";FORMAT( "0x%08X", MAL.Version( TRUE ) ),

END SUB