1ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann/*
2ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann *
3ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann *  Bluetooth low-complexity, subband codec (SBC) library
4ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann *
55592142cb9383df0556b27ac59e96547b380310bJohan Hedberg *  Copyright (C) 2008-2010  Nokia Corporation
69184e2eeb7b97371c6b83b747c8984e2340d2b47Marcel Holtmann *  Copyright (C) 2004-2010  Marcel Holtmann <marcel@holtmann.org>
7ad868bd4137e86fbf141175f411898796287ff2aBrad Midgley *  Copyright (C) 2004-2005  Henryk Ploetz <henryk@ploetzli.ch>
8ad868bd4137e86fbf141175f411898796287ff2aBrad Midgley *  Copyright (C) 2005-2006  Brad Midgley <bmidgley@xmission.com>
9ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann *
10ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann *
11ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann *  This library is free software; you can redistribute it and/or
12ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann *  modify it under the terms of the GNU Lesser General Public
13ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann *  License as published by the Free Software Foundation; either
14ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann *  version 2.1 of the License, or (at your option) any later version.
15ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann *
16ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann *  This library is distributed in the hope that it will be useful,
17ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann *  but WITHOUT ANY WARRANTY; without even the implied warranty of
18ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann *  Lesser General Public License for more details.
20ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann *
21ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann *  You should have received a copy of the GNU Lesser General Public
22ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann *  License along with this library; if not, write to the Free Software
23ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
24ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann *
25ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann */
26ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann
27ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann/* A2DP specification: Appendix B, page 69 */
28ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmannstatic const int sbc_offset4[4][4] = {
29ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	{ -1, 0, 0, 0 },
30ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	{ -2, 0, 0, 1 },
31ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	{ -2, 0, 0, 1 },
32ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	{ -2, 0, 0, 1 }
33ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann};
34ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann
35ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann/* A2DP specification: Appendix B, page 69 */
36ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmannstatic const int sbc_offset8[4][8] = {
37ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	{ -2, 0, 0, 0, 0, 0, 0, 1 },
38ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	{ -3, 0, 0, 0, 0, 0, 1, 2 },
39ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	{ -4, 0, 0, 0, 0, 0, 1, 2 },
40ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	{ -4, 0, 0, 0, 0, 0, 1, 2 }
41ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann};
42ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann
4340e63b5f546f8b486c7ec99570eb805ad4afc923Marcel Holtmann
44ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann#define SS4(val) ASR(val, SCALE_SPROTO4_TBL)
45ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann#define SS8(val) ASR(val, SCALE_SPROTO8_TBL)
46ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann#define SN4(val) ASR(val, SCALE_NPROTO4_TBL)
47ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann#define SN8(val) ASR(val, SCALE_NPROTO8_TBL)
48ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann
49ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmannstatic const int32_t sbc_proto_4_40m0[] = {
50ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	SS4(0x00000000), SS4(0xffa6982f), SS4(0xfba93848), SS4(0x0456c7b8),
51ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	SS4(0x005967d1), SS4(0xfffb9ac7), SS4(0xff589157), SS4(0xf9c2a8d8),
52ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	SS4(0x027c1434), SS4(0x0019118b), SS4(0xfff3c74c), SS4(0xff137330),
53ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	SS4(0xf81b8d70), SS4(0x00ec1b8b), SS4(0xfff0b71a), SS4(0xffe99b00),
54ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	SS4(0xfef84470), SS4(0xf6fb4370), SS4(0xffcdc351), SS4(0xffe01dc7)
55ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann};
56ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann
57ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmannstatic const int32_t sbc_proto_4_40m1[] = {
58ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	SS4(0xffe090ce), SS4(0xff2c0475), SS4(0xf694f800), SS4(0xff2c0475),
59ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	SS4(0xffe090ce), SS4(0xffe01dc7), SS4(0xffcdc351), SS4(0xf6fb4370),
60ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	SS4(0xfef84470), SS4(0xffe99b00), SS4(0xfff0b71a), SS4(0x00ec1b8b),
61ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	SS4(0xf81b8d70), SS4(0xff137330), SS4(0xfff3c74c), SS4(0x0019118b),
62ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	SS4(0x027c1434), SS4(0xf9c2a8d8), SS4(0xff589157), SS4(0xfffb9ac7)
63ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann};
64ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann
65ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmannstatic const int32_t sbc_proto_8_80m0[] = {
66ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	SS8(0x00000000), SS8(0xfe8d1970), SS8(0xee979f00), SS8(0x11686100),
67ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	SS8(0x0172e690), SS8(0xfff5bd1a), SS8(0xfdf1c8d4), SS8(0xeac182c0),
68ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	SS8(0x0d9daee0), SS8(0x00e530da), SS8(0xffe9811d), SS8(0xfd52986c),
69ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	SS8(0xe7054ca0), SS8(0x0a00d410), SS8(0x006c1de4), SS8(0xffdba705),
70ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	SS8(0xfcbc98e8), SS8(0xe3889d20), SS8(0x06af2308), SS8(0x000bb7db),
71ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	SS8(0xffca00ed), SS8(0xfc3fbb68), SS8(0xe071bc00), SS8(0x03bf7948),
72ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	SS8(0xffc4e05c), SS8(0xffb54b3b), SS8(0xfbedadc0), SS8(0xdde26200),
73ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	SS8(0x0142291c), SS8(0xff960e94), SS8(0xff9f3e17), SS8(0xfbd8f358),
74ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	SS8(0xdbf79400), SS8(0xff405e01), SS8(0xff7d4914), SS8(0xff8b1a31),
75ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	SS8(0xfc1417b8), SS8(0xdac7bb40), SS8(0xfdbb828c), SS8(0xff762170)
76ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann};
77ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann
78ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmannstatic const int32_t sbc_proto_8_80m1[] = {
79ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	SS8(0xff7c272c), SS8(0xfcb02620), SS8(0xda612700), SS8(0xfcb02620),
80ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	SS8(0xff7c272c), SS8(0xff762170), SS8(0xfdbb828c), SS8(0xdac7bb40),
81ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	SS8(0xfc1417b8), SS8(0xff8b1a31), SS8(0xff7d4914), SS8(0xff405e01),
82ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	SS8(0xdbf79400), SS8(0xfbd8f358), SS8(0xff9f3e17), SS8(0xff960e94),
83ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	SS8(0x0142291c), SS8(0xdde26200), SS8(0xfbedadc0), SS8(0xffb54b3b),
84ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	SS8(0xffc4e05c), SS8(0x03bf7948), SS8(0xe071bc00), SS8(0xfc3fbb68),
85ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	SS8(0xffca00ed), SS8(0x000bb7db), SS8(0x06af2308), SS8(0xe3889d20),
86ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	SS8(0xfcbc98e8), SS8(0xffdba705), SS8(0x006c1de4), SS8(0x0a00d410),
87ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	SS8(0xe7054ca0), SS8(0xfd52986c), SS8(0xffe9811d), SS8(0x00e530da),
88ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	SS8(0x0d9daee0), SS8(0xeac182c0), SS8(0xfdf1c8d4), SS8(0xfff5bd1a)
89ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann};
90ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann
91ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmannstatic const int32_t synmatrix4[8][4] = {
92ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	{ SN4(0x05a82798), SN4(0xfa57d868), SN4(0xfa57d868), SN4(0x05a82798) },
93ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	{ SN4(0x030fbc54), SN4(0xf89be510), SN4(0x07641af0), SN4(0xfcf043ac) },
94ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	{ SN4(0x00000000), SN4(0x00000000), SN4(0x00000000), SN4(0x00000000) },
95ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	{ SN4(0xfcf043ac), SN4(0x07641af0), SN4(0xf89be510), SN4(0x030fbc54) },
96ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	{ SN4(0xfa57d868), SN4(0x05a82798), SN4(0x05a82798), SN4(0xfa57d868) },
97ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	{ SN4(0xf89be510), SN4(0xfcf043ac), SN4(0x030fbc54), SN4(0x07641af0) },
98ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	{ SN4(0xf8000000), SN4(0xf8000000), SN4(0xf8000000), SN4(0xf8000000) },
99ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	{ SN4(0xf89be510), SN4(0xfcf043ac), SN4(0x030fbc54), SN4(0x07641af0) }
100ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann};
101ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann
102ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmannstatic const int32_t synmatrix8[16][8] = {
103ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	{ SN8(0x05a82798), SN8(0xfa57d868), SN8(0xfa57d868), SN8(0x05a82798),
104ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	  SN8(0x05a82798), SN8(0xfa57d868), SN8(0xfa57d868), SN8(0x05a82798) },
105ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	{ SN8(0x0471ced0), SN8(0xf8275a10), SN8(0x018f8b84), SN8(0x06a6d988),
106ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	  SN8(0xf9592678), SN8(0xfe70747c), SN8(0x07d8a5f0), SN8(0xfb8e3130) },
107ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	{ SN8(0x030fbc54), SN8(0xf89be510), SN8(0x07641af0), SN8(0xfcf043ac),
108ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	  SN8(0xfcf043ac), SN8(0x07641af0), SN8(0xf89be510), SN8(0x030fbc54) },
109ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	{ SN8(0x018f8b84), SN8(0xfb8e3130), SN8(0x06a6d988), SN8(0xf8275a10),
110ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	  SN8(0x07d8a5f0), SN8(0xf9592678), SN8(0x0471ced0), SN8(0xfe70747c) },
111ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	{ SN8(0x00000000), SN8(0x00000000), SN8(0x00000000), SN8(0x00000000),
112ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	  SN8(0x00000000), SN8(0x00000000), SN8(0x00000000), SN8(0x00000000) },
113ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	{ SN8(0xfe70747c), SN8(0x0471ced0), SN8(0xf9592678), SN8(0x07d8a5f0),
114ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	  SN8(0xf8275a10), SN8(0x06a6d988), SN8(0xfb8e3130), SN8(0x018f8b84) },
115ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	{ SN8(0xfcf043ac), SN8(0x07641af0), SN8(0xf89be510), SN8(0x030fbc54),
116ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	  SN8(0x030fbc54), SN8(0xf89be510), SN8(0x07641af0), SN8(0xfcf043ac) },
117ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	{ SN8(0xfb8e3130), SN8(0x07d8a5f0), SN8(0xfe70747c), SN8(0xf9592678),
118ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	  SN8(0x06a6d988), SN8(0x018f8b84), SN8(0xf8275a10), SN8(0x0471ced0) },
119ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	{ SN8(0xfa57d868), SN8(0x05a82798), SN8(0x05a82798), SN8(0xfa57d868),
120ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	  SN8(0xfa57d868), SN8(0x05a82798), SN8(0x05a82798), SN8(0xfa57d868) },
121ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	{ SN8(0xf9592678), SN8(0x018f8b84), SN8(0x07d8a5f0), SN8(0x0471ced0),
122ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	  SN8(0xfb8e3130), SN8(0xf8275a10), SN8(0xfe70747c), SN8(0x06a6d988) },
123ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	{ SN8(0xf89be510), SN8(0xfcf043ac), SN8(0x030fbc54), SN8(0x07641af0),
124ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	  SN8(0x07641af0), SN8(0x030fbc54), SN8(0xfcf043ac), SN8(0xf89be510) },
125ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	{ SN8(0xf8275a10), SN8(0xf9592678), SN8(0xfb8e3130), SN8(0xfe70747c),
126ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	  SN8(0x018f8b84), SN8(0x0471ced0), SN8(0x06a6d988), SN8(0x07d8a5f0) },
127ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	{ SN8(0xf8000000), SN8(0xf8000000), SN8(0xf8000000), SN8(0xf8000000),
128ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	  SN8(0xf8000000), SN8(0xf8000000), SN8(0xf8000000), SN8(0xf8000000) },
129ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	{ SN8(0xf8275a10), SN8(0xf9592678), SN8(0xfb8e3130), SN8(0xfe70747c),
130ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	  SN8(0x018f8b84), SN8(0x0471ced0), SN8(0x06a6d988), SN8(0x07d8a5f0) },
131ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	{ SN8(0xf89be510), SN8(0xfcf043ac), SN8(0x030fbc54), SN8(0x07641af0),
132ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	  SN8(0x07641af0), SN8(0x030fbc54), SN8(0xfcf043ac), SN8(0xf89be510) },
133ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	{ SN8(0xf9592678), SN8(0x018f8b84), SN8(0x07d8a5f0), SN8(0x0471ced0),
134ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann	  SN8(0xfb8e3130), SN8(0xf8275a10), SN8(0xfe70747c), SN8(0x06a6d988) }
135ec31984c45d9b3dd272ec3ecb9a5270a00494699Marcel Holtmann};
136a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka
137a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka/* Uncomment the following line to enable high precision build of SBC encoder */
138a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka
139a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka/* #define SBC_HIGH_PRECISION */
140a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka
141a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka#ifdef SBC_HIGH_PRECISION
142a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka#define FIXED_A int64_t /* data type for fixed point accumulator */
143a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka#define FIXED_T int32_t /* data type for fixed point constants */
144a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka#define SBC_FIXED_EXTRA_BITS 16
145a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka#else
146a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka#define FIXED_A int32_t /* data type for fixed point accumulator */
147a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka#define FIXED_T int16_t /* data type for fixed point constants */
148a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka#define SBC_FIXED_EXTRA_BITS 0
149a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka#endif
150a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka
151a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka/* A2DP specification: Section 12.8 Tables
152a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka *
153a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka * Original values are premultiplied by 2 for better precision (that is the
154a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka * maximum which is possible without overflows)
155a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka *
156a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka * Note: in each block of 8 numbers sign was changed for elements 2 and 7
157a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka * in order to compensate the same change applied to cos_table_fixed_4
158a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka */
159a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka#define SBC_PROTO_FIXED4_SCALE \
160a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	((sizeof(FIXED_T) * CHAR_BIT - 1) - SBC_FIXED_EXTRA_BITS + 1)
1619e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka#define F_PROTO4(x) (FIXED_A) ((x * 2) * \
162a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	((FIXED_A) 1 << (sizeof(FIXED_T) * CHAR_BIT - 1)) + 0.5)
1639e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka#define F(x) F_PROTO4(x)
164a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashkastatic const FIXED_T _sbc_proto_fixed4[40] = {
1651fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(0.00000000E+00),  F(5.36548976E-04),
166a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(1.49188357E-03),  F(2.73370904E-03),
1671fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(3.83720193E-03),  F(3.89205149E-03),
1681fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(1.86581691E-03),  F(3.06012286E-03),
169a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka
1701fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(1.09137620E-02),  F(2.04385087E-02),
171a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(2.88757392E-02),  F(3.21939290E-02),
1721fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(2.58767811E-02),  F(6.13245186E-03),
173a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(2.88217274E-02),  F(7.76463494E-02),
174a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka
1751fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(1.35593274E-01),  F(1.94987841E-01),
176a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(2.46636662E-01),  F(2.81828203E-01),
1771fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(2.94315332E-01),  F(2.81828203E-01),
1781fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(2.46636662E-01), -F(1.94987841E-01),
179a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka
180a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(1.35593274E-01), -F(7.76463494E-02),
1811fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(2.88217274E-02),  F(6.13245186E-03),
1821fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(2.58767811E-02),  F(3.21939290E-02),
1831fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(2.88757392E-02), -F(2.04385087E-02),
184a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka
185a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(1.09137620E-02), -F(3.06012286E-03),
186a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(1.86581691E-03),  F(3.89205149E-03),
1871fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(3.83720193E-03),  F(2.73370904E-03),
1881fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(1.49188357E-03), -F(5.36548976E-04),
189a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka};
190a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka#undef F
191a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka
192a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka/*
193a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka * To produce this cosine matrix in Octave:
194a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka *
195a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka * b = zeros(4, 8);
196a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka * for i = 0:3
197a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka * for j = 0:7 b(i+1, j+1) = cos((i + 0.5) * (j - 2) * (pi/4))
198a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka * endfor
199a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka * endfor;
200a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka * printf("%.10f, ", b');
201a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka *
202a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka * Note: in each block of 8 numbers sign was changed for elements 2 and 7
203a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka *
204a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka * Change of sign for element 2 allows to replace constant 1.0 (not
205a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka * representable in Q15 format) with -1.0 (fine with Q15).
206a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka * Changed sign for element 7 allows to have more similar constants
207a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka * and simplify subband filter function code.
208a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka */
209a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka#define SBC_COS_TABLE_FIXED4_SCALE \
210a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	((sizeof(FIXED_T) * CHAR_BIT - 1) + SBC_FIXED_EXTRA_BITS)
2119e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka#define F_COS4(x) (FIXED_A) ((x) * \
212a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	((FIXED_A) 1 << (sizeof(FIXED_T) * CHAR_BIT - 1)) + 0.5)
2139e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka#define F(x) F_COS4(x)
214a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashkastatic const FIXED_T cos_table_fixed_4[32] = {
2151fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(0.7071067812),  F(0.9238795325), -F(1.0000000000),  F(0.9238795325),
2161fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(0.7071067812),  F(0.3826834324),  F(0.0000000000),  F(0.3826834324),
217a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka
218a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(0.7071067812),  F(0.3826834324), -F(1.0000000000),  F(0.3826834324),
219a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(0.7071067812), -F(0.9238795325), -F(0.0000000000), -F(0.9238795325),
220a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka
221a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(0.7071067812), -F(0.3826834324), -F(1.0000000000), -F(0.3826834324),
222a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(0.7071067812),  F(0.9238795325),  F(0.0000000000),  F(0.9238795325),
223a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka
2241fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(0.7071067812), -F(0.9238795325), -F(1.0000000000), -F(0.9238795325),
2251fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(0.7071067812), -F(0.3826834324), -F(0.0000000000), -F(0.3826834324),
226a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka};
227a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka#undef F
228a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka
229a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka/* A2DP specification: Section 12.8 Tables
230a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka *
231a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka * Original values are premultiplied by 4 for better precision (that is the
232a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka * maximum which is possible without overflows)
233a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka *
234a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka * Note: in each block of 16 numbers sign was changed for elements 4, 13, 14, 15
235a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka * in order to compensate the same change applied to cos_table_fixed_8
236a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka */
237a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka#define SBC_PROTO_FIXED8_SCALE \
238f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	((sizeof(FIXED_T) * CHAR_BIT - 1) - SBC_FIXED_EXTRA_BITS + 1)
239f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#define F_PROTO8(x) (FIXED_A) ((x * 2) * \
240a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	((FIXED_A) 1 << (sizeof(FIXED_T) * CHAR_BIT - 1)) + 0.5)
2419e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka#define F(x) F_PROTO8(x)
242a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashkastatic const FIXED_T _sbc_proto_fixed8[80] = {
2431fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(0.00000000E+00),  F(1.56575398E-04),
2441fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(3.43256425E-04),  F(5.54620202E-04),
245a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(8.23919506E-04),  F(1.13992507E-03),
2461fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(1.47640169E-03),  F(1.78371725E-03),
2471fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(2.01182542E-03),  F(2.10371989E-03),
2481fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(1.99454554E-03),  F(1.61656283E-03),
2491fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(9.02154502E-04),  F(1.78805361E-04),
2501fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(1.64973098E-03),  F(3.49717454E-03),
2511fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg
2521fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(5.65949473E-03),  F(8.02941163E-03),
2531fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(1.04584443E-02),  F(1.27472335E-02),
254a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(1.46525263E-02),  F(1.59045603E-02),
2551fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(1.62208471E-02),  F(1.53184106E-02),
2561fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(1.29371806E-02),  F(8.85757540E-03),
2571fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(2.92408442E-03), -F(4.91578024E-03),
258a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(1.46404076E-02),  F(2.61098752E-02),
2591fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(3.90751381E-02),  F(5.31873032E-02),
260a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka
2611fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(6.79989431E-02),  F(8.29847578E-02),
2621fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(9.75753918E-02),  F(1.11196689E-01),
263a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(1.23264548E-01),  F(1.33264415E-01),
2641fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(1.40753505E-01),  F(1.45389847E-01),
2651fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(1.46955068E-01),  F(1.45389847E-01),
2661fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(1.40753505E-01),  F(1.33264415E-01),
2671fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(1.23264548E-01), -F(1.11196689E-01),
268a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(9.75753918E-02), -F(8.29847578E-02),
269a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka
270a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(6.79989431E-02), -F(5.31873032E-02),
271a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(3.90751381E-02), -F(2.61098752E-02),
2721fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(1.46404076E-02), -F(4.91578024E-03),
2731fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(2.92408442E-03),  F(8.85757540E-03),
2741fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(1.29371806E-02),  F(1.53184106E-02),
2751fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(1.62208471E-02),  F(1.59045603E-02),
2761fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(1.46525263E-02), -F(1.27472335E-02),
277a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(1.04584443E-02), -F(8.02941163E-03),
278a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka
279a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(5.65949473E-03), -F(3.49717454E-03),
280a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(1.64973098E-03), -F(1.78805361E-04),
281a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(9.02154502E-04),  F(1.61656283E-03),
2821fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(1.99454554E-03),  F(2.10371989E-03),
2831fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(2.01182542E-03),  F(1.78371725E-03),
2841fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(1.47640169E-03),  F(1.13992507E-03),
2851fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(8.23919506E-04), -F(5.54620202E-04),
286a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(3.43256425E-04), -F(1.56575398E-04),
287a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka};
288a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka#undef F
289a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka
290a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka/*
291a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka * To produce this cosine matrix in Octave:
292a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka *
293a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka * b = zeros(8, 16);
294a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka * for i = 0:7
295a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka * for j = 0:15 b(i+1, j+1) = cos((i + 0.5) * (j - 4) * (pi/8))
296a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka * endfor endfor;
297a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka * printf("%.10f, ", b');
298a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka *
299a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka * Note: in each block of 16 numbers sign was changed for elements 4, 13, 14, 15
300a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka *
301a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka * Change of sign for element 4 allows to replace constant 1.0 (not
302a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka * representable in Q15 format) with -1.0 (fine with Q15).
303a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka * Changed signs for elements 13, 14, 15 allow to have more similar constants
304a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka * and simplify subband filter function code.
305a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka */
306a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka#define SBC_COS_TABLE_FIXED8_SCALE \
307a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	((sizeof(FIXED_T) * CHAR_BIT - 1) + SBC_FIXED_EXTRA_BITS)
3089e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka#define F_COS8(x) (FIXED_A) ((x) * \
309a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	((FIXED_A) 1 << (sizeof(FIXED_T) * CHAR_BIT - 1)) + 0.5)
3109e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka#define F(x) F_COS8(x)
311a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashkastatic const FIXED_T cos_table_fixed_8[128] = {
3121fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(0.7071067812),  F(0.8314696123),  F(0.9238795325),  F(0.9807852804),
313a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(1.0000000000),  F(0.9807852804),  F(0.9238795325),  F(0.8314696123),
3141fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(0.7071067812),  F(0.5555702330),  F(0.3826834324),  F(0.1950903220),
3151fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(0.0000000000),  F(0.1950903220),  F(0.3826834324),  F(0.5555702330),
316a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka
317a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(0.7071067812), -F(0.1950903220),  F(0.3826834324),  F(0.8314696123),
318a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(1.0000000000),  F(0.8314696123),  F(0.3826834324), -F(0.1950903220),
319a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(0.7071067812), -F(0.9807852804), -F(0.9238795325), -F(0.5555702330),
320a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(0.0000000000), -F(0.5555702330), -F(0.9238795325), -F(0.9807852804),
321a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka
322a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(0.7071067812), -F(0.9807852804), -F(0.3826834324),  F(0.5555702330),
323a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(1.0000000000),  F(0.5555702330), -F(0.3826834324), -F(0.9807852804),
324a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(0.7071067812),  F(0.1950903220),  F(0.9238795325),  F(0.8314696123),
3251fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(0.0000000000),  F(0.8314696123),  F(0.9238795325),  F(0.1950903220),
326a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka
3271fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(0.7071067812), -F(0.5555702330), -F(0.9238795325),  F(0.1950903220),
328a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(1.0000000000),  F(0.1950903220), -F(0.9238795325), -F(0.5555702330),
3291fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(0.7071067812),  F(0.8314696123), -F(0.3826834324), -F(0.9807852804),
330a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(0.0000000000), -F(0.9807852804), -F(0.3826834324),  F(0.8314696123),
331a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka
3321fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(0.7071067812),  F(0.5555702330), -F(0.9238795325), -F(0.1950903220),
333a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(1.0000000000), -F(0.1950903220), -F(0.9238795325),  F(0.5555702330),
3341fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(0.7071067812), -F(0.8314696123), -F(0.3826834324),  F(0.9807852804),
3351fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(0.0000000000),  F(0.9807852804), -F(0.3826834324), -F(0.8314696123),
336a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka
337a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(0.7071067812),  F(0.9807852804), -F(0.3826834324), -F(0.5555702330),
338a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(1.0000000000), -F(0.5555702330), -F(0.3826834324),  F(0.9807852804),
339a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(0.7071067812), -F(0.1950903220),  F(0.9238795325), -F(0.8314696123),
340a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(0.0000000000), -F(0.8314696123),  F(0.9238795325), -F(0.1950903220),
341a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka
342a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(0.7071067812),  F(0.1950903220),  F(0.3826834324), -F(0.8314696123),
343a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(1.0000000000), -F(0.8314696123),  F(0.3826834324),  F(0.1950903220),
344a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(0.7071067812),  F(0.9807852804), -F(0.9238795325),  F(0.5555702330),
345a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(0.0000000000),  F(0.5555702330), -F(0.9238795325),  F(0.9807852804),
346a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka
3471fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(0.7071067812), -F(0.8314696123),  F(0.9238795325), -F(0.9807852804),
348a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(1.0000000000), -F(0.9807852804),  F(0.9238795325), -F(0.8314696123),
3491fb5ffff0b704038a90e03860ecce63be2deb988Johan Hedberg	F(0.7071067812), -F(0.5555702330),  F(0.3826834324), -F(0.1950903220),
350a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka	-F(0.0000000000), -F(0.1950903220),  F(0.3826834324), -F(0.5555702330),
351a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka};
352a6cb57cd010c728e97bb92f7ae6bbc12d61b66c8Siarhei Siamashka#undef F
3539e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka
3549e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka/*
35582d00972c91a44a428bd08412ca3039e101c0e40Siarhei Siamashka * Enforce 16 byte alignment for the data, which is supposed to be used
35682d00972c91a44a428bd08412ca3039e101c0e40Siarhei Siamashka * with SIMD optimized code.
35782d00972c91a44a428bd08412ca3039e101c0e40Siarhei Siamashka */
35882d00972c91a44a428bd08412ca3039e101c0e40Siarhei Siamashka
35982d00972c91a44a428bd08412ca3039e101c0e40Siarhei Siamashka#define SBC_ALIGN_BITS 4
36082d00972c91a44a428bd08412ca3039e101c0e40Siarhei Siamashka#define SBC_ALIGN_MASK ((1 << (SBC_ALIGN_BITS)) - 1)
36182d00972c91a44a428bd08412ca3039e101c0e40Siarhei Siamashka
36282d00972c91a44a428bd08412ca3039e101c0e40Siarhei Siamashka#ifdef __GNUC__
36382d00972c91a44a428bd08412ca3039e101c0e40Siarhei Siamashka#define SBC_ALIGNED __attribute__((aligned(1 << (SBC_ALIGN_BITS))))
36482d00972c91a44a428bd08412ca3039e101c0e40Siarhei Siamashka#else
36582d00972c91a44a428bd08412ca3039e101c0e40Siarhei Siamashka#define SBC_ALIGNED
36682d00972c91a44a428bd08412ca3039e101c0e40Siarhei Siamashka#endif
36782d00972c91a44a428bd08412ca3039e101c0e40Siarhei Siamashka
36882d00972c91a44a428bd08412ca3039e101c0e40Siarhei Siamashka/*
3699e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka * Constant tables for the use in SIMD optimized analysis filters
3709e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka * Each table consists of two parts:
3719e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka * 1. reordered "proto" table
3729e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka * 2. reordered "cos" table
3739e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka *
3749e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka * Due to non-symmetrical reordering, separate tables for "even"
3759e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka * and "odd" cases are needed
3769e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka */
3779e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka
37882d00972c91a44a428bd08412ca3039e101c0e40Siarhei Siamashkastatic const FIXED_T SBC_ALIGNED analysis_consts_fixed4_simd_even[40 + 16] = {
379f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#define C0 1.0932568993
380f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#define C1 1.3056875580
381f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#define C2 1.3056875580
382f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#define C3 1.6772280856
383f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka
3849e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka#define F(x) F_PROTO4(x)
385f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.00000000E+00 * C0),  F(3.83720193E-03 * C0),
386f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(5.36548976E-04 * C1),  F(2.73370904E-03 * C1),
387f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(3.06012286E-03 * C2),  F(3.89205149E-03 * C2),
388f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.00000000E+00 * C3), -F(1.49188357E-03 * C3),
389f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(1.09137620E-02 * C0),  F(2.58767811E-02 * C0),
390f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(2.04385087E-02 * C1),  F(3.21939290E-02 * C1),
391f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(7.76463494E-02 * C2),  F(6.13245186E-03 * C2),
392f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.00000000E+00 * C3), -F(2.88757392E-02 * C3),
393f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(1.35593274E-01 * C0),  F(2.94315332E-01 * C0),
394f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(1.94987841E-01 * C1),  F(2.81828203E-01 * C1),
395f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(1.94987841E-01 * C2),  F(2.81828203E-01 * C2),
396f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.00000000E+00 * C3), -F(2.46636662E-01 * C3),
397f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(1.35593274E-01 * C0),  F(2.58767811E-02 * C0),
398f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(7.76463494E-02 * C1),  F(6.13245186E-03 * C1),
399f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(2.04385087E-02 * C2),  F(3.21939290E-02 * C2),
400f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.00000000E+00 * C3),  F(2.88217274E-02 * C3),
401f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(1.09137620E-02 * C0),  F(3.83720193E-03 * C0),
402f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(3.06012286E-03 * C1),  F(3.89205149E-03 * C1),
403f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(5.36548976E-04 * C2),  F(2.73370904E-03 * C2),
404f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.00000000E+00 * C3), -F(1.86581691E-03 * C3),
4059e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka#undef F
4069e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka#define F(x) F_COS4(x)
407f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.7071067812 / C0),  F(0.9238795325 / C1),
408f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(0.7071067812 / C0),  F(0.3826834324 / C1),
409f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(0.7071067812 / C0), -F(0.3826834324 / C1),
410f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.7071067812 / C0), -F(0.9238795325 / C1),
411f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.3826834324 / C2), -F(1.0000000000 / C3),
412f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(0.9238795325 / C2), -F(1.0000000000 / C3),
413f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.9238795325 / C2), -F(1.0000000000 / C3),
414f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(0.3826834324 / C2), -F(1.0000000000 / C3),
4159e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka#undef F
416f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka
417f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#undef C0
418f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#undef C1
419f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#undef C2
420f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#undef C3
4219e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka};
4229e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka
42382d00972c91a44a428bd08412ca3039e101c0e40Siarhei Siamashkastatic const FIXED_T SBC_ALIGNED analysis_consts_fixed4_simd_odd[40 + 16] = {
424f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#define C0 1.3056875580
425f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#define C1 1.6772280856
426f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#define C2 1.0932568993
427f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#define C3 1.3056875580
428f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka
4299e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka#define F(x) F_PROTO4(x)
430f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(2.73370904E-03 * C0),  F(5.36548976E-04 * C0),
431f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(1.49188357E-03 * C1),  F(0.00000000E+00 * C1),
432f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(3.83720193E-03 * C2),  F(1.09137620E-02 * C2),
433f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(3.89205149E-03 * C3),  F(3.06012286E-03 * C3),
434f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(3.21939290E-02 * C0),  F(2.04385087E-02 * C0),
435f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(2.88757392E-02 * C1),  F(0.00000000E+00 * C1),
436f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(2.58767811E-02 * C2),  F(1.35593274E-01 * C2),
437f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(6.13245186E-03 * C3),  F(7.76463494E-02 * C3),
438f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(2.81828203E-01 * C0),  F(1.94987841E-01 * C0),
439f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(2.46636662E-01 * C1),  F(0.00000000E+00 * C1),
440f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(2.94315332E-01 * C2), -F(1.35593274E-01 * C2),
441f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(2.81828203E-01 * C3), -F(1.94987841E-01 * C3),
442f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(6.13245186E-03 * C0), -F(7.76463494E-02 * C0),
443f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(2.88217274E-02 * C1),  F(0.00000000E+00 * C1),
444f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(2.58767811E-02 * C2), -F(1.09137620E-02 * C2),
445f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(3.21939290E-02 * C3), -F(2.04385087E-02 * C3),
446f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(3.89205149E-03 * C0), -F(3.06012286E-03 * C0),
447f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(1.86581691E-03 * C1),  F(0.00000000E+00 * C1),
448f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(3.83720193E-03 * C2),  F(0.00000000E+00 * C2),
449f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(2.73370904E-03 * C3), -F(5.36548976E-04 * C3),
4509e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka#undef F
4519e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka#define F(x) F_COS4(x)
452f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.9238795325 / C0), -F(1.0000000000 / C1),
453f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.3826834324 / C0), -F(1.0000000000 / C1),
454f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(0.3826834324 / C0), -F(1.0000000000 / C1),
455f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(0.9238795325 / C0), -F(1.0000000000 / C1),
456f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.7071067812 / C2),  F(0.3826834324 / C3),
457f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(0.7071067812 / C2), -F(0.9238795325 / C3),
458f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(0.7071067812 / C2),  F(0.9238795325 / C3),
459f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.7071067812 / C2), -F(0.3826834324 / C3),
4609e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka#undef F
461f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka
462f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#undef C0
463f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#undef C1
464f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#undef C2
465f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#undef C3
4669e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka};
4679e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka
46882d00972c91a44a428bd08412ca3039e101c0e40Siarhei Siamashkastatic const FIXED_T SBC_ALIGNED analysis_consts_fixed8_simd_even[80 + 64] = {
469f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#define C0 2.7906148894
470f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#define C1 2.4270044280
471f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#define C2 2.8015616024
472f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#define C3 3.1710363741
473f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#define C4 2.5377944043
474f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#define C5 2.4270044280
475f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#define C6 2.8015616024
476f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#define C7 3.1710363741
477f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka
4789e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka#define F(x) F_PROTO8(x)
479f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.00000000E+00 * C0),  F(2.01182542E-03 * C0),
480f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(1.56575398E-04 * C1),  F(1.78371725E-03 * C1),
481f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(3.43256425E-04 * C2),  F(1.47640169E-03 * C2),
482f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(5.54620202E-04 * C3),  F(1.13992507E-03 * C3),
483f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(8.23919506E-04 * C4),  F(0.00000000E+00 * C4),
484f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(2.10371989E-03 * C5),  F(3.49717454E-03 * C5),
485f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(1.99454554E-03 * C6),  F(1.64973098E-03 * C6),
486f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(1.61656283E-03 * C7),  F(1.78805361E-04 * C7),
487f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(5.65949473E-03 * C0),  F(1.29371806E-02 * C0),
488f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(8.02941163E-03 * C1),  F(1.53184106E-02 * C1),
489f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(1.04584443E-02 * C2),  F(1.62208471E-02 * C2),
490f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(1.27472335E-02 * C3),  F(1.59045603E-02 * C3),
491f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(1.46525263E-02 * C4),  F(0.00000000E+00 * C4),
492f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(8.85757540E-03 * C5),  F(5.31873032E-02 * C5),
493f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(2.92408442E-03 * C6),  F(3.90751381E-02 * C6),
494f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(4.91578024E-03 * C7),  F(2.61098752E-02 * C7),
495f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(6.79989431E-02 * C0),  F(1.46955068E-01 * C0),
496f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(8.29847578E-02 * C1),  F(1.45389847E-01 * C1),
497f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(9.75753918E-02 * C2),  F(1.40753505E-01 * C2),
498f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(1.11196689E-01 * C3),  F(1.33264415E-01 * C3),
499f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(1.23264548E-01 * C4),  F(0.00000000E+00 * C4),
500f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(1.45389847E-01 * C5), -F(8.29847578E-02 * C5),
501f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(1.40753505E-01 * C6), -F(9.75753918E-02 * C6),
502f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(1.33264415E-01 * C7), -F(1.11196689E-01 * C7),
503f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(6.79989431E-02 * C0),  F(1.29371806E-02 * C0),
504f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(5.31873032E-02 * C1),  F(8.85757540E-03 * C1),
505f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(3.90751381E-02 * C2),  F(2.92408442E-03 * C2),
506f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(2.61098752E-02 * C3), -F(4.91578024E-03 * C3),
507f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(1.46404076E-02 * C4),  F(0.00000000E+00 * C4),
508f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(1.53184106E-02 * C5), -F(8.02941163E-03 * C5),
509f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(1.62208471E-02 * C6), -F(1.04584443E-02 * C6),
510f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(1.59045603E-02 * C7), -F(1.27472335E-02 * C7),
511f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(5.65949473E-03 * C0),  F(2.01182542E-03 * C0),
512f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(3.49717454E-03 * C1),  F(2.10371989E-03 * C1),
513f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(1.64973098E-03 * C2),  F(1.99454554E-03 * C2),
514f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(1.78805361E-04 * C3),  F(1.61656283E-03 * C3),
515f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(9.02154502E-04 * C4),  F(0.00000000E+00 * C4),
516f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(1.78371725E-03 * C5), -F(1.56575398E-04 * C5),
517f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(1.47640169E-03 * C6), -F(3.43256425E-04 * C6),
518f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(1.13992507E-03 * C7), -F(5.54620202E-04 * C7),
5199e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka#undef F
5209e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka#define F(x) F_COS8(x)
521f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.7071067812 / C0),  F(0.8314696123 / C1),
522f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(0.7071067812 / C0), -F(0.1950903220 / C1),
523f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(0.7071067812 / C0), -F(0.9807852804 / C1),
524f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.7071067812 / C0), -F(0.5555702330 / C1),
525f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.7071067812 / C0),  F(0.5555702330 / C1),
526f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(0.7071067812 / C0),  F(0.9807852804 / C1),
527f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(0.7071067812 / C0),  F(0.1950903220 / C1),
528f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.7071067812 / C0), -F(0.8314696123 / C1),
529f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.9238795325 / C2),  F(0.9807852804 / C3),
530f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.3826834324 / C2),  F(0.8314696123 / C3),
531f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(0.3826834324 / C2),  F(0.5555702330 / C3),
532f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(0.9238795325 / C2),  F(0.1950903220 / C3),
533f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(0.9238795325 / C2), -F(0.1950903220 / C3),
534f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(0.3826834324 / C2), -F(0.5555702330 / C3),
535f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.3826834324 / C2), -F(0.8314696123 / C3),
536f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.9238795325 / C2), -F(0.9807852804 / C3),
537f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(1.0000000000 / C4),  F(0.5555702330 / C5),
538f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(1.0000000000 / C4), -F(0.9807852804 / C5),
539f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(1.0000000000 / C4),  F(0.1950903220 / C5),
540f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(1.0000000000 / C4),  F(0.8314696123 / C5),
541f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(1.0000000000 / C4), -F(0.8314696123 / C5),
542f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(1.0000000000 / C4), -F(0.1950903220 / C5),
543f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(1.0000000000 / C4),  F(0.9807852804 / C5),
544f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(1.0000000000 / C4), -F(0.5555702330 / C5),
545f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.3826834324 / C6),  F(0.1950903220 / C7),
546f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(0.9238795325 / C6), -F(0.5555702330 / C7),
547f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.9238795325 / C6),  F(0.8314696123 / C7),
548f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(0.3826834324 / C6), -F(0.9807852804 / C7),
549f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(0.3826834324 / C6),  F(0.9807852804 / C7),
550f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.9238795325 / C6), -F(0.8314696123 / C7),
551f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(0.9238795325 / C6),  F(0.5555702330 / C7),
552f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.3826834324 / C6), -F(0.1950903220 / C7),
5539e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka#undef F
554f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka
555f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#undef C0
556f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#undef C1
557f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#undef C2
558f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#undef C3
559f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#undef C4
560f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#undef C5
561f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#undef C6
562f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#undef C7
5639e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka};
5649e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka
56582d00972c91a44a428bd08412ca3039e101c0e40Siarhei Siamashkastatic const FIXED_T SBC_ALIGNED analysis_consts_fixed8_simd_odd[80 + 64] = {
566f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#define C0 2.5377944043
567f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#define C1 2.4270044280
568f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#define C2 2.8015616024
569f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#define C3 3.1710363741
570f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#define C4 2.7906148894
571f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#define C5 2.4270044280
572f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#define C6 2.8015616024
573f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#define C7 3.1710363741
574f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka
5759e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka#define F(x) F_PROTO8(x)
576f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.00000000E+00 * C0), -F(8.23919506E-04 * C0),
577f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(1.56575398E-04 * C1),  F(1.78371725E-03 * C1),
578f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(3.43256425E-04 * C2),  F(1.47640169E-03 * C2),
579f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(5.54620202E-04 * C3),  F(1.13992507E-03 * C3),
580f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(2.01182542E-03 * C4),  F(5.65949473E-03 * C4),
581f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(2.10371989E-03 * C5),  F(3.49717454E-03 * C5),
582f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(1.99454554E-03 * C6),  F(1.64973098E-03 * C6),
583f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(1.61656283E-03 * C7),  F(1.78805361E-04 * C7),
584f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.00000000E+00 * C0), -F(1.46525263E-02 * C0),
585f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(8.02941163E-03 * C1),  F(1.53184106E-02 * C1),
586f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(1.04584443E-02 * C2),  F(1.62208471E-02 * C2),
587f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(1.27472335E-02 * C3),  F(1.59045603E-02 * C3),
588f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(1.29371806E-02 * C4),  F(6.79989431E-02 * C4),
589f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(8.85757540E-03 * C5),  F(5.31873032E-02 * C5),
590f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(2.92408442E-03 * C6),  F(3.90751381E-02 * C6),
591f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(4.91578024E-03 * C7),  F(2.61098752E-02 * C7),
592f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.00000000E+00 * C0), -F(1.23264548E-01 * C0),
593f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(8.29847578E-02 * C1),  F(1.45389847E-01 * C1),
594f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(9.75753918E-02 * C2),  F(1.40753505E-01 * C2),
595f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(1.11196689E-01 * C3),  F(1.33264415E-01 * C3),
596f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(1.46955068E-01 * C4), -F(6.79989431E-02 * C4),
597f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(1.45389847E-01 * C5), -F(8.29847578E-02 * C5),
598f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(1.40753505E-01 * C6), -F(9.75753918E-02 * C6),
599f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(1.33264415E-01 * C7), -F(1.11196689E-01 * C7),
600f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.00000000E+00 * C0),  F(1.46404076E-02 * C0),
601f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(5.31873032E-02 * C1),  F(8.85757540E-03 * C1),
602f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(3.90751381E-02 * C2),  F(2.92408442E-03 * C2),
603f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(2.61098752E-02 * C3), -F(4.91578024E-03 * C3),
604f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(1.29371806E-02 * C4), -F(5.65949473E-03 * C4),
605f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(1.53184106E-02 * C5), -F(8.02941163E-03 * C5),
606f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(1.62208471E-02 * C6), -F(1.04584443E-02 * C6),
607f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(1.59045603E-02 * C7), -F(1.27472335E-02 * C7),
608f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.00000000E+00 * C0), -F(9.02154502E-04 * C0),
609f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(3.49717454E-03 * C1),  F(2.10371989E-03 * C1),
610f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(1.64973098E-03 * C2),  F(1.99454554E-03 * C2),
611f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(1.78805361E-04 * C3),  F(1.61656283E-03 * C3),
612f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(2.01182542E-03 * C4),  F(0.00000000E+00 * C4),
613f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(1.78371725E-03 * C5), -F(1.56575398E-04 * C5),
614f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(1.47640169E-03 * C6), -F(3.43256425E-04 * C6),
615f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(1.13992507E-03 * C7), -F(5.54620202E-04 * C7),
6169e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka#undef F
6179e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka#define F(x) F_COS8(x)
618f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(1.0000000000 / C0),  F(0.8314696123 / C1),
619f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(1.0000000000 / C0), -F(0.1950903220 / C1),
620f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(1.0000000000 / C0), -F(0.9807852804 / C1),
621f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(1.0000000000 / C0), -F(0.5555702330 / C1),
622f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(1.0000000000 / C0),  F(0.5555702330 / C1),
623f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(1.0000000000 / C0),  F(0.9807852804 / C1),
624f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(1.0000000000 / C0),  F(0.1950903220 / C1),
625f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(1.0000000000 / C0), -F(0.8314696123 / C1),
626f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.9238795325 / C2),  F(0.9807852804 / C3),
627f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.3826834324 / C2),  F(0.8314696123 / C3),
628f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(0.3826834324 / C2),  F(0.5555702330 / C3),
629f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(0.9238795325 / C2),  F(0.1950903220 / C3),
630f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(0.9238795325 / C2), -F(0.1950903220 / C3),
631f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(0.3826834324 / C2), -F(0.5555702330 / C3),
632f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.3826834324 / C2), -F(0.8314696123 / C3),
633f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.9238795325 / C2), -F(0.9807852804 / C3),
634f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.7071067812 / C4),  F(0.5555702330 / C5),
635f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(0.7071067812 / C4), -F(0.9807852804 / C5),
636f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(0.7071067812 / C4),  F(0.1950903220 / C5),
637f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.7071067812 / C4),  F(0.8314696123 / C5),
638f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.7071067812 / C4), -F(0.8314696123 / C5),
639f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(0.7071067812 / C4), -F(0.1950903220 / C5),
640f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(0.7071067812 / C4),  F(0.9807852804 / C5),
641f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.7071067812 / C4), -F(0.5555702330 / C5),
642f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.3826834324 / C6),  F(0.1950903220 / C7),
643f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(0.9238795325 / C6), -F(0.5555702330 / C7),
644f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.9238795325 / C6),  F(0.8314696123 / C7),
645f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(0.3826834324 / C6), -F(0.9807852804 / C7),
646f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(0.3826834324 / C6),  F(0.9807852804 / C7),
647f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.9238795325 / C6), -F(0.8314696123 / C7),
648f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	-F(0.9238795325 / C6),  F(0.5555702330 / C7),
649f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka	 F(0.3826834324 / C6), -F(0.1950903220 / C7),
6509e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka#undef F
651f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka
652f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#undef C0
653f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#undef C1
654f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#undef C2
655f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#undef C3
656f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#undef C4
657f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#undef C5
658f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#undef C6
659f70d1ada0aba5567fbf67cedfb4a4ba1a9f9852eSiarhei Siamashka#undef C7
6609e31e7dde636ca28ee551e8bcf8e4f4ca0ef553dSiarhei Siamashka};
661