Version 0.1.7 from FTP
[asterisk/asterisk.git] / codecs / lpc10 / deemp.c
1 /*
2
3 $Log$
4 Revision 1.6  2000/01/05 08:20:39  markster
5 Version 0.1.7 from FTP
6
7 Revision 1.2  2000/01/05 08:20:39  markster
8 Some OSS fixes and a few lpc changes to make it actually work
9
10  * Revision 1.2  1996/08/20  20:23:46  jaf
11  * Removed all static local variables that were SAVE'd in the Fortran
12  * code, and put them in struct lpc10_decoder_state that is passed as an
13  * argument.
14  *
15  * Removed init function, since all initialization is now done in
16  * init_lpc10_decoder_state().
17  *
18  * Revision 1.1  1996/08/19  22:32:34  jaf
19  * Initial revision
20  *
21
22 */
23
24 #ifdef P_R_O_T_O_T_Y_P_E_S
25 extern int deemp_(real *x, integer *n, struct lpc10_decoder_state *st);
26 #endif
27
28 /*  -- translated by f2c (version 19951025).
29    You must link the resulting object file with the libraries:
30         -lf2c -lm   (in that order)
31 */
32
33 #include "f2c.h"
34
35 /* ***************************************************************** */
36
37 /*      DEEMP Version 48 */
38
39 /* $Log$
40  * Revision 1.6  2000/01/05 08:20:39  markster
41  * Version 0.1.7 from FTP
42  *
43 /* Revision 1.2  2000/01/05 08:20:39  markster
44 /* Some OSS fixes and a few lpc changes to make it actually work
45 /*
46  * Revision 1.2  1996/08/20  20:23:46  jaf
47  * Removed all static local variables that were SAVE'd in the Fortran
48  * code, and put them in struct lpc10_decoder_state that is passed as an
49  * argument.
50  *
51  * Removed init function, since all initialization is now done in
52  * init_lpc10_decoder_state().
53  *
54  * Revision 1.1  1996/08/19  22:32:34  jaf
55  * Initial revision
56  * */
57 /* Revision 1.3  1996/03/20  15:54:37  jaf */
58 /* Added comments about which indices of array arguments are read or */
59 /* written. */
60
61 /* Added entry INITDEEMP to reinitialize the local state variables, if */
62 /* desired. */
63
64 /* Revision 1.2  1996/03/14  22:11:13  jaf */
65 /* Comments added explaining which of the local variables of this */
66 /* subroutine need to be saved from one invocation to the next, and which */
67 /* do not. */
68
69 /* Revision 1.1  1996/02/07 14:44:53  jaf */
70 /* Initial revision */
71
72
73 /* ***************************************************************** */
74
75 /*  De-Emphasize output speech with   1 / ( 1 - .75z**-1 ) */
76 /*    cascaded with 200 Hz high pass filter */
77 /*    ( 1 - 1.9998z**-1 + z**-2 ) / ( 1 - 1.75z**-1 + .78z**-2 ) */
78
79 /*  WARNING!  The coefficients above may be out of date with the code */
80 /*  below.  Either that, or some kind of transformation was performed */
81 /*  on the coefficients above to create the code below. */
82
83 /* Input: */
84 /*  N  - Number of samples */
85 /* Input/Output: */
86 /*  X  - Speech */
87 /*       Indices 1 through N are read before being written. */
88
89 /* This subroutine maintains local state from one call to the next.  If */
90 /* you want to switch to using a new audio stream for this filter, or */
91 /* reinitialize its state for any other reason, call the ENTRY */
92 /* INITDEEMP. */
93
94 /* Subroutine */ int deemp_(real *x, integer *n, struct lpc10_decoder_state *st)
95 {
96     /* Initialized data */
97
98     real *dei1;
99     real *dei2;
100     real *deo1;
101     real *deo2;
102     real *deo3;
103
104     /* System generated locals */
105     integer i__1;
106     real r__1;
107
108     /* Local variables */
109     integer k;
110     real dei0;
111
112 /*       Arguments */
113 /*       Local variables that need not be saved */
114 /*       Local state */
115 /*       All of the locals saved below were not given explicit initial */
116 /*       values in the original code.  I think 0 is a safe choice. */
117     /* Parameter adjustments */
118     if (x) {
119         --x;
120         }
121
122     /* Function Body */
123
124     dei1 = &(st->dei1);
125     dei2 = &(st->dei2);
126     deo1 = &(st->deo1);
127     deo2 = &(st->deo2);
128     deo3 = &(st->deo3);
129
130     i__1 = *n;
131     for (k = 1; k <= i__1; ++k) {
132         dei0 = x[k];
133         r__1 = x[k] - *dei1 * 1.9998f + *dei2;
134         x[k] = r__1 + *deo1 * 2.5f - *deo2 * 2.0925f + *deo3 * .585f;
135         *dei2 = *dei1;
136         *dei1 = dei0;
137         *deo3 = *deo2;
138         *deo2 = *deo1;
139         *deo1 = x[k];
140     }
141     return 0;
142 } /* deemp_ */