Browse Source

Add a LPC filter

Part of the QCELP patch by Kenan Gillet, kenan.gillet gmail com

Originally committed as revision 15754 to svn://svn.ffmpeg.org/ffmpeg/trunk
tags/v0.5
Kenan Gillet Vitor Sessak 17 years ago
parent
commit
1fb0d4b8a6
2 changed files with 45 additions and 0 deletions
  1. +21
    -0
      libavcodec/celp_filters.c
  2. +24
    -0
      libavcodec/celp_filters.h

+ 21
- 0
libavcodec/celp_filters.c View File

@@ -84,3 +84,24 @@ int ff_celp_lp_synthesis_filter(


return 0; return 0;
} }

void ff_celp_lp_synthesis_filterf(
float *out,
const float* filter_coeffs,
const float* in,
int buffer_length,
int filter_length)
{
int i,n;

// These two lines are to avoid a -1 subtraction in the main loop
filter_length++;
filter_coeffs--;

for(n=0; n<buffer_length; n++)
{
out[n] = in[n];
for(i=1; i<filter_length; i++)
out[n] += filter_coeffs[i] * out[n-i];
}
}

+ 24
- 0
libavcodec/celp_filters.h View File

@@ -69,4 +69,28 @@ int ff_celp_lp_synthesis_filter(
int stop_on_overflow, int stop_on_overflow,
int rounder); int rounder);


/**
* LP synthesis filter.
* @param out [out] pointer to output buffer
* - the array out[-filter_length, -1] must
* contain the previous result of this filter
* @param filter_coeffs filter coefficients.
* @param in input signal
* @param buffer_length amount of data to process
* @param filter_length filter length (10 for 10th order LP filter)
*
* @return 1 if overflow occurred, 0 - otherwise
*
* @note Output buffer must contain 10 samples of past
* speech data before pointer.
*
* Routine applies 1/A(z) filter to given speech data.
*/
void ff_celp_lp_synthesis_filterf(
float *out,
const float* filter_coeffs,
const float* in,
int buffer_length,
int filter_length);

#endif /* AVCODEC_CELP_FILTERS_H */ #endif /* AVCODEC_CELP_FILTERS_H */

Loading…
Cancel
Save