1/* 2 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11/****************************************************************** 12 13 iLBC Speech Coder ANSI-C Source Code 14 15 WebRtcIlbcfix_AugmentedCbCorr.c 16 17******************************************************************/ 18 19#include "defines.h" 20#include "constants.h" 21#include "augmented_cb_corr.h" 22 23void WebRtcIlbcfix_AugmentedCbCorr( 24 int16_t *target, /* (i) Target vector */ 25 int16_t *buffer, /* (i) Memory buffer */ 26 int16_t *interpSamples, /* (i) buffer with 27 interpolated samples */ 28 int32_t *crossDot, /* (o) The cross correlation between 29 the target and the Augmented 30 vector */ 31 size_t low, /* (i) Lag to start from (typically 32 20) */ 33 size_t high, /* (i) Lag to end at (typically 39) */ 34 int scale) /* (i) Scale factor to use for 35 the crossDot */ 36{ 37 size_t lagcount; 38 size_t ilow; 39 int16_t *targetPtr; 40 int32_t *crossDotPtr; 41 int16_t *iSPtr=interpSamples; 42 43 /* Calculate the correlation between the target and the 44 interpolated codebook. The correlation is calculated in 45 3 sections with the interpolated part in the middle */ 46 crossDotPtr=crossDot; 47 for (lagcount=low; lagcount<=high; lagcount++) { 48 49 ilow = lagcount - 4; 50 51 /* Compute dot product for the first (lagcount-4) samples */ 52 (*crossDotPtr) = WebRtcSpl_DotProductWithScale(target, buffer-lagcount, ilow, scale); 53 54 /* Compute dot product on the interpolated samples */ 55 (*crossDotPtr) += WebRtcSpl_DotProductWithScale(target+ilow, iSPtr, 4, scale); 56 targetPtr = target + lagcount; 57 iSPtr += lagcount-ilow; 58 59 /* Compute dot product for the remaining samples */ 60 (*crossDotPtr) += WebRtcSpl_DotProductWithScale(targetPtr, buffer-lagcount, SUBL-lagcount, scale); 61 crossDotPtr++; 62 } 63} 64