Added low bit-rate (8 kbps) narrowband mode. It is still sub-optimal but
[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 void open_loop_nbest_pitch(float *sw, int start, int end, int len, int *pitch, int N, float *stack);
31
32
33 /** Finds the best quantized 3-tap pitch predictor by analysis by synthesis */
34 int pitch_search_3tap(
35 float target[],                 /* Target vector */
36 float *sw,
37 float ak[],                     /* LPCs for this subframe */
38 float awk1[],                   /* Weighted LPCs #1 for this subframe */
39 float awk2[],                   /* Weighted LPCs #2 for this subframe */
40 float exc[],                    /* Overlapping codebook */
41 void *par,
42 int   start,                    /* Smallest pitch value allowed */
43 int   end,                      /* Largest pitch value allowed */
44 int   p,                        /* Number of LPC coeffs */
45 int   nsf,                      /* Number of samples in subframe */
46 SpeexBits *bits,
47 float *stack,
48 float *exc2
49 );
50
51 /** Finds the best quantized 3-tap pitch predictor by analysis by synthesis */
52 int pitch_search_3tap_unquant(
53 float target[],                 /* Target vector */
54 float *sw,
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[],                    /* Excitation */
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 SpeexBits *bits,
65 float *stack,
66 float *exc2
67 );
68
69 /*Unquantize adaptive codebook and update pitch contribution*/
70 void pitch_unquant_3tap(
71 float exc[],                    /* Excitation */
72 int   start,                    /* Smallest pitch value allowed */
73 int   end,                      /* Largest pitch value allowed */
74 void *par,
75 int   nsf,                      /* Number of samples in subframe */
76 int *pitch_val,
77 float *gain_val,
78 SpeexBits *bits,
79 float *stack,
80 int lost
81 );
82
83 float pitch_gain_search_3tap(
84 float target[],                 /* Target vector */
85 float ak[],                     /* LPCs for this subframe */
86 float awk1[],                   /* Weighted LPCs #1 for this subframe */
87 float awk2[],                   /* Weighted LPCs #2 for this subframe */
88 float exc[],                    /* Excitation */
89 void *par,
90 int   pitch,                    /* Pitch value */
91 int   p,                        /* Number of LPC coeffs */
92 int   nsf,                      /* Number of samples in subframe */
93 SpeexBits *bits,
94 float *stack,
95 float *exc2,
96 int  *cdbk_index
97 );