1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- /*
- ********************************************************************************
- *
- * GSM AMR-NB speech codec R98 Version 7.6.0 December 12, 2001
- * R99 Version 3.3.0
- * REL-4 Version 4.1.0
- *
- ********************************************************************************
- *
- * File : convolve.c
- * Purpose : Perform the convolution between two vectors x[]
- * : and h[] and write the result in the vector y[].
- * : All vectors are of length L and only the first
- * : L samples of the convolution are computed.
- *
- ********************************************************************************
- */
- /*
- ********************************************************************************
- * MODULE INCLUDE FILE AND VERSION ID
- ********************************************************************************
- */
- #include "convolve.h"
- const char convolve_id[] = "@(#)$Id $" convolve_h;
-
- /*
- ********************************************************************************
- * INCLUDE FILES
- ********************************************************************************
- */
- #include "typedef.h"
- #include "basic_op.h"
- #include "count.h"
-
- /*
- ********************************************************************************
- * LOCAL VARIABLES AND TABLES
- ********************************************************************************
- */
-
- /*
- ********************************************************************************
- * PUBLIC PROGRAM CODE
- ********************************************************************************
- */
- /*************************************************************************
- *
- * FUNCTION: Convolve
- *
- * PURPOSE:
- * Perform the convolution between two vectors x[] and h[] and
- * write the result in the vector y[]. All vectors are of length L
- * and only the first L samples of the convolution are computed.
- *
- * DESCRIPTION:
- * The convolution is given by
- *
- * y[n] = sum_{i=0}^{n} x[i] h[n-i], n=0,...,L-1
- *
- *************************************************************************/
- void Convolve (
- Word16 x[], /* (i) : input vector */
- Word16 h[], /* (i) : impulse response */
- Word16 y[], /* (o) : output vector */
- Word16 L /* (i) : vector size */
- )
- {
- Word16 i, n;
- Word32 s;
- for (n = 0; n < L; n++)
- {
- s = 0; move32 ();
- for (i = 0; i <= n; i++)
- {
- s = L_mac_ex (s, x[i], h[n - i]);
- }
- s = L_shl_ex (s, 3);
- y[n] = extract_h_ex (s); move16 ();
- }
- return;
- }
|