;* ======================================================================== *; ;* TEXAS INSTRUMENTS, INC. *; ;* *; ;* DSPLIB DSP Signal Processing Library *; ;* *; ;* Release: Version 1.02 *; ;* CVS Revision: 1.5 Fri Mar 29 15:47:22 2002 (UTC) *; ;* Snapshot date: 18-Apr-2002 *; ;* *; ;* This library contains proprietary intellectual property of Texas *; ;* Instruments, Inc. The library and its source code are protected by *; ;* various copyrights, and portions may also be protected by patents or *; ;* other legal protections. *; ;* *; ;* This software is licensed for use with Texas Instruments TMS320 *; ;* family DSPs. This license was provided to you prior to installing *; ;* the software. You may review this license by consulting the file *; ;* TI_license.PDF which accompanies the files in this library. *; ;* ------------------------------------------------------------------------ *; ;* Copyright (C) 2002 Texas Instruments, Incorporated. *; ;* All Rights Reserved. *; ;* ======================================================================== *; * ========================================================================= * * * * TEXAS INSTRUMENTS, INC. * * * * NAME * * iir * * * * * * REVISION DATE * * 11-Feb-2002 * * * * USAGE * * This routine is C callable and can be called as: * * * * void DSP_iir * * ( * * short *restrict r1, /* Output array (used) */ * * const short *x, /* Input array */ * * short *restrict r2, /* Output array (stored) */ * * const short *h2, /* Filter Coeffs. AR part */ * * const short *h1, /* Filter Coeffs. FIR part */ * * int nr /* Number of output samples */ * * ) * * * * DESCRIPTION * * The IIR performs an auto-regressive moving-average (ARMA) filter * * with 4 auto-regressive filter coefficients and 5 moving-average * * filter coefficients for nr output samples. The output vector is * * stored in two locations. This routine is used as a high pass * * filter in the VSELP vocoder. * * * * C CODE * * void DSP_iir * * ( * * short *restrict r1, /* Output array (used) */ * * const short *x, /* Input array */ * * short *restrict r2, /* Output array (stored) */ * * const short *h2, /* Filter Coeffs. AR part */ * * const short *h1, /* Filter Coeffs. FIR part */ * * int nr /* Number of output samples */ * * ) * * { * * int j, i; * * int sum; * * * * for (i = 0; i < nr; i++) * * { * * sum = h2[0] * x[4+i]; * * * * for (j = 1; j <= 4; j++) * * sum += h2[j] * x[4+i-j] - h1[j] * r1[4+i-j]; * * * * r1[4+i] = (sum >> 15); * * r2[ i] = r1[4+i]; * * } * * } * * * * TECHNIQUES * * The inner loop is completely unrolled and software pipelined * * (i.e. each time the 5 cycle loop "LOOP" is executed the inner * * loop of the C code is executed.) * * * * MEMORY NOTE * * This code is ENDIAN NEUTRAL. * * This code is interrupt-tolerant but not interruptible. * * * * MEMORY NOTE * * To avoid memory hits r1[] and r2[] must be aligned on the next word * * boundary following the alignment of x[], e.g.: * * #pragma DATA_MEM_BANK(x, 0); * * #pragma DATA_MEM_BANK(r1, 2); * * #pragma DATA_MEM_BANK(r2, 2); * * * * CYCLES * * 5 * nr + 30 * * * * For nr = 40: 230 cycles * * * * CODESIZE * * 384 bytes * * * * ------------------------------------------------------------------------- * * Copyright (c) 2002 Texas Instruments, Incorporated. * * All Rights Reserved. * * ========================================================================= * .global _DSP_iir * ========================================================================= * * End of file: dsp_iir.h62 * * ------------------------------------------------------------------------- * * Copyright (c) 2002 Texas Instruments, Incorporated. * * All Rights Reserved. * * ========================================================================= *