Mercurial > hg > audiostuff
comparison intercom/gsm/code.c @ 2:13be24d74cd2
import intercom-0.4.1
author | Peter Meerwald <pmeerw@cosy.sbg.ac.at> |
---|---|
date | Fri, 25 Jun 2010 09:57:52 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
1:9cadc470e3da | 2:13be24d74cd2 |
---|---|
1 /* | |
2 * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische | |
3 * Universitaet Berlin. See the accompanying file "COPYRIGHT" for | |
4 * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. | |
5 */ | |
6 | |
7 /* $Header: /home/kbs/jutta/src/gsm/gsm-1.0/src/RCS/code.c,v 1.1 1992/10/28 00:15:50 jutta Exp $ */ | |
8 | |
9 #include "config.h" | |
10 | |
11 | |
12 #ifdef HAS_STDLIB_H | |
13 #include <stdlib.h> | |
14 #include <string.h> | |
15 #else | |
16 # include "proto.h" | |
17 extern char *memcpy P((char *, char *, int)); | |
18 #endif | |
19 | |
20 #include "private.h" | |
21 #include "gsm.h" | |
22 #include "proto.h" | |
23 | |
24 /* | |
25 * 4.2 FIXED POINT IMPLEMENTATION OF THE RPE-LTP CODER | |
26 */ | |
27 | |
28 void Gsm_Coder P8((S, s, LARc, Nc, bc, Mc, xmaxc, xMc), struct gsm_state *S, word * s, /* [0..159] samples IN */ | |
29 /* | |
30 * The RPE-LTD coder works on a frame by frame basis. The length of | |
31 * the frame is equal to 160 samples. Some computations are done | |
32 * once per frame to produce at the output of the coder the | |
33 * LARc[1..8] parameters which are the coded LAR coefficients and | |
34 * also to realize the inverse filtering operation for the entire | |
35 * frame (160 samples of signal d[0..159]). These parts produce at | |
36 * the output of the coder: | |
37 */ | |
38 word * LARc, /* [0..7] LAR coefficients OUT */ | |
39 /* | |
40 * Procedure 4.2.11 to 4.2.18 are to be executed four times per | |
41 * frame. That means once for each sub-segment RPE-LTP analysis of | |
42 * 40 samples. These parts produce at the output of the coder: | |
43 */ | |
44 word * Nc, /* [0..3] LTP lag OUT */ | |
45 word * bc, /* [0..3] coded LTP gain OUT */ | |
46 word * Mc, /* [0..3] RPE grid selection OUT */ | |
47 word * xmaxc, /* [0..3] Coded maximum amplitude OUT */ | |
48 word * xMc /* [13*4] normalized RPE samples OUT */ | |
49 ) | |
50 { | |
51 int k; | |
52 word *dp = S->dp0 + 120; /* [ -120...-1 ] */ | |
53 word *dpp = dp; /* [ 0...39 ] */ | |
54 | |
55 static word e[50] = { 0 }; | |
56 | |
57 word so[160]; | |
58 | |
59 Gsm_Preprocess(S, s, so); | |
60 Gsm_LPC_Analysis(S, so, LARc); | |
61 Gsm_Short_Term_Analysis_Filter(S, LARc, so); | |
62 | |
63 for (k = 0; k <= 3; k++, xMc += 13) { | |
64 | |
65 Gsm_Long_Term_Predictor(S, so + k * 40, /* d [0..39] IN */ | |
66 dp, /* dp [-120..-1] IN */ | |
67 e + 5, /* e [0..39] OUT */ | |
68 dpp, /* dpp [0..39] OUT */ | |
69 Nc++, bc++); | |
70 | |
71 Gsm_RPE_Encoding(S, e + 5, /* e ][0..39][ IN/OUT */ | |
72 xmaxc++, Mc++, xMc); | |
73 /* | |
74 * Gsm_Update_of_reconstructed_short_time_residual_signal | |
75 * ( dpp, e + 5, dp ); | |
76 */ | |
77 | |
78 { | |
79 register int i; | |
80 register longword ltmp; | |
81 for (i = 0; i <= 39; i++) | |
82 dp[i] = GSM_ADD(e[5 + i], dpp[i]); | |
83 } | |
84 dp += 40; | |
85 dpp += 40; | |
86 | |
87 } | |
88 (void) memcpy((char *) S->dp0, (char *) (S->dp0 + 160), | |
89 120 * sizeof(*S->dp0)); | |
90 } |