mer feb 12 14:56:57 CET 2003
[asterisk/asterisk.git] / codecs / lpc10 / hp100.c
1 /*
2
3 $Log$
4 Revision 1.14  2003/02/12 13:59:15  matteo
5 mer feb 12 14:56:57 CET 2003
6
7 Revision 1.1.1.1  2003/02/12 13:59:15  matteo
8 mer feb 12 14:56:57 CET 2003
9
10 Revision 1.2  2000/01/05 08:20:39  markster
11 Some OSS fixes and a few lpc changes to make it actually work
12
13  * Revision 1.2  1996/08/20  20:28:05  jaf
14  * Removed all static local variables that were SAVE'd in the Fortran
15  * code, and put them in struct lpc10_encoder_state that is passed as an
16  * argument.
17  *
18  * Removed init function, since all initialization is now done in
19  * init_lpc10_encoder_state().
20  *
21  * Revision 1.1  1996/08/19  22:32:04  jaf
22  * Initial revision
23  *
24
25 */
26
27 #ifdef P_R_O_T_O_T_Y_P_E_S
28 extern int hp100_(real *speech, integer *start, integer *end,
29                   struct lpc10_encoder_state *st);
30 extern int inithp100_(void);
31 #endif
32
33 /*  -- translated by f2c (version 19951025).
34    You must link the resulting object file with the libraries:
35         -lf2c -lm   (in that order)
36 */
37
38 #include "f2c.h"
39
40 /* ********************************************************************* */
41
42 /*      HP100 Version 55 */
43
44 /* $Log$
45  * Revision 1.14  2003/02/12 13:59:15  matteo
46  * mer feb 12 14:56:57 CET 2003
47  *
48 /* Revision 1.1.1.1  2003/02/12 13:59:15  matteo
49 /* mer feb 12 14:56:57 CET 2003
50 /*
51 /* Revision 1.2  2000/01/05 08:20:39  markster
52 /* Some OSS fixes and a few lpc changes to make it actually work
53 /*
54  * Revision 1.2  1996/08/20  20:28:05  jaf
55  * Removed all static local variables that were SAVE'd in the Fortran
56  * code, and put them in struct lpc10_encoder_state that is passed as an
57  * argument.
58  *
59  * Removed init function, since all initialization is now done in
60  * init_lpc10_encoder_state().
61  *
62  * Revision 1.1  1996/08/19  22:32:04  jaf
63  * Initial revision
64  * */
65 /* Revision 1.6  1996/03/15  16:45:25  jaf */
66 /* Rearranged a few comments. */
67
68 /* Revision 1.5  1996/03/14  23:20:54  jaf */
69 /* Added comments about when INITHP100 should be used. */
70
71 /* Revision 1.4  1996/03/14  23:08:08  jaf */
72 /* Added an entry named INITHP100 that initializes the local state of */
73 /* subroutine HP100. */
74
75 /* Revision 1.3  1996/03/14  22:09:20  jaf */
76 /* Comments added explaining which of the local variables of this */
77 /* subroutine need to be saved from one invocation to the next, and which */
78 /* do not. */
79
80 /* Revision 1.2  1996/02/12  15:05:54  jaf */
81 /* Added lots of comments explaining why I changed one line, which was a */
82 /* declaration with initializations. */
83
84 /* Revision 1.1  1996/02/07 14:47:12  jaf */
85 /* Initial revision */
86
87
88 /* ********************************************************************* */
89
90 /*    100 Hz High Pass Filter */
91
92 /* Jan 92 - corrected typo (1.937148 to 1.935715), */
93 /*          rounded coefficients to 7 places, */
94 /*          corrected and merged gain (.97466**4), */
95 /*          merged numerator into first two sections. */
96
97 /* Input: */
98 /*  start, end - Range of samples to filter */
99 /* Input/Output: */
100 /*  speech(end) - Speech data. */
101 /*                Indices start through end are read and modified. */
102
103 /* This subroutine maintains local state from one call to the next.  If */
104 /* you want to switch to using a new audio stream for this filter, or */
105 /* reinitialize its state for any other reason, call the ENTRY */
106 /* INITHP100. */
107 /* Subroutine */ int hp100_(real *speech, integer *start, integer *end,
108         struct lpc10_encoder_state *st)
109 {
110     /* Temporary local copies of variables in lpc10_encoder_state.
111        I've only created these because it might cause the loop below
112        to execute a bit faster to access local variables, rather than
113        variables in the lpc10_encoder_state structure.  It is just a
114        guess that it will be faster. */
115
116     real z11;
117     real z21;
118     real z12;
119     real z22;
120
121     /* System generated locals */
122     integer i__1;
123
124     /* Local variables */
125     integer i__;
126     real si, err;
127
128 /*       Arguments */
129 /*       Local variables that need not be saved */
130 /*       Local state */
131     /* Parameter adjustments */
132     if (speech) {
133         --speech;
134         }
135
136     /* Function Body */
137
138     z11 = st->z11;
139     z21 = st->z21;
140     z12 = st->z12;
141     z22 = st->z22;
142
143     i__1 = *end;
144     for (i__ = *start; i__ <= i__1; ++i__) {
145         si = speech[i__];
146         err = si + z11 * 1.859076f - z21 * .8648249f;
147         si = err - z11 * 2.f + z21;
148         z21 = z11;
149         z11 = err;
150         err = si + z12 * 1.935715f - z22 * .9417004f;
151         si = err - z12 * 2.f + z22;
152         z22 = z12;
153         z12 = err;
154         speech[i__] = si * .902428f;
155     }
156
157     st->z11 = z11;
158     st->z21 = z21;
159     st->z12 = z12;
160     st->z22 = z22;
161
162     return 0;
163 } /* hp100_ */