1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*
2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *
4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  Use of this source code is governed by a BSD-style license
5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  that can be found in the LICENSE file in the root of the source
6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  tree. An additional intellectual property rights grant can be found
7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  in the file PATENTS.  All contributing project authors may
8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  be found in the AUTHORS file in the root of the source tree.
9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */
10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
11b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*
13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * This file contains the function WebRtcSpl_GetHanningWindow().
14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * The description header can be found in signal_processing_library.h
15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *
16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */
17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
18f24ac5923cbe5e806fac59a0d15e32567553ce8epbos@webrtc.org#include "webrtc/common_audio/signal_processing/include/signal_processing_library.h"
19b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Hanning table with 256 entries
21c49ec1327c1d956c6c889cf1f32a7f9920d76149pbos@webrtc.orgstatic const int16_t kHanningTable[] = {
22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    1,      2,      6,     10,     15,     22,     30,     39,
23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org   50,     62,     75,     89,    104,    121,    138,    157,
24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  178,    199,    222,    246,    271,    297,    324,    353,
25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  383,    413,    446,    479,    513,    549,    586,    624,
26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  663,    703,    744,    787,    830,    875,    920,    967,
27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1015,   1064,   1114,   1165,   1218,   1271,   1325,   1381,
28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1437,   1494,   1553,   1612,   1673,   1734,   1796,   1859,
29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1924,   1989,   2055,   2122,   2190,   2259,   2329,   2399,
30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2471,   2543,   2617,   2691,   2765,   2841,   2918,   2995,
31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 3073,   3152,   3232,   3312,   3393,   3475,   3558,   3641,
32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 3725,   3809,   3895,   3980,   4067,   4154,   4242,   4330,
33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 4419,   4509,   4599,   4689,   4781,   4872,   4964,   5057,
34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 5150,   5244,   5338,   5432,   5527,   5622,   5718,   5814,
35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 5910,   6007,   6104,   6202,   6299,   6397,   6495,   6594,
36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 6693,   6791,   6891,   6990,   7090,   7189,   7289,   7389,
37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 7489,   7589,   7690,   7790,   7890,   7991,   8091,   8192,
38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 8293,   8393,   8494,   8594,   8694,   8795,   8895,   8995,
39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 9095,   9195,   9294,   9394,   9493,   9593,   9691,   9790,
40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 9889,   9987,  10085,  10182,  10280,  10377,  10474,  10570,
41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org10666,  10762,  10857,  10952,  11046,  11140,  11234,  11327,
42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org11420,  11512,  11603,  11695,  11785,  11875,  11965,  12054,
43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org12142,  12230,  12317,  12404,  12489,  12575,  12659,  12743,
44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org12826,  12909,  12991,  13072,  13152,  13232,  13311,  13389,
45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org13466,  13543,  13619,  13693,  13767,  13841,  13913,  13985,
46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org14055,  14125,  14194,  14262,  14329,  14395,  14460,  14525,
47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org14588,  14650,  14711,  14772,  14831,  14890,  14947,  15003,
48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org15059,  15113,  15166,  15219,  15270,  15320,  15369,  15417,
49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org15464,  15509,  15554,  15597,  15640,  15681,  15721,  15760,
50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org15798,  15835,  15871,  15905,  15938,  15971,  16001,  16031,
51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org16060,  16087,  16113,  16138,  16162,  16185,  16206,  16227,
52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org16246,  16263,  16280,  16295,  16309,  16322,  16334,  16345,
53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org16354,  16362,  16369,  16374,  16378,  16382,  16383,  16384
54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org};
55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
56c49ec1327c1d956c6c889cf1f32a7f9920d76149pbos@webrtc.orgvoid WebRtcSpl_GetHanningWindow(int16_t *v, int16_t size)
57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    int jj;
59c49ec1327c1d956c6c889cf1f32a7f9920d76149pbos@webrtc.org    int16_t *vptr1;
60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
61c49ec1327c1d956c6c889cf1f32a7f9920d76149pbos@webrtc.org    int32_t index;
62c49ec1327c1d956c6c889cf1f32a7f9920d76149pbos@webrtc.org    int32_t factor = ((int32_t)0x40000000);
63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    factor = WebRtcSpl_DivW32W16(factor, size);
65b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    if (size < 513)
66c49ec1327c1d956c6c889cf1f32a7f9920d76149pbos@webrtc.org        index = (int32_t)-0x200000;
67b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    else
68c49ec1327c1d956c6c889cf1f32a7f9920d76149pbos@webrtc.org        index = (int32_t)-0x100000;
69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    vptr1 = v;
70b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    for (jj = 0; jj < size; jj++)
72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    {
73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        index += factor;
74b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        (*vptr1++) = kHanningTable[index >> 22];
75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    }
76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
78