ecc98cc173985bbf367e0f5332b28210882a9d03
[speexdsp.git] / libspeex / modes.c
1 /* Copyright (C) 2002 Jean-Marc Valin 
2    File: modes.c
3
4    Describes the different modes of the codec
5
6    This library is free software; you can redistribute it and/or
7    modify it under the terms of the GNU Lesser General Public
8    License as published by the Free Software Foundation; either
9    version 2.1 of the License, or (at your option) any later version.
10    
11    This library is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14    Lesser General Public License for more details.
15    
16    You should have received a copy of the GNU Lesser General Public
17    License along with this library; if not, write to the Free Software
18    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19
20 */
21
22 #include <stdlib.h>
23 #include "modes.h"
24 #include "ltp.h"
25 #include "quant_lsp.h"
26 #include "cb_search.h"
27 #include "mpulse.h"
28
29
30 extern float gain_cdbk_nb[];
31 extern float exc_gains_table[];
32 extern float exc_table[];
33 extern float exc_wb_table[];
34 extern float exc_gains_wb_table[];
35 extern float exc_sb_table[];
36 ltp_params ltp_params_nb = {
37    gain_cdbk_nb,
38    7,
39    7
40 };
41
42 ltp_params ltp_params_wb = {
43    gain_cdbk_nb,
44    7,
45    8
46 };
47
48 split_cb_params split_cb_nb = {
49    8,               /*subvect_size*/
50    5,               /*nb_subvect*/
51    exc_table,       /*shape_cb*/
52    7,               /*shape_bits*/
53 };
54
55 split_cb_params split_cb_sb = {
56    5,               /*subvect_size*/
57    8,              /*nb_subvect*/
58    exc_sb_table,    /*shape_cb*/
59    7,               /*shape_bits*/
60 };
61
62 split_cb_params split_cb_wb = {
63    8,               /*subvect_size*/
64    10,              /*nb_subvect*/
65    exc_wb_table,    /*shape_cb*/
66    7,               /*shape_bits*/
67 };
68
69 mpulse_params mpulse_nb = {
70    15,     /*nb_pulse*/
71    5,      /*nb_tracks*/
72    4,    /*gain_coef*/
73    10
74 };
75
76
77 mpulse_params mpulse_sb = {
78    25,     /*nb_pulse*/
79    5,      /*nb_tracks*/
80    3.8,    /*gain_coef*/
81    10
82 };
83
84
85 mpulse_params mpulse_wb = {
86    24,     /*nb_pulse*/
87    4,      /*nb_tracks*/
88    2.2,    /*gain_coef*/
89    26,
90 };
91
92
93 SpeexMode nb_mode = {
94    160,    /*frameSize*/
95    40,     /*subframeSize*/
96    320,    /*windowSize*/
97    10,     /*lpcSize*/
98    640,    /*bufSize*/
99    17,     /*pitchStart*/
100    144,    /*pitchEnd*/
101    0.9,    /*gamma1*/
102    0.6,    /*gamma2*/
103    .005,   /*lag_factor*/
104    1.0001, /*lpc_floor*/
105    0.0,    /*preemph*/
106    /*LSP quantization*/
107    lsp_quant_nb,
108    lsp_unquant_nb,
109    /*Pitch quantization*/
110    pitch_search_3tap,
111    pitch_unquant_3tap,
112    &ltp_params_nb,
113    /*Innovation quantization*/
114    split_cb_search,
115    split_cb_unquant,
116    &split_cb_nb
117 };
118
119 SpeexMode mp_nb_mode = {
120    160,    /*frameSize*/
121    40,     /*subframeSize*/
122    320,    /*windowSize*/
123    10,     /*lpcSize*/
124    640,    /*bufSize*/
125    17,     /*pitchStart*/
126    144,    /*pitchEnd*/
127    0.9,    /*gamma1*/
128    0.6,    /*gamma2*/
129    .005,   /*lag_factor*/
130    1.0001, /*lpc_floor*/
131    0.0,    /*preemph*/
132    /*LSP quantization*/
133    lsp_quant_nb,
134    lsp_unquant_nb,
135    /*Pitch quantization*/
136    pitch_search_3tap,
137    pitch_unquant_3tap,
138    &ltp_params_nb,
139    /*Innovation quantization*/
140    mpulse_search,
141    mpulse_unquant,
142    &mpulse_nb
143 };
144
145 SpeexMode wb_mode = {
146    320,    /*frameSize*/
147    80,     /*subframeSize*/
148    640,    /*windowSize*/
149    16,     /*lpcSize*/
150    1280,   /*bufSize*/
151    35,     /*pitchStart*/
152    290,    /*pitchEnd*/
153    0.9,    /*gamma1*/
154    -1.0,    /*gamma2*/
155    .002,   /*lag_factor*/
156    1.0001, /*lpc_floor*/
157    0.7,    /*preemph*/
158
159    /*LSP quantization*/
160    lsp_quant_wb,
161    lsp_unquant_wb,
162    /*Pitch quantization*/
163    pitch_search_3tap,
164    pitch_unquant_3tap,
165    &ltp_params_wb,
166    /*Innovation quantization*/
167    split_cb_search,
168    split_cb_unquant,
169    &split_cb_wb
170 };
171
172 SpeexMode mp_wb_mode = {
173    320,    /*frameSize*/
174    80,     /*subframeSize*/
175    640,    /*windowSize*/
176    16,     /*lpcSize*/
177    1280,   /*bufSize*/
178    35,     /*pitchStart*/
179    290,    /*pitchEnd*/
180    0.9,    /*gamma1*/
181    -0.2,    /*gamma2*/
182    .002,   /*lag_factor*/
183    1.0001,/*lpc_floor*/
184    0.55,    /*preemph*/
185
186    /*LSP quantization*/
187    lsp_quant_wb,
188    lsp_unquant_wb,
189    /*Pitch quantization*/
190    pitch_search_3tap,
191    pitch_unquant_3tap,
192    &ltp_params_wb,
193    /*Innovation quantization*/
194    mpulse_search,
195    mpulse_unquant,
196    &mpulse_wb
197 };
198
199
200 SpeexMode mp_sb_mode = {
201    160,    /*frameSize*/
202    40,     /*subframeSize*/
203    320,    /*windowSize*/
204    10,     /*lpcSize*/
205    640,    /*bufSize*/
206    17,     /*pitchStart*/
207    144,    /*pitchEnd*/
208    .9,    /*gamma1*/
209    0.6,    /*gamma2*/
210    .002,   /*lag_factor*/
211    1.00005, /*lpc_floor*/
212    0.0,    /*preemph*/
213    /*LSP quantization*/
214    lsp_quant_nb,
215    lsp_unquant_nb,
216    /*Pitch quantization*/
217    pitch_search_3tap,
218    pitch_unquant_3tap,
219    &ltp_params_nb,
220    /*Innovation quantization*/
221 #if 1
222    split_cb_search2,
223    split_cb_unquant,
224    &split_cb_sb
225 #else
226    mpulse_search,
227    mpulse_unquant,
228    &mpulse_sb
229 #endif
230 };
231