| /* | |
| * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. | |
| * | |
| * Use of this source code is governed by a BSD-style license | |
| * that can be found in the LICENSE file in the root of the source | |
| * tree. An additional intellectual property rights grant can be found | |
| * in the file PATENTS. All contributing project authors may | |
| * be found in the AUTHORS file in the root of the source tree. | |
| */ | |
| /****************************************************************** | |
| iLBC Speech Coder ANSI-C Source Code | |
| WebRtcIlbcfix_CompCorr.c | |
| ******************************************************************/ | |
| #include "modules/audio_coding/codecs/ilbc/comp_corr.h" | |
| #include "modules/audio_coding/codecs/ilbc/defines.h" | |
| /*----------------------------------------------------------------* | |
| * Compute cross correlation and pitch gain for pitch prediction | |
| * of last subframe at given lag. | |
| *---------------------------------------------------------------*/ | |
| void WebRtcIlbcfix_CompCorr( | |
| int32_t *corr, /* (o) cross correlation */ | |
| int32_t *ener, /* (o) energy */ | |
| int16_t *buffer, /* (i) signal buffer */ | |
| size_t lag, /* (i) pitch lag */ | |
| size_t bLen, /* (i) length of buffer */ | |
| size_t sRange, /* (i) correlation search length */ | |
| int16_t scale /* (i) number of rightshifts to use */ | |
| ){ | |
| int16_t *w16ptr; | |
| w16ptr=&buffer[bLen-sRange-lag]; | |
| /* Calculate correlation and energy */ | |
| (*corr)=WebRtcSpl_DotProductWithScale(&buffer[bLen-sRange], w16ptr, sRange, scale); | |
| (*ener)=WebRtcSpl_DotProductWithScale(w16ptr, w16ptr, sRange, scale); | |
| /* For zero energy set the energy to 0 in order to avoid potential | |
| problems for coming divisions */ | |
| if (*ener == 0) { | |
| *corr = 0; | |
| *ener = 1; | |
| } | |
| } |