bits.h was renamed to speex_bits to prevent name clashes
[speexdsp.git] / libspeex / ltp.h
1 /* Copyright (C) 2002 Jean-Marc Valin 
2    File: ltp.h
3    Lont-Term Prediction functions
4
5    This library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
9    
10    This library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
14    
15    You should have received a copy of the GNU Lesser General Public
16    License along with this library; if not, write to the Free Software
17    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18 */
19
20 #include "speex_bits.h"
21
22
23 typedef struct ltp_params {
24    float  *gain_cdbk;
25    int     gain_bits;
26    int     pitch_bits;
27 } ltp_params;
28
29
30 /* Finds open-loop pitch */
31 void open_loop_pitch(float *sw, int start, int end, int len, int *pitch);
32
33 void closed_loop_fractional_pitch(
34 float target[],                 /* Target vector */
35 float ak[],                     /* LPCs for this subframe */
36 float awk1[],                   /* Weighted LPCs #1 for this subframe */
37 float awk2[],                   /* Weighted LPCs #2 for this subframe */
38 float exc[],                    /* Overlapping codebook */
39 float *filt,                    /* Over-sampling filter */
40 int   filt_side,                /* Over-sampling factor */
41 int   fact,                     /* Over-sampling factor */
42 int   start,                    /* Smallest pitch value allowed */
43 int   end,                      /* Largest pitch value allowed */
44 float *gain,                    /* 3-tab gains of optimum entry */
45 int   *pitch,                   /* Index of optimum entry */
46 int   p,                        /* Number of LPC coeffs */
47 int   nsf,                      /* Number of samples in subframe */
48 float *stack
49 );
50
51
52 /** Finds the best quantized 3-tap pitch predictor by analysis by synthesis */
53 int pitch_search_3tap(
54 float target[],                 /* Target vector */
55 float *sw,
56 float ak[],                     /* LPCs for this subframe */
57 float awk1[],                   /* Weighted LPCs #1 for this subframe */
58 float awk2[],                   /* Weighted LPCs #2 for this subframe */
59 float exc[],                    /* Overlapping codebook */
60 void *par,
61 int   start,                    /* Smallest pitch value allowed */
62 int   end,                      /* Largest pitch value allowed */
63 int   p,                        /* Number of LPC coeffs */
64 int   nsf,                      /* Number of samples in subframe */
65 FrameBits *bits,
66 float *stack,
67 float *exc2
68 );
69
70 /** Finds the best quantized 3-tap pitch predictor by analysis by synthesis */
71 void pitch_search_3tap_unquant(
72 float target[],                 /* Target vector */
73 float ak[],                     /* LPCs for this subframe */
74 float awk1[],                   /* Weighted LPCs #1 for this subframe */
75 float awk2[],                   /* Weighted LPCs #2 for this subframe */
76 float exc[],                    /* Excitation */
77 void *par,
78 int   start,                    /* Smallest pitch value allowed */
79 int   end,                      /* Largest pitch value allowed */
80 int   p,                        /* Number of LPC coeffs */
81 int   nsf,                      /* Number of samples in subframe */
82 FrameBits *bits,
83 float *stack
84 );
85
86 /*Unquantize adaptive codebook and update pitch contribution*/
87 void pitch_unquant_3tap(
88 float exc[],                    /* Excitation */
89 int   start,                    /* Smallest pitch value allowed */
90 int   end,                      /* Largest pitch value allowed */
91 void *par,
92 int   nsf,                      /* Number of samples in subframe */
93 FrameBits *bits,
94 float *stack
95 );
96
97 float pitch_gain_search_3tap(
98 float target[],                 /* Target vector */
99 float ak[],                     /* LPCs for this subframe */
100 float awk1[],                   /* Weighted LPCs #1 for this subframe */
101 float awk2[],                   /* Weighted LPCs #2 for this subframe */
102 float exc[],                    /* Excitation */
103 void *par,
104 int   pitch,                    /* Pitch value */
105 int   p,                        /* Number of LPC coeffs */
106 int   nsf,                      /* Number of samples in subframe */
107 FrameBits *bits,
108 float *stack,
109 float *exc2,
110 int  *cdbk_index
111 );