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_Vq3.c
16 
17 ******************************************************************/
18 
19 #include "vq3.h"
20 #include "constants.h"
21 
22 /*----------------------------------------------------------------*
23  *  vector quantization
24  *---------------------------------------------------------------*/
25 
WebRtcIlbcfix_Vq3(int16_t * Xq,int16_t * index,int16_t * CB,int16_t * X,int16_t n_cb)26 void WebRtcIlbcfix_Vq3(
27     int16_t *Xq, /* quantized vector (Q13) */
28     int16_t *index,
29     int16_t *CB, /* codebook in Q13 */
30     int16_t *X,  /* vector to quantize (Q13) */
31     int16_t n_cb
32                        ){
33   int16_t i, j;
34   int16_t pos, minindex=0;
35   int16_t tmp;
36   int32_t dist, mindist;
37 
38   pos = 0;
39   mindist = WEBRTC_SPL_WORD32_MAX; /* start value */
40 
41   /* Find the codebook with the lowest square distance */
42   for (j = 0; j < n_cb; j++) {
43     tmp = X[0] - CB[pos];
44     dist = tmp * tmp;
45     for (i = 1; i < 3; i++) {
46       tmp = X[i] - CB[pos + i];
47       dist += tmp * tmp;
48     }
49 
50     if (dist < mindist) {
51       mindist = dist;
52       minindex = j;
53     }
54     pos += 3;
55   }
56 
57   /* Store the quantized codebook and the index */
58   for (i = 0; i < 3; i++) {
59     Xq[i] = CB[minindex*3 + i];
60   }
61   *index = minindex;
62 
63 }
64