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