Go to the first, previous, next, last section, table of contents.


Signal Processing

Fast Fourier transform routines

Routines for FFT, IFFT, energy spectrum (magnitude squared) and power spectrum (root magnitude squared). All functions below return 0 for success, -1 for an error.

Cepstral analysis

The cepstral analysis functions are not fully developed and no testing has been done to confirm that their results are correct.

More work is required with these functions.

Functions for computing delta co-efficients

Delta coefficients are an approximation to the derivative of a data dequence. The functions described here should be distinguished from the differentiate(EST_Track &c, float samp_int) function (see the header file, `include/EST_sigpr.h'.

The two functions available are :

void delta(EST_Track &track, int regression_length);

(see the header file, `include/sigpr.h')

This routine operates in-place and returns the first delta coefficient (approximating differentiation). The delta coefficient for the first frame is defined as zero. To generate the second delta coefficient simply call delta(...) example twice, and so on. The size of the Track is unchanged. The name of the Track has "_d" appended each time delta(...) example is called.

The routines handle the variable number of points used at the start of the data. As many points as available are passed to float compute_gradient(float* x, int num_points), up to a maximum of MAX_REGRESSION_LENGTH example which is defined in sigpr.h.

Both delta(...) routines call compute_gradient(float* x, int num_points) to compute a delta coefficient by solving the least-squares fit of a straight line to a sequence of points. This function can only handle up to 4 points as the solutions are hard-wired. This is for efficiency reasons - a general solution to the least squares problem involves matrix inversion. The time between points is assumed to be 1. If delta coefficients in terms of units-per-second are required, call the function and then divide the result by the time between points (typically the frame spacing).

compute_gradient(float* x, int num_points) should not be called directly.

Example

EST_Option op;
EST_Wave sig;

// read sig and op
 ...

Track cepstra, delta_cepstra, second_delta_cepstra;
int regression_length = 4;

cepstra = make_cepstra_unnorm(sig, op);

delta_cepstra = cepstra;
delta(delta_cepstra, regression_length);

second_delta_cepstra = delta_cepstra;
delta(second_delta_cepstra, regression_length);

...etc.

Energy

To be written.

Formant analysis

To be written.

Linear predictive coding and analysis

To be written.

Functions for smoothing tracks

All the smoothing functions smooth the track given as an argument, so you must copy the original if you don't want it changed.

Window generation and application functions

Generation

In all the follwing window generation functions, the parameter size gives the number of points in the vector returned. If size is odd, the middle value of the returned vector will be exactly 1.0; if size is even, there is of course no middle value.

Application

When applying the same window many times, it is much more efficient to generate the window once and then apply it, like this (where data is an array of FVectors):

EST_FVector w = Hamming_window(data[0].n());
for(i=...)
    window(data[i],v);

using the first of these functions. The remaining functions are convenient when only using a window once.

FIR filtering and filter design

Functions for applying FIR filters to Wave (See section Waveform C++ class) objects, and for designing filters for a given frequency response. Currently limited to FIR (all-zero) filters.

Data Manipulation Utilities

Useful utility functions for tracks.


Go to the first, previous, next, last section, table of contents.