Added a post-filter for narrowband (and thus 0-4 kHz in wideband)
[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 SpeexBits *bits,
66 float *stack,
67 float *exc2
68 );
69
70 /** Finds the best quantized 3-tap pitch predictor by analysis by synthesis */
71 int pitch_search_3tap_unquant(
72 float target[],                 /* Target vector */
73 float *sw,
74 float ak[],                     /* LPCs for this subframe */
75 float awk1[],                   /* Weighted LPCs #1 for this subframe */
76 float awk2[],                   /* Weighted LPCs #2 for this subframe */
77 float exc[],                    /* Excitation */
78 void *par,
79 int   start,                    /* Smallest pitch value allowed */
80 int   end,                      /* Largest pitch value allowed */
81 int   p,                        /* Number of LPC coeffs */
82 int   nsf,                      /* Number of samples in subframe */
83 SpeexBits *bits,
84 float *stack,
85 float *exc2
86 );
87
88 /*Unquantize adaptive codebook and update pitch contribution*/
89 void pitch_unquant_3tap(
90 float exc[],                    /* Excitation */
91 int   start,                    /* Smallest pitch value allowed */
92 int   end,                      /* Largest pitch value allowed */
93 void *par,
94 int   nsf,                      /* Number of samples in subframe */
95 int *pitch_val,
96 float *gain_val,
97 SpeexBits *bits,
98 float *stack,
99 int lost
100 );
101
102 float pitch_gain_search_3tap(
103 float target[],                 /* Target vector */
104 float ak[],                     /* LPCs for this subframe */
105 float awk1[],                   /* Weighted LPCs #1 for this subframe */
106 float awk2[],                   /* Weighted LPCs #2 for this subframe */
107 float exc[],                    /* Excitation */
108 void *par,
109 int   pitch,                    /* Pitch value */
110 int   p,                        /* Number of LPC coeffs */
111 int   nsf,                      /* Number of samples in subframe */
112 SpeexBits *bits,
113 float *stack,
114 float *exc2,
115 int  *cdbk_index
116 );