mer feb 12 14:56:57 CET 2003
[asterisk/asterisk.git] / codecs / lpc10 / random.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:41:32  jaf
14  * Removed all static local variables that were SAVE'd in the Fortran
15  * code, and put them in struct lpc10_decoder_state that is passed as an
16  * argument.
17  *
18  * Removed init function, since all initialization is now done in
19  * init_lpc10_decoder_state().
20  *
21  * Revision 1.1  1996/08/19  22:30:49  jaf
22  * Initial revision
23  *
24
25 */
26
27 #ifdef P_R_O_T_O_T_Y_P_E_S
28 extern integer random_(struct lpc10_decoder_state *st);
29 #endif
30
31 /*  -- translated by f2c (version 19951025).
32    You must link the resulting object file with the libraries:
33         -lf2c -lm   (in that order)
34 */
35
36 #include "f2c.h"
37
38 /* ********************************************************************** */
39
40 /*      RANDOM Version 49 */
41
42 /* $Log$
43  * Revision 1.14  2003/02/12 13:59:15  matteo
44  * mer feb 12 14:56:57 CET 2003
45  *
46 /* Revision 1.1.1.1  2003/02/12 13:59:15  matteo
47 /* mer feb 12 14:56:57 CET 2003
48 /*
49 /* Revision 1.2  2000/01/05 08:20:39  markster
50 /* Some OSS fixes and a few lpc changes to make it actually work
51 /*
52  * Revision 1.2  1996/08/20  20:41:32  jaf
53  * Removed all static local variables that were SAVE'd in the Fortran
54  * code, and put them in struct lpc10_decoder_state that is passed as an
55  * argument.
56  *
57  * Removed init function, since all initialization is now done in
58  * init_lpc10_decoder_state().
59  *
60  * Revision 1.1  1996/08/19  22:30:49  jaf
61  * Initial revision
62  * */
63 /* Revision 1.3  1996/03/20  16:13:54  jaf */
64 /* Rearranged comments a little bit, and added comments explaining that */
65 /* even though there is local state here, there is no need to create an */
66 /* ENTRY for reinitializing it. */
67
68 /* Revision 1.2  1996/03/14  22:25:29  jaf */
69 /* Just rearranged the comments and local variable declarations a bit. */
70
71 /* Revision 1.1  1996/02/07 14:49:01  jaf */
72 /* Initial revision */
73
74
75 /* ********************************************************************* */
76
77 /*  Pseudo random number generator based on Knuth, Vol 2, p. 27. */
78
79 /* Function Return: */
80 /*  RANDOM - Integer variable, uniformly distributed over -32768 to 32767 */
81
82 /* This subroutine maintains local state from one call to the next. */
83 /* In the context of the LPC10 coder, there is no reason to reinitialize */
84 /* this local state when switching between audio streams, because its */
85 /* results are only used to generate noise for unvoiced frames. */
86
87 integer random_(struct lpc10_decoder_state *st)
88 {
89     /* Initialized data */
90
91     integer *j;
92     integer *k;
93     shortint *y;
94
95     /* System generated locals */
96     integer ret_val;
97
98 /*      Parameters/constants */
99 /*       Local state */
100 /*   The following is a 16 bit 2's complement addition, */
101 /*   with overflow checking disabled */
102
103     j = &(st->j);
104     k = &(st->k);
105     y = &(st->y[0]);
106
107     y[*k - 1] += y[*j - 1];
108     ret_val = y[*k - 1];
109     --(*k);
110     if (*k <= 0) {
111         *k = 5;
112     }
113     --(*j);
114     if (*j <= 0) {
115         *j = 5;
116     }
117     return ret_val;
118 } /* random_ */
119