Home | History | Annotate | Download | only in ilbc
      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_MyCorr.c
     16 
     17 ******************************************************************/
     18 
     19 #include "defines.h"
     20 
     21 /*----------------------------------------------------------------*
     22  * compute cross correlation between sequences
     23  *---------------------------------------------------------------*/
     24 
     25 void WebRtcIlbcfix_MyCorr(
     26     int32_t *corr,  /* (o) correlation of seq1 and seq2 */
     27     int16_t *seq1,  /* (i) first sequence */
     28     int16_t dim1,  /* (i) dimension first seq1 */
     29     const int16_t *seq2, /* (i) second sequence */
     30     int16_t dim2   /* (i) dimension seq2 */
     31                           ){
     32   int16_t max, scale, loops;
     33 
     34   /* Calculate correlation between the two sequences. Scale the
     35      result of the multiplcication to maximum 26 bits in order
     36      to avoid overflow */
     37   max=WebRtcSpl_MaxAbsValueW16(seq1, dim1);
     38   scale=WebRtcSpl_GetSizeInBits(max);
     39 
     40   scale = (int16_t)(WEBRTC_SPL_MUL_16_16(2,scale)-26);
     41   if (scale<0) {
     42     scale=0;
     43   }
     44 
     45   loops=dim1-dim2+1;
     46 
     47   /* Calculate the cross correlations */
     48   WebRtcSpl_CrossCorrelation(corr, (int16_t*)seq2, seq1, dim2, loops, scale, 1);
     49 
     50   return;
     51 }
     52