Many, many updates. Better split-VQ search, better handling of pitch for
[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 "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, int *vuv);
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 ak[],                     /* LPCs for this subframe */
56 float awk1[],                   /* Weighted LPCs #1 for this subframe */
57 float awk2[],                   /* Weighted LPCs #2 for this subframe */
58 float exc[],                    /* Overlapping codebook */
59 void *par,
60 int   start,                    /* Smallest pitch value allowed */
61 int   end,                      /* Largest pitch value allowed */
62 int   p,                        /* Number of LPC coeffs */
63 int   nsf,                      /* Number of samples in subframe */
64 FrameBits *bits,
65 float *stack,
66 float *exc2
67 );
68
69 /** Finds the best quantized 3-tap pitch predictor by analysis by synthesis */
70 void pitch_search_3tap_unquant(
71 float target[],                 /* Target vector */
72 float ak[],                     /* LPCs for this subframe */
73 float awk1[],                   /* Weighted LPCs #1 for this subframe */
74 float awk2[],                   /* Weighted LPCs #2 for this subframe */
75 float exc[],                    /* Excitation */
76 void *par,
77 int   start,                    /* Smallest pitch value allowed */
78 int   end,                      /* Largest pitch value allowed */
79 int   p,                        /* Number of LPC coeffs */
80 int   nsf,                      /* Number of samples in subframe */
81 FrameBits *bits,
82 float *stack
83 );
84
85 /*Unquantize adaptive codebook and update pitch contribution*/
86 void pitch_unquant_3tap(
87 float exc[],                    /* Excitation */
88 int   start,                    /* Smallest pitch value allowed */
89 int   end,                      /* Largest pitch value allowed */
90 void *par,
91 int   nsf,                      /* Number of samples in subframe */
92 FrameBits *bits,
93 float *stack
94 );