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/q_plsf_3.c 32a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Funtions: Vq_subvec4 33a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Test_Vq_subvec4 34a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Vq_subvec3 35a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Test_Vq_subvec3 36a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Q_plsf_3 37a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 38a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 39a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber REVISION HISTORY 40a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 41a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Description: Updated template used to PV coding template. First attempt at 42a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber optimizing C code. 43a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 44a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Description: Updated modules per Phase 2/3 review comments. Updated 45a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Vq_subvec3 pseudo-code to reflect the new restructured code. 46a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 47a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Description: Added setting of Overflow flag in inlined code. 48a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 49a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Description: Synchronized file with UMTS version 3.2.0. Updated coding 50a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber template. Removed unnecessary include files. 51a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 52a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Description: Replaced basic_op.h with the header file of the math functions 53a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber used in the file. 54a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 55a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Description: Made the following changes per comments from Phase 2/3 review: 56a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1. Fixed typecasting issue with TI C compiler. 57a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 2. Optimized IF stament in Vq_subvec3() function. 58a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 3. Updated copyright year. 59a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 60a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Description: Removed redundancy in the Vq_subvec4 function. 61a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 62a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Description: Updated to accept new parameter, Flag *pOverflow. 63a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 64a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Description: Per review comments, added pOverflow flag description 65a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber to the input/outputs section. 66a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 67a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Description: Corrected missed Overflow global variables -- changed to 68a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber proper pOverflow. 69a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 70a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Description: Optimized all functions to further reduce clock cycle usage. 71a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Updated copyright year. 72a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 73a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Description: Added left shift by 1 in line 1050 of Q_plsf_3(). 74a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 75a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Description: Replaced OSCL mem type functions and eliminated include 76a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber files that now are chosen by OSCL definitions 77a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 78a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Description: Replaced "int" and/or "char" with OSCL defined types. 79a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 80a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Description: Added #ifdef __cplusplus around extern'ed table. 81a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 82a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Who: Date: 83a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Description: 84a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 85a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 86a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber MODULE DESCRIPTION 87a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 88a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber This file contains the functions that perform the quantization of LSF 89a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber parameters with first order MA prediction and split by 3 vector 90a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber quantization (split-VQ). 91a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 92a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 93a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber*/ 94a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 95a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber/*---------------------------------------------------------------------------- 96a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber; INCLUDES 97a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber----------------------------------------------------------------------------*/ 98a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 99a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber#include <string.h> 100a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 101a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber#include "q_plsf.h" 102a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber#include "typedef.h" 103a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber#include "lsp_lsf.h" 104a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber#include "reorder.h" 105a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber#include "lsfwt.h" 106a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 107a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber/*--------------------------------------------------------------------------*/ 108a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber#ifdef __cplusplus 109a30d40083856cb4edd225faf8b488fab156e5976Andreas Huberextern "C" 110a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber{ 111a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber#endif 112a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 113a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber /*---------------------------------------------------------------------------- 114a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber ; MACROS 115a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber ; Define module specific macros here 116a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber ----------------------------------------------------------------------------*/ 117a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 118a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber /*---------------------------------------------------------------------------- 119a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber ; DEFINES 120a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber ; Include all pre-processor statements here. Include conditional 121a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber ; compile variables also. 122a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber ----------------------------------------------------------------------------*/ 123a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber#define PAST_RQ_INIT_SIZE 8 124a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 125a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber /*---------------------------------------------------------------------------- 126a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber ; LOCAL FUNCTION DEFINITIONS 127a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber ; Function Prototype declaration 128a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber ----------------------------------------------------------------------------*/ 129a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 130a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber /*---------------------------------------------------------------------------- 131a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber ; LOCAL VARIABLE DEFINITIONS 132a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber ; Variable declaration - defined here and used outside this module 133a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber ----------------------------------------------------------------------------*/ 134a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 135a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber /*---------------------------------------------------------------------------- 136a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber ; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES 137a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber ; Declare variables used in this module but defined elsewhere 138a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber ----------------------------------------------------------------------------*/ 139a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber /* Codebooks of LSF prediction residual */ 140a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber extern const Word16 mean_lsf_3[]; 141a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 142a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber extern const Word16 pred_fac_3[]; 143a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 144a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber extern const Word16 dico1_lsf_3[]; 145a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber extern const Word16 dico2_lsf_3[]; 146a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber extern const Word16 dico3_lsf_3[]; 147a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 148a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber extern const Word16 mr515_3_lsf[]; 149a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber extern const Word16 mr795_1_lsf[]; 150a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 151a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber extern const Word16 past_rq_init[]; 152a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 153a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber /*--------------------------------------------------------------------------*/ 154a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber#ifdef __cplusplus 155a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber} 156a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber#endif 157a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 158a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber/* 159a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 160a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber FUNCTION NAME: Vq_subvec4 161a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 162a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber INPUT AND OUTPUT DEFINITIONS 163a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 164a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Inputs: 165a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsf_r1 = pointer to the first LSF residual vector (Q15) (Word16) 166a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dico = pointer to the quantization codebook (Q15) (const Word16) 167a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber wf1 = pointer to the first LSF weighting factor (Q13) (Word16) 168a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dico_size = size of quantization codebook (Q0) (Word16) 169a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 170a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Outputs: 171a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber buffer pointed to by lsf_r1 contains the selected vector 172a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber pOverflow -- pointer to Flag -- Flag set when overflow occurs 173a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 174a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Returns: 175a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber index = quantization index (Q0) (Word16) 176a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 177a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Global Variables Used: 178a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber None 179a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 180a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Local Variables Needed: 181a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber None 182a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 183a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 184a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber FUNCTION DESCRIPTION 185a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 186a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber This function performs the quantization of a 4-dimensional subvector. 187a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 188a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 189a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber REQUIREMENTS 190a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 191a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber None 192a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 193a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 194a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber REFERENCES 195a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 196a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber q_plsf_3.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001 197a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 198a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 199a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber PSEUDO-CODE 200a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 201a30d40083856cb4edd225faf8b488fab156e5976Andreas Huberstatic Word16 202a30d40083856cb4edd225faf8b488fab156e5976Andreas HuberVq_subvec4( // o: quantization index, Q0 203a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 * lsf_r1, // i: 1st LSF residual vector, Q15 204a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 * dico, // i: quantization codebook, Q15 205a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 * wf1, // i: 1st LSF weighting factors, Q13 206a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 dico_size) // i: size of quantization codebook, Q0 207a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber{ 208a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 i, index = 0; 209a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 *p_dico, temp; 210a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word32 dist_min, dist; 211a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 212a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dist_min = MAX_32; 213a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber p_dico = dico; 214a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 215a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber for (i = 0; i < dico_size; i++) 216a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber { 217a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber temp = sub (lsf_r1[0], *p_dico++); 218a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber temp = mult (wf1[0], temp); 219a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dist = L_mult (temp, temp); 220a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 221a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber temp = sub (lsf_r1[1], *p_dico++); 222a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber temp = mult (wf1[1], temp); 223a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dist = L_mac (dist, temp, temp); 224a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 225a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber temp = sub (lsf_r1[2], *p_dico++); 226a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber temp = mult (wf1[2], temp); 227a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dist = L_mac (dist, temp, temp); 228a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 229a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber temp = sub (lsf_r1[3], *p_dico++); 230a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber temp = mult (wf1[3], temp); 231a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dist = L_mac (dist, temp, temp); 232a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 233a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 234a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber if (L_sub (dist, dist_min) < (Word32) 0) 235a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber { 236a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dist_min = dist; 237a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber index = i; 238a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } 239a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } 240a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 241a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber // Reading the selected vector 242a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 243a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber p_dico = &dico[shl (index, 2)]; 244a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsf_r1[0] = *p_dico++; 245a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsf_r1[1] = *p_dico++; 246a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsf_r1[2] = *p_dico++; 247a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsf_r1[3] = *p_dico; 248a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 249a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber return index; 250a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 251a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber} 252a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 253a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 254a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber RESOURCES USED [optional] 255a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 256a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber When the code is written for a specific target processor the 257a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber the resources used should be documented below. 258a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 259a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber HEAP MEMORY USED: x bytes 260a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 261a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber STACK MEMORY USED: x bytes 262a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 263a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber CLOCK CYCLES: (cycle count equation for this function) + (variable 264a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber used to represent cycle count for each subroutine 265a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber called) 266a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber where: (cycle count variable) = cycle count for [subroutine 267a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber name] 268a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 269a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 270a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber CAUTION [optional] 271a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber [State any special notes, constraints or cautions for users of this function] 272a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 273a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 274a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber*/ 275a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 276a30d40083856cb4edd225faf8b488fab156e5976Andreas Huberstatic Word16 Vq_subvec4( /* o: quantization index, Q0 */ 277a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 * lsf_r1, /* i: 1st LSF residual vector, Q15 */ 278a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber const Word16 * dico, /* i: quantization codebook, Q15 */ 279a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 * wf1, /* i: 1st LSF weighting factors, Q13 */ 280a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 dico_size, /* i: size of quantization codebook, Q0 */ 281a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Flag *pOverflow /* o : Flag set when overflow occurs */ 282a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber) 283a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber{ 284a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber register Word16 i; 285a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 temp; 286a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber const Word16 *p_dico; 287a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 index = 0; 288a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word32 dist_min; 289a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word32 dist; 290a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 291a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 lsf_r1_0; 292a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 lsf_r1_1; 293a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 lsf_r1_2; 294a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 lsf_r1_3; 295a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 296a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 wf1_0; 297a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 wf1_1; 298a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 wf1_2; 299a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 wf1_3; 300a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 301a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber OSCL_UNUSED_ARG(pOverflow); 302a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 303a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dist_min = MAX_32; 304a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber p_dico = dico; 305a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 306a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsf_r1_0 = lsf_r1[0]; 307a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsf_r1_1 = lsf_r1[1]; 308a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsf_r1_2 = lsf_r1[2]; 309a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsf_r1_3 = lsf_r1[3]; 310a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 311a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber wf1_0 = wf1[0]; 312a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber wf1_1 = wf1[1]; 313a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber wf1_2 = wf1[2]; 314a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber wf1_3 = wf1[3]; 315a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 316a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber for (i = 0; i < dico_size; i++) 317a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber { 318a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber temp = lsf_r1_0 - (*p_dico++); 319a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber temp = (Word16)((((Word32) wf1_0) * temp) >> 15); 320a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dist = ((Word32) temp) * temp; 321a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 322a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber temp = lsf_r1_1 - (*p_dico++); 323a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber temp = (Word16)((((Word32) wf1_1) * temp) >> 15); 324a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dist += ((Word32) temp) * temp; 325a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 326a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber temp = lsf_r1_2 - (*p_dico++); 327a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber temp = (Word16)((((Word32) wf1_2) * temp) >> 15); 328a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dist += ((Word32) temp) * temp; 329a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 330a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber temp = lsf_r1_3 - (*p_dico++); 331a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber temp = (Word16)((((Word32) wf1_3) * temp) >> 15); 332a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dist += ((Word32) temp) * temp; 333a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 334a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber if (dist < dist_min) 335a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber { 336a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dist_min = dist; 337a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber index = i; 338a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } 339a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } 340a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 341a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber /* Reading the selected vector */ 342a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 343a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber p_dico = dico + (index << 2); 344a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *lsf_r1++ = *p_dico++; 345a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *lsf_r1++ = *p_dico++; 346a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *lsf_r1++ = *p_dico++; 347a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *lsf_r1 = *p_dico; 348a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 349a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber return(index); 350a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 351a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber} 352a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 353a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber/****************************************************************************/ 354a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 355a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 356a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber/* 357a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 358a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber FUNCTION NAME: Test_Vq_subvec4 359a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 360a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber INPUT AND OUTPUT DEFINITIONS 361a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 362a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Inputs: 363a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsf_r1 = pointer to the first LSF residual vector (Q15) (Word16) 364a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dico = pointer to the quantization codebook (Q15) (const Word16) 365a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber wf1 = pointer to the first LSF weighting factor (Q13) (Word16) 366a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dico_size = size of quantization codebook (Q0) (Word16) 367a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 368a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Outputs: 369a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber buffer pointed to by lsf_r1 contains the selected vector 370a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber pOverflow -- pointer to Flag -- Flag set when overflow occurs 371a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 372a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Returns: 373a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber index = quantization index (Q0) (Word16) 374a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 375a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Global Variables Used: 376a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber None 377a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 378a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Local Variables Needed: 379a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber None 380a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 381a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 382a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber FUNCTION DESCRIPTION 383a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 384a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber This function calls the static function Vq_subvec4. It is used for testing 385a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber purposes only 386a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 387a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 388a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber REQUIREMENTS 389a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 390a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber None 391a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 392a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 393a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber REFERENCES 394a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 395a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber None 396a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 397a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 398a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber PSEUDO-CODE 399a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 400a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 401a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber CALL Vq_subvec4(lsf_r1 = lsf_r1 402a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dico = dico 403a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber wf1 = wf1 404a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dico_size = dico_size) 405a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber MODIFYING(nothing) 406a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber RETURNING(index = tst_index4) 407a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 408a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 409a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber RESOURCES USED [optional] 410a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 411a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber When the code is written for a specific target processor the 412a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber the resources used should be documented below. 413a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 414a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber HEAP MEMORY USED: x bytes 415a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 416a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber STACK MEMORY USED: x bytes 417a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 418a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber CLOCK CYCLES: (cycle count equation for this function) + (variable 419a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber used to represent cycle count for each subroutine 420a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber called) 421a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber where: (cycle count variable) = cycle count for [subroutine 422a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber name] 423a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 424a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 425a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber CAUTION [optional] 426a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber [State any special notes, constraints or cautions for users of this function] 427a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 428a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 429a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber*/ 430a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 431a30d40083856cb4edd225faf8b488fab156e5976Andreas HuberWord16 Test_Vq_subvec4( 432a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 * lsf_r1, 433a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber const Word16 * dico, 434a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 * wf1, 435a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 dico_size, 436a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Flag *pOverflow) 437a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber{ 438a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 tst_index4 = 0; 439a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 440a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber /*------------------------------------------------------------------------ 441a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber CALL Vq_subvec4(lsf_r1 = lsf_r1 442a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dico = dico 443a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber wf1 = wf1 444a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dico_size = dico_size) 445a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber MODIFYING(nothing) 446a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber RETURNING(index = index) 447a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber ------------------------------------------------------------------------*/ 448a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber tst_index4 = 449a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Vq_subvec4( 450a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsf_r1, 451a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dico, 452a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber wf1, 453a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dico_size, 454a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber pOverflow); 455a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 456a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber return(tst_index4); 457a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 458a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber} 459a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 460a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber/****************************************************************************/ 461a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 462a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber/* 463a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 464a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber FUNCTION NAME: Vq_subvec3 465a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 466a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber INPUT AND OUTPUT DEFINITIONS 467a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 468a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Inputs: 469a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsf_r1 = pointer to the first LSF residual vector (Q15) (Word16) 470a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dico = pointer to the quantization codebook (Q15) (const Word16) 471a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber wf1 = pointer to the first LSF weighting factor (Q13) (Word16) 472a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dico_size = size of quantization codebook (Q0) (Word16) 473a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber use_half = flag to indicate use of every second entry in the 474a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber codebook (Flag) 475a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 476a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Outputs: 477a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber buffer pointed to by lsf_r1 contains the selected vector 478a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber pOverflow -- pointer to Flag -- Flag set when overflow occurs 479a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 480a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Returns: 481a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber index = quantization index (Q0) (Word16) 482a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 483a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Global Variables Used: 484a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber None 485a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 486a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Local Variables Needed: 487a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber None 488a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 489a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 490a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber FUNCTION DESCRIPTION 491a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 492a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber This function performs the quantization of a 3 dimensional subvector. 493a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 494a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 495a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber REQUIREMENTS 496a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 497a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber None 498a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 499a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 500a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber REFERENCES 501a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 502a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber q_plsf_3.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001 503a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 504a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 505a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber PSEUDO-CODE 506a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 507a30d40083856cb4edd225faf8b488fab156e5976Andreas Huberstatic Word16 508a30d40083856cb4edd225faf8b488fab156e5976Andreas HuberVq_subvec3( // o: quantization index, Q0 509a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 * lsf_r1, // i: 1st LSF residual vector, Q15 510a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 * dico, // i: quantization codebook, Q15 511a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 * wf1, // i: 1st LSF weighting factors, Q13 512a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 dico_size, // i: size of quantization codebook, Q0 513a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Flag use_half) // i: use every second entry in codebook 514a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber{ 515a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 i, index = 0; 516a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 *p_dico, temp; 517a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word32 dist_min, dist; 518a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 519a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dist_min = MAX_32; 520a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber p_dico = dico; 521a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 522a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber if (use_half == 0) { 523a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber for (i = 0; i < dico_size; i++) 524a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber { 525a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber temp = sub(lsf_r1[0], *p_dico++); 526a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber temp = mult(wf1[0], temp); 527a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dist = L_mult(temp, temp); 528a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 529a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber temp = sub(lsf_r1[1], *p_dico++); 530a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber temp = mult(wf1[1], temp); 531a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dist = L_mac(dist, temp, temp); 532a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 533a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber temp = sub(lsf_r1[2], *p_dico++); 534a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber temp = mult(wf1[2], temp); 535a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dist = L_mac(dist, temp, temp); 536a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 537a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber if (L_sub(dist, dist_min) < (Word32) 0) { 538a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dist_min = dist; 539a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber index = i; 540a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } 541a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } 542a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber p_dico = &dico[add(index, add(index, index))]; 543a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } 544a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber else 545a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber { 546a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber for (i = 0; i < dico_size; i++) 547a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber { 548a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber temp = sub(lsf_r1[0], *p_dico++); 549a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber temp = mult(wf1[0], temp); 550a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dist = L_mult(temp, temp); 551a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 552a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber temp = sub(lsf_r1[1], *p_dico++); 553a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber temp = mult(wf1[1], temp); 554a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dist = L_mac(dist, temp, temp); 555a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 556a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber temp = sub(lsf_r1[2], *p_dico++); 557a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber temp = mult(wf1[2], temp); 558a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dist = L_mac(dist, temp, temp); 559a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 560a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber if (L_sub(dist, dist_min) < (Word32) 0) 561a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber { 562a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dist_min = dist; 563a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber index = i; 564a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } 565a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber p_dico = p_dico + 3; add(0,0); 566a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } 567a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber p_dico = &dico[shl(add(index, add(index, index)),1)]; 568a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } 569a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 570a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 571a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber // Reading the selected vector 572a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsf_r1[0] = *p_dico++; 573a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsf_r1[1] = *p_dico++; 574a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsf_r1[2] = *p_dico++; 575a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 576a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber return index; 577a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber} 578a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 579a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 580a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber RESOURCES USED [optional] 581a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 582a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber When the code is written for a specific target processor the 583a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber the resources used should be documented below. 584a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 585a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber HEAP MEMORY USED: x bytes 586a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 587a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber STACK MEMORY USED: x bytes 588a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 589a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber CLOCK CYCLES: (cycle count equation for this function) + (variable 590a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber used to represent cycle count for each subroutine 591a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber called) 592a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber where: (cycle count variable) = cycle count for [subroutine 593a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber name] 594a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 595a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 596a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber CAUTION [optional] 597a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber [State any special notes, constraints or cautions for users of this function] 598a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 599a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 600a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber*/ 601a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 602a30d40083856cb4edd225faf8b488fab156e5976Andreas Huberstatic Word16 Vq_subvec3( /* o: quantization index, Q0 */ 603a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 * lsf_r1, /* i: 1st LSF residual vector, Q15 */ 604a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber const Word16 * dico, /* i: quantization codebook, Q15 */ 605a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 * wf1, /* i: 1st LSF weighting factors, Q13 */ 606a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 dico_size, /* i: size of quantization codebook, Q0 */ 607a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Flag use_half, /* i: use every second entry in codebook */ 608a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Flag *pOverflow) /* o : Flag set when overflow occurs */ 609a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber{ 610a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber register Word16 i; 611a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 temp; 612a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 613a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber const Word16 *p_dico; 614a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 615a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 p_dico_index = 0; 616a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 index = 0; 617a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 618a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word32 dist_min; 619a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word32 dist; 620a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 621a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 lsf_r1_0; 622a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 lsf_r1_1; 623a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 lsf_r1_2; 624a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 625a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 wf1_0; 626a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 wf1_1; 627a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 wf1_2; 628a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 629a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber OSCL_UNUSED_ARG(pOverflow); 630a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 631a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dist_min = MAX_32; 632a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber p_dico = dico; 633a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 634a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsf_r1_0 = lsf_r1[0]; 635a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsf_r1_1 = lsf_r1[1]; 636a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsf_r1_2 = lsf_r1[2]; 637a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 638a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber wf1_0 = wf1[0]; 639a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber wf1_1 = wf1[1]; 640a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber wf1_2 = wf1[2]; 641a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 642a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber if (use_half != 0) 643a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber { 644a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber p_dico_index = 3; 645a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } 646a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 647a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber for (i = 0; i < dico_size; i++) 648a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber { 649a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber temp = lsf_r1_0 - (*p_dico++); 650a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber temp = (Word16)((((Word32) wf1_0) * temp) >> 15); 651a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dist = ((Word32) temp) * temp; 652a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 653a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber temp = lsf_r1_1 - (*p_dico++); 654a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber temp = (Word16)((((Word32) wf1_1) * temp) >> 15); 655a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dist += ((Word32) temp) * temp; 656a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 657a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber temp = lsf_r1_2 - (*p_dico++); 658a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber temp = (Word16)((((Word32) wf1_2) * temp) >> 15); 659a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dist += ((Word32) temp) * temp; 660a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 661a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber if (dist < dist_min) 662a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber { 663a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dist_min = dist; 664a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber index = i; 665a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } 666a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 667a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber p_dico = p_dico + p_dico_index; 668a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } 669a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 670a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber p_dico = dico + (3 * index); 671a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 672a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber if (use_half != 0) 673a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber { 674a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber p_dico += (3 * index); 675a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } 676a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 677a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber /* Reading the selected vector */ 678a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *lsf_r1++ = *p_dico++; 679a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *lsf_r1++ = *p_dico++; 680a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *lsf_r1 = *p_dico; 681a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 682a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber return(index); 683a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber} 684a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 685a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber/****************************************************************************/ 686a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 687a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 688a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber/* 689a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 690a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber FUNCTION NAME: Test_Vq_subvec3 691a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 692a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber INPUT AND OUTPUT DEFINITIONS 693a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 694a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Inputs: 695a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsf_r1 = pointer to the first LSF residual vector (Q15) (Word16) 696a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dico = pointer to the quantization codebook (Q15) (const Word16) 697a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber wf1 = pointer to the first LSF weighting factor (Q13) (Word16) 698a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dico_size = size of quantization codebook (Q0) (Word16) 699a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber use_half = flag to indicate use of every second entry in the 700a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber codebook (Flag) 701a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 702a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Outputs: 703a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber buffer pointed to by lsf_r1 contains the selected vector 704a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber pOverflow -- pointer to Flag -- Flag set when overflow occurs 705a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 706a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Returns: 707a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber index = quantization index (Q0) (Word16) 708a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 709a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Global Variables Used: 710a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber None 711a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 712a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Local Variables Needed: 713a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber None 714a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 715a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 716a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber FUNCTION DESCRIPTION 717a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 718a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber This function calls the static function Vq_subvec3. It is used for testing 719a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber purposes only 720a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 721a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 722a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber REQUIREMENTS 723a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 724a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber None 725a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 726a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 727a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber REFERENCES 728a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 729a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber None 730a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 731a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 732a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber PSEUDO-CODE 733a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 734a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber CALL Vq_subvec3(lsf_r1 = lsf_r1 735a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dico = dico 736a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber wf1 = wf1 737a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dico_size = dico_size 738a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber use_half = use_half) 739a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber MODIFYING(nothing) 740a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber RETURNING(index = tst_index3) 741a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 742a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 743a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber RESOURCES USED [optional] 744a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 745a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber When the code is written for a specific target processor the 746a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber the resources used should be documented below. 747a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 748a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber HEAP MEMORY USED: x bytes 749a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 750a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber STACK MEMORY USED: x bytes 751a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 752a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber CLOCK CYCLES: (cycle count equation for this function) + (variable 753a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber used to represent cycle count for each subroutine 754a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber called) 755a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber where: (cycle count variable) = cycle count for [subroutine 756a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber name] 757a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 758a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 759a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber CAUTION [optional] 760a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber [State any special notes, constraints or cautions for users of this function] 761a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 762a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 763a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber*/ 764a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 765a30d40083856cb4edd225faf8b488fab156e5976Andreas HuberWord16 Test_Vq_subvec3( 766a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 * lsf_r1, 767a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber const Word16 * dico, 768a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 * wf1, 769a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 dico_size, 770a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Flag use_half, 771a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Flag *pOverflow) 772a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber{ 773a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 tst_index3 = 0; 774a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 775a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber /*------------------------------------------------------------------------ 776a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber CALL Vq_subvec3(lsf_r1 = lsf_r1 777a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dico = dico 778a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber wf1 = wf1 779a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dico_size = dico_size 780a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber use_half = use_half) 781a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber MODIFYING(nothing) 782a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber RETURNING(index = index) 783a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber ------------------------------------------------------------------------*/ 784a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber tst_index3 = 785a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Vq_subvec3( 786a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsf_r1, 787a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dico, 788a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber wf1, 789a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dico_size, 790a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber use_half, 791a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber pOverflow); 792a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 793a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber return(tst_index3); 794a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 795a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber} 796a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 797a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber/****************************************************************************/ 798a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 799a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 800a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber/* 801a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 802a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber FUNCTION NAME: Q_plsf_3 803a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 804a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber INPUT AND OUTPUT DEFINITIONS 805a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 806a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Inputs: 807a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber st = pointer to structures of type Q_plsfState (Q_plsfState) 808a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber mode = coder mode (enum) 809a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsp1 = pointer to the first LSP vector (Word16) 810a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsp1_q = pointer to the quantized first LSP vector (Word16) 811a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber indice = pointer to the quantization indices of 3 vectors (Word16) 812a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber pred_init_i = pointer to the index of the initial value for 813a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber MA prediction in DTX mode (Word16) 814a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 815a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Outputs: 816a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsp1_q points to a vector containing the new quantized LSPs 817a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber indice points to the new quantization indices of 3 vectors 818a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber pred_init_i points to the new initial index for MA prediction 819a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber in DTX mode 820a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber past_rq field of structure pointed to by st contains the current 821a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber quantized LSF parameters 822a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber pOverflow -- pointer to Flag -- Flag set when overflow occurs 823a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 824a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Returns: 825a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber None 826a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 827a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Global Variables Used: 828a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber pred_fac = table containing prediction factors (const Word16) 829a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dico1_lsf = quantization table for split_MQ of 2 sets of LSFs 830a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber in a 20 ms frame (const Word16) 831a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dico2_lsf = quantization table for split_MQ of 2 sets of LSFs 832a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber in a 20 ms frame (const Word16) 833a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dico3_lsf = quantization table for split_MQ of 2 sets of LSFs 834a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber in a 20 ms frame (const Word16) 835a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber mr515_3_lsf = third codebook for MR475 and MR515 modes (const Word16) 836a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber mr795_1_lsf = first codebook for MR795 mode (const Word16) 837a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber mean_lsf = table of mean LSFs (const Word16) 838a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber past_rq_init = initalization table for MA predictor in DTX mode 839a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber (const Word16) 840a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 841a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 842a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Local Variables Needed: 843a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber None 844a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 845a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 846a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber FUNCTION DESCRIPTION 847a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 848a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber This function performs quantization of LSF parameters with 1st order MA 849a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber prediction and split by 3 vector quantization (split-VQ) 850a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 851a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 852a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber REQUIREMENTS 853a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 854a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber None 855a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 856a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 857a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber REFERENCES 858a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 859a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber q_plsf_3.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001 860a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 861a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 862a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber PSEUDO-CODE 863a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 864a30d40083856cb4edd225faf8b488fab156e5976Andreas Hubervoid Q_plsf_3( 865a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Q_plsfState *st, // i/o: state struct 866a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber enum Mode mode, // i : coder mode 867a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 *lsp1, // i : 1st LSP vector Q15 868a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 *lsp1_q, // o : quantized 1st LSP vector Q15 869a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 *indice, // o : quantization indices of 3 vectors Q0 870a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 *pred_init_i // o : init index for MA prediction in DTX mode 871a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber) 872a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber{ 873a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 i, j; 874a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 lsf1[M], wf1[M], lsf_p[M], lsf_r1[M]; 875a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 lsf1_q[M]; 876a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 877a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word32 L_pred_init_err; 878a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word32 L_min_pred_init_err; 879a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 temp_r1[M]; 880a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 temp_p[M]; 881a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 882a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber // convert LSFs to normalize frequency domain 0..16384 883a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 884a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Lsp_lsf(lsp1, lsf1, M); 885a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 886a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber // compute LSF weighting factors (Q13) 887a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 888a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Lsf_wt(lsf1, wf1); 889a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 890a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber // Compute predicted LSF and prediction error 891a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber if (test(), sub(mode, MRDTX) != 0) 892a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber { 893a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber for (i = 0; i < M; i++) 894a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber { 895a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsf_p[i] = add(mean_lsf[i], 896a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber mult(st->past_rq[i], 897a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber pred_fac[i])); 898a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsf_r1[i] = sub(lsf1[i], lsf_p[i]); 899a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } 900a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } 901a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber else 902a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber { 903a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber // DTX mode, search the init vector that yields 904a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber // lowest prediction resuidual energy 905a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *pred_init_i = 0; 906a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber L_min_pred_init_err = 0x7fffffff; // 2^31 - 1 907a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber for (j = 0; j < PAST_RQ_INIT_SIZE; j++) 908a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber { 909a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber L_pred_init_err = 0; 910a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber for (i = 0; i < M; i++) 911a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber { 912a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber temp_p[i] = add(mean_lsf[i], past_rq_init[j*M+i]); 913a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber temp_r1[i] = sub(lsf1[i],temp_p[i]); 914a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber L_pred_init_err = L_mac(L_pred_init_err, temp_r1[i], temp_r1[i]); 915a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } // next i 916a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 917a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 918a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber if (L_sub(L_pred_init_err, L_min_pred_init_err) < (Word32) 0) 919a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber { 920a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber L_min_pred_init_err = L_pred_init_err; 921a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Copy(temp_r1, lsf_r1, M); 922a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Copy(temp_p, lsf_p, M); 923a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber // Set zerom 924a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Copy(&past_rq_init[j*M], st->past_rq, M); 925a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *pred_init_i = j; 926a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } // endif 927a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } // next j 928a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } // endif MRDTX 929a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 930a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber //---- Split-VQ of prediction error ---- 931a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber if (sub (mode, MR475) == 0 || sub (mode, MR515) == 0) 932a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber { // MR475, MR515 933a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 934a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 935a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber indice[0] = Vq_subvec3(&lsf_r1[0], dico1_lsf, &wf1[0], DICO1_SIZE, 0); 936a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 937a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber indice[1] = Vq_subvec3(&lsf_r1[3], dico2_lsf, &wf1[3], DICO2_SIZE/2, 1); 938a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 939a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber indice[2] = Vq_subvec4(&lsf_r1[6], mr515_3_lsf, &wf1[6], MR515_3_SIZE); 940a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 941a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } 942a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber else if (sub (mode, MR795) == 0) 943a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber { // MR795 944a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 945a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 946a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber indice[0] = Vq_subvec3(&lsf_r1[0], mr795_1_lsf, &wf1[0], MR795_1_SIZE, 0); 947a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 948a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber indice[1] = Vq_subvec3(&lsf_r1[3], dico2_lsf, &wf1[3], DICO2_SIZE, 0); 949a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 950a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber indice[2] = Vq_subvec4(&lsf_r1[6], dico3_lsf, &wf1[6], DICO3_SIZE); 951a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 952a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } 953a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber else 954a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber { // MR59, MR67, MR74, MR102 , MRDTX 955a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 956a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 957a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber indice[0] = Vq_subvec3(&lsf_r1[0], dico1_lsf, &wf1[0], DICO1_SIZE, 0); 958a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 959a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber indice[1] = Vq_subvec3(&lsf_r1[3], dico2_lsf, &wf1[3], DICO2_SIZE, 0); 960a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 961a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber indice[2] = Vq_subvec4(&lsf_r1[6], dico3_lsf, &wf1[6], DICO3_SIZE); 962a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 963a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } 964a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 965a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 966a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber // Compute quantized LSFs and update the past quantized residual 967a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 968a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber for (i = 0; i < M; i++) 969a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber { 970a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsf1_q[i] = add(lsf_r1[i], lsf_p[i]); 971a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber st->past_rq[i] = lsf_r1[i]; 972a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } 973a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 974a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber // verification that LSFs has mimimum distance of LSF_GAP Hz 975a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 976a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Reorder_lsf(lsf1_q, LSF_GAP, M); 977a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 978a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber // convert LSFs to the cosine domain 979a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 980a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Lsf_lsp(lsf1_q, lsp1_q, M); 981a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber} 982a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 983a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 984a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber RESOURCES USED [optional] 985a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 986a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber When the code is written for a specific target processor the 987a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber the resources used should be documented below. 988a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 989a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber HEAP MEMORY USED: x bytes 990a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 991a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber STACK MEMORY USED: x bytes 992a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 993a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber CLOCK CYCLES: (cycle count equation for this function) + (variable 994a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber used to represent cycle count for each subroutine 995a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber called) 996a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber where: (cycle count variable) = cycle count for [subroutine 997a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber name] 998a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 999a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 1000a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber CAUTION [optional] 1001a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber [State any special notes, constraints or cautions for users of this function] 1002a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1003a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber------------------------------------------------------------------------------ 1004a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber*/ 1005a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1006a30d40083856cb4edd225faf8b488fab156e5976Andreas Hubervoid Q_plsf_3( 1007a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Q_plsfState *st, /* i/o: state struct */ 1008a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber enum Mode mode, /* i : coder mode */ 1009a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 *lsp1, /* i : 1st LSP vector Q15 */ 1010a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 *lsp1_q, /* o : quantized 1st LSP vector Q15 */ 1011a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 *indice, /* o : quantization indices of 3 vectors Q0 */ 1012a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 *pred_init_i,/* o : init index for MA prediction in DTX mode */ 1013a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Flag *pOverflow /* o : Flag set when overflow occurs */ 1014a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber) 1015a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber{ 1016a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber register Word16 i, j; 1017a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 lsf1[M]; 1018a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 wf1[M]; 1019a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 lsf_p[M]; 1020a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 lsf_r1[M]; 1021a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 lsf1_q[M]; 1022a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1023a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word32 L_pred_init_err; 1024a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word32 L_min_pred_init_err; 1025a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word32 L_temp; 1026a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 temp_r1[M]; 1027a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 temp_p[M]; 1028a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Word16 temp; 1029a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1030a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber /* convert LSFs to normalize frequency domain 0..16384 */ 1031a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1032a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Lsp_lsf( 1033a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsp1, 1034a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsf1, 1035a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber M, 1036a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber pOverflow); 1037a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1038a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber /* compute LSF weighting factors (Q13) */ 1039a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1040a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Lsf_wt( 1041a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsf1, 1042a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber wf1, 1043a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber pOverflow); 1044a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1045a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber /* Compute predicted LSF and prediction error */ 1046a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber if (mode != MRDTX) 1047a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber { 1048a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber for (i = 0; i < M; i++) 1049a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber { 1050a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber temp = (Word16)((((Word32) st->past_rq[i]) * 1051a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber (*(pred_fac_3 + i))) >> 15); 1052a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1053a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *(lsf_p + i) = *(mean_lsf_3 + i) + temp; 1054a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1055a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *(lsf_r1 + i) = *(lsf1 + i) - *(lsf_p + i); 1056a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } 1057a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } 1058a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber else 1059a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber { 1060a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber /* DTX mode, search the init vector that yields */ 1061a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber /* lowest prediction resuidual energy */ 1062a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *pred_init_i = 0; 1063a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber L_min_pred_init_err = 0x7fffffff; /* 2^31 - 1 */ 1064a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1065a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber for (j = 0; j < PAST_RQ_INIT_SIZE; j++) 1066a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber { 1067a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber L_pred_init_err = 0; 1068a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber for (i = 0; i < M; i++) 1069a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber { 1070a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *(temp_p + i) = *(mean_lsf_3 + i) + *(past_rq_init + j * M + i); 1071a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1072a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *(temp_r1 + i) = *(lsf1 + i) - *(temp_p + i); 1073a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1074a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber L_temp = ((Word32) * (temp_r1 + i)) * *(temp_r1 + i); 1075a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1076a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber L_pred_init_err = L_pred_init_err + (L_temp << 1); 1077a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1078a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } /* next i */ 1079a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1080a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1081a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber if (L_pred_init_err < L_min_pred_init_err) 1082a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber { 1083a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber L_min_pred_init_err = L_pred_init_err; 1084a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1085a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber memcpy( 1086a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsf_r1, 1087a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber temp_r1, 1088a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber M*sizeof(Word16)); 1089a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1090a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber memcpy( 1091a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsf_p, 1092a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber temp_p, 1093a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber M*sizeof(Word16)); 1094a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1095a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber /* Set zerom */ 1096a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber memcpy( 1097a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber st->past_rq, 1098a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber &past_rq_init[j*M], 1099a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber M*sizeof(Word16)); 1100a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1101a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *pred_init_i = j; 1102a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1103a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } /* endif */ 1104a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } /* next j */ 1105a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } /* endif MRDTX */ 1106a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1107a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber /*---- Split-VQ of prediction error ----*/ 1108a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber if ((mode == MR475) || (mode == MR515)) 1109a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber { /* MR475, MR515 */ 1110a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1111a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *indice = 1112a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Vq_subvec3( 1113a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsf_r1, 1114a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dico1_lsf_3, 1115a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber wf1, 1116a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber DICO1_SIZE, 1117a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 0, 1118a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber pOverflow); 1119a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1120a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *(indice + 1) = 1121a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Vq_subvec3( 1122a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsf_r1 + 3, 1123a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dico2_lsf_3, 1124a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber wf1 + 3, 1125a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber DICO2_SIZE / 2, 1126a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1, 1127a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber pOverflow); 1128a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1129a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *(indice + 2) = 1130a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Vq_subvec4( 1131a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsf_r1 + 6, 1132a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber mr515_3_lsf, 1133a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber wf1 + 6, 1134a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber MR515_3_SIZE, 1135a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber pOverflow); 1136a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1137a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } 1138a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber else if (mode == MR795) 1139a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber { /* MR795 */ 1140a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1141a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *indice = 1142a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Vq_subvec3( 1143a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsf_r1, 1144a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber mr795_1_lsf, 1145a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber wf1, 1146a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber MR795_1_SIZE, 1147a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 0, 1148a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber pOverflow); 1149a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1150a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *(indice + 1) = 1151a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Vq_subvec3( 1152a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsf_r1 + 3, 1153a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dico2_lsf_3, 1154a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber wf1 + 3, 1155a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber DICO2_SIZE, 1156a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 0, 1157a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber pOverflow); 1158a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1159a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *(indice + 2) = 1160a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Vq_subvec4( 1161a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsf_r1 + 6, 1162a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dico3_lsf_3, 1163a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber wf1 + 6, 1164a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber DICO3_SIZE, 1165a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber pOverflow); 1166a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1167a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } 1168a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber else 1169a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber { /* MR59, MR67, MR74, MR102 , MRDTX */ 1170a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1171a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *indice = 1172a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Vq_subvec3( 1173a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsf_r1, 1174a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dico1_lsf_3, 1175a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber wf1, 1176a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber DICO1_SIZE, 1177a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 0, 1178a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber pOverflow); 1179a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1180a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *(indice + 1) = 1181a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Vq_subvec3( 1182a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsf_r1 + 3, 1183a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dico2_lsf_3, 1184a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber wf1 + 3, 1185a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber DICO2_SIZE, 1186a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 0, 1187a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber pOverflow); 1188a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1189a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *(indice + 2) = 1190a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Vq_subvec4( 1191a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsf_r1 + 6, 1192a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber dico3_lsf_3, 1193a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber wf1 + 6, 1194a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber DICO3_SIZE, 1195a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber pOverflow); 1196a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1197a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } 1198a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1199a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1200a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber /* Compute quantized LSFs and update the past quantized residual */ 1201a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1202a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber for (i = 0; i < M; i++) 1203a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber { 1204a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber *(lsf1_q + i) = *(lsf_r1 + i) + *(lsf_p + i); 1205a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber st->past_rq[i] = *(lsf_r1 + i); 1206a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber } 1207a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1208a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber /* verification that LSFs has mimimum distance of LSF_GAP Hz */ 1209a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1210a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Reorder_lsf( 1211a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsf1_q, 1212a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber LSF_GAP, 1213a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber M, 1214a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber pOverflow); 1215a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1216a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber /* convert LSFs to the cosine domain */ 1217a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1218a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber Lsf_lsp( 1219a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsf1_q, 1220a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber lsp1_q, 1221a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber M, 1222a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber pOverflow); 1223a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1224a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber return; 1225a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber 1226a30d40083856cb4edd225faf8b488fab156e5976Andreas Huber} 1227