convolve.c

来自「通讯协议」· C语言 代码 · 共 34 行

C
34
字号
/*------------------------------------------------------------------------*
 *                         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;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?