hcomb
From STX Wiki
< Programmer Guide | Command Reference | EVAL
Jump to navigationJump to search
This function implements a methods to detect harmonics in a spectrum and to create a harmonic comb filter. It was especially implemented for the script application MulAc.
- Usage
hcomb(mflag, oflag, a, imin, imax, ot, ok, oo, nget, rrms, nrms, nset)
- mflag
- selects the method used to detect the test tone ft
mflag=0 peak picking mflag=1 harmonic grid
- oflag
- selects the format and content of the result (see Result); the values 0 and 1 are supported
- a
- a vector containing amplitude spectrum (linear, with constant df); in the description below n is the length of a.
- imin, imax
- index range for test tone (ft) detection; 0 <= imin < imax < n
- ot
- test tone order (f0 = ft / ot); 0 < ot
- ok, oo
- order factor and offset for the components of the comp fc[i];
fc[i] = f0 * (oo + ok*i); with: i=1,2,...
- nget
- the number of points (+/-) to detect the peak of a harmonic component fc[i]; 3 <= nget
- rrms
- defines the energy ratio threshold for harmonic components; 0 <= rrms < 1
- nrms
- defines the bandwidth (+/- nrms points) used to compute the energy ratio; 2 <= nrms
- (
component-rms / testband-rms >= rrms
)
- (
- nset
- defines the comb bandwidth (+/- nset points); if nset equals 0, a variable comb bandwidth is used to remove the detected components; this argument is only used if oflag equals 1
test tone order (f0 = ft / ot); 0 < ot
mflag(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 ''