#include <LPC.h>
Public Member Functions | |
LPC (int inputSize=1024, int coefficientCount=15, Real preEmphasis=0.0) | |
~LPC () | |
void | process (const MatrixXR &frames, MatrixXR *lpcCoefficients, MatrixXR *reflectionCoefficients, MatrixXR *error) |
int | inputSize () const |
void | setInputSize (int size, bool callSetup=true) |
int | coefficientCount () const |
void | setCoefficientCount (int count, bool callSetup=true) |
Real | preEmphasis () const |
void | setPreEmphasis (Real coefficient, bool callSetup=true) |
This class represents an object to perform a Linear Predictive Coding on vectors of Real values. Which is a useful technique for estimating a parametric representation of a spectrum magnitude. The algorithm estimates a set of M coefficients of a IIR filter whose frequency response approximates the vector of Reals passed as input.
This algorithm implements the Levinson-Durbin recursion for solving the following linear equation system:
R a = r
where R is the Toeplitz matrix made of the first M - 1 autocorrelation coefficients of the input vector and r is a vector made of M - 1 autocorrelation coefficients starting from the second of the input vector.
Optionally a pre-emphasis FIR filter may be applied to the input vector in order to enhance estimation of higher frequencies. The pre-emphasis filter consists of a 2 coefficient filter of the form b = [1, -b1] where usually:
0.96 <= b1 <= 0.99
The b1 coefficient defaults to 0, but can be specified using setPreEmphasis().
LPC | ( | int | inputSize = 1024 , |
|
int | coefficientCount = 15 , |
|||
Real | preEmphasis = 0.0 | |||
) |
Constructs an LPC object with the specified inputSize, coefficientCount and preEmphasis settings.
inputSize | size of the inputs arrays, must be > 0. The algorithm performs faster for sizes which are a power of 2. | |
coefficientCount | number of coefficients to be estimated | |
preEmphasis | second coefficient of the FIR pre-emphasis filter |
References setCoefficientCount(), setInputSize(), and setPreEmphasis().
~LPC | ( | ) |
Destroys the algorithm and frees its resources.
void process | ( | const MatrixXR & | frames, | |
MatrixXR * | lpcCoefficients, | |||
MatrixXR * | reflectionCoefficients, | |||
MatrixXR * | error | |||
) |
Performs an LPC on each of the rows of frames. Puts the resulting LPC coefficients in the rows of lpcCoefficients, the reflection coefficients in reflectionCoefficients and the error in error.
frames | matrix of Real values. The number of columns of frames must be equal to the input size specified using setInputSize(). | |
lpcCoefficients | pointer to a matrix of Real values for the LPC coefficients. The matrix should have the same number of rows as frames and coefficientCount columns. | |
reflectionCoefficients | pointer to a matrix of Real values for the reflection coefficients. The matrix should have the same number of rows as frames and coefficientCount + 1 columns. | |
error | pointer to a matrix of Real values for the LPC error gain. The matrix should have the same number of rows as frames and 1 single column. |
References Autocorrelation::process(), and Filter::process().
int inputSize | ( | ) | const |
void setInputSize | ( | int | size, | |
bool | callSetup = true | |||
) |
Specifies the size of the input. The given size must be higher than 0. Note that if size is a power of 2 the algorithm will perform faster.
Referenced by LPC().
int coefficientCount | ( | ) | const |
Returns the number of coefficients to be calculated. The default is 15.
void setCoefficientCount | ( | int | count, | |
bool | callSetup = true | |||
) |
Specifies the count of coefficients to be calculated. The given count must be in the range between 0 and (input size - 1).
Referenced by LPC().
Real preEmphasis | ( | ) | const |
Returns the second coefficient of the FIR preemphasis filter. The default is 0.0.
void setPreEmphasis | ( | Real | coefficient, | |
bool | callSetup = true | |||
) |
Specifies the second coefficient of the FIR preemphasis filter.
Referenced by LPC().