FreeCalypso > hg > gsm-codec-lib
annotate libgsmefr/cod_12k2.c @ 335:03198f6b0427
libtwamr: integrate d8_31pf.c
| author | Mychaela Falconia <falcon@freecalypso.org> | 
|---|---|
| date | Thu, 18 Apr 2024 22:35:05 +0000 | 
| parents | d9ad0f5121e8 | 
| children | 
| rev | line source | 
|---|---|
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1 /*************************************************************************** | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2 * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3 * FILE NAME: cod_12k2.c | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 4 * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 5 * FUNCTIONS DEFINED IN THIS FILE: | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 6 * Coder_12k2 and Init_Coder_12k2 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 7 * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 8 * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 9 * Init_Coder_12k2(void): | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 10 * Initialization of variables for the coder section. | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 11 * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 12 * Coder_12k2(Word16 ana[], Word16 synth[]): | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 13 * Speech encoder routine operating on a frame basis. | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 14 * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 15 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 16 ***************************************************************************/ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 17 | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 18 #include "gsm_efr.h" | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 19 #include "typedef.h" | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 20 #include "namespace.h" | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 21 #include "basic_op.h" | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 22 #include "sig_proc.h" | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 23 #include "memops.h" | 
| 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 24 #include "no_count.h" | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 25 #include "codec.h" | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 26 #include "cnst.h" | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 27 #include "enc_state.h" | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 28 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 29 #include "window2.tab" | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 30 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 31 #include "vad.h" | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 32 #include "dtx.h" | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 33 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 34 /*-----------------------------------------------------------* | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 35 * Coder constant parameters (defined in "cnst.h") * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 36 *-----------------------------------------------------------* | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 37 * L_WINDOW : LPC analysis window size * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 38 * L_FRAME : Frame size * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 39 * L_FRAME_BY2 : Half the frame size * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 40 * L_SUBFR : Sub-frame size * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 41 * M : LPC order * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 42 * MP1 : LPC order+1 * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 43 * L_TOTAL : Total size of speech buffer * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 44 * PIT_MIN : Minimum pitch lag * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 45 * PIT_MAX : Maximum pitch lag * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 46 * L_INTERPOL : Length of filter for interpolation * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 47 *-----------------------------------------------------------*/ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 48 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 49 /* Spectral expansion factors */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 50 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 51 static const Word16 F_gamma1[M] = | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 52 { | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 53 29491, 26542, 23888, 21499, 19349, | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 54 17414, 15672, 14105, 12694, 11425 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 55 }; | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 56 static const Word16 F_gamma2[M] = | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 57 { | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 58 19661, 11797, 7078, 4247, 2548, | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 59 1529, 917, 550, 330, 198 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 60 }; | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 61 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 62 /*************************************************************************** | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 63 * FUNCTION: Init_Coder_12k2 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 64 * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 65 * PURPOSE: Initialization of variables for the coder section. | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 66 * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 67 * DESCRIPTION: | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 68 * - initilize pointers to speech buffer | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 69 * - initialize static pointers | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 70 * - set static vectors to zero | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 71 * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 72 ***************************************************************************/ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 73 | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 74 void Init_Coder_12k2 (struct EFR_encoder_state *st) | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 75 { | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 76 /* Static vectors to zero */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 77 | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 78 Set_zero (st->old_speech, L_TOTAL); | 
| 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 79 Set_zero (st->old_exc, PIT_MAX + L_INTERPOL); | 
| 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 80 Set_zero (st->old_wsp, PIT_MAX); | 
| 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 81 Set_zero (st->mem_syn, M); | 
| 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 82 Set_zero (st->mem_w, M); | 
| 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 83 Set_zero (st->mem_w0, M); | 
| 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 84 Set_zero (st->mem_err, M); | 
| 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 85 Set_zero (st->ai_zero + MP1, L_SUBFR); | 
| 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 86 Set_zero (st->hvec, L_SUBFR); /* set to zero "h1[-L_SUBFR..-1]" */ | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 87 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 88 /* Initialize lsp_old [] */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 89 | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 90 st->lsp_old[0] = 30000; | 
| 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 91 st->lsp_old[1] = 26000; | 
| 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 92 st->lsp_old[2] = 21000; | 
| 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 93 st->lsp_old[3] = 15000; | 
| 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 94 st->lsp_old[4] = 8000; | 
| 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 95 st->lsp_old[5] = 0; | 
| 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 96 st->lsp_old[6] = -8000; | 
| 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 97 st->lsp_old[7] = -15000; | 
| 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 98 st->lsp_old[8] = -21000; | 
| 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 99 st->lsp_old[9] = -26000; | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 100 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 101 /* Initialize lsp_old_q[] */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 102 | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 103 Copy (st->lsp_old, st->lsp_old_q, M); | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 104 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 105 return; | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 106 } | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 107 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 108 /*************************************************************************** | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 109 * FUNCTION: Coder_12k2 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 110 * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 111 * PURPOSE: Principle encoder routine. | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 112 * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 113 * DESCRIPTION: This function is called every 20 ms speech frame, | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 114 * operating on the newly read 160 speech samples. It performs the | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 115 * principle encoding functions to produce the set of encoded parameters | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 116 * which include the LSP, adaptive codebook, and fixed codebook | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 117 * quantization indices (addresses and gains). | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 118 * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 119 * INPUTS: | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 120 * No input arguments are passed to this function. However, before | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 121 * calling this function, 160 new speech data samples should be copied to | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 122 * the vector new_speech[]. This is a global pointer which is declared in | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 123 * this file (it points to the end of speech buffer minus 160). | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 124 * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 125 * OUTPUTS: | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 126 * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 127 * ana[]: vector of analysis parameters. | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 128 * synth[]: Local synthesis speech (for debugging purposes) | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 129 * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 130 ***************************************************************************/ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 131 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 132 void Coder_12k2 ( | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 133 struct EFR_encoder_state *st, | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 134 Word16 ana[], /* output : Analysis parameters */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 135 Word16 synth[] /* output : Local synthesis */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 136 ) | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 137 { | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 138 /* handy pointers that were static vars in the original code */ | 
| 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 139 Word16 *speech = st->old_speech + L_TOTAL - L_FRAME; | 
| 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 140 Word16 *p_window = st->old_speech + L_TOTAL - L_WINDOW; | 
| 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 141 Word16 *wsp = st->old_wsp + PIT_MAX; | 
| 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 142 Word16 *exc = st->old_exc + PIT_MAX + L_INTERPOL; | 
| 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 143 Word16 *zero = st->ai_zero + MP1; | 
| 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 144 Word16 *h1 = st->hvec + L_SUBFR; | 
| 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 145 Word16 *error = st->mem_err + M; | 
| 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 146 | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 147 /* LPC coefficients */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 148 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 149 Word16 r_l[MP1], r_h[MP1]; /* Autocorrelations lo and hi */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 150 Word16 A_t[(MP1) * 4]; /* A(z) unquantized for the 4 subframes */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 151 Word16 Aq_t[(MP1) * 4]; /* A(z) quantized for the 4 subframes */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 152 Word16 Ap1[MP1]; /* A(z) with spectral expansion */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 153 Word16 Ap2[MP1]; /* A(z) with spectral expansion */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 154 Word16 *A, *Aq; /* Pointer on A_t and Aq_t */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 155 Word16 lsp_new[M], lsp_new_q[M];/* LSPs at 4th subframe */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 156 Word16 lsp_mid[M], lsp_mid_q[M];/* LSPs at 2nd subframe */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 157 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 158 /* Other vectors */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 159 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 160 Word16 xn[L_SUBFR]; /* Target vector for pitch search */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 161 Word16 xn2[L_SUBFR]; /* Target vector for codebook search */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 162 Word16 res2[L_SUBFR]; /* Long term prediction residual */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 163 Word16 code[L_SUBFR]; /* Fixed codebook excitation */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 164 Word16 y1[L_SUBFR]; /* Filtered adaptive excitation */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 165 Word16 y2[L_SUBFR]; /* Filtered fixed codebook excitation */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 166 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 167 /* Scalars */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 168 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 169 Word16 i, j, k, i_subfr; | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 170 Word16 T_op, T0, T0_min, T0_max, T0_frac; | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 171 Word16 gain_pit, gain_code, pit_flag, pit_sharp; | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 172 Word16 temp; | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 173 Word32 L_temp; | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 174 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 175 Word16 scal_acf, VAD_flag, lags[2], rc[4]; | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 176 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 177 /*----------------------------------------------------------------------* | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 178 * - Perform LPC analysis: (twice per frame) * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 179 * * autocorrelation + lag windowing * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 180 * * Levinson-Durbin algorithm to find a[] * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 181 * * convert a[] to lsp[] * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 182 * * quantize and code the LSPs * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 183 * * find the interpolated LSPs and convert to a[] for all * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 184 * subframes (both quantized and unquantized) * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 185 *----------------------------------------------------------------------*/ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 186 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 187 /* LP analysis centered at 2nd subframe */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 188 | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 189 scal_acf = Autocorr (p_window, M, r_h, r_l, window_160_80); | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 190 /* Autocorrelations */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 191 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 192 Lag_window (M, r_h, r_l); /* Lag windowing */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 193 | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 194 Levinson (st, r_h, r_l, &A_t[MP1], rc); /* Levinson-Durbin */ | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 195 | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 196 Az_lsp (&A_t[MP1], lsp_mid, st->lsp_old); /* From A(z) to lsp */ | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 197 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 198 /* LP analysis centered at 4th subframe */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 199 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 200 /* Autocorrelations */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 201 scal_acf = Autocorr (p_window, M, r_h, r_l, window_232_8); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 202 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 203 Lag_window (M, r_h, r_l); /* Lag windowing */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 204 | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 205 Levinson (st, r_h, r_l, &A_t[MP1 * 3], rc); /* Levinson-Durbin */ | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 206 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 207 Az_lsp (&A_t[MP1 * 3], lsp_new, lsp_mid); /* From A(z) to lsp */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 208 | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 209 if (st->dtx_mode) | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 210 { | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 211 /* DTX enabled, make voice activity decision */ | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 212 VAD_flag = vad_computation (st, r_h, r_l, scal_acf, rc, st->ptch); | 
| 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 213 tx_dtx (st, VAD_flag); /* TX DTX handler */ | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 214 } | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 215 else | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 216 { | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 217 /* DTX disabled, active speech in every frame */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 218 VAD_flag = 1; | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 219 st->txdtx_ctrl = TX_VAD_FLAG | TX_SP_FLAG; | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 220 } | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 221 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 222 /* LSP quantization (lsp_mid[] and lsp_new[] jointly quantized) */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 223 | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 224 Q_plsf_5 (st, lsp_mid, lsp_new, lsp_mid_q, lsp_new_q, ana, st->txdtx_ctrl); | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 225 | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 226 ana += 5; | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 227 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 228 /*--------------------------------------------------------------------* | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 229 * Find interpolated LPC parameters in all subframes (both quantized * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 230 * and unquantized). * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 231 * The interpolated parameters are in array A_t[] of size (M+1)*4 * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 232 * and the quantized interpolated parameters are in array Aq_t[] * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 233 *--------------------------------------------------------------------*/ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 234 | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 235 Int_lpc2 (st->lsp_old, lsp_mid, lsp_new, A_t); | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 236 | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 237 if ((st->txdtx_ctrl & TX_SP_FLAG) != 0) | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 238 { | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 239 Int_lpc (st->lsp_old_q, lsp_mid_q, lsp_new_q, Aq_t); | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 240 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 241 /* update the LSPs for the next frame */ | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 242 Copy (lsp_new, st->lsp_old, M); | 
| 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 243 Copy (lsp_new_q, st->lsp_old_q, M); | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 244 } | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 245 else | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 246 { | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 247 /* Use unquantized LPC parameters in case of no speech activity */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 248 for (i = 0; i < MP1; i++) | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 249 { | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 250 Aq_t[i] = A_t[i]; move16 (); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 251 Aq_t[i + MP1] = A_t[i + MP1]; move16 (); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 252 Aq_t[i + MP1 * 2] = A_t[i + MP1 * 2]; move16 (); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 253 Aq_t[i + MP1 * 3] = A_t[i + MP1 * 3]; move16 (); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 254 } | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 255 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 256 /* update the LSPs for the next frame */ | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 257 Copy (lsp_new, st->lsp_old, M); | 
| 116 
d9ad0f5121e8
libgsmefr/cod_12k2.c: bug in earlier Copy optimization
 Mychaela Falconia <falcon@freecalypso.org> parents: 
58diff
changeset | 258 Copy (lsp_new, st->lsp_old_q, M); | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 259 } | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 260 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 261 /*----------------------------------------------------------------------* | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 262 * - Find the weighted input speech wsp[] for the whole speech frame * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 263 * - Find the open-loop pitch delay for first 2 subframes * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 264 * - Set the range for searching closed-loop pitch in 1st subframe * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 265 * - Find the open-loop pitch delay for last 2 subframes * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 266 *----------------------------------------------------------------------*/ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 267 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 268 A = A_t; move16 (); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 269 for (i = 0; i < L_FRAME; i += L_SUBFR) | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 270 { | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 271 Weight_Ai (A, F_gamma1, Ap1); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 272 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 273 Weight_Ai (A, F_gamma2, Ap2); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 274 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 275 Residu (Ap1, &speech[i], &wsp[i], L_SUBFR); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 276 | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 277 Syn_filt (Ap2, &wsp[i], &wsp[i], L_SUBFR, st->mem_w, 1); | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 278 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 279 A += MP1; move16 (); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 280 } | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 281 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 282 /* Find open loop pitch lag for first two subframes */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 283 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 284 T_op = Pitch_ol (wsp, PIT_MIN, PIT_MAX, L_FRAME_BY2); move16 (); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 285 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 286 lags[0] = T_op; move16 (); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 287 | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 288 if ((st->txdtx_ctrl & TX_SP_FLAG) != 0) | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 289 { | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 290 /* Range for closed loop pitch search in 1st subframe */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 291 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 292 T0_min = sub (T_op, 3); | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 293 if (T0_min < PIT_MIN) | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 294 { | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 295 T0_min = PIT_MIN; move16 (); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 296 } | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 297 T0_max = add (T0_min, 6); | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 298 if (T0_max > PIT_MAX) | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 299 { | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 300 T0_max = PIT_MAX; move16 (); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 301 T0_min = sub (T0_max, 6); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 302 } | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 303 } | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 304 /* Find open loop pitch lag for last two subframes */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 305 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 306 T_op = Pitch_ol (&wsp[L_FRAME_BY2], PIT_MIN, PIT_MAX, L_FRAME_BY2); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 307 | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 308 if (st->dtx_mode) | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 309 { | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 310 lags[1] = T_op; move16 (); | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 311 periodicity_update (st, lags); | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 312 } | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 313 /*----------------------------------------------------------------------* | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 314 * Loop for every subframe in the analysis frame * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 315 *----------------------------------------------------------------------* | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 316 * To find the pitch and innovation parameters. The subframe size is * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 317 * L_SUBFR and the loop is repeated L_FRAME/L_SUBFR times. * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 318 * - find the weighted LPC coefficients * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 319 * - find the LPC residual signal res[] * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 320 * - compute the target signal for pitch search * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 321 * - compute impulse response of weighted synthesis filter (h1[]) * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 322 * - find the closed-loop pitch parameters * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 323 * - encode the pitch delay * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 324 * - update the impulse response h1[] by including pitch * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 325 * - find target vector for codebook search * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 326 * - codebook search * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 327 * - encode codebook address * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 328 * - VQ of pitch and codebook gains * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 329 * - find synthesis speech * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 330 * - update states of weighting filter * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 331 *----------------------------------------------------------------------*/ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 332 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 333 /* pointer to interpolated LPC parameters */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 334 A = A_t; move16 (); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 335 /* pointer to interpolated quantized LPC parameters */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 336 Aq = Aq_t; move16 (); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 337 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 338 for (i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR) | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 339 { | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 340 if ((st->txdtx_ctrl & TX_SP_FLAG) != 0) | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 341 { | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 342 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 343 /*---------------------------------------------------------------* | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 344 * Find the weighted LPC coefficients for the weighting filter. * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 345 *---------------------------------------------------------------*/ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 346 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 347 Weight_Ai (A, F_gamma1, Ap1); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 348 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 349 Weight_Ai (A, F_gamma2, Ap2); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 350 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 351 /*---------------------------------------------------------------* | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 352 * Compute impulse response, h1[], of weighted synthesis filter * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 353 *---------------------------------------------------------------*/ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 354 | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 355 Copy (Ap1, st->ai_zero, M+1); | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 356 | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 357 Syn_filt (Aq, st->ai_zero, h1, L_SUBFR, zero, 0); | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 358 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 359 Syn_filt (Ap2, h1, h1, L_SUBFR, zero, 0); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 360 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 361 } | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 362 /*---------------------------------------------------------------* | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 363 * Find the target vector for pitch search: * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 364 *---------------------------------------------------------------*/ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 365 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 366 Residu (Aq, &speech[i_subfr], res2, L_SUBFR); /* LPC residual */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 367 | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 368 if ((st->txdtx_ctrl & TX_SP_FLAG) == 0) | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 369 { | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 370 /* Compute comfort noise excitation gain based on | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 371 LP residual energy */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 372 | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 373 st->CN_excitation_gain = compute_CN_excitation_gain (res2); | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 374 } | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 375 else | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 376 { | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 377 Copy (res2, &exc[i_subfr], L_SUBFR); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 378 | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 379 Syn_filt (Aq, &exc[i_subfr], error, L_SUBFR, st->mem_err, 0); | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 380 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 381 Residu (Ap1, error, xn, L_SUBFR); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 382 | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 383 /* target signal xn[] */ | 
| 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 384 Syn_filt (Ap2, xn, xn, L_SUBFR, st->mem_w0, 0); | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 385 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 386 /*--------------------------------------------------------------* | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 387 * Closed-loop fractional pitch search * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 388 *--------------------------------------------------------------*/ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 389 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 390 /* flag for first and 3th subframe */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 391 pit_flag = i_subfr; move16 (); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 392 /* set t0_min and t0_max for 3th subf.*/ | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 393 if (i_subfr == L_FRAME_BY2) | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 394 { | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 395 T0_min = sub (T_op, 3); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 396 | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 397 if (T0_min < PIT_MIN) | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 398 { | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 399 T0_min = PIT_MIN; move16 (); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 400 } | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 401 T0_max = add (T0_min, 6); | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 402 if (T0_max > PIT_MAX) | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 403 { | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 404 T0_max = PIT_MAX; move16 (); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 405 T0_min = sub (T0_max, 6); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 406 } | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 407 pit_flag = 0; move16 (); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 408 } | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 409 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 410 T0 = Pitch_fr6 (&exc[i_subfr], xn, h1, L_SUBFR, T0_min, T0_max, | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 411 pit_flag, &T0_frac); move16 (); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 412 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 413 *ana = Enc_lag6 (T0, &T0_frac, &T0_min, &T0_max, PIT_MIN, | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 414 PIT_MAX, pit_flag); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 415 } | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 416 ana++; | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 417 /* Incrementation of ana is done here to work also | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 418 when no speech activity is present */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 419 | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 420 if ((st->txdtx_ctrl & TX_SP_FLAG) != 0) | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 421 { | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 422 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 423 /*---------------------------------------------------------------* | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 424 * - find unity gain pitch excitation (adaptive codebook entry) * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 425 * with fractional interpolation. * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 426 * - find filtered pitch exc. y1[]=exc[] convolved with h1[] * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 427 * - compute pitch gain and limit between 0 and 1.2 * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 428 * - update target vector for codebook search * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 429 * - find LTP residual. * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 430 *---------------------------------------------------------------*/ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 431 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 432 Pred_lt_6 (&exc[i_subfr], T0, T0_frac, L_SUBFR); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 433 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 434 Convolve (&exc[i_subfr], h1, y1, L_SUBFR); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 435 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 436 gain_pit = G_pitch (xn, y1, L_SUBFR); move16 (); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 437 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 438 *ana = q_gain_pitch (&gain_pit); move16 (); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 439 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 440 } | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 441 else | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 442 { | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 443 gain_pit = 0; move16 (); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 444 } | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 445 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 446 ana++; /* Incrementation of ana is done here to work | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 447 also when no speech activity is present */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 448 | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 449 if ((st->txdtx_ctrl & TX_SP_FLAG) != 0) | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 450 { | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 451 /* xn2[i] = xn[i] - y1[i] * gain_pit */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 452 /* res2[i] -= exc[i+i_subfr] * gain_pit */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 453 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 454 for (i = 0; i < L_SUBFR; i++) | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 455 { | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 456 L_temp = L_mult (y1[i], gain_pit); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 457 L_temp = L_shl (L_temp, 3); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 458 xn2[i] = sub (xn[i], extract_h (L_temp)); move16 (); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 459 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 460 L_temp = L_mult (exc[i + i_subfr], gain_pit); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 461 L_temp = L_shl (L_temp, 3); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 462 res2[i] = sub (res2[i], extract_h (L_temp)); move16 (); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 463 } | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 464 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 465 /*-------------------------------------------------------------* | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 466 * - include pitch contribution into impulse resp. h1[] * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 467 *-------------------------------------------------------------*/ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 468 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 469 /* pit_sharp = gain_pit; */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 470 /* if (pit_sharp > 1.0) pit_sharp = 1.0; */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 471 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 472 pit_sharp = shl (gain_pit, 3); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 473 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 474 for (i = T0; i < L_SUBFR; i++) | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 475 { | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 476 temp = mult (h1[i - T0], pit_sharp); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 477 h1[i] = add (h1[i], temp); move16 (); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 478 } | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 479 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 480 /*--------------------------------------------------------------* | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 481 * - Innovative codebook search (find index and gain) * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 482 *--------------------------------------------------------------*/ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 483 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 484 code_10i40_35bits (xn2, res2, h1, code, y2, ana); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 485 } | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 486 else | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 487 { | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 488 build_CN_code (code, &st->L_pn_seed_tx); | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 489 } | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 490 ana += 10; move16 (); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 491 | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 492 if ((st->txdtx_ctrl & TX_SP_FLAG) != 0) | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 493 { | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 494 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 495 /*-------------------------------------------------------* | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 496 * - Add the pitch contribution to code[]. * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 497 *-------------------------------------------------------*/ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 498 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 499 for (i = T0; i < L_SUBFR; i++) | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 500 { | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 501 temp = mult (code[i - T0], pit_sharp); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 502 code[i] = add (code[i], temp); move16 (); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 503 } | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 504 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 505 /*------------------------------------------------------* | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 506 * - Quantization of fixed codebook gain. * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 507 *------------------------------------------------------*/ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 508 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 509 gain_code = G_code (xn2, y2); move16 (); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 510 } | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 511 *ana++ = q_gain_code (st, code, L_SUBFR, &gain_code, st->txdtx_ctrl, | 
| 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 512 i_subfr); | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 513 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 514 /*------------------------------------------------------* | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 515 * - Find the total excitation * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 516 * - find synthesis speech corresponding to exc[] * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 517 * - update filter memories for finding the target * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 518 * vector in the next subframe * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 519 * (update mem_err[] and mem_w0[]) * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 520 *------------------------------------------------------*/ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 521 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 522 for (i = 0; i < L_SUBFR; i++) | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 523 { | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 524 /* exc[i] = gain_pit*exc[i] + gain_code*code[i]; */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 525 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 526 L_temp = L_mult (exc[i + i_subfr], gain_pit); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 527 L_temp = L_mac (L_temp, code[i], gain_code); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 528 L_temp = L_shl (L_temp, 3); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 529 exc[i + i_subfr] = round (L_temp); move16 (); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 530 } | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 531 | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 532 Syn_filt (Aq, &exc[i_subfr], &synth[i_subfr], L_SUBFR, st->mem_syn, 1); | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 533 | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 534 if ((st->txdtx_ctrl & TX_SP_FLAG) != 0) | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 535 { | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 536 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 537 for (i = L_SUBFR - M, j = 0; i < L_SUBFR; i++, j++) | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 538 { | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 539 st->mem_err[j] = sub (speech[i_subfr + i], synth[i_subfr + i]); | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 540 temp = extract_h (L_shl (L_mult (y1[i], gain_pit), 3)); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 541 k = extract_h (L_shl (L_mult (y2[i], gain_code), 5)); | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 542 st->mem_w0[j] = sub (xn[i], add (temp, k)); | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 543 } | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 544 } | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 545 else | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 546 { | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 547 Set_zero (st->mem_err, M); | 
| 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 548 Set_zero (st->mem_w0, M); | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 549 } | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 550 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 551 /* interpolated LPC parameters for next subframe */ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 552 A += MP1; move16 (); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 553 Aq += MP1; move16 (); | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 554 } | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 555 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 556 /*--------------------------------------------------* | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 557 * Update signal for next frame. * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 558 * -> shift to the left by L_FRAME: * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 559 * speech[], wsp[] and exc[] * | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 560 *--------------------------------------------------*/ | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 561 | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 562 Copy (&st->old_speech[L_FRAME], &st->old_speech[0], L_TOTAL - L_FRAME); | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 563 | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 564 Copy (&st->old_wsp[L_FRAME], &st->old_wsp[0], PIT_MAX); | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 565 | 
| 58 
d285877fc4cc
libgsmefr: cod_12k2.c compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: 
53diff
changeset | 566 Copy (&st->old_exc[L_FRAME], &st->old_exc[0], PIT_MAX + L_INTERPOL); | 
| 53 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 567 | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 568 return; | 
| 
49dd1ac8e75b
libgsmefr: import most *.c files from ETSI source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 569 } | 
