1 /* ======================================================================= */
2 /* DSPF_sp_iir_opt.c -- IIR Filter */
3 /* Optimized C Implementation with Intrinsics */
4 /* */
5 /* Rev 0.0.1 */
6 /* */
7 /* Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ */
8 /* */
9 /* */
10 /* Redistribution and use in source and binary forms, with or without */
11 /* modification, are permitted provided that the following conditions */
12 /* are met: */
13 /* */
14 /* Redistributions of source code must retain the above copyright */
15 /* notice, this list of conditions and the following disclaimer. */
16 /* */
17 /* Redistributions in binary form must reproduce the above copyright */
18 /* notice, this list of conditions and the following disclaimer in the */
19 /* documentation and/or other materials provided with the */
20 /* distribution. */
21 /* */
22 /* Neither the name of Texas Instruments Incorporated nor the names of */
23 /* its contributors may be used to endorse or promote products derived */
24 /* from this software without specific prior written permission. */
25 /* */
26 /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */
27 /* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */
28 /* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR */
29 /* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */
30 /* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */
31 /* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT */
32 /* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, */
33 /* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY */
34 /* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT */
35 /* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE */
36 /* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
37 /* */
38 /* ======================================================================= */
40 #pragma CODE_SECTION(DSPF_sp_iir, ".text:optimized");
42 #include "DSPF_sp_iir.h"
44 void DSPF_sp_iir(float *restrict y1,
45 const float * x,
46 float *restrict y2,
47 const float * hb,
48 const float * ha,
49 int nr)
50 {
51 float sum1,sum2, sum3, sum4, sum5;
52 int i;
54 sum1 = ( hb[0] * x[4]
55 + hb[1] * x[3] - ha[1] * y1[3]
56 + hb[2] * x[2] - ha[2] * y1[2]
57 + hb[3] * x[1] - ha[3] * y1[1]
58 + hb[4] * x[0] - ha[4] * y1[0]
59 );
61 sum2 = ( hb[1] * x[4]
62 + hb[2] * x[3] - ha[2] * y1[3]
63 + hb[3] * x[2] - ha[3] * y1[2]
64 + hb[4] * x[1] - ha[4] * y1[1]
65 );
67 sum3 = ( hb[2] * x[4]
68 + hb[3] * x[3] - ha[3] * y1[3]
69 + hb[4] * x[2] - ha[4] * y1[2]
70 );
72 sum4 = ( hb[3] * x[4]
73 + hb[4] * x[3] - ha[4] * y1[3]
74 );
76 sum5 = ( hb[4] * x[4]
77 );
80 _nassert(nr >= 2);
81 _nassert(nr % 2 == 0);
83 for (i = 0; i < nr-1; i++ ) {
85 y1[i+4] = sum1;
86 y2[i] = sum1;
88 sum1 = sum2 + hb[0] * x[i+5] - ha[1] * y1[i+4];
89 sum2 = sum3 + hb[1] * x[i+5] - ha[2] * y1[i+4];
90 sum3 = sum4 + hb[2] * x[i+5] - ha[3] * y1[i+4];
91 sum4 = sum5 + hb[3] * x[i+5] - ha[4] * y1[i+4];
92 sum5 = hb[4] * x[i+5];
93 }
94 y1[nr+3] = sum1;
95 y2[nr-1] = sum1;
96 }
98 /* ======================================================================= */
99 /* End of file: DSPF_sp_iir_opt.c */
100 /* ----------------------------------------------------------------------- */
101 /* Copyright (c) 2011 Texas Instruments, Incorporated. */
102 /* All Rights Reserved. */
103 /* ======================================================================= */