Version 0.1.12 from FTP
[asterisk/asterisk.git] / codecs / lpc10 / irc2pc.c
1 /*
2
3 $Log$
4 Revision 1.11  2000/01/05 08:20:39  markster
5 Version 0.1.12 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.1  1996/08/19  22:31:56  jaf
11  * Initial revision
12  *
13
14 */
15
16 #ifdef P_R_O_T_O_T_Y_P_E_S
17 extern int irc2pc_(real *rc, real *pc, integer *order, real *gprime, real *g2pass);
18 #endif
19
20 /*  -- translated by f2c (version 19951025).
21    You must link the resulting object file with the libraries:
22         -lf2c -lm   (in that order)
23 */
24
25 #include "f2c.h"
26
27 /* ***************************************************************** */
28
29 /*      IRC2PC Version 48 */
30
31 /* $Log$
32  * Revision 1.11  2000/01/05 08:20:39  markster
33  * Version 0.1.12 from FTP
34  *
35 /* Revision 1.2  2000/01/05 08:20:39  markster
36 /* Some OSS fixes and a few lpc changes to make it actually work
37 /*
38  * Revision 1.1  1996/08/19  22:31:56  jaf
39  * Initial revision
40  * */
41 /* Revision 1.3  1996/03/20  15:47:19  jaf */
42 /* Added comments about which indices of array arguments are read or */
43 /* written. */
44
45 /* Revision 1.2  1996/03/14  16:59:04  jaf */
46 /* Comments added explaining that none of the local variables of this */
47 /* subroutine need to be saved from one invocation to the next. */
48
49 /* Revision 1.1  1996/02/07 14:47:27  jaf */
50 /* Initial revision */
51
52
53 /* ***************************************************************** */
54
55 /*   Convert Reflection Coefficients to Predictor Coeficients */
56
57 /* Inputs: */
58 /*  RC     - Reflection coefficients */
59 /*           Indices 1 through ORDER read. */
60 /*  ORDER  - Number of RC's */
61 /*  GPRIME - Excitation modification gain */
62 /* Outputs: */
63 /*  PC     - Predictor coefficients */
64 /*           Indices 1 through ORDER written. */
65 /*           Indices 1 through ORDER-1 are read after being written. */
66 /*  G2PASS - Excitation modification sharpening factor */
67
68 /* This subroutine has no local state. */
69
70 /* Subroutine */ int irc2pc_(real *rc, real *pc, integer *order, real *gprime,
71          real *g2pass)
72 {
73     /* System generated locals */
74     integer i__1, i__2;
75
76     /* Builtin functions */
77     double sqrt(doublereal);
78
79     /* Local variables */
80     real temp[10];
81     integer i__, j;
82
83 /*      Arguments */
84 /* $Log$
85  * Revision 1.11  2000/01/05 08:20:39  markster
86  * Version 0.1.12 from FTP
87  *
88 /* Revision 1.2  2000/01/05 08:20:39  markster
89 /* Some OSS fixes and a few lpc changes to make it actually work
90 /*
91  * Revision 1.1  1996/08/19  22:31:56  jaf
92  * Initial revision
93  * */
94 /* Revision 1.3  1996/03/29  22:03:47  jaf */
95 /* Removed definitions for any constants that were no longer used. */
96
97 /* Revision 1.2  1996/03/26  19:34:33  jaf */
98 /* Added comments indicating which constants are not needed in an */
99 /* application that uses the LPC-10 coder. */
100
101 /* Revision 1.1  1996/02/07  14:43:51  jaf */
102 /* Initial revision */
103
104 /*   LPC Configuration parameters: */
105 /* Frame size, Prediction order, Pitch period */
106 /*       Local variables that need not be saved */
107     /* Parameter adjustments */
108     --pc;
109     --rc;
110
111     /* Function Body */
112     *g2pass = 1.f;
113     i__1 = *order;
114     for (i__ = 1; i__ <= i__1; ++i__) {
115         *g2pass *= 1.f - rc[i__] * rc[i__];
116     }
117     *g2pass = *gprime * sqrt(*g2pass);
118     pc[1] = rc[1];
119     i__1 = *order;
120     for (i__ = 2; i__ <= i__1; ++i__) {
121         i__2 = i__ - 1;
122         for (j = 1; j <= i__2; ++j) {
123             temp[j - 1] = pc[j] - rc[i__] * pc[i__ - j];
124         }
125         i__2 = i__ - 1;
126         for (j = 1; j <= i__2; ++j) {
127             pc[j] = temp[j - 1];
128         }
129         pc[i__] = rc[i__];
130     }
131     return 0;
132 } /* irc2pc_ */
133