acelp.h revision 41050cdb033641ddf26831d9272c0930f7b40a2d
1/*
2 ** Copyright 2003-2010, VisualOn, Inc.
3 **
4 ** Licensed under the Apache License, Version 2.0 (the "License");
5 ** you may not use this file except in compliance with the License.
6 ** You may obtain a copy of the License at
7 **
8 **     http://www.apache.org/licenses/LICENSE-2.0
9 **
10 ** Unless required by applicable law or agreed to in writing, software
11 ** distributed under the License is distributed on an "AS IS" BASIS,
12 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 ** See the License for the specific language governing permissions and
14 ** limitations under the License.
15 */
16
17
18/*--------------------------------------------------------------------------*
19 *                         ACELP.H                                          *
20 *--------------------------------------------------------------------------*
21 *       Function			 			             *
22 *--------------------------------------------------------------------------*/
23#ifndef __ACELP_H__
24#define __ACELP_H__
25
26#include "typedef.h"
27#include "cod_main.h"
28
29/*-----------------------------------------------------------------*
30 *                        LPC prototypes                           *
31 *-----------------------------------------------------------------*/
32
33Word16 median5(Word16 x[]);
34
35void Autocorr(
36		Word16 x[],                           /* (i)    : Input signal                      */
37		Word16 m,                             /* (i)    : LPC order                         */
38		Word16 r_h[],                         /* (o)    : Autocorrelations  (msb)           */
39		Word16 r_l[]                          /* (o)    : Autocorrelations  (lsb)           */
40	     );
41
42void Lag_window(
43		Word16 r_h[],                         /* (i/o)   : Autocorrelations  (msb)          */
44		Word16 r_l[]                          /* (i/o)   : Autocorrelations  (lsb)          */
45	       );
46
47void Init_Levinson(
48		Word16 * mem                          /* output  :static memory (18 words) */
49		);
50
51void Levinson(
52		Word16 Rh[],                          /* (i)     : Rh[M+1] Vector of autocorrelations (msb) */
53		Word16 Rl[],                          /* (i)     : Rl[M+1] Vector of autocorrelations (lsb) */
54		Word16 A[],                           /* (o) Q12 : A[M]    LPC coefficients  (m = 16)       */
55		Word16 rc[],                          /* (o) Q15 : rc[M]   Reflection coefficients.         */
56		Word16 * mem                          /* (i/o)   :static memory (18 words)                  */
57	     );
58
59void Az_isp(
60		Word16 a[],                           /* (i) Q12 : predictor coefficients                 */
61		Word16 isp[],                         /* (o) Q15 : Immittance spectral pairs              */
62		Word16 old_isp[]                      /* (i)     : old isp[] (in case not found M roots)  */
63	   );
64
65void Isp_Az(
66		Word16 isp[],                         /* (i) Q15 : Immittance spectral pairs            */
67		Word16 a[],                           /* (o) Q12 : predictor coefficients (order = M)   */
68		Word16 m,
69		Word16 adaptive_scaling               /* (i) 0   : adaptive scaling disabled */
70		/*     1   : adaptive scaling enabled  */
71	   );
72
73void Isp_isf(
74		Word16 isp[],                         /* (i) Q15 : isp[m] (range: -1<=val<1)                */
75		Word16 isf[],                         /* (o) Q15 : isf[m] normalized (range: 0.0<=val<=0.5) */
76		Word16 m                              /* (i)     : LPC order                                */
77	    );
78
79void Isf_isp(
80		Word16 isf[],                         /* (i) Q15 : isf[m] normalized (range: 0.0<=val<=0.5) */
81		Word16 isp[],                         /* (o) Q15 : isp[m] (range: -1<=val<1)                */
82		Word16 m                              /* (i)     : LPC order                                */
83	    );
84
85void Int_isp(
86		Word16 isp_old[],                     /* input : isps from past frame              */
87		Word16 isp_new[],                     /* input : isps from present frame           */
88		Word16 frac[],                        /* input : fraction for 3 first subfr (Q15)  */
89		Word16 Az[]                           /* output: LP coefficients in 4 subframes    */
90	    );
91
92void Weight_a(
93		Word16 a[],                           /* (i) Q12 : a[m+1]  LPC coefficients             */
94		Word16 ap[],                          /* (o) Q12 : Spectral expanded LPC coefficients   */
95		Word16 gamma,                         /* (i) Q15 : Spectral expansion factor.           */
96		Word16 m                              /* (i)     : LPC order.                           */
97	     );
98
99
100/*-----------------------------------------------------------------*
101 *                        isf quantizers                           *
102 *-----------------------------------------------------------------*/
103
104void Qpisf_2s_46b(
105		Word16 * isf1,                        /* (i) Q15 : ISF in the frequency domain (0..0.5) */
106		Word16 * isf_q,                       /* (o) Q15 : quantized ISF               (0..0.5) */
107		Word16 * past_isfq,                   /* (io)Q15 : past ISF quantizer                   */
108		Word16 * indice,                      /* (o)     : quantization indices                 */
109		Word16 nb_surv                        /* (i)     : number of survivor (1, 2, 3 or 4)    */
110		);
111
112void Qpisf_2s_36b(
113		Word16 * isf1,                        /* (i) Q15 : ISF in the frequency domain (0..0.5) */
114		Word16 * isf_q,                       /* (o) Q15 : quantized ISF               (0..0.5) */
115		Word16 * past_isfq,                   /* (io)Q15 : past ISF quantizer                   */
116		Word16 * indice,                      /* (o)     : quantization indices                 */
117		Word16 nb_surv                        /* (i)     : number of survivor (1, 2, 3 or 4)    */
118		);
119
120void Dpisf_2s_46b(
121		Word16 * indice,                      /* input:  quantization indices                       */
122		Word16 * isf_q,                       /* output: quantized ISF in frequency domain (0..0.5) */
123		Word16 * past_isfq,                   /* i/0   : past ISF quantizer                    */
124		Word16 * isfold,                      /* input : past quantized ISF                    */
125		Word16 * isf_buf,                     /* input : isf buffer                                                        */
126		Word16 bfi,                           /* input : Bad frame indicator                   */
127		Word16 enc_dec
128		);
129
130void Dpisf_2s_36b(
131		Word16 * indice,                      /* input:  quantization indices                       */
132		Word16 * isf_q,                       /* output: quantized ISF in frequency domain (0..0.5) */
133		Word16 * past_isfq,                   /* i/0   : past ISF quantizer                    */
134		Word16 * isfold,                      /* input : past quantized ISF                    */
135		Word16 * isf_buf,                     /* input : isf buffer                                                        */
136		Word16 bfi,                           /* input : Bad frame indicator                   */
137		Word16 enc_dec
138		);
139
140void Qisf_ns(
141		Word16 * isf1,                        /* input : ISF in the frequency domain (0..0.5) */
142		Word16 * isf_q,                       /* output: quantized ISF                        */
143		Word16 * indice                       /* output: quantization indices                 */
144	    );
145
146void Disf_ns(
147		Word16 * indice,                      /* input:  quantization indices                  */
148		Word16 * isf_q                        /* input : ISF in the frequency domain (0..0.5)  */
149	    );
150
151Word16 Sub_VQ(                             /* output: return quantization index     */
152		Word16 * x,                           /* input : ISF residual vector           */
153		Word16 * dico,                        /* input : quantization codebook         */
154		Word16 dim,                           /* input : dimention of vector           */
155		Word16 dico_size,                     /* input : size of quantization codebook */
156		Word32 * distance                     /* output: error of quantization         */
157	     );
158
159void Reorder_isf(
160		Word16 * isf,                         /* (i/o) Q15: ISF in the frequency domain (0..0.5) */
161		Word16 min_dist,                      /* (i) Q15  : minimum distance to keep             */
162		Word16 n                              /* (i)      : number of ISF                        */
163		);
164
165/*-----------------------------------------------------------------*
166 *                       filter prototypes                         *
167 *-----------------------------------------------------------------*/
168
169void Init_Decim_12k8(
170		Word16 mem[]                          /* output: memory (2*NB_COEF_DOWN) set to zeros */
171		);
172void Decim_12k8(
173		Word16 sig16k[],                      /* input:  signal to downsampling  */
174		Word16 lg,                            /* input:  length of input         */
175		Word16 sig12k8[],                     /* output: decimated signal        */
176		Word16 mem[]                          /* in/out: memory (2*NB_COEF_DOWN) */
177	       );
178
179void Init_HP50_12k8(Word16 mem[]);
180void HP50_12k8(
181		Word16 signal[],                      /* input/output signal */
182		Word16 lg,                            /* lenght of signal    */
183		Word16 mem[]                          /* filter memory [6]   */
184	      );
185void Init_HP400_12k8(Word16 mem[]);
186void HP400_12k8(
187		Word16 signal[],                      /* input/output signal */
188		Word16 lg,                            /* lenght of signal    */
189		Word16 mem[]                          /* filter memory [6]   */
190	       );
191
192void Init_Filt_6k_7k(Word16 mem[]);
193void Filt_6k_7k(
194		Word16 signal[],                      /* input:  signal                  */
195		Word16 lg,                            /* input:  length of input         */
196		Word16 mem[]                          /* in/out: memory (size=30)        */
197	       );
198void Filt_6k_7k_asm(
199		Word16 signal[],                      /* input:  signal                  */
200		Word16 lg,                            /* input:  length of input         */
201		Word16 mem[]                          /* in/out: memory (size=30)        */
202	       );
203
204void LP_Decim2(
205		Word16 x[],                           /* in/out: signal to process         */
206		Word16 l,                             /* input : size of filtering         */
207		Word16 mem[]                          /* in/out: memory (size=3)           */
208	      );
209
210void Preemph(
211		Word16 x[],                           /* (i/o)   : input signal overwritten by the output */
212		Word16 mu,                            /* (i) Q15 : preemphasis coefficient                */
213		Word16 lg,                            /* (i)     : lenght of filtering                    */
214		Word16 * mem                          /* (i/o)   : memory (x[-1])                         */
215	    );
216void Preemph2(
217		Word16 x[],                           /* (i/o)   : input signal overwritten by the output */
218		Word16 mu,                            /* (i) Q15 : preemphasis coefficient                */
219		Word16 lg,                            /* (i)     : lenght of filtering                    */
220		Word16 * mem                          /* (i/o)   : memory (x[-1])                         */
221	     );
222void Deemph(
223		Word16 x[],                           /* (i/o)   : input signal overwritten by the output */
224		Word16 mu,                            /* (i) Q15 : deemphasis factor                      */
225		Word16 L,                             /* (i)     : vector size                            */
226		Word16 * mem                          /* (i/o)   : memory (y[-1])                         */
227	   );
228void Deemph2(
229		Word16 x[],                           /* (i/o)   : input signal overwritten by the output */
230		Word16 mu,                            /* (i) Q15 : deemphasis factor                      */
231		Word16 L,                             /* (i)     : vector size                            */
232		Word16 * mem                          /* (i/o)   : memory (y[-1])                         */
233	    );
234void Deemph_32(
235		Word16 x_hi[],                        /* (i)     : input signal (bit31..16) */
236		Word16 x_lo[],                        /* (i)     : input signal (bit15..4)  */
237		Word16 y[],                           /* (o)     : output signal (x16)      */
238		Word16 mu,                            /* (i) Q15 : deemphasis factor        */
239		Word16 L,                             /* (i)     : vector size              */
240		Word16 * mem                          /* (i/o)   : memory (y[-1])           */
241	      );
242
243void Deemph_32_asm(
244		Word16 x_hi[],                        /* (i)     : input signal (bit31..16) */
245		Word16 x_lo[],                        /* (i)     : input signal (bit15..4)  */
246		Word16 y[],                           /* (o)     : output signal (x16)      */
247		Word16 * mem                          /* (i/o)   : memory (y[-1])           */
248	      );
249
250void Convolve(
251		Word16 x[],                           /* (i)     : input vector                              */
252		Word16 h[],                           /* (i) Q15    : impulse response                       */
253		Word16 y[],                           /* (o) 12 bits: output vector                          */
254		Word16 L                              /* (i)     : vector size                               */
255	     );
256
257void Convolve_asm(
258		Word16 x[],                           /* (i)     : input vector                              */
259		Word16 h[],                           /* (i) Q15    : impulse response                       */
260		Word16 y[],                           /* (o) 12 bits: output vector                          */
261		Word16 L                              /* (i)     : vector size                               */
262	     );
263
264void Residu(
265		Word16 a[],                           /* (i) Q12 : prediction coefficients                     */
266		Word16 x[],                           /* (i)     : speech (values x[-m..-1] are needed         */
267		Word16 y[],                           /* (o)     : residual signal                             */
268		Word16 lg                             /* (i)     : size of filtering                           */
269		);
270
271void Residu_opt(
272		Word16 a[],                           /* (i) Q12 : prediction coefficients                     */
273		Word16 x[],                           /* (i)     : speech (values x[-m..-1] are needed         */
274		Word16 y[],                           /* (o)     : residual signal                             */
275		Word16 lg                             /* (i)     : size of filtering                           */
276		);
277
278void Syn_filt(
279	Word16 a[],                           /* (i) Q12 : a[m+1] prediction coefficients           */
280	Word16 x[],                           /* (i)     : input signal                             */
281	Word16 y[],                           /* (o)     : output signal                            */
282	Word16 lg,                            /* (i)     : size of filtering                        */
283	Word16 mem[],                         /* (i/o)   : memory associated with this filtering.   */
284	Word16 update                         /* (i)     : 0=no update, 1=update of memory.         */
285	);
286
287void Syn_filt_asm(
288	Word16 a[],                           /* (i) Q12 : a[m+1] prediction coefficients           */
289	Word16 x[],                           /* (i)     : input signal                             */
290	Word16 y[],                           /* (o)     : output signal                            */
291	Word16 mem[]                          /* (i/o)   : memory associated with this filtering.   */
292	);
293
294void Syn_filt_32(
295	Word16 a[],                           /* (i) Q12 : a[m+1] prediction coefficients */
296	Word16 m,                             /* (i)     : order of LP filter             */
297	Word16 exc[],                         /* (i) Qnew: excitation (exc[i] >> Qnew)    */
298	Word16 Qnew,                          /* (i)     : exc scaling = 0(min) to 8(max) */
299	Word16 sig_hi[],                      /* (o) /16 : synthesis high                 */
300	Word16 sig_lo[],                      /* (o) /16 : synthesis low                  */
301	Word16 lg                             /* (i)     : size of filtering              */
302	);
303
304void Syn_filt_32_asm(
305	Word16 a[],                           /* (i) Q12 : a[m+1] prediction coefficients */
306	Word16 m,                             /* (i)     : order of LP filter             */
307	Word16 exc[],                         /* (i) Qnew: excitation (exc[i] >> Qnew)    */
308	Word16 Qnew,                          /* (i)     : exc scaling = 0(min) to 8(max) */
309	Word16 sig_hi[],                      /* (o) /16 : synthesis high                 */
310	Word16 sig_lo[],                      /* (o) /16 : synthesis low                  */
311	Word16 lg                             /* (i)     : size of filtering              */
312	);
313/*-----------------------------------------------------------------*
314 *                       pitch prototypes                          *
315 *-----------------------------------------------------------------*/
316
317Word16 Pitch_ol(                           /* output: open loop pitch lag                        */
318     Word16 signal[],                      /* input : signal used to compute the open loop pitch */
319/* signal[-pit_max] to signal[-1] should be known */
320     Word16 pit_min,                       /* input : minimum pitch lag                          */
321     Word16 pit_max,                       /* input : maximum pitch lag                          */
322     Word16 L_frame                        /* input : length of frame to compute pitch           */
323);
324
325Word16 Pitch_med_ol(                       /* output: open loop pitch lag                        */
326     Word16 wsp[],                         /* input : signal used to compute the open loop pitch */
327                                           /* wsp[-pit_max] to wsp[-1] should be known   */
328     Coder_State *st,                      /* i/o : global codec structure */
329     Word16 L_frame                        /* input : length of frame to compute pitch           */
330);
331
332Word16 Med_olag(                           /* output : median of  5 previous open-loop lags       */
333     Word16 prev_ol_lag,                   /* input  : previous open-loop lag                     */
334     Word16 old_ol_lag[5]
335);
336
337void Init_Hp_wsp(Word16 mem[]);
338void scale_mem_Hp_wsp(Word16 mem[], Word16 exp);
339void Hp_wsp(
340     Word16 wsp[],                         /* i   : wsp[]  signal       */
341     Word16 hp_wsp[],                      /* o   : hypass wsp[]        */
342     Word16 lg,                            /* i   : lenght of signal    */
343     Word16 mem[]                          /* i/o : filter memory [9]   */
344);
345
346Word16 Pitch_fr4(                          /* (o)     : pitch period.                         */
347     Word16 exc[],                         /* (i)     : excitation buffer                     */
348     Word16 xn[],                          /* (i)     : target vector                         */
349     Word16 h[],                           /* (i) Q15 : impulse response of synth/wgt filters */
350     Word16 t0_min,                        /* (i)     : minimum value in the searched range.  */
351     Word16 t0_max,                        /* (i)     : maximum value in the searched range.  */
352     Word16 * pit_frac,                    /* (o)     : chosen fraction (0, 1, 2 or 3).       */
353     Word16 i_subfr,                       /* (i)     : indicator for first subframe.         */
354     Word16 t0_fr2,                        /* (i)     : minimum value for resolution 1/2      */
355     Word16 t0_fr1,                        /* (i)     : minimum value for resolution 1        */
356     Word16 L_subfr                        /* (i)     : Length of subframe                    */
357);
358void Pred_lt4(
359     Word16 exc[],                         /* in/out: excitation buffer */
360     Word16 T0,                            /* input : integer pitch lag */
361     Word16 frac,                          /* input : fraction of lag   */
362     Word16 L_subfr                        /* input : subframe size     */
363);
364
365void pred_lt4_asm(
366     Word16 exc[],                         /* in/out: excitation buffer */
367     Word16 T0,                            /* input : integer pitch lag */
368     Word16 frac,                          /* input : fraction of lag   */
369     Word16 L_subfr                        /* input : subframe size     */
370);
371
372/*-----------------------------------------------------------------*
373 *                       gain prototypes                           *
374 *-----------------------------------------------------------------*/
375
376Word16 G_pitch(                            /* (o) Q14 : Gain of pitch lag saturated to 1.2   */
377     Word16 xn[],                          /* (i)     : Pitch target.                        */
378     Word16 y1[],                          /* (i)     : filtered adaptive codebook.          */
379     Word16 g_coeff[],                     /* : Correlations need for gain quantization. */
380     Word16 L_subfr                        /* : Length of subframe.                  */
381);
382void Init_Q_gain2(
383     Word16 * mem                          /* output  :static memory (2 words)      */
384);
385Word16 Q_gain2(                            /* Return index of quantization.        */
386     Word16 xn[],                          /* (i) Q_xn:Target vector.               */
387     Word16 y1[],                          /* (i) Q_xn:Adaptive codebook.           */
388     Word16 Q_xn,                          /* (i)     :xn and y1 format             */
389     Word16 y2[],                          /* (i) Q9  :Filtered innovative vector.  */
390     Word16 code[],                        /* (i) Q9  :Innovative vector.           */
391     Word16 g_coeff[],                     /* (i)     :Correlations <xn y1> <y1 y1> */
392/* Compute in G_pitch().        */
393     Word16 L_subfr,                       /* (i)     :Subframe lenght.             */
394     Word16 nbits,                         /* (i)     : number of bits (6 or 7)     */
395     Word16 * gain_pit,                    /* (i/o)Q14:Pitch gain.                  */
396     Word32 * gain_cod,                    /* (o) Q16 :Code gain.                   */
397     Word16 gp_clip,                       /* (i)     : Gp Clipping flag            */
398     Word16 * mem                          /* (i/o)   :static memory (2 words)      */
399);
400
401void Init_D_gain2(
402     Word16 * mem                          /* output  :static memory (4 words)      */
403);
404void D_gain2(
405     Word16 index,                         /* (i)     :index of quantization.       */
406     Word16 nbits,                         /* (i)     : number of bits (6 or 7)     */
407     Word16 code[],                        /* (i) Q9  :Innovative vector.           */
408     Word16 L_subfr,                       /* (i)     :Subframe lenght.             */
409     Word16 * gain_pit,                    /* (o) Q14 :Pitch gain.                  */
410     Word32 * gain_cod,                    /* (o) Q16 :Code gain.                   */
411     Word16 bfi,                           /* (i)     :bad frame indicator          */
412     Word16 prev_bfi,                      /* (i) : Previous BF indicator      */
413     Word16 state,                         /* (i) : State of BFH               */
414     Word16 unusable_frame,                /* (i) : UF indicator            */
415     Word16 vad_hist,                      /* (i)         :number of non-speech frames  */
416     Word16 * mem                          /* (i/o)   :static memory (4 words)      */
417);
418
419/*-----------------------------------------------------------------*
420 *                       acelp prototypes                          *
421 *-----------------------------------------------------------------*/
422
423void cor_h_x(
424     Word16 h[],                           /* (i) Q12 : impulse response of weighted synthesis filter */
425     Word16 x[],                           /* (i) Q0  : target vector                                 */
426     Word16 dn[]                           /* (o) <12bit : correlation between target and h[]         */
427);
428void ACELP_2t64_fx(
429     Word16 dn[],                          /* (i) <12b : correlation between target x[] and H[]      */
430     Word16 cn[],                          /* (i) <12b : residual after long term prediction         */
431     Word16 H[],                           /* (i) Q12: impulse response of weighted synthesis filter */
432     Word16 code[],                        /* (o) Q9 : algebraic (fixed) codebook excitation         */
433     Word16 y[],                           /* (o) Q9 : filtered fixed codebook excitation            */
434     Word16 * index                        /* (o) : index (12): 5+1+5+1 = 11 bits.                     */
435);
436
437void ACELP_4t64_fx(
438     Word16 dn[],                          /* (i) <12b : correlation between target x[] and H[]      */
439     Word16 cn[],                          /* (i) <12b : residual after long term prediction         */
440     Word16 H[],                           /* (i) Q12: impulse response of weighted synthesis filter */
441     Word16 code[],                        /* (o) Q9 : algebraic (fixed) codebook excitation         */
442     Word16 y[],                           /* (o) Q9 : filtered fixed codebook excitation            */
443     Word16 nbbits,                        /* (i) : 20, 36, 44, 52, 64, 72 or 88 bits                */
444     Word16 ser_size,                      /* (i) : bit rate                                         */
445     Word16 _index[]                       /* (o) : index (20): 5+5+5+5 = 20 bits.                   */
446					   /* (o) : index (36): 9+9+9+9 = 36 bits.                   */
447					   /* (o) : index (44): 13+9+13+9 = 44 bits.                 */
448					   /* (o) : index (52): 13+13+13+13 = 52 bits.               */
449					   /* (o) : index (64): 2+2+2+2+14+14+14+14 = 64 bits.       */
450					   /* (o) : index (72): 10+2+10+2+10+14+10+14 = 72 bits.     */
451					   /* (o) : index (88): 11+11+11+11+11+11+11+11 = 88 bits.   */
452);
453
454void Pit_shrp(
455     Word16 * x,                           /* in/out: impulse response (or algebraic code) */
456     Word16 pit_lag,                       /* input : pitch lag                            */
457     Word16 sharp,                         /* input : pitch sharpening factor (Q15)        */
458     Word16 L_subfr                        /* input : subframe size                        */
459);
460
461
462/*-----------------------------------------------------------------*
463 *                        others prototypes                        *
464 *-----------------------------------------------------------------*/
465
466void Copy(
467     Word16 x[],                           /* (i)   : input vector   */
468     Word16 y[],                           /* (o)   : output vector  */
469     Word16 L                              /* (i)   : vector length  */
470);
471void Set_zero(
472     Word16 x[],                           /* (o)    : vector to clear     */
473     Word16 L                              /* (i)    : length of vector    */
474);
475void Updt_tar(
476     Word16 * x,                           /* (i) Q0  : old target (for pitch search)     */
477     Word16 * x2,                          /* (o) Q0  : new target (for codebook search)  */
478     Word16 * y,                           /* (i) Q0  : filtered adaptive codebook vector */
479     Word16 gain,                          /* (i) Q14 : adaptive codebook gain            */
480     Word16 L                              /* (i)     : subframe size                     */
481);
482Word16 voice_factor(                       /* (o) Q15 : factor (-1=unvoiced to 1=voiced) */
483     Word16 exc[],                         /* (i) Q_exc: pitch excitation                */
484     Word16 Q_exc,                         /* (i)     : exc format                       */
485     Word16 gain_pit,                      /* (i) Q14 : gain of pitch                    */
486     Word16 code[],                        /* (i) Q9  : Fixed codebook excitation        */
487     Word16 gain_code,                     /* (i) Q0  : gain of code                     */
488     Word16 L_subfr                        /* (i)     : subframe length                  */
489);
490void Scale_sig(
491     Word16 x[],                           /* (i/o) : signal to scale               */
492     Word16 lg,                            /* (i)   : size of x[]                   */
493     Word16 exp                            /* (i)   : exponent: x = round(x << exp) */
494);
495
496void Scale_sig_opt(
497     Word16 x[],                           /* (i/o) : signal to scale               */
498     Word16 lg,                            /* (i)   : size of x[]                   */
499     Word16 exp                            /* (i)   : exponent: x = round(x << exp) */
500);
501
502Word16 Random(Word16 * seed);
503
504void Init_gp_clip(
505     Word16 mem[]                          /* (o) : memory of gain of pitch clipping algorithm */
506);
507Word16 Gp_clip(
508     Word16 mem[]                          /* (i/o) : memory of gain of pitch clipping algorithm */
509);
510void Gp_clip_test_isf(
511     Word16 isf[],                         /* (i)   : isf values (in frequency domain)           */
512     Word16 mem[]                          /* (i/o) : memory of gain of pitch clipping algorithm */
513);
514void Gp_clip_test_gain_pit(
515     Word16 gain_pit,                      /* (i)   : gain of quantized pitch                    */
516     Word16 mem[]                          /* (i/o) : memory of gain of pitch clipping algorithm */
517);
518
519
520#endif   //__ACELP_H__
521
522