Converted filters with memory to direct form II transposed, this creates
[speexdsp.git] / libspeex / filters.h
1 /* Copyright (C) 2002 Jean-Marc Valin 
2    File: filters.h
3    Various analysis/synthesis filters
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 #ifndef FILTERS_H
21 #define FILTERS_H
22
23 void print_vec(float *vec, int len, char *name);
24
25 void filter_mem2(float *x, float *num, float *den, float *y, int N, int ord, float *mem);
26 void fir_mem2(float *x, float *num, float *y, int N, int ord, float *mem);
27 void iir_mem2(float *x, float *den, float *y, int N, int ord, float *mem);
28
29 /* Apply bandwidth expansion on LPC coef */
30 void bw_lpc(float gamma, float *lpc_in, float *lpc_out, int order);
31
32 void poly(float *re, float *im, float *p, int ord);
33
34 void enh_lpc(float *ak, int order, float *num, float *den, float k1, float k2, float *stack);
35
36 /*LPC polynomial "flatifier"*/
37 void lpc_flat(float g1, float g2, float *lpc_in, float *lpc_out1, float *lpc_out2, int order);
38
39
40 #if 0
41 /* Synthesis filter using the past of y[n] (negative indices) as memory */
42 void syn_filt(float *x, float *a, float *y, int N, int ord);
43 #endif
44
45 /* Synthesis filter using zero memory */
46 void syn_filt_zero(float *x, float *a, float *y, int N, int ord);
47
48 #if 0
49 /* Synthesis filter using memory */
50 void syn_filt_mem(float *x, float *a, float *y, int N, int ord, float *mem);
51
52 /* Analysis (FIR) filter using the past of x[n] (negative indices) as memory */
53 void residue(float *x, float *a, float *y, int N, int ord);
54 #endif
55
56 /* Analysis (FIR) filter using zero memory */
57 void residue_zero(float *x, float *a, float *y, int N, int ord);
58
59 #if 0
60 /* Analysis (FIR) filter using memory */
61 void residue_mem(float *x, float *a, float *y, int N, int ord, float *mem);
62 #endif
63
64
65
66 /* FIR filter */
67 void fir_mem(float *x, float *a, float *y, int N, int M, float *mem);
68
69 void syn_percep_zero(float *x, float *ak, float *awk1, float *awk2, float *y, int N, int ord);
70
71 void comb_filter(
72 float *exc,          /*decoded excitation*/
73 float *new_exc,      /*enhanced excitation*/
74 float *ak,           /*LPC filter coefs*/
75 int p,               /*LPC order*/
76 int nsf,             /*sub-frame size*/
77 int pitch,           /*pitch period*/
78 float *pitch_gain,   /*pitch gain (3-tap)*/
79 float  comb_gain     /*gain of comb filter*/
80 );
81
82 void pole_zero_mem(float *x, float *num, float *den, float *y, int N, int ord, float *mem, float *stack);
83
84 #endif