FreeCalypso > hg > gsm-codec-lib
comparison libgsmefr/c1035pf.c @ 57:e005e7b91f3c
libgsmefr: c1035pf.c compiles
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 25 Nov 2022 17:24:48 +0000 |
parents | 49dd1ac8e75b |
children | 12d9d3649232 |
comparison
equal
deleted
inserted
replaced
56:902bc4b64cc6 | 57:e005e7b91f3c |
---|---|
1 #include "gsm_efr.h" | |
1 #include "typedef.h" | 2 #include "typedef.h" |
3 #include "namespace.h" | |
2 #include "basic_op.h" | 4 #include "basic_op.h" |
5 #include "no_count.h" | |
3 #include "sig_proc.h" | 6 #include "sig_proc.h" |
4 #include "count.h" | 7 #include "codec.h" |
5 | 8 |
6 #define L_CODE 40 | 9 #define L_CODE 40 |
7 #define NB_TRACK 5 | 10 #define NB_TRACK 5 |
8 #define NB_PULSE 10 | 11 #define NB_PULSE 10 |
9 #define STEP 5 | 12 #define STEP 5 |
10 | 13 |
11 /* local functions */ | 14 /* local functions */ |
12 | 15 |
13 void cor_h_x ( | 16 static void cor_h_x ( |
14 Word16 h[], /* (i) : impulse response of weighted synthesis filter */ | 17 Word16 h[], /* (i) : impulse response of weighted synthesis filter */ |
15 Word16 x[], /* (i) : target */ | 18 Word16 x[], /* (i) : target */ |
16 Word16 dn[] /* (o) : correlation between target and h[] */ | 19 Word16 dn[] /* (o) : correlation between target and h[] */ |
17 ); | 20 ); |
18 | 21 |
19 void set_sign ( | 22 static void set_sign ( |
20 Word16 dn[], /* (i/o) : correlation between target and h[] */ | 23 Word16 dn[], /* (i/o) : correlation between target and h[] */ |
21 Word16 cn[], /* (i) : residual after long term prediction */ | 24 Word16 cn[], /* (i) : residual after long term prediction */ |
22 Word16 sign[], /* (o) : sign of d[n] */ | 25 Word16 sign[], /* (o) : sign of d[n] */ |
23 Word16 pos_max[], /* (o) : position of maximum of dn[] */ | 26 Word16 pos_max[], /* (o) : position of maximum of dn[] */ |
24 Word16 ipos[] /* (o) : starting position for each pulse */ | 27 Word16 ipos[] /* (o) : starting position for each pulse */ |
25 ); | 28 ); |
26 | 29 |
27 void cor_h ( | 30 static void cor_h ( |
28 Word16 h[], /* (i) : impulse response of weighted synthesis | 31 Word16 h[], /* (i) : impulse response of weighted synthesis |
29 filter */ | 32 filter */ |
30 Word16 sign[], /* (i) : sign of d[n] */ | 33 Word16 sign[], /* (i) : sign of d[n] */ |
31 Word16 rr[][L_CODE] /* (o) : matrix of autocorrelation */ | 34 Word16 rr[][L_CODE] /* (o) : matrix of autocorrelation */ |
32 ); | 35 ); |
33 void search_10i40 ( | 36 static void search_10i40 ( |
34 Word16 dn[], /* (i) : correlation between target and h[] */ | 37 Word16 dn[], /* (i) : correlation between target and h[] */ |
35 Word16 rr[][L_CODE], /* (i) : matrix of autocorrelation */ | 38 Word16 rr[][L_CODE], /* (i) : matrix of autocorrelation */ |
36 Word16 ipos[], /* (i) : starting position for each pulse */ | 39 Word16 ipos[], /* (i) : starting position for each pulse */ |
37 Word16 pos_max[], /* (i) : position of maximum of dn[] */ | 40 Word16 pos_max[], /* (i) : position of maximum of dn[] */ |
38 Word16 codvec[] /* (o) : algebraic codebook vector */ | 41 Word16 codvec[] /* (o) : algebraic codebook vector */ |
39 ); | 42 ); |
40 void build_code ( | 43 static void build_code ( |
41 Word16 codvec[], /* (i) : algebraic codebook vector */ | 44 Word16 codvec[], /* (i) : algebraic codebook vector */ |
42 Word16 sign[], /* (i) : sign of dn[] */ | 45 Word16 sign[], /* (i) : sign of dn[] */ |
43 Word16 cod[], /* (o) : algebraic (fixed) codebook excitation */ | 46 Word16 cod[], /* (o) : algebraic (fixed) codebook excitation */ |
44 Word16 h[], /* (i) : impulse response of weighted synthesis filter*/ | 47 Word16 h[], /* (i) : impulse response of weighted synthesis filter*/ |
45 Word16 y[], /* (o) : filtered fixed codebook excitation */ | 48 Word16 y[], /* (o) : filtered fixed codebook excitation */ |
46 Word16 indx[] /* (o) : index of 10 pulses (position+sign+ampl)*10 */ | 49 Word16 indx[] /* (o) : index of 10 pulses (position+sign+ampl)*10 */ |
47 ); | 50 ); |
48 | 51 |
49 void q_p ( | 52 static void q_p ( |
50 Word16 *ind, /* Pulse position */ | 53 Word16 *ind, /* Pulse position */ |
51 Word16 n /* Pulse number */ | 54 Word16 n /* Pulse number */ |
52 ); | 55 ); |
53 | 56 |
54 /************************************************************************* | 57 /************************************************************************* |
117 * | 120 * |
118 * d[n] is normalized such that the sum of 5 maxima of d[n] corresponding | 121 * d[n] is normalized such that the sum of 5 maxima of d[n] corresponding |
119 * to each position track does not saturate. | 122 * to each position track does not saturate. |
120 * | 123 * |
121 *************************************************************************/ | 124 *************************************************************************/ |
122 void cor_h_x ( | 125 static void cor_h_x ( |
123 Word16 h[], /* (i) : impulse response of weighted synthesis filter */ | 126 Word16 h[], /* (i) : impulse response of weighted synthesis filter */ |
124 Word16 x[], /* (i) : target */ | 127 Word16 x[], /* (i) : target */ |
125 Word16 dn[] /* (o) : correlation between target and h[] */ | 128 Word16 dn[] /* (o) : correlation between target and h[] */ |
126 ) | 129 ) |
127 { | 130 { |
168 * Also finds the position of maximum of correlation in each track | 171 * Also finds the position of maximum of correlation in each track |
169 * and the starting position for each pulse. | 172 * and the starting position for each pulse. |
170 * | 173 * |
171 *************************************************************************/ | 174 *************************************************************************/ |
172 | 175 |
173 void set_sign ( | 176 static void set_sign ( |
174 Word16 dn[], /* (i/o): correlation between target and h[] */ | 177 Word16 dn[], /* (i/o): correlation between target and h[] */ |
175 Word16 cn[], /* (i) : residual after long term prediction */ | 178 Word16 cn[], /* (i) : residual after long term prediction */ |
176 Word16 sign[], /* (o) : sign of d[n] */ | 179 Word16 sign[], /* (o) : sign of d[n] */ |
177 Word16 pos_max[], /* (o) : position of maximum correlation */ | 180 Word16 pos_max[], /* (o) : position of maximum correlation */ |
178 Word16 ipos[] /* (o) : starting position for each pulse */ | 181 Word16 ipos[] /* (o) : starting position for each pulse */ |
267 ipos[i] = pos; move16 (); | 270 ipos[i] = pos; move16 (); |
268 ipos[i + 5] = pos; move16 (); | 271 ipos[i + 5] = pos; move16 (); |
269 } | 272 } |
270 } | 273 } |
271 | 274 |
272 void q_p ( | 275 static void q_p ( |
273 Word16 *ind, /* Pulse position */ | 276 Word16 *ind, /* Pulse position */ |
274 Word16 n /* Pulse number */ | 277 Word16 n /* Pulse number */ |
275 ) | 278 ) |
276 { | 279 { |
277 static const Word16 gray[8] = {0, 1, 3, 2, 6, 4, 5, 7}; | 280 static const Word16 gray[8] = {0, 1, 3, 2, 6, 4, 5, 7}; |
306 * and the sign information is included by | 309 * and the sign information is included by |
307 * rr[i][j] = rr[i][j]*sign[i]*sign[j] | 310 * rr[i][j] = rr[i][j]*sign[i]*sign[j] |
308 * | 311 * |
309 *************************************************************************/ | 312 *************************************************************************/ |
310 | 313 |
311 void cor_h ( | 314 static void cor_h ( |
312 Word16 h[], /* (i) : impulse response of weighted synthesis | 315 Word16 h[], /* (i) : impulse response of weighted synthesis |
313 filter */ | 316 filter */ |
314 Word16 sign[], /* (i) : sign of d[n] */ | 317 Word16 sign[], /* (i) : sign of d[n] */ |
315 Word16 rr[][L_CODE] /* (o) : matrix of autocorrelation */ | 318 Word16 rr[][L_CODE] /* (o) : matrix of autocorrelation */ |
316 ) | 319 ) |
385 #define _1_16 (Word16)(32768L/16) | 388 #define _1_16 (Word16)(32768L/16) |
386 #define _1_32 (Word16)(32768L/32) | 389 #define _1_32 (Word16)(32768L/32) |
387 #define _1_64 (Word16)(32768L/64) | 390 #define _1_64 (Word16)(32768L/64) |
388 #define _1_128 (Word16)(32768L/128) | 391 #define _1_128 (Word16)(32768L/128) |
389 | 392 |
390 void search_10i40 ( | 393 static void search_10i40 ( |
391 Word16 dn[], /* (i) : correlation between target and h[] */ | 394 Word16 dn[], /* (i) : correlation between target and h[] */ |
392 Word16 rr[][L_CODE], /* (i) : matrix of autocorrelation */ | 395 Word16 rr[][L_CODE], /* (i) : matrix of autocorrelation */ |
393 Word16 ipos[], /* (i) : starting position for each pulse */ | 396 Word16 ipos[], /* (i) : starting position for each pulse */ |
394 Word16 pos_max[], /* (i) : position of maximum of dn[] */ | 397 Word16 pos_max[], /* (i) : position of maximum of dn[] */ |
395 Word16 codvec[] /* (o) : algebraic codebook vector */ | 398 Word16 codvec[] /* (o) : algebraic codebook vector */ |
770 * PURPOSE: Builds the codeword, the filtered codeword and index of the | 773 * PURPOSE: Builds the codeword, the filtered codeword and index of the |
771 * codevector, based on the signs and positions of 10 pulses. | 774 * codevector, based on the signs and positions of 10 pulses. |
772 * | 775 * |
773 *************************************************************************/ | 776 *************************************************************************/ |
774 | 777 |
775 void build_code ( | 778 static void build_code ( |
776 Word16 codvec[], /* (i) : position of pulses */ | 779 Word16 codvec[], /* (i) : position of pulses */ |
777 Word16 sign[], /* (i) : sign of d[n] */ | 780 Word16 sign[], /* (i) : sign of d[n] */ |
778 Word16 cod[], /* (o) : innovative code vector */ | 781 Word16 cod[], /* (o) : innovative code vector */ |
779 Word16 h[], /* (i) : impulse response of weighted synthesis filter*/ | 782 Word16 h[], /* (i) : impulse response of weighted synthesis filter*/ |
780 Word16 y[], /* (o) : filtered innovative code */ | 783 Word16 y[], /* (o) : filtered innovative code */ |