1a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber/* ------------------------------------------------------------------ 2a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber * Copyright (C) 1998-2009 PacketVideo 3a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber * 4a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber * you may not use this file except in compliance with the License. 6a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber * You may obtain a copy of the License at 7a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber * 8a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber * 10a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber * Unless required by applicable law or agreed to in writing, software 11a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 13a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber * express or implied. 14a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber * See the License for the specific language governing permissions 15a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber * and limitations under the License. 16a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber * ------------------------------------------------------------------- 17a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber */ 18a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber/**************************************************************************************** 19a30d40083856cb4edd225faf8b488fab156e5976Andreas HuberPortions of this file are derived from the following 3GPP standard: 20a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 21a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 3GPP TS 26.073 22a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber ANSI-C code for the Adaptive Multi-Rate (AMR) speech codec 23a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Available from http://www.3gpp.org 24a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 25a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber(C) 2004, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TTA, TTC) 26a30d40083856cb4edd225faf8b488fab156e5976Andreas HuberPermission to distribute, modify and use this file under the standard license 27a30d40083856cb4edd225faf8b488fab156e5976Andreas Huberterms listed above has been obtained from the copyright holder. 28a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber****************************************************************************************/ 29a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber/* 30a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 31a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Pathname: ./audio/gsm-amr/c/src/lsp_az.c 32a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Funtions: Get_lsp_pol 33a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Lsp_Az 34a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 35a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 36a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber REVISION HISTORY 37a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 38a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Description: Updated template used to PV coding template. First attempt at 39a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber optimizing C code. 40a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 41a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Description: Deleted all Local stores needed/modified. Optimized Lsp_Az 42a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber function by getting rid of call to L_shr_r function. 43a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 44a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Description: Updated file per comments gathered from Phase 2/3 review. 45a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 46a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Description: Added setting of Overflow flag in the inlined code. 47a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 48a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Description: 1. Optimized Lsp_Az function code. 49a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 2. Changed Input/Output definitions by adding Word type. 50a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 51a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Description: Made changes based on review meeting. 52a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1. Removed pseudocode. 53a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 54a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Description: Synchronized file with UMTS version 3.2.0. Updated coding 55a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber template. Removed unnecessary include files. 56a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 57a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Description: Replaced basic_op.h and oper_32b.h with the header files of the 58a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber math functions used in the file. 59a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 60a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Description: Modified to pass overflow flag through to L_add and L_sub. The 61a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber flag is passed back to the calling function by pointer reference. 62a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 63a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Description: Removed the id line since it was removed in the header file by 64a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Ken. 65a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 66a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Description: Added the write-only variable, pOverflow, to the inputs section. 67a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 68a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Description: For lsp_az() and Get_lsp_pol() 69a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1. Eliminated unused include files. 70a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 2. Replaced array addressing by pointers 71a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 3. Eliminated math operations that unnecessary checked for 72a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber saturation, in some cases this by shifting before adding and 73a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber in other cases by evaluating the operands 74a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 4. Unrolled loops to speed up processing 75a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 5. Replaced mpy_32_16 by multpilcations in place 76a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 6. Eliminated if-else statements for sign extension when 77a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber right-shifting 78a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 79a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Description: Added casting to eliminate warnings, and eliminated include 80a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber files that now are chosen by OSCL definitions 81a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 82a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Description: Replaced "int" and/or "char" with defined types. 83a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Added proper casting (Word32) to some left shifting operations 84a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 85a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Who: Date: 86a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Description: 87a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 88a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 89a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber MODULE DESCRIPTION 90a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 91a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber This file contains functions that convert line spectral pairs (LSP) to 92a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber linear predictive (LP) coefficients (filter order = 10). The functions 93a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber included in this file include Get_lsp_pol, which finds the coefficients of 94a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber F1(z) and F2(z), and Lsp_Az, which converts LSP to LPC by multiplying 95a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber F1(z) by 1+z^(-1) and F2(z) by 1-z^(-1), then calculating A(z) = (F1(z) + 96a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber F2(z))/2. 97a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 98a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 99a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber*/ 100a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 101a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber/*---------------------------------------------------------------------------- 102a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber; INCLUDES 103a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber----------------------------------------------------------------------------*/ 104a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber#include "lsp_az.h" 105a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 106a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber/*---------------------------------------------------------------------------- 107a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber; MACROS 108a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber; Define module specific macros here 109a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber----------------------------------------------------------------------------*/ 110a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 111a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber/*---------------------------------------------------------------------------- 112a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber; DEFINES 113a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber; Include all pre-processor statements here. Include conditional 114a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber; compile variables also. 115a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber----------------------------------------------------------------------------*/ 116a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 117a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber/*---------------------------------------------------------------------------- 118a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber; LOCAL FUNCTION DEFINITIONS 119a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber; Function Prototype declaration 120a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber----------------------------------------------------------------------------*/ 121a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 122a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber/*---------------------------------------------------------------------------- 123a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber; LOCAL VARIABLE DEFINITIONS 124a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber; Variable declaration - defined here and used outside this module 125a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber----------------------------------------------------------------------------*/ 126a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 127a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 128a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber/* 129a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 130a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber FUNCTION NAME: Get_lsp_pol 131a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 132a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber INPUT AND OUTPUT DEFINITIONS 133a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 134a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Inputs: 135a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsp = pointer to the buffer containing the line spectral pairs (LSP) 136a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber of type Word16 137a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber f = pointer to the polynomial of type Word32 to be generated 138a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 139a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber pOverflow = pointer set in case where one of the operations overflows. 140a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber [data type Pointer to Flag] 141a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 142a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Outputs: 143a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber buffer pointed to by f contains the polynomial generated 144a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 145a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber pOverflow = pointer set in case where one of the operations overflows. 146a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber [data type Pointer to Flag] 147a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 148a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Returns: 149a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber None 150a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 151a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Global Variables Used: 152a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber None 153a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 154a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Local Variables Needed: 155a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber None 156a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 157a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 158a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber FUNCTION DESCRIPTION 159a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 160a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber This function finds the polynomial F1(z) or F2(z) from the LSPs. If the LSP 161a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber vector is passed at address 0, F1(z) is computed and if it is passed at 162a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber address 1, F2(z) is computed. 163a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 164a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber This is performed by expanding the product polynomials: 165a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 166a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber F1(z) = product ( 1 - 2 lsp[i] z^-1 + z^-2 ) 167a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber i=0,2,4,6,8 168a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber F2(z) = product ( 1 - 2 lsp[i] z^-1 + z^-2 ) 169a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber i=1,3,5,7,9 170a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 171a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber where lsp[] is the LSP vector in the cosine domain. 172a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 173a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber The expansion is performed using the following recursion: 174a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 175a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber f[0] = 1 176a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber b = -2.0 * lsp[0] 177a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber f[1] = b 178a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber for i=2 to 5 do 179a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber b = -2.0 * lsp[2*i-2]; 180a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber for j=i-1 down to 2 do 181a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber f[j] = f[j] + b*f[j-1] + f[j-2]; 182a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber f[1] = f[1] + b; 183a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 184a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 185a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber REQUIREMENTS 186a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 187a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber None 188a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 189a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 190a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber REFERENCES 191a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 192a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsp_az.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001 193a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 194a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 195a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber PSEUDO-CODE 196a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 197a30d40083856cb4edd225faf8b488fab156e5976Andreas Huberstatic void Get_lsp_pol (Word16 *lsp, Word32 *f) 198a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber{ 199a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 i, j, hi, lo; 200a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word32 t0; 201a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 202a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber // f[0] = 1.0; 203a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *f = L_mult (4096, 2048); 204a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber f++; 205a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *f = L_msu ((Word32) 0, *lsp, 512); // f[1] = -2.0 * lsp[0]; 206a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber f++; 207a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsp += 2; // Advance lsp pointer 208a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 209a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber for (i = 2; i <= 5; i++) 210a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber { 211a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *f = f[-2]; 212a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 213a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber for (j = 1; j < i; j++, f--) 214a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber { 215a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber L_Extract (f[-1], &hi, &lo); 216a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber t0 = Mpy_32_16 (hi, lo, *lsp); // t0 = f[-1] * lsp 217a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber t0 = L_shl (t0, 1); 218a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *f = L_add (*f, f[-2]); // *f += f[-2] 219a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *f = L_sub (*f, t0); // *f -= t0 220a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } 221a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *f = L_msu (*f, *lsp, 512); // *f -= lsp<<9 222a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber f += i; // Advance f pointer 223a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsp += 2; // Advance lsp pointer 224a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } 225a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 226a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber return; 227a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber} 228a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 229a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 230a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber RESOURCES USED [optional] 231a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 232a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber When the code is written for a specific target processor the 233a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber the resources used should be documented below. 234a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 235a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber HEAP MEMORY USED: x bytes 236a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 237a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber STACK MEMORY USED: x bytes 238a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 239a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber CLOCK CYCLES: (cycle count equation for this function) + (variable 240a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber used to represent cycle count for each subroutine 241a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber called) 242a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber where: (cycle count variable) = cycle count for [subroutine 243a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber name] 244a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 245a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 246a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber CAUTION [optional] 247a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber [State any special notes, constraints or cautions for users of this function] 248a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 249a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 250a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber*/ 251a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 252a30d40083856cb4edd225faf8b488fab156e5976Andreas Huberstatic void Get_lsp_pol( 253a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 *lsp, 254a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word32 *f, 255a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Flag *pOverflow) 256a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber{ 257a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber register Word16 i; 258a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber register Word16 j; 259a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 260a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 hi; 261a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 lo; 262a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word32 t0; 263a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber OSCL_UNUSED_ARG(pOverflow); 264a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 265a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber /* f[0] = 1.0; */ 266a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *f++ = (Word32) 0x01000000; 267a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *f++ = (Word32) - *(lsp++) << 10; /* f[1] = -2.0 * lsp[0]; */ 268a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsp++; /* Advance lsp pointer */ 269a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 270a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber for (i = 2; i <= 5; i++) 271a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber { 272a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *f = *(f - 2); 273a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 274a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber for (j = 1; j < i; j++) 275a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber { 276a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber hi = (Word16)(*(f - 1) >> 16); 277a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 278a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lo = (Word16)((*(f - 1) >> 1) - ((Word32) hi << 15)); 279a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 280a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber t0 = ((Word32)hi * *lsp); 281a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber t0 += ((Word32)lo * *lsp) >> 15; 282a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 283a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *(f) += *(f - 2); /* *f += f[-2] */ 284a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *(f--) -= t0 << 2; /* *f -= t0 */ 285a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 286a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } 287a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 288a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *f -= (Word32)(*lsp++) << 10; 289a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 290a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber f += i; 291a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsp++; 292a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } 293a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 294a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber return; 295a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber} 296a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 297a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber/****************************************************************************/ 298a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 299a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 300a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber/* 301a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 302a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber FUNCTION NAME: Get_lsp_pol_wrapper 303a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 304a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber INPUT AND OUTPUT DEFINITIONS 305a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 306a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Inputs: 307a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsp = pointer to the buffer containing the line spectral pairs (LSP) 308a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber of type Word16 309a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber f = pointer to the polynomial of type Word32 to be generated 310a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 311a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber pOverflow = pointer set in case where one of the operations overflows. 312a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber [data type Pointer to Flag] 313a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 314a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Outputs: 315a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber buffer pointed to by f contains the polynomial generated 316a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 317a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber pOverflow = pointer set in case where one of the operations overflows. 318a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber [data type Pointer to Flag] 319a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 320a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Returns: 321a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber None 322a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 323a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Global Variables Used: 324a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber None 325a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 326a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Local Variables Needed: 327a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber None 328a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 329a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 330a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber FUNCTION DESCRIPTION 331a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 332a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber This function provides external access to the static function Get_lsp_pol. 333a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 334a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 335a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber REQUIREMENTS 336a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 337a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber None 338a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 339a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 340a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber REFERENCES 341a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 342a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber None 343a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 344a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 345a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber PSEUDO-CODE 346a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 347a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber CALL Get_lsp_pol(lsp = lsp_ptr 348a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber f = f_ptr ) 349a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber MODIFYING(nothing) 350a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber RETURNING(nothing) 351a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 352a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 353a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber RESOURCES USED [optional] 354a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 355a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber When the code is written for a specific target processor the 356a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber the resources used should be documented below. 357a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 358a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber HEAP MEMORY USED: x bytes 359a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 360a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber STACK MEMORY USED: x bytes 361a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 362a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber CLOCK CYCLES: (cycle count equation for this function) + (variable 363a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber used to represent cycle count for each subroutine 364a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber called) 365a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber where: (cycle count variable) = cycle count for [subroutine 366a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber name] 367a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 368a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 369a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber CAUTION [optional] 370a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber [State any special notes, constraints or cautions for users of this function] 371a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 372a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 373a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber*/ 374a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 375a30d40083856cb4edd225faf8b488fab156e5976Andreas Hubervoid Get_lsp_pol_wrapper( 376a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 *lsp, 377a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word32 *f, 378a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Flag *pOverflow) 379a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber{ 380a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber /*---------------------------------------------------------------------------- 381a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber CALL Get_lsp_pol(lsp = lsp_ptr 382a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber f = f_ptr ) 383a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber ----------------------------------------------------------------------------*/ 384a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Get_lsp_pol(lsp, f, pOverflow); 385a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 386a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber /*---------------------------------------------------------------------------- 387a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber MODIFYING(nothing) 388a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber RETURNING(nothing) 389a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber ----------------------------------------------------------------------------*/ 390a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber return; 391a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber} 392a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 393a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber/****************************************************************************/ 394a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 395a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 396a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber/* 397a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 398a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber FUNCTION NAME: Lsp_Az 399a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 400a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber INPUT AND OUTPUT DEFINITIONS 401a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 402a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Inputs: 403a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsp = pointer to the buffer containing the line spectral pairs (LSP) 404a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber of type Word16 405a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 406a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber a = pointer to the buffer containing Linear Predictive (LP) 407a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber coefficients of type Word16 to be generated 408a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 409a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber pOverflow = pointer set in case where one of the operations overflows. 410a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber [data type Pointer to Flag] 411a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 412a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Local Stores/Buffers/Pointers Needed: 413a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber None 414a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 415a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Global Stores/Buffers/Pointers Needed: 416a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber None 417a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 418a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Outputs: 419a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber pOverflow = pointer set in case where one of the operations overflows. 420a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber [data type Pointer to Flag] 421a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 422a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Pointers and Buffers Modified: 423a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber a buffer contains the generated Linear Predictive (LP) coefficients 424a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 425a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Local Stores Modified: 426a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber None 427a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 428a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Global Stores Modified: 429a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber None 430a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 431a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 432a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber FUNCTION DESCRIPTION 433a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 434a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber This function converts from the line spectral pairs (LSP) to LP coefficients 435a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber for a 10th order filter. 436a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 437a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber This is done by: 438a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber (1) Find the coefficients of F1(z) and F2(z) (see Get_lsp_pol) 439a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber (2) Multiply F1(z) by 1+z^{-1} and F2(z) by 1-z^{-1} 440a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber (3) A(z) = ( F1(z) + F2(z) ) / 2 441a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 442a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 443a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber REQUIREMENTS 444a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 445a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber None 446a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 447a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 448a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber REFERENCES 449a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 450a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsp_az.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001 451a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 452a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 453a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber PSEUDO-CODE 454a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 455a30d40083856cb4edd225faf8b488fab156e5976Andreas Hubervoid Lsp_Az ( 456a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 lsp[], // (i) : line spectral frequencies 457a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 a[] // (o) : predictor coefficients (order = 10) 458a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber) 459a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber{ 460a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 i, j; 461a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word32 f1[6], f2[6]; 462a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word32 t0; 463a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 464a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Get_lsp_pol (&lsp[0], f1); 465a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Get_lsp_pol (&lsp[1], f2); 466a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 467a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber for (i = 5; i > 0; i--) 468a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber { 469a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber f1[i] = L_add (f1[i], f1[i - 1]); // f1[i] += f1[i-1]; 470a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber f2[i] = L_sub (f2[i], f2[i - 1]); // f2[i] -= f2[i-1]; 471a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } 472a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 473a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber a[0] = 4096; 474a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber for (i = 1, j = 10; i <= 5; i++, j--) 475a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber { 476a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber t0 = L_add (f1[i], f2[i]); // f1[i] + f2[i] 477a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber a[i] = extract_l (L_shr_r (t0, 13)); 478a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber t0 = L_sub (f1[i], f2[i]); // f1[i] - f2[i] 479a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber a[j] = extract_l (L_shr_r (t0, 13)); 480a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } 481a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 482a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber return; 483a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber} 484a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 485a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 486a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber RESOURCES USED [optional] 487a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 488a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber When the code is written for a specific target processor the 489a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber the resources used should be documented below. 490a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 491a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber HEAP MEMORY USED: x bytes 492a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 493a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber STACK MEMORY USED: x bytes 494a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 495a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber CLOCK CYCLES: (cycle count equation for this function) + (variable 496a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber used to represent cycle count for each subroutine 497a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber called) 498a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber where: (cycle count variable) = cycle count for [subroutine 499a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber name] 500a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 501a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 502a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber CAUTION [optional] 503a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber [State any special notes, constraints or cautions for users of this function] 504a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 505a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 506a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber*/ 507a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 508a30d40083856cb4edd225faf8b488fab156e5976Andreas Hubervoid Lsp_Az( 509a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 lsp[], /* (i) : line spectral frequencies */ 510a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 a[], /* (o) : predictor coefficients (order = 10) */ 511a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Flag *pOverflow /* (o) : overflow flag */ 512a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber) 513a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber{ 514a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber register Word16 i; 515a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber register Word16 j; 516a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 517a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word32 f1[6]; 518a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word32 f2[6]; 519a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word32 t0; 520a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word32 t1; 521a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 *p_a = &a[0]; 522a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word32 *p_f1; 523a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word32 *p_f2; 524a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 525a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Get_lsp_pol(&lsp[0], f1, pOverflow); 526a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 527a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Get_lsp_pol(&lsp[1], f2, pOverflow); 528a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 529a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber p_f1 = &f1[5]; 530a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber p_f2 = &f2[5]; 531a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 532a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber for (i = 5; i > 0; i--) 533a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber { 534a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *(p_f1--) += f1[i-1]; 535a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *(p_f2--) -= f2[i-1]; 536a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } 537a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 538a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *(p_a++) = 4096; 539a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber p_f1 = &f1[1]; 540a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber p_f2 = &f2[1]; 541a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 542a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber for (i = 1, j = 10; i <= 5; i++, j--) 543a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber { 544a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber t0 = *(p_f1) + *(p_f2); /* f1[i] + f2[i] */ 545a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber t1 = *(p_f1++) - *(p_f2++); /* f1[i] - f2[i] */ 546a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 547a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber t0 = t0 + ((Word32) 1 << 12); 548a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber t1 = t1 + ((Word32) 1 << 12); 549a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 550a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *(p_a++) = (Word16)(t0 >> 13); 551a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber a[j] = (Word16)(t1 >> 13); 552a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } 553a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 554a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber return; 555a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber} 556