1b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/* ------------------------------------------------------------------
2b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * Copyright (C) 1998-2009 PacketVideo
3b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber *
4b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
5b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * you may not use this file except in compliance with the License.
6b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * You may obtain a copy of the License at
7b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber *
8b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
9b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber *
10b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * Unless required by applicable law or agreed to in writing, software
11b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
12b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
13b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * express or implied.
14b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * See the License for the specific language governing permissions
15b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * and limitations under the License.
16b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * -------------------------------------------------------------------
17b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber */
18b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/****************************************************************************************
19b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas HuberPortions of this file are derived from the following 3GPP standard:
20b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
21b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    3GPP TS 26.073
22b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    ANSI-C code for the Adaptive Multi-Rate (AMR) speech codec
23b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    Available from http://www.3gpp.org
24b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
25b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber(C) 2004, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TTA, TTC)
26b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas HuberPermission to distribute, modify and use this file under the standard license
27b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huberterms listed above has been obtained from the copyright holder.
28b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber****************************************************************************************/
29b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/*
30b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
31b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
32b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
33b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
34b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Pathname: ./audio/gsm-amr/c/src/lpc.c
35b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
36b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber     Date: 01/31/2002
37b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
38b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
39b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber REVISION HISTORY
40b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
41b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Description: Updating includes and making code more simple as per comments.
42b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
43b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Description:  Replaced OSCL mem type functions and eliminated include
44b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber               files that now are chosen by OSCL definitions
45b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
46b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Description:  Replaced "int" and/or "char" with OSCL defined types.
47b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
48b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Description:
49b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
50b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
51b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber*/
52b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
53b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/*----------------------------------------------------------------------------
54b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; INCLUDES
55b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber----------------------------------------------------------------------------*/
56b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include <stdlib.h>
57b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
58b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include "lpc.h"
59b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include "typedef.h"
60b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include "oper_32b.h"
61b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include "autocorr.h"
62b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include "lag_wind.h"
63b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include "levinson.h"
64b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include "cnst.h"
65b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include "mode.h"
66b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include "window_tab.h"
67b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include "sub.h"
68b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
69b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/*----------------------------------------------------------------------------
70b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; MACROS
71b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; Define module specific macros here
72b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber----------------------------------------------------------------------------*/
73b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
74b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
75b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/*----------------------------------------------------------------------------
76b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; DEFINES
77b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; Include all pre-processor statements here. Include conditional
78b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; compile variables also.
79b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber----------------------------------------------------------------------------*/
80b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
81b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
82b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/*----------------------------------------------------------------------------
83b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; LOCAL FUNCTION DEFINITIONS
84b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; Function Prototype declaration
85b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber----------------------------------------------------------------------------*/
86b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
87b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
88b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/*----------------------------------------------------------------------------
89b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; LOCAL STORE/BUFFER/POINTER DEFINITIONS
90b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; Variable declaration - defined here and used outside this module
91b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber----------------------------------------------------------------------------*/
92b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
93b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/*
94b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
95b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber FUNCTION NAME: lpc_init
96b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
97b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber INPUT AND OUTPUT DEFINITIONS
98b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
99b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Inputs:
100b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    state = pointer to pointer of state data of type lpcState
101b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
102b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Outputs:
103b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    None
104b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
105b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Returns:
106b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    None
107b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
108b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Global Variables Used:
109b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    None.
110b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
111b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Local Variables Needed:
112b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    None.
113b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
114b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
115b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber FUNCTION DESCRIPTION
116b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
117b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber This function initializes the state data for the LPC module.
118b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
119b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
120b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber REQUIREMENTS
121b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
122b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber None.
123b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
124b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
125b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber REFERENCES
126b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
127b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber lpc.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001
128b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
129b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
130b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber PSEUDO-CODE
131b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
132b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
133b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber  lpcState* s;
134b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
135b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber  if (state == (lpcState **) NULL){
136b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber      // fprintf(stderr, "lpc_init: invalid parameter\n");
137b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber      return -1;
138b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber  }
139b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber  *state = NULL;
140b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
141b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber  // allocate memory
142b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber  if ((s= (lpcState *) malloc(sizeof(lpcState))) == NULL){
143b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber      // fprintf(stderr, "lpc_init: can not malloc state structure\n");
144b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber      return -1;
145b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber  }
146b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
147b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber  s->levinsonSt = NULL;
148b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
149b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber  // Init sub states
150b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber  if (Levinson_init(&s->levinsonSt)) {
151b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber     lpc_exit(&s);
152b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber     return -1;
153b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber  }
154b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
155b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
156b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber  lpc_reset(s);
157b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber  *state = s;
158b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
159b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber  return 0;
160b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
161b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
162b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber RESOURCES USED [optional]
163b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
164b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber When the code is written for a specific target processor the
165b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber the resources used should be documented below.
166b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
167b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber HEAP MEMORY USED: x bytes
168b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
169b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber STACK MEMORY USED: x bytes
170b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
171b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CLOCK CYCLES: (cycle count equation for this function) + (variable
172b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber                used to represent cycle count for each subroutine
173b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber                called)
174b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber     where: (cycle count variable) = cycle count for [subroutine
175b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber                                     name]
176b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
177b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
178b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CAUTION [optional]
179b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber [State any special notes, constraints or cautions for users of this function]
180b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
181b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
182b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber*/
183b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas HuberWord16 lpc_init(lpcState **state)
184b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber{
185b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    lpcState* s;
186b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
187b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    if (state == (lpcState **) NULL)
188b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    {
189b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        /* fprintf(stderr, "lpc_init: invalid parameter\n"); */
190b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        return -1;
191b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    }
192b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    *state = NULL;
193b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
194b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    /* allocate memory */
195b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    if ((s = (lpcState *) malloc(sizeof(lpcState))) == NULL)
196b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    {
197b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        /* fprintf(stderr, "lpc_init: can not malloc state structure\n"); */
198b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        return -1;
199b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    }
200b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
201b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    s->levinsonSt = NULL;
202b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
203b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    /* Init sub states */
204b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    if (Levinson_init(&s->levinsonSt))
205b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    {
206b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        lpc_exit(&s);
207b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        return -1;
208b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    }
209b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
210b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    lpc_reset(s);
211b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    *state = s;
212b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
213b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    return 0;
214b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber}
215b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
216b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/*
217b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
218b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber FUNCTION NAME: lpc_reset
219b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
220b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber INPUT AND OUTPUT DEFINITIONS
221b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
222b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Inputs:
223b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    state = pointer to pointer of state data of type lpcState
224b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
225b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Outputs:
226b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    None
227b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
228b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Returns:
229b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    None
230b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
231b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Global Variables Used:
232b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    None.
233b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
234b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Local Variables Needed:
235b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    None.
236b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
237b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
238b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber FUNCTION DESCRIPTION
239b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
240b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber This function resets the state data for the LPC module.
241b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
242b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
243b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber REQUIREMENTS
244b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
245b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber None.
246b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
247b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
248b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber REFERENCES
249b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
250b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber lpc.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001
251b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
252b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
253b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber PSEUDO-CODE
254b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
255b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber  if (state == (lpcState *) NULL){
256b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber      // fprintf(stderr, "lpc_reset: invalid parameter\n");
257b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber      return -1;
258b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber  }
259b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
260b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber  Levinson_reset(state->levinsonSt);
261b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
262b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber  return 0;
263b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
264b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
265b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber RESOURCES USED [optional]
266b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
267b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber When the code is written for a specific target processor the
268b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber the resources used should be documented below.
269b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
270b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber HEAP MEMORY USED: x bytes
271b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
272b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber STACK MEMORY USED: x bytes
273b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
274b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CLOCK CYCLES: (cycle count equation for this function) + (variable
275b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber                used to represent cycle count for each subroutine
276b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber                called)
277b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber     where: (cycle count variable) = cycle count for [subroutine
278b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber                                     name]
279b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
280b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
281b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CAUTION [optional]
282b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber [State any special notes, constraints or cautions for users of this function]
283b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
284b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
285b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber*/
286b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas HuberWord16 lpc_reset(lpcState *state)
287b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber{
288b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
289b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    if (state == (lpcState *) NULL)
290b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    {
291b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        /* fprintf(stderr, "lpc_reset: invalid parameter\n"); */
292b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        return -1;
293b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    }
294b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
295b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    Levinson_reset(state->levinsonSt);
296b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
297b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    return 0;
298b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber}
299b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
300b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/*
301b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
302b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber FUNCTION NAME: lpc_exit
303b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
304b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber INPUT AND OUTPUT DEFINITIONS
305b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
306b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Inputs:
307b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    state = pointer to pointer of state data of type lpcState
308b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
309b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Outputs:
310b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    None
311b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
312b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Returns:
313b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    None
314b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
315b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Global Variables Used:
316b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    None.
317b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
318b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Local Variables Needed:
319b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    None.
320b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
321b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
322b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber FUNCTION DESCRIPTION
323b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
324b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber This function frees the state data for the LPC module.
325b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
326b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
327b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber REQUIREMENTS
328b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
329b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber None.
330b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
331b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
332b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber REFERENCES
333b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
334b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber lpc.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001
335b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
336b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
337b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber PSEUDO-CODE
338b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
339b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
340b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber  if (state == NULL || *state == NULL)
341b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber      return;
342b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
343b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber  Levinson_exit(&(*state)->levinsonSt);
344b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
345b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber  // deallocate memory
346b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber  free(*state);
347b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber  *state = NULL;
348b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
349b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber  return;
350b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
351b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
352b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
353b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber RESOURCES USED [optional]
354b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
355b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber When the code is written for a specific target processor the
356b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber the resources used should be documented below.
357b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
358b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber HEAP MEMORY USED: x bytes
359b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
360b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber STACK MEMORY USED: x bytes
361b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
362b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CLOCK CYCLES: (cycle count equation for this function) + (variable
363b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber                used to represent cycle count for each subroutine
364b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber                called)
365b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber     where: (cycle count variable) = cycle count for [subroutine
366b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber                                     name]
367b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
368b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
369b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CAUTION [optional]
370b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber [State any special notes, constraints or cautions for users of this function]
371b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
372b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
373b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber*/
374b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Hubervoid lpc_exit(lpcState **state)
375b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber{
376b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    if (state == NULL || *state == NULL)
377b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        return;
378b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
379b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    Levinson_exit(&(*state)->levinsonSt);
380b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
381b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    /* deallocate memory */
382b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    free(*state);
383b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    *state = NULL;
384b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
385b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    return;
386b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber}
387b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
388b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
389b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/*
390b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
391b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber FUNCTION NAME: lpc
392b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
393b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber INPUT AND OUTPUT DEFINITIONS
394b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
395b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Inputs:
396b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    state = pointer to state data of type lpcState
397b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    mode  = coder mode of type enum Mode
398b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    x[]   = pointer to input signal (Q15) of type Word16
399b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    x_12k2[] = pointer to input signal (EFR) (Q15) of type Word16
400b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    pOverflow = pointer to overflow indicator of type Flag
401b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
402b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Outputs:
403b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    a[]   = pointer to predictor coefficients (Q12) of type Word16
404b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
405b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Returns:
406b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    None
407b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
408b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Global Variables Used:
409b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    None.
410b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
411b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Local Variables Needed:
412b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    None.
413b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
414b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
415b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber FUNCTION DESCRIPTION
416b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
417b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber This function executes the LPC functionality for GSM AMR.
418b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
419b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
420b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber REQUIREMENTS
421b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
422b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber None.
423b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
424b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
425b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber REFERENCES
426b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
427b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber lpc.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001
428b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
429b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
430b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber PSEUDO-CODE
431b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
432b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber   Word16 rc[4];                  // First 4 reflection coefficients Q15
433b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber   Word16 rLow[MP1], rHigh[MP1];  // Autocorrelations low and hi
434b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber                                  // No fixed Q value but normalized
435b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber                                  // so that overflow is avoided
436b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
437b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber   if ( sub ((Word16)mode, (Word16)MR122) == 0)
438b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber   {
439b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber       // Autocorrelations
440b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber       Autocorr(x_12k2, M, rHigh, rLow, window_160_80);
441b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber       // Lag windowing
442b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber       Lag_window(M, rHigh, rLow);
443b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber       // Levinson Durbin
444b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber       Levinson(st->levinsonSt, rHigh, rLow, &a[MP1], rc);
445b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
446b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber       // Autocorrelations
447b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber       Autocorr(x_12k2, M, rHigh, rLow, window_232_8);
448b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber       // Lag windowing
449b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber       Lag_window(M, rHigh, rLow);
450b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber       // Levinson Durbin
451b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber       Levinson(st->levinsonSt, rHigh, rLow, &a[MP1 * 3], rc);
452b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber   }
453b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber   else
454b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber   {
455b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber       // Autocorrelations
456b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber       Autocorr(x, M, rHigh, rLow, window_200_40);
457b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber       // Lag windowing
458b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber       Lag_window(M, rHigh, rLow);
459b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber       // Levinson Durbin
460b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber       Levinson(st->levinsonSt, rHigh, rLow, &a[MP1 * 3], rc);
461b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber   }
462b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
463b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber   return 0;
464b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
465b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
466b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber RESOURCES USED [optional]
467b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
468b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber When the code is written for a specific target processor the
469b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber the resources used should be documented below.
470b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
471b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber HEAP MEMORY USED: x bytes
472b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
473b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber STACK MEMORY USED: x bytes
474b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
475b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CLOCK CYCLES: (cycle count equation for this function) + (variable
476b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber                used to represent cycle count for each subroutine
477b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber                called)
478b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber     where: (cycle count variable) = cycle count for [subroutine
479b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber                                     name]
480b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
481b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
482b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CAUTION [optional]
483b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber [State any special notes, constraints or cautions for users of this function]
484b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
485b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
486b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber*/
487b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Hubervoid lpc(
488b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    lpcState *st,     /* i/o: State struct                */
489b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    enum Mode mode,   /* i  : coder mode                  */
490b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    Word16 x[],       /* i  : Input signal           Q15  */
491b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    Word16 x_12k2[],  /* i  : Input signal (EFR)     Q15  */
492b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    Word16 a[],       /* o  : predictor coefficients Q12  */
493b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    Flag   *pOverflow
494b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber)
495b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber{
496b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    Word16 rc[4];                  /* First 4 reflection coefficients Q15 */
497b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    Word16 rLow[MP1], rHigh[MP1];  /* Autocorrelations low and hi      */
498b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    /* No fixed Q value but normalized  */
499b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    /* so that overflow is avoided      */
500b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
501b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    if (mode == MR122)
502b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    {
503b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        /* Autocorrelations */
504b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        Autocorr(x_12k2, M, rHigh, rLow, window_160_80, pOverflow);
505b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        /* Lag windowing    */
506b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        Lag_window(M, rHigh, rLow, pOverflow);
507b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        /* Levinson Durbin  */
508b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        Levinson(st->levinsonSt, rHigh, rLow, &a[MP1], rc, pOverflow);
509b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
510b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        /* Autocorrelations */
511b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        Autocorr(x_12k2, M, rHigh, rLow, window_232_8, pOverflow);
512b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        /* Lag windowing    */
513b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        Lag_window(M, rHigh, rLow, pOverflow);
514b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        /* Levinson Durbin  */
515b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        Levinson(st->levinsonSt, rHigh, rLow, &a[MP1 * 3], rc, pOverflow);
516b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    }
517b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    else
518b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    {
519b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        /* Autocorrelations */
520b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        Autocorr(x, M, rHigh, rLow, window_200_40, pOverflow);
521b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        /* Lag windowing    */
522b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        Lag_window(M, rHigh, rLow, pOverflow);
523b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        /* Levinson Durbin  */
524b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        Levinson(st->levinsonSt, rHigh, rLow, &a[MP1 * 3], rc, pOverflow);
525b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    }
526b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
527b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber}
528b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
529b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
530b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
531b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
532b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
533b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
534b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
535b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
536b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
537b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
538b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
539b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
540b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
541b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
542b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
543