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