mapmind
From STX Wiki
< Programmer Guide | Command Reference | EVAL
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 equalsncol(x)
. The content of the output rowr[i,*]
is a copy of the input rowx[m[i],*]
.
- See also
- dist
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 ''