1d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber/* ------------------------------------------------------------------
2d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber * Copyright (C) 1998-2009 PacketVideo
3d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber *
4d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
5d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber * you may not use this file except in compliance with the License.
6d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber * You may obtain a copy of the License at
7d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber *
8d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
9d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber *
10d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber * Unless required by applicable law or agreed to in writing, software
11d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
12d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
13d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber * express or implied.
14d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber * See the License for the specific language governing permissions
15d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber * and limitations under the License.
16d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber * -------------------------------------------------------------------
17d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber */
18d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber/****************************************************************************************
19d49b526dd2009270cb15f7fe4e70b74673950608Andreas HuberPortions of this file are derived from the following 3GPP standard:
20d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
21d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    3GPP TS 26.073
22d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    ANSI-C code for the Adaptive Multi-Rate (AMR) speech codec
23d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    Available from http://www.3gpp.org
24d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
25d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber(C) 2004, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TTA, TTC)
26d49b526dd2009270cb15f7fe4e70b74673950608Andreas HuberPermission to distribute, modify and use this file under the standard license
27d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huberterms listed above has been obtained from the copyright holder.
28d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber****************************************************************************************/
29d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber/*
30d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
31d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
32d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
33d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
34d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Pathname: ./audio/gsm-amr/c/src/pre_proc.c
35d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Funtions: Pre_Process_init
36d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber           Pre_Process_reset
37d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber           Pre_Process_exit
38d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber           Pre_Process
39d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
40d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber     Date: 05/17/2000
41d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
42d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
43d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber REVISION HISTORY
44d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
45d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Description: Put the file into our template structure.
46d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
47d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Description: First pass optimization.
48d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
49d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Description: Made changes based on comments from review meeting.
50d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
51d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Description: Synchronized file with UMTS version 3.2.0. Updated coding
52d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber              template. Removed unnecessary include files.
53d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
54d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Description: Removed basic_op.h from the Include section. It is not used.
55d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
56d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Description: Made the following changes per comments from Phase 2/3 review:
57d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber              1. Fixed typecasting issue with TI C compiler.
58d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber              2. Modified FOR loop to count down.
59d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber              3. Cosmetic changes to the code to make address post-increment
60d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                 clearer.
61d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber              4. Removed unnecessary typecasting in the multiply-accumulate
62d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                 portion of FOR loop body.
63d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber              5. Removed "static" in table definitions.
64d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber              6. Updated copyright year.
65d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
66d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Description:  For Pre_Process()
67d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber              1. Replaced variables (containing filter coefficients) with
68d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                 constants, to avoid extra register swaping.
69d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber              2. Changed to decrement loop
70d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
71d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Description:  Replaced OSCL mem type functions and eliminated include
72d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber               files that now are chosen by OSCL definitions
73d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
74d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Description:  Replaced "int" and/or "char" with OSCL defined types.
75d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
76d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Description: Changed round function name to pv_round to avoid conflict with
77d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber              round function in C standard library.
78d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
79d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Description:
80d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
81d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
82d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber MODULE DESCRIPTION
83d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
84d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber These modules handle the preprocessing of input speech.
85d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
86d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
87d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber*/
88d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
89d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
90d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber/*----------------------------------------------------------------------------
91d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber; INCLUDES
92d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber----------------------------------------------------------------------------*/
93d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber#include <stdlib.h>
94d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
95d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber#include "pre_proc.h"
96d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber#include "typedef.h"
97d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
98d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber/*----------------------------------------------------------------------------
99d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber; MACROS
100d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber; Define module specific macros here
101d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber----------------------------------------------------------------------------*/
102d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
103d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
104d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber/*----------------------------------------------------------------------------
105d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber; DEFINES
106d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber; Include all pre-processor statements here. Include conditional
107d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber; compile variables also.
108d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber----------------------------------------------------------------------------*/
109d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
110d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
111d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber/*----------------------------------------------------------------------------
112d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber; LOCAL FUNCTION DEFINITIONS
113d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber; Function Prototype declaration
114d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber----------------------------------------------------------------------------*/
115d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
116d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber/*----------------------------------------------------------------------------
117d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber; LOCAL VARIABLE DEFINITIONS
118d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber; Variable declaration - defined here and used outside this module
119d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber----------------------------------------------------------------------------*/
120d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
121d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
122d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
123d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
124d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber/*
125d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
126d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber FUNCTION NAME: Pre_Process_init
127d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
128d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber INPUT AND OUTPUT DEFINITIONS
129d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
130d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Inputs:
131d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    state = pointer to an array of pointer to structures of type
132d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        Pre_ProcessState
133d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
134d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Outputs:
135d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    Structure pointed to by the pointer pointed to by state is
136d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber      initialized to its reset value
137d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    state points to the allocated memory
138d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
139d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Returns:
140d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    return_value = 0 if memory was successfully initialized,
141d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                   otherwise returns -1.
142d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
143d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Global Variables Used:
144d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    None.
145d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
146d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Local Variables Needed:
147d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    None.
148d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
149d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
150d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber FUNCTION DESCRIPTION
151d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
152d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Allocates state memory and initializes state memory.
153d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
154d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
155d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber REQUIREMENTS
156d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
157d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber None.
158d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
159d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
160d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber REFERENCES
161d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
162d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber pre_proc.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001
163d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
164d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
165d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber PSEUDO-CODE
166d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
167d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huberint Pre_Process_init (Pre_ProcessState **state)
168d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber{
169d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber  Pre_ProcessState* s;
170d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
171d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber  if (state == (Pre_ProcessState **) NULL){
172d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber      fprintf(stderr, "Pre_Process_init: invalid parameter\n");
173d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber      return -1;
174d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber  }
175d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber  *state = NULL;
176d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
177d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber  // allocate memory
178d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber  if ((s= (Pre_ProcessState *) malloc(sizeof(Pre_ProcessState))) == NULL){
179d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber      fprintf(stderr, "Pre_Process_init: can not malloc state structure\n");
180d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber      return -1;
181d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber  }
182d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
183d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber  Pre_Process_reset(s);
184d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber  *state = s;
185d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
186d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber  return 0;
187d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber}
188d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
189d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
190d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber RESOURCES USED [optional]
191d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
192d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber When the code is written for a specific target processor the
193d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber the resources used should be documented below.
194d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
195d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber HEAP MEMORY USED: x bytes
196d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
197d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber STACK MEMORY USED: x bytes
198d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
199d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber CLOCK CYCLES: (cycle count equation for this function) + (variable
200d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                used to represent cycle count for each subroutine
201d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                called)
202d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber     where: (cycle count variable) = cycle count for [subroutine
203d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                                     name]
204d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
205d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
206d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber CAUTION [optional]
207d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber [State any special notes, constraints or cautions for users of this function]
208d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
209d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
210d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber*/
211d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
212d49b526dd2009270cb15f7fe4e70b74673950608Andreas HuberWord16 Pre_Process_init(Pre_ProcessState **state)
213d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber{
214d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    Pre_ProcessState* s;
215d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
216d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    if (state == (Pre_ProcessState **) NULL)
217d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    {
218d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        /*  fprintf(stderr, "Pre_Process_init: invalid parameter\n");  */
219d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        return(-1);
220d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    }
221d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    *state = NULL;
222d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
223d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    /* allocate memory */
224d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    if ((s = (Pre_ProcessState *) malloc(sizeof(Pre_ProcessState))) == NULL)
225d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    {
226d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        /*  fprintf(stderr, "Pre_Process_init:
227d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber            can not malloc state structure\n");  */
228d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        return(-1);
229d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    }
230d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
231d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    Pre_Process_reset(s);
232d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    *state = s;
233d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
234d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    return(0);
235d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber}
236d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
237d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber/****************************************************************************/
238d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
239d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
240d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber/*
241d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
242d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber FUNCTION NAME: Pre_Process_reset
243d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
244d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber INPUT AND OUTPUT DEFINITIONS
245d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
246d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Inputs:
247d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    state = pointer to structure of type Pre_ProcessState
248d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
249d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Outputs:
250d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    Structure pointed to by state is initialized to zero.
251d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
252d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Returns:
253d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    return_value = 0 if memory was successfully reset,
254d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                   otherwise returns -1.
255d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
256d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Global Variables Used:
257d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    None.
258d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
259d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Local Variables Needed:
260d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    None.
261d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
262d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
263d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber FUNCTION DESCRIPTION
264d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
265d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Initializes state memory to zero.
266d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
267d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
268d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber REQUIREMENTS
269d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
270d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber None.
271d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
272d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
273d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber REFERENCES
274d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
275d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber pre_proc.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001
276d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
277d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
278d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber PSEUDO-CODE
279d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
280d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huberint Pre_Process_reset (Pre_ProcessState *state)
281d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber{
282d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber  if (state == (Pre_ProcessState *) NULL){
283d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber      fprintf(stderr, "Pre_Process_reset: invalid parameter\n");
284d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber      return -1;
285d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber  }
286d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
287d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber  state->y2_hi = 0;
288d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber  state->y2_lo = 0;
289d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber  state->y1_hi = 0;
290d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber  state->y1_lo = 0;
291d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber  state->x0 = 0;
292d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber  state->x1 = 0;
293d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
294d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber  return 0;
295d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber}
296d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
297d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
298d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber RESOURCES USED [optional]
299d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
300d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber When the code is written for a specific target processor the
301d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber the resources used should be documented below.
302d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
303d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber HEAP MEMORY USED: x bytes
304d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
305d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber STACK MEMORY USED: x bytes
306d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
307d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber CLOCK CYCLES: (cycle count equation for this function) + (variable
308d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                used to represent cycle count for each subroutine
309d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                called)
310d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber     where: (cycle count variable) = cycle count for [subroutine
311d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                                     name]
312d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
313d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
314d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber CAUTION [optional]
315d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber [State any special notes, constraints or cautions for users of this function]
316d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
317d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
318d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber*/
319d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
320d49b526dd2009270cb15f7fe4e70b74673950608Andreas HuberWord16 Pre_Process_reset(Pre_ProcessState *state)
321d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber{
322d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    if (state == (Pre_ProcessState *) NULL)
323d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    {
324d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        /*  fprintf(stderr, "Pre_Process_reset: invalid parameter\n");  */
325d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        return(-1);
326d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    }
327d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
328d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    state->y2_hi = 0;
329d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    state->y2_lo = 0;
330d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    state->y1_hi = 0;
331d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    state->y1_lo = 0;
332d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    state->x0 = 0;
333d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    state->x1 = 0;
334d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
335d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    return(0);
336d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber}
337d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
338d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber/****************************************************************************/
339d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
340d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
341d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber/*
342d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
343d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber FUNCTION NAME: Pre_Process_exit
344d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
345d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber INPUT AND OUTPUT DEFINITIONS
346d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
347d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Inputs:
348d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    state = a pointer to an array of pointers to structures of
349d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        type Pre_ProcessState
350d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
351d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Outputs:
352d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    state points to a NULL address
353d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
354d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Returns:
355d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    None.
356d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
357d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Global Variables Used:
358d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    None.
359d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
360d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Local Variables Needed:
361d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    None.
362d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
363d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
364d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber FUNCTION DESCRIPTION
365d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
366d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber The memory used for state memory is freed.
367d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
368d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
369d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber REQUIREMENTS
370d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
371d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber None.
372d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
373d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
374d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber REFERENCES
375d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
376d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber pre_proc.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001
377d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
378d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
379d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber PSEUDO-CODE
380d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
381d49b526dd2009270cb15f7fe4e70b74673950608Andreas Hubervoid Pre_Process_exit (Pre_ProcessState **state)
382d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber{
383d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber  if (state == NULL || *state == NULL)
384d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber      return;
385d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
386d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber  // deallocate memory
387d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber  free(*state);
388d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber  *state = NULL;
389d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
390d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber  return;
391d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber}
392d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
393d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
394d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber RESOURCES USED [optional]
395d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
396d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber When the code is written for a specific target processor the
397d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber the resources used should be documented below.
398d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
399d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber HEAP MEMORY USED: x bytes
400d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
401d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber STACK MEMORY USED: x bytes
402d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
403d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber CLOCK CYCLES: (cycle count equation for this function) + (variable
404d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                used to represent cycle count for each subroutine
405d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                called)
406d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber     where: (cycle count variable) = cycle count for [subroutine
407d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                                     name]
408d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
409d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
410d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber CAUTION [optional]
411d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber [State any special notes, constraints or cautions for users of this function]
412d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
413d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
414d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber*/
415d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
416d49b526dd2009270cb15f7fe4e70b74673950608Andreas Hubervoid Pre_Process_exit(Pre_ProcessState **state)
417d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber{
418d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    if (state == NULL || *state == NULL)
419d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    {
420d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        return;
421d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    }
422d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
423d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    /* deallocate memory */
424d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    free(*state);
425d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    *state = NULL;
426d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
427d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    return;
428d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber}
429d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
430d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber/****************************************************************************/
431d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
432d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber/*
433d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
434d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber FUNCTION NAME: Pre_Process
435d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
436d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber INPUT AND OUTPUT DEFINITIONS
437d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
438d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Inputs:
439d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    st = a pointer to a structure of type Pre_ProcessState
440d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    signal = input/output signal (Word16)
441d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    lg = length of signal (Word16)
442d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
443d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Outputs:
444d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    st points to the updated structure
445d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
446d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Returns:
447d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    return_value = 0 (int)
448d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
449d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Global Variables Used:
450d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    a = points to a buffer of filter coefficients
451d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    b = points to a buffer of filter coefficients
452d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
453d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Local Variables Needed:
454d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    None.
455d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
456d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
457d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber FUNCTION DESCRIPTION
458d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
459d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber This module performs the preprocessing of the input speech.
460d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber The signal is passed through a 2nd order high pass filtering with cut off
461d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber frequency at 80 Hz. The input is divided by two in the filtering process.
462d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
463d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    y[i] = b[0]*x[i]/2 + b[1]*x[i-1]/2 + b[2]*x[i-2]/2
464d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                     + a[1]*y[i-1] + a[2]*y[i-2];
465d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
466d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
467d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber REQUIREMENTS
468d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
469d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber None.
470d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
471d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
472d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber REFERENCES
473d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
474d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber pre_proc.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001
475d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
476d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
477d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber PSEUDO-CODE
478d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
479d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huberint Pre_Process (
480d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    Pre_ProcessState *st,
481d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    Word16 signal[], // input/output signal
482d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    Word16 lg)       // lenght of signal
483d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber{
484d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    Word16 i, x2;
485d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    Word32 L_tmp;
486d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
487d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    for (i = 0; i < lg; i++)
488d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    {
489d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        x2 = st->x1;
490d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        st->x1 = st->x0;
491d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        st->x0 = signal[i];
492d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
493d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        //  y[i] = b[0]*x[i]/2 + b[1]*x[i-1]/2 + b140[2]*x[i-2]/2
494d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        //                     + a[1]*y[i-1] + a[2] * y[i-2];
495d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
496d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        L_tmp = Mpy_32_16 (st->y1_hi, st->y1_lo, a[1]);
497d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        L_tmp = L_add (L_tmp, Mpy_32_16 (st->y2_hi, st->y2_lo, a[2]));
498d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        L_tmp = L_mac (L_tmp, st->x0, b[0]);
499d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        L_tmp = L_mac (L_tmp, st->x1, b[1]);
500d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        L_tmp = L_mac (L_tmp, x2, b[2]);
501d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        L_tmp = L_shl (L_tmp, 3);
502d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        signal[i] = pv_round (L_tmp);
503d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
504d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        st->y2_hi = st->y1_hi;
505d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        st->y2_lo = st->y1_lo;
506d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        L_Extract (L_tmp, &st->y1_hi, &st->y1_lo);
507d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    }
508d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    return 0;
509d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber}
510d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
511d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
512d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber RESOURCES USED [optional]
513d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
514d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber When the code is written for a specific target processor the
515d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber the resources used should be documented below.
516d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
517d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber HEAP MEMORY USED: x bytes
518d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
519d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber STACK MEMORY USED: x bytes
520d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
521d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber CLOCK CYCLES: (cycle count equation for this function) + (variable
522d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                used to represent cycle count for each subroutine
523d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                called)
524d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber     where: (cycle count variable) = cycle count for [subroutine
525d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                                     name]
526d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
527d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
528d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber CAUTION [optional]
529d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber [State any special notes, constraints or cautions for users of this function]
530d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
531d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
532d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber*/
533d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber/*
534d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    filter coefficients (fc = 80 Hz, coeff. b[] is divided by 2)
535d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    const Word16 b[3] = {1899, -3798, 1899};
536d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    const Word16 a[3] = {4096, 7807, -3733};
537d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
538d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber*/
539d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
540d49b526dd2009270cb15f7fe4e70b74673950608Andreas Hubervoid Pre_Process(
541d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    Pre_ProcessState *st,
542d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    Word16 signal[], /* input/output signal */
543d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    Word16 lg)       /* length of signal    */
544d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber{
545d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    register Word16 i;
546d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    Word16 x_n_2;
547d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    Word16 x_n_1;
548d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    Word32 L_tmp;
549d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    Word16 *p_signal = signal;
550d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
551d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    x_n_2 = st->x1;
552d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    x_n_1 = st->x0;
553d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
554d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    for (i = lg; i != 0; i--)
555d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    {
556d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
557d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
558d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        /*  y[i] = b[0]*x[i]/2 + b[1]*x[i-1]/2 + b140[2]*x[i-2]/2  */
559d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        /*                     + a[1]*y[i-1] + a[2] * y[i-2];      */
560d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
561d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        L_tmp     = ((Word32) st->y1_hi) * 7807;
562d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        L_tmp    += (Word32)(((Word32) st->y1_lo * 7807) >> 15);
563d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
564d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        L_tmp    += ((Word32) st->y2_hi) * (-3733);
565d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        st->y2_hi =  st->y1_hi;
566d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        L_tmp    += (Word32)(((Word32) st->y2_lo * (-3733)) >> 15);
567d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        st->y2_lo =  st->y1_lo;
568d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
569d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        L_tmp    += ((Word32) x_n_2) * 1899;
570d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        x_n_2     =  x_n_1;
571d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        L_tmp    += ((Word32) x_n_1) * (-3798);
572d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        x_n_1     = *(p_signal);
573d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        L_tmp    += ((Word32) x_n_1) * 1899;
574d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
575d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
576d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        *(p_signal++) = (Word16)((L_tmp + 0x0000800L) >> 12);
577d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
578d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        st->y1_hi = (Word16)(L_tmp >> 12);
579d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        st->y1_lo = (Word16)((L_tmp << 3) - ((Word32)(st->y1_hi) << 15));
580d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
581d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    }
582d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
583d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    st->x1 = x_n_2;
584d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    st->x0 = x_n_1;
585d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
586d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    return;
587d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber}
588d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
589d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
590