shithub: sox

ref: 205443a1cccac1dcd3e9648ef53b7b7eba4e1fb8
dir: /amr-wb/convolve.c/

View raw version
/*------------------------------------------------------------------------*
 *                         CONVOLVE.C                                     *
 *------------------------------------------------------------------------*
 * Perform the convolution between two vectors x[] and h[] and            *
 * write the result in the vector y[].                                    *
 * All vectors are of length L.                                           *
 *------------------------------------------------------------------------*/

#include "typedef.h"
#include "basic_op.h"
#include "count.h"

void Convolve(
     Word16 x[],                           /* (i)        : input vector                           */
     Word16 h[],                           /* (i) Q15    : impulse response                       */
     Word16 y[],                           /* (o) 12 bits: output vector                          */
     Word16 L                              /* (i)        : vector size                            */
)
{
    Word16 i, n;
    Word32 L_sum;

    for (n = 0; n < L; n++)
    {
        L_sum = 0L;                        move32();
        for (i = 0; i <= n; i++)
            L_sum = L_mac(L_sum, x[i], h[n - i]);

        y[n] = round(L_sum);               move16();
    }

    return;
}