mapmind

From STX Wiki
Jump to navigationJump to search

This function implements a non-linear alignment algorithm for two parameter sets (each defined by a vector or matrix). The method minimizes the accumulated Euclidean distance of the two sets. The result is a two column matrix containing the index map of the alignment. The function also implements a method to create a mapped-copy of the sets.


Usage 1
mapmind(0, a, b)
a, b
Are vectors are matrices containing the two parameter sets;
nrow(a)>2, nrow(b)>2, ncol(a) = ncol(b)
Each row of a/b defines one parameter value or vector (e.g. for a frame).
Result
A matrix Nx2 defining the map of the row indices of a and b with the minimum accumulated distance. The first column contains the indices for a and the second column the indices for b.
Note:To minimize the distance, individual rows of a or b are duplicated. Therefore the number of rows of the result matrix N is greater than or equal to max(nrow(a),nrow(b)).

Usage 2
mapmind(1, m, x)
m
A vector containing the index map for x;
x
A vector or matrix containing the parameter set to remap.
Result 2
A vector or matrix r containing the remapped parameter set x. The number of rows of r is equal to nrow(m) and the number of columns equals ncol(x). The content of the output row r[i,*] is a copy of the input row x[m[i],*].

See also
dist

<function list>


Example:

// macro "alignAB": nonlinear time alignment of two signals,
//                  using the rms track as alignment parameter
// input:  #rmsA, #rmsB ... rms tracks of signal A and B
// result: #aMat .......... alignment matrix, #aMat[*,0] = index vector for signal A
//                                            #aMat[*,1] = index vector for signal B
//                                            #aMat[*,2] = aligned rms track of signal A
//                                            #aMat[*,3] = aligned rms track of signal B

[macro alignAB arg: #rmsA #rmsB]
// compute index map with minimum accumulated distance 
#map := eval mapmind(0,$#rmsA,$#rmsB)
// remap rms track of signal A
if $rc == 0 #rmsAA := eval mapmind(1, $#map[*,0], $#rmsA)
// remap rms track of signal B
if $rc == 0 #rmsBB := eval mapmind(1, $#map[*,1], $#rmsB)
// create and return the result matrix
if $rc == 0 exit 1 eval vmcol($#map[*,0], $#map[*,1], $#rmsAA, $#rmsBB)
// this point is reached if one of the above commands fails -> error -> return empty string
exit 1 set ''

Navigation menu

Personal tools