Mercurial > libavcodec.hg
changeset 8091:4c95f44c4c23 libavcodec
Add a LPC filter
Part of the QCELP patch by Kenan Gillet, kenan.gillet gmail com
author | vitor |
---|---|
date | Thu, 30 Oct 2008 21:05:37 +0000 |
parents | 1c07635d7334 |
children | 5b379dd32155 |
files | celp_filters.c celp_filters.h |
diffstat | 2 files changed, 45 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/celp_filters.c Thu Oct 30 21:04:17 2008 +0000 +++ b/celp_filters.c Thu Oct 30 21:05:37 2008 +0000 @@ -84,3 +84,24 @@ 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]; + } +}
--- a/celp_filters.h Thu Oct 30 21:04:17 2008 +0000 +++ b/celp_filters.h Thu Oct 30 21:05:37 2008 +0000 @@ -69,4 +69,28 @@ int stop_on_overflow, 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 */