cor_h_x.cpp revision 2d0ac425564ff9882ebaac5267d1a04d4af67d00
1c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville/* ------------------------------------------------------------------ 2c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Copyright (C) 1998-2009 PacketVideo 3c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * 4c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Licensed under the Apache License, Version 2.0 (the "License"); 5c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * you may not use this file except in compliance with the License. 6c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * You may obtain a copy of the License at 7c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * 8c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * http://www.apache.org/licenses/LICENSE-2.0 9c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * 10c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Unless required by applicable law or agreed to in writing, software 11c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * distributed under the License is distributed on an "AS IS" BASIS, 12c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 13c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * express or implied. 14c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * See the License for the specific language governing permissions 15c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * and limitations under the License. 16c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * ------------------------------------------------------------------- 17c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville */ 18c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville/**************************************************************************************** 19c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink SavillePortions of this file are derived from the following 3GPP standard: 20c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 21c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 3GPP TS 26.073 22c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville ANSI-C code for the Adaptive Multi-Rate (AMR) speech codec 23c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Available from http://www.3gpp.org 24c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 25c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville(C) 2004, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TTA, TTC) 26c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink SavillePermission to distribute, modify and use this file under the standard license 27c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleterms listed above has been obtained from the copyright holder. 28c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville****************************************************************************************/ 29c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville/* 30c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville------------------------------------------------------------------------------ 31c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 32c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 33c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 34c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Pathname: ./audio/gsm-amr/c/src/cor_h_x.c 35c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 36c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Date: 09/07/2000 37c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 38c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville------------------------------------------------------------------------------ 39c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville REVISION HISTORY 40c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 41c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Description: Created a separate file for cor_h_x function. 42c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 43c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Description: Synchronized file with UMTS versin 3.2.0. Updated coding 44c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville template. 45c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 46c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Description: Made the following changes per comments from Phase 2/3 review: 47c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 1. Modified FOR loop in the code to count down. 48c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 2. Fixed typecasting issue with TI C compiler. 49c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 50c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Description: Added call to round() and L_shl() functions in the last FOR 51c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville loop to make code bit-exact. Updated copyright year. 52c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 53c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Description: Modified to pass pOverflow in via a pointer, rather than 54c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville invoking it as a global variable. 55c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 56c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Description: Made the following changes 57c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 1. Unrolled the correlation loop and add mechanism control 58c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville to compute odd or even number of computations. 59c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 2. Use pointer to avoid continuos addresses calculation 60c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 2. Eliminated math operations that check for saturation. 61c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 62c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Description: Changed round function name to pv_round to avoid conflict with 63c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville round function in C standard library. 64c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 65c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Description: 66c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 67c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville------------------------------------------------------------------------------ 68c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville*/ 69c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 70c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville/*---------------------------------------------------------------------------- 71c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville; INCLUDES 72c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville----------------------------------------------------------------------------*/ 73c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville#include "typedef.h" 74c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville#include "cnst.h" 75c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville#include "cor_h_x.h" 76c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville#include "basic_op.h" 77c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 78c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville/*---------------------------------------------------------------------------- 79c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville; MACROS 80c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville; Define module specific macros here 81c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville----------------------------------------------------------------------------*/ 82c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 83c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 84c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville/*---------------------------------------------------------------------------- 85c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville; DEFINES 86c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville; Include all pre-processor statements here. Include conditional 87c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville; compile variables also. 88c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville----------------------------------------------------------------------------*/ 89c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 90c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville/*---------------------------------------------------------------------------- 91c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville; LOCAL FUNCTION DEFINITIONS 92c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville; Function Prototype declaration 93c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville----------------------------------------------------------------------------*/ 94c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 95c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville/*---------------------------------------------------------------------------- 96c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville; LOCAL STORE/BUFFER/POINTER DEFINITIONS 97c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville; Variable declaration - defined here and used outside this module 98c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville----------------------------------------------------------------------------*/ 99c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 100c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville/*---------------------------------------------------------------------------- 101c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville; EXTERNAL FUNCTION REFERENCES 102c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville; Declare functions defined elsewhere and referenced in this module 103c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville----------------------------------------------------------------------------*/ 104c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 105c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville/*---------------------------------------------------------------------------- 106c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES 107c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville; Declare variables used in this module but defined elsewhere 108c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville----------------------------------------------------------------------------*/ 109c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 110c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville/* 111c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville------------------------------------------------------------------------------ 112c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville FUNCTION NAME: cor_h_x 113c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville------------------------------------------------------------------------------ 114c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville INPUT AND OUTPUT DEFINITIONS 115c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 116c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Inputs: 117c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville h = vector containing the impulse response of the weighted synthesis 118c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville filter; vector contents are of type Word16; vector length is 119c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 2 * L_SUBFR 120c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville x = target signal vector; vector contents are of type Word16; vector 121c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville length is L_SUBFR 122c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville dn = vector containing the correlation between the target and the 123c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville impulse response; vector contents are of type Word16; vector 124c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville length is L_CODE 125c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville sf = scaling factor of type Word16 ; 2 when mode is MR122, 1 for all 126c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville other modes 127c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 128c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Outputs: 129c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville dn contents are the newly calculated correlation values 130c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 131c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville pOverflow = pointer of type Flag * to overflow indicator. 132c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 133c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Returns: 134c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville None 135c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 136c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Global Variables Used: 137c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville None 138c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 139c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Local Variables Needed: 140c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville None 141c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 142c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville------------------------------------------------------------------------------ 143c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville FUNCTION DESCRIPTION 144c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 145c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville This function computes the correlation between the target signal (x) and the 146c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville impulse response (h). 147c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 148c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville The correlation is given by: d[n] = sum_{i=n}^{L-1} x[i] h[i-n], 149c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville where: n=0,...,L-1 150c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 151c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville d[n] is normalized such that the sum of 5 maxima of d[n] corresponding to 152c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville each position track does not saturate. 153c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 154c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville------------------------------------------------------------------------------ 155c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville REQUIREMENTS 156c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 157c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville None 158c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 159c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville------------------------------------------------------------------------------ 160c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville REFERENCES 161c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 162c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville cor_h.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001 163c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 164c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville------------------------------------------------------------------------------ 165c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville PSEUDO-CODE 166c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 167c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savillevoid cor_h_x ( 168c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Word16 h[], // (i): impulse response of weighted synthesis filter 169c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Word16 x[], // (i): target 170c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Word16 dn[], // (o): correlation between target and h[] 171c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Word16 sf // (i): scaling factor: 2 for 12.2, 1 for others 172c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville) 173c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville{ 174c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville cor_h_x2(h, x, dn, sf, NB_TRACK, STEP); 175c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville} 176c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 177c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 178c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savillevoid cor_h_x2 ( 179c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Word16 h[], // (i): impulse response of weighted synthesis filter 180c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Word16 x[], // (i): target 181c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Word16 dn[], // (o): correlation between target and h[] 182c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Word16 sf, // (i): scaling factor: 2 for 12.2, 1 for others 183c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Word16 nb_track,// (i): the number of ACB tracks 184c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Word16 step // (i): step size from one pulse position to the next 185c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville in one track 186c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville) 187c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville{ 188c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Word16 i, j, k; 189c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Word32 s, y32[L_CODE], max, tot; 190c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 191c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // first keep the result on 32 bits and find absolute maximum 192c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 193c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville tot = 5; 194c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 195c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville for (k = 0; k < nb_track; k++) 196c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville { 197c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville max = 0; 198c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville for (i = k; i < L_CODE; i += step) 199c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville { 200c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville s = 0; 201c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville for (j = i; j < L_CODE; j++) 202c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville s = L_mac (s, x[j], h[j - i]); 203c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 204c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville y32[i] = s; 205c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 206c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville s = L_abs (s); 207c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville if (L_sub (s, max) > (Word32) 0L) 208c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville max = s; 209c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 210c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville tot = L_add (tot, L_shr (max, 1)); 211c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 212c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 213c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville j = sub (norm_l (tot), sf); 214c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 215c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville for (i = 0; i < L_CODE; i++) 216c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville { 217c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville dn[i] = pv_round (L_shl (y32[i], j)); 218c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 219c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville} 220c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 221c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville------------------------------------------------------------------------------ 222c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville RESOURCES USED [optional] 223c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 224c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville When the code is written for a specific target processor the 225c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville the resources used should be documented below. 226c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 227c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville HEAP MEMORY USED: x bytes 228c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 229c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville STACK MEMORY USED: x bytes 230c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 231c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville CLOCK CYCLES: (cycle count equation for this function) + (variable 232c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville used to represent cycle count for each subroutine 233c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville called) 234c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville where: (cycle count variable) = cycle count for [subroutine 235c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville name] 236c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 237c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville------------------------------------------------------------------------------ 238c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville CAUTION [optional] 239c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville [State any special notes, constraints or cautions for users of this function] 240c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 241c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville------------------------------------------------------------------------------ 242c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville*/ 243c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 244c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savillevoid cor_h_x( 245c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Word16 h[], /* (i): impulse response of weighted synthesis filter */ 246c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Word16 x[], /* (i): target */ 247c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Word16 dn[], /* (o): correlation between target and h[] */ 248c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Word16 sf, /* (i): scaling factor: 2 for 12.2, 1 for others */ 249c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Flag *pOverflow /* (o): pointer to overflow flag */ 250c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville) 251c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville{ 252c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Word16 i; 253c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Word16 j; 254c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Word16 k; 255c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 256c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Word32 s; 257c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Word32 y32[L_CODE]; 258c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Word32 max; 259c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Word32 tot; 260c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 261c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Word16 *p_x; 262c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Word16 *p_ptr; 263c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Word32 *p_y32; 264c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 265c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 266c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville tot = 5; 267c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville for (k = 0; k < NB_TRACK; k++) /* NB_TRACK = 5 */ 268c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville { 269c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville max = 0; 270c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville for (i = k; i < L_CODE; i += STEP) /* L_CODE = 40; STEP = 5 */ 271c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville { 272c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville s = 0; 273c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville p_x = &x[i]; 274c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville p_ptr = h; 275c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 276c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville for (j = (L_CODE - i - 1) >> 1; j != 0; j--) 277c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville { 278c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville s += ((Word32) * (p_x++) * *(p_ptr++)) << 1; 279c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville s += ((Word32) * (p_x++) * *(p_ptr++)) << 1; 280c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 281c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 282c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville s += ((Word32) * (p_x++) * *(p_ptr++)) << 1; 283c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 284c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville if (!((L_CODE - i) & 1)) /* if even number of iterations */ 285c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville { 286c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville s += ((Word32) * (p_x++) * *(p_ptr++)) << 1; 287c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 288c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 289c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville y32[i] = s; 290c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 291c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville if (s < 0) 292c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville { 293c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville s = -s; 294c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 295c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 296c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville if (s > max) 297c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville { 298c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville max = s; 299c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 300c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 301c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 302c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville tot += (max >> 1); 303c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 304c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 305c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 306c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville j = norm_l(tot) - sf; 307c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 308c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville p_ptr = dn; 309c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville p_y32 = y32;; 310c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 311c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville for (i = L_CODE >> 1; i != 0; i--) 312c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville { 313c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville s = L_shl(*(p_y32++), j, pOverflow); 314c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville *(p_ptr++) = (s + 0x00008000) >> 16; 315c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville s = L_shl(*(p_y32++), j, pOverflow); 316c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville *(p_ptr++) = (s + 0x00008000) >> 16; 317c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 318c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 319c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville return; 320c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville} 321c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville