Version 0.1.6 from FTP
[asterisk/asterisk.git] / codecs / lpc10 / random.c
1 /*
2
3 $Log$
4 Revision 1.5  2000/01/05 08:20:39  markster
5 Version 0.1.6 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:41:32  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:30:49  jaf
19  * Initial revision
20  *
21
22 */
23
24 #ifdef P_R_O_T_O_T_Y_P_E_S
25 extern integer random_(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 /*      RANDOM Version 49 */
38
39 /* $Log$
40  * Revision 1.5  2000/01/05 08:20:39  markster
41  * Version 0.1.6 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:41:32  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:30:49  jaf
55  * Initial revision
56  * */
57 /* Revision 1.3  1996/03/20  16:13:54  jaf */
58 /* Rearranged comments a little bit, and added comments explaining that */
59 /* even though there is local state here, there is no need to create an */
60 /* ENTRY for reinitializing it. */
61
62 /* Revision 1.2  1996/03/14  22:25:29  jaf */
63 /* Just rearranged the comments and local variable declarations a bit. */
64
65 /* Revision 1.1  1996/02/07 14:49:01  jaf */
66 /* Initial revision */
67
68
69 /* ********************************************************************* */
70
71 /*  Pseudo random number generator based on Knuth, Vol 2, p. 27. */
72
73 /* Function Return: */
74 /*  RANDOM - Integer variable, uniformly distributed over -32768 to 32767 */
75
76 /* This subroutine maintains local state from one call to the next. */
77 /* In the context of the LPC10 coder, there is no reason to reinitialize */
78 /* this local state when switching between audio streams, because its */
79 /* results are only used to generate noise for unvoiced frames. */
80
81 integer random_(struct lpc10_decoder_state *st)
82 {
83     /* Initialized data */
84
85     integer *j;
86     integer *k;
87     shortint *y;
88
89     /* System generated locals */
90     integer ret_val;
91
92 /*      Parameters/constants */
93 /*       Local state */
94 /*   The following is a 16 bit 2's complement addition, */
95 /*   with overflow checking disabled */
96
97     j = &(st->j);
98     k = &(st->k);
99     y = &(st->y[0]);
100
101     y[*k - 1] += y[*j - 1];
102     ret_val = y[*k - 1];
103     --(*k);
104     if (*k <= 0) {
105         *k = 5;
106     }
107     --(*j);
108     if (*j <= 0) {
109         *j = 5;
110     }
111     return ret_val;
112 } /* random_ */
113