diff options
Diffstat (limited to 'apps/codecs/libfaad/sbr_dct.c')
-rw-r--r-- | apps/codecs/libfaad/sbr_dct.c | 2271 |
1 files changed, 2271 insertions, 0 deletions
diff --git a/apps/codecs/libfaad/sbr_dct.c b/apps/codecs/libfaad/sbr_dct.c new file mode 100644 index 0000000000..dbfbb8945c --- /dev/null +++ b/apps/codecs/libfaad/sbr_dct.c | |||
@@ -0,0 +1,2271 @@ | |||
1 | /* | ||
2 | ** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding | ||
3 | ** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com | ||
4 | ** | ||
5 | ** This program is free software; you can redistribute it and/or modify | ||
6 | ** it under the terms of the GNU General Public License as published by | ||
7 | ** the Free Software Foundation; either version 2 of the License, or | ||
8 | ** (at your option) any later version. | ||
9 | ** | ||
10 | ** This program is distributed in the hope that it will be useful, | ||
11 | ** but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | ** GNU General Public License for more details. | ||
14 | ** | ||
15 | ** You should have received a copy of the GNU General Public License | ||
16 | ** along with this program; if not, write to the Free Software | ||
17 | ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
18 | ** | ||
19 | ** Any non-GPL usage of this software or parts of this software is strictly | ||
20 | ** forbidden. | ||
21 | ** | ||
22 | ** Commercial non-GPL licensing of this software is possible. | ||
23 | ** For more info contact Ahead Software through Mpeg4AAClicense@nero.com. | ||
24 | ** | ||
25 | ** $Id$ | ||
26 | **/ | ||
27 | |||
28 | #include "common.h" | ||
29 | |||
30 | #ifdef SBR_DEC | ||
31 | |||
32 | #ifdef _MSC_VER | ||
33 | #pragma warning(disable:4305) | ||
34 | #pragma warning(disable:4244) | ||
35 | #endif | ||
36 | |||
37 | |||
38 | #include "sbr_dct.h" | ||
39 | |||
40 | void DCT4_32(real_t *y, real_t *x) | ||
41 | { | ||
42 | real_t f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10; | ||
43 | real_t f11, f12, f13, f14, f15, f16, f17, f18, f19, f20; | ||
44 | real_t f21, f22, f23, f24, f25, f26, f27, f28, f29, f30; | ||
45 | real_t f31, f32, f33, f34, f35, f36, f37, f38, f39, f40; | ||
46 | real_t f41, f42, f43, f44, f45, f46, f47, f48, f49, f50; | ||
47 | real_t f51, f52, f53, f54, f55, f56, f57, f58, f59, f60; | ||
48 | real_t f61, f62, f63, f64, f65, f66, f67, f68, f69, f70; | ||
49 | real_t f71, f72, f73, f74, f75, f76, f77, f78, f79, f80; | ||
50 | real_t f81, f82, f83, f84, f85, f86, f87, f88, f89, f90; | ||
51 | real_t f91, f92, f93, f94, f95, f96, f97, f98, f99, f100; | ||
52 | real_t f101, f102, f103, f104, f105, f106, f107, f108, f109, f110; | ||
53 | real_t f111, f112, f113, f114, f115, f116, f117, f118, f119, f120; | ||
54 | real_t f121, f122, f123, f124, f125, f126, f127, f128, f129, f130; | ||
55 | real_t f131, f132, f133, f134, f135, f136, f137, f138, f139, f140; | ||
56 | real_t f141, f142, f143, f144, f145, f146, f147, f148, f149, f150; | ||
57 | real_t f151, f152, f153, f154, f155, f156, f157, f158, f159, f160; | ||
58 | real_t f161, f162, f163, f164, f165, f166, f167, f168, f169, f170; | ||
59 | real_t f171, f172, f173, f174, f175, f176, f177, f178, f179, f180; | ||
60 | real_t f181, f182, f183, f184, f185, f186, f187, f188, f189, f190; | ||
61 | real_t f191, f192, f193, f194, f195, f196, f197, f198, f199, f200; | ||
62 | real_t f201, f202, f203, f204, f205, f206, f207, f208, f209, f210; | ||
63 | real_t f211, f212, f213, f214, f215, f216, f217, f218, f219, f220; | ||
64 | real_t f221, f222, f223, f224, f225, f226, f227, f228, f229, f230; | ||
65 | real_t f231, f232, f233, f234, f235, f236, f237, f238, f239, f240; | ||
66 | real_t f241, f242, f243, f244, f245, f246, f247, f248, f249, f250; | ||
67 | real_t f251, f252, f253, f254, f255, f256, f257, f258, f259, f260; | ||
68 | real_t f261, f262, f263, f264, f265, f266, f267, f268, f269, f270; | ||
69 | real_t f271, f272, f273, f274, f275, f276, f277, f278, f279, f280; | ||
70 | real_t f281, f282, f283, f284, f285, f286, f287, f288, f289, f290; | ||
71 | real_t f291, f292, f293, f294, f295, f296, f297, f298, f299, f300; | ||
72 | real_t f301, f302, f303, f304, f305, f306, f307, f310, f311, f312; | ||
73 | real_t f313, f316, f317, f318, f319, f322, f323, f324, f325, f328; | ||
74 | real_t f329, f330, f331, f334, f335, f336, f337, f340, f341, f342; | ||
75 | real_t f343, f346, f347, f348, f349, f352, f353, f354, f355, f358; | ||
76 | real_t f359, f360, f361, f364, f365, f366, f367, f370, f371, f372; | ||
77 | real_t f373, f376, f377, f378, f379, f382, f383, f384, f385, f388; | ||
78 | real_t f389, f390, f391, f394, f395, f396, f397; | ||
79 | |||
80 | f0 = x[15] - x[16]; | ||
81 | f1 = x[15] + x[16]; | ||
82 | f2 = MUL_F(FRAC_CONST(0.7071067811865476), f1); | ||
83 | f3 = MUL_F(FRAC_CONST(0.7071067811865476), f0); | ||
84 | f4 = x[8] - x[23]; | ||
85 | f5 = x[8] + x[23]; | ||
86 | f6 = MUL_F(FRAC_CONST(0.7071067811865476), f5); | ||
87 | f7 = MUL_F(FRAC_CONST(0.7071067811865476), f4); | ||
88 | f8 = x[12] - x[19]; | ||
89 | f9 = x[12] + x[19]; | ||
90 | f10 = MUL_F(FRAC_CONST(0.7071067811865476), f9); | ||
91 | f11 = MUL_F(FRAC_CONST(0.7071067811865476), f8); | ||
92 | f12 = x[11] - x[20]; | ||
93 | f13 = x[11] + x[20]; | ||
94 | f14 = MUL_F(FRAC_CONST(0.7071067811865476), f13); | ||
95 | f15 = MUL_F(FRAC_CONST(0.7071067811865476), f12); | ||
96 | f16 = x[14] - x[17]; | ||
97 | f17 = x[14] + x[17]; | ||
98 | f18 = MUL_F(FRAC_CONST(0.7071067811865476), f17); | ||
99 | f19 = MUL_F(FRAC_CONST(0.7071067811865476), f16); | ||
100 | f20 = x[9] - x[22]; | ||
101 | f21 = x[9] + x[22]; | ||
102 | f22 = MUL_F(FRAC_CONST(0.7071067811865476), f21); | ||
103 | f23 = MUL_F(FRAC_CONST(0.7071067811865476), f20); | ||
104 | f24 = x[13] - x[18]; | ||
105 | f25 = x[13] + x[18]; | ||
106 | f26 = MUL_F(FRAC_CONST(0.7071067811865476), f25); | ||
107 | f27 = MUL_F(FRAC_CONST(0.7071067811865476), f24); | ||
108 | f28 = x[10] - x[21]; | ||
109 | f29 = x[10] + x[21]; | ||
110 | f30 = MUL_F(FRAC_CONST(0.7071067811865476), f29); | ||
111 | f31 = MUL_F(FRAC_CONST(0.7071067811865476), f28); | ||
112 | f32 = x[0] - f2; | ||
113 | f33 = x[0] + f2; | ||
114 | f34 = x[31] - f3; | ||
115 | f35 = x[31] + f3; | ||
116 | f36 = x[7] - f6; | ||
117 | f37 = x[7] + f6; | ||
118 | f38 = x[24] - f7; | ||
119 | f39 = x[24] + f7; | ||
120 | f40 = x[3] - f10; | ||
121 | f41 = x[3] + f10; | ||
122 | f42 = x[28] - f11; | ||
123 | f43 = x[28] + f11; | ||
124 | f44 = x[4] - f14; | ||
125 | f45 = x[4] + f14; | ||
126 | f46 = x[27] - f15; | ||
127 | f47 = x[27] + f15; | ||
128 | f48 = x[1] - f18; | ||
129 | f49 = x[1] + f18; | ||
130 | f50 = x[30] - f19; | ||
131 | f51 = x[30] + f19; | ||
132 | f52 = x[6] - f22; | ||
133 | f53 = x[6] + f22; | ||
134 | f54 = x[25] - f23; | ||
135 | f55 = x[25] + f23; | ||
136 | f56 = x[2] - f26; | ||
137 | f57 = x[2] + f26; | ||
138 | f58 = x[29] - f27; | ||
139 | f59 = x[29] + f27; | ||
140 | f60 = x[5] - f30; | ||
141 | f61 = x[5] + f30; | ||
142 | f62 = x[26] - f31; | ||
143 | f63 = x[26] + f31; | ||
144 | f64 = f39 + f37; | ||
145 | f65 = MUL_F(FRAC_CONST(-0.5411961001461969), f39); | ||
146 | f66 = MUL_F(FRAC_CONST(0.9238795325112867), f64); | ||
147 | f67 = MUL_C(COEF_CONST(1.3065629648763766), f37); | ||
148 | f68 = f65 + f66; | ||
149 | f69 = f67 - f66; | ||
150 | f70 = f38 + f36; | ||
151 | f71 = MUL_C(COEF_CONST(1.3065629648763770), f38); | ||
152 | f72 = MUL_F(FRAC_CONST(-0.3826834323650904), f70); | ||
153 | f73 = MUL_F(FRAC_CONST(0.5411961001461961), f36); | ||
154 | f74 = f71 + f72; | ||
155 | f75 = f73 - f72; | ||
156 | f76 = f47 + f45; | ||
157 | f77 = MUL_F(FRAC_CONST(-0.5411961001461969), f47); | ||
158 | f78 = MUL_F(FRAC_CONST(0.9238795325112867), f76); | ||
159 | f79 = MUL_C(COEF_CONST(1.3065629648763766), f45); | ||
160 | f80 = f77 + f78; | ||
161 | f81 = f79 - f78; | ||
162 | f82 = f46 + f44; | ||
163 | f83 = MUL_C(COEF_CONST(1.3065629648763770), f46); | ||
164 | f84 = MUL_F(FRAC_CONST(-0.3826834323650904), f82); | ||
165 | f85 = MUL_F(FRAC_CONST(0.5411961001461961), f44); | ||
166 | f86 = f83 + f84; | ||
167 | f87 = f85 - f84; | ||
168 | f88 = f55 + f53; | ||
169 | f89 = MUL_F(FRAC_CONST(-0.5411961001461969), f55); | ||
170 | f90 = MUL_F(FRAC_CONST(0.9238795325112867), f88); | ||
171 | f91 = MUL_C(COEF_CONST(1.3065629648763766), f53); | ||
172 | f92 = f89 + f90; | ||
173 | f93 = f91 - f90; | ||
174 | f94 = f54 + f52; | ||
175 | f95 = MUL_C(COEF_CONST(1.3065629648763770), f54); | ||
176 | f96 = MUL_F(FRAC_CONST(-0.3826834323650904), f94); | ||
177 | f97 = MUL_F(FRAC_CONST(0.5411961001461961), f52); | ||
178 | f98 = f95 + f96; | ||
179 | f99 = f97 - f96; | ||
180 | f100 = f63 + f61; | ||
181 | f101 = MUL_F(FRAC_CONST(-0.5411961001461969), f63); | ||
182 | f102 = MUL_F(FRAC_CONST(0.9238795325112867), f100); | ||
183 | f103 = MUL_C(COEF_CONST(1.3065629648763766), f61); | ||
184 | f104 = f101 + f102; | ||
185 | f105 = f103 - f102; | ||
186 | f106 = f62 + f60; | ||
187 | f107 = MUL_C(COEF_CONST(1.3065629648763770), f62); | ||
188 | f108 = MUL_F(FRAC_CONST(-0.3826834323650904), f106); | ||
189 | f109 = MUL_F(FRAC_CONST(0.5411961001461961), f60); | ||
190 | f110 = f107 + f108; | ||
191 | f111 = f109 - f108; | ||
192 | f112 = f33 - f68; | ||
193 | f113 = f33 + f68; | ||
194 | f114 = f35 - f69; | ||
195 | f115 = f35 + f69; | ||
196 | f116 = f32 - f74; | ||
197 | f117 = f32 + f74; | ||
198 | f118 = f34 - f75; | ||
199 | f119 = f34 + f75; | ||
200 | f120 = f41 - f80; | ||
201 | f121 = f41 + f80; | ||
202 | f122 = f43 - f81; | ||
203 | f123 = f43 + f81; | ||
204 | f124 = f40 - f86; | ||
205 | f125 = f40 + f86; | ||
206 | f126 = f42 - f87; | ||
207 | f127 = f42 + f87; | ||
208 | f128 = f49 - f92; | ||
209 | f129 = f49 + f92; | ||
210 | f130 = f51 - f93; | ||
211 | f131 = f51 + f93; | ||
212 | f132 = f48 - f98; | ||
213 | f133 = f48 + f98; | ||
214 | f134 = f50 - f99; | ||
215 | f135 = f50 + f99; | ||
216 | f136 = f57 - f104; | ||
217 | f137 = f57 + f104; | ||
218 | f138 = f59 - f105; | ||
219 | f139 = f59 + f105; | ||
220 | f140 = f56 - f110; | ||
221 | f141 = f56 + f110; | ||
222 | f142 = f58 - f111; | ||
223 | f143 = f58 + f111; | ||
224 | f144 = f123 + f121; | ||
225 | f145 = MUL_F(FRAC_CONST(-0.7856949583871021), f123); | ||
226 | f146 = MUL_F(FRAC_CONST(0.9807852804032304), f144); | ||
227 | f147 = MUL_C(COEF_CONST(1.1758756024193588), f121); | ||
228 | f148 = f145 + f146; | ||
229 | f149 = f147 - f146; | ||
230 | f150 = f127 + f125; | ||
231 | f151 = MUL_F(FRAC_CONST(0.2758993792829431), f127); | ||
232 | f152 = MUL_F(FRAC_CONST(0.5555702330196022), f150); | ||
233 | f153 = MUL_C(COEF_CONST(1.3870398453221475), f125); | ||
234 | f154 = f151 + f152; | ||
235 | f155 = f153 - f152; | ||
236 | f156 = f122 + f120; | ||
237 | f157 = MUL_C(COEF_CONST(1.1758756024193591), f122); | ||
238 | f158 = MUL_F(FRAC_CONST(-0.1950903220161287), f156); | ||
239 | f159 = MUL_F(FRAC_CONST(0.7856949583871016), f120); | ||
240 | f160 = f157 + f158; | ||
241 | f161 = f159 - f158; | ||
242 | f162 = f126 + f124; | ||
243 | f163 = MUL_C(COEF_CONST(1.3870398453221473), f126); | ||
244 | f164 = MUL_F(FRAC_CONST(-0.8314696123025455), f162); | ||
245 | f165 = MUL_F(FRAC_CONST(-0.2758993792829436), f124); | ||
246 | f166 = f163 + f164; | ||
247 | f167 = f165 - f164; | ||
248 | f168 = f139 + f137; | ||
249 | f169 = MUL_F(FRAC_CONST(-0.7856949583871021), f139); | ||
250 | f170 = MUL_F(FRAC_CONST(0.9807852804032304), f168); | ||
251 | f171 = MUL_C(COEF_CONST(1.1758756024193588), f137); | ||
252 | f172 = f169 + f170; | ||
253 | f173 = f171 - f170; | ||
254 | f174 = f143 + f141; | ||
255 | f175 = MUL_F(FRAC_CONST(0.2758993792829431), f143); | ||
256 | f176 = MUL_F(FRAC_CONST(0.5555702330196022), f174); | ||
257 | f177 = MUL_C(COEF_CONST(1.3870398453221475), f141); | ||
258 | f178 = f175 + f176; | ||
259 | f179 = f177 - f176; | ||
260 | f180 = f138 + f136; | ||
261 | f181 = MUL_C(COEF_CONST(1.1758756024193591), f138); | ||
262 | f182 = MUL_F(FRAC_CONST(-0.1950903220161287), f180); | ||
263 | f183 = MUL_F(FRAC_CONST(0.7856949583871016), f136); | ||
264 | f184 = f181 + f182; | ||
265 | f185 = f183 - f182; | ||
266 | f186 = f142 + f140; | ||
267 | f187 = MUL_C(COEF_CONST(1.3870398453221473), f142); | ||
268 | f188 = MUL_F(FRAC_CONST(-0.8314696123025455), f186); | ||
269 | f189 = MUL_F(FRAC_CONST(-0.2758993792829436), f140); | ||
270 | f190 = f187 + f188; | ||
271 | f191 = f189 - f188; | ||
272 | f192 = f113 - f148; | ||
273 | f193 = f113 + f148; | ||
274 | f194 = f115 - f149; | ||
275 | f195 = f115 + f149; | ||
276 | f196 = f117 - f154; | ||
277 | f197 = f117 + f154; | ||
278 | f198 = f119 - f155; | ||
279 | f199 = f119 + f155; | ||
280 | f200 = f112 - f160; | ||
281 | f201 = f112 + f160; | ||
282 | f202 = f114 - f161; | ||
283 | f203 = f114 + f161; | ||
284 | f204 = f116 - f166; | ||
285 | f205 = f116 + f166; | ||
286 | f206 = f118 - f167; | ||
287 | f207 = f118 + f167; | ||
288 | f208 = f129 - f172; | ||
289 | f209 = f129 + f172; | ||
290 | f210 = f131 - f173; | ||
291 | f211 = f131 + f173; | ||
292 | f212 = f133 - f178; | ||
293 | f213 = f133 + f178; | ||
294 | f214 = f135 - f179; | ||
295 | f215 = f135 + f179; | ||
296 | f216 = f128 - f184; | ||
297 | f217 = f128 + f184; | ||
298 | f218 = f130 - f185; | ||
299 | f219 = f130 + f185; | ||
300 | f220 = f132 - f190; | ||
301 | f221 = f132 + f190; | ||
302 | f222 = f134 - f191; | ||
303 | f223 = f134 + f191; | ||
304 | f224 = f211 + f209; | ||
305 | f225 = MUL_F(FRAC_CONST(-0.8971675863426361), f211); | ||
306 | f226 = MUL_F(FRAC_CONST(0.9951847266721968), f224); | ||
307 | f227 = MUL_C(COEF_CONST(1.0932018670017576), f209); | ||
308 | f228 = f225 + f226; | ||
309 | f229 = f227 - f226; | ||
310 | f230 = f215 + f213; | ||
311 | f231 = MUL_F(FRAC_CONST(-0.4105245275223571), f215); | ||
312 | f232 = MUL_F(FRAC_CONST(0.8819212643483549), f230); | ||
313 | f233 = MUL_C(COEF_CONST(1.3533180011743529), f213); | ||
314 | f234 = f231 + f232; | ||
315 | f235 = f233 - f232; | ||
316 | f236 = f219 + f217; | ||
317 | f237 = MUL_F(FRAC_CONST(0.1386171691990915), f219); | ||
318 | f238 = MUL_F(FRAC_CONST(0.6343932841636455), f236); | ||
319 | f239 = MUL_C(COEF_CONST(1.4074037375263826), f217); | ||
320 | f240 = f237 + f238; | ||
321 | f241 = f239 - f238; | ||
322 | f242 = f223 + f221; | ||
323 | f243 = MUL_F(FRAC_CONST(0.6666556584777466), f223); | ||
324 | f244 = MUL_F(FRAC_CONST(0.2902846772544623), f242); | ||
325 | f245 = MUL_C(COEF_CONST(1.2472250129866711), f221); | ||
326 | f246 = f243 + f244; | ||
327 | f247 = f245 - f244; | ||
328 | f248 = f210 + f208; | ||
329 | f249 = MUL_C(COEF_CONST(1.0932018670017574), f210); | ||
330 | f250 = MUL_F(FRAC_CONST(-0.0980171403295605), f248); | ||
331 | f251 = MUL_F(FRAC_CONST(0.8971675863426364), f208); | ||
332 | f252 = f249 + f250; | ||
333 | f253 = f251 - f250; | ||
334 | f254 = f214 + f212; | ||
335 | f255 = MUL_C(COEF_CONST(1.3533180011743529), f214); | ||
336 | f256 = MUL_F(FRAC_CONST(-0.4713967368259979), f254); | ||
337 | f257 = MUL_F(FRAC_CONST(0.4105245275223569), f212); | ||
338 | f258 = f255 + f256; | ||
339 | f259 = f257 - f256; | ||
340 | f260 = f218 + f216; | ||
341 | f261 = MUL_C(COEF_CONST(1.4074037375263826), f218); | ||
342 | f262 = MUL_F(FRAC_CONST(-0.7730104533627369), f260); | ||
343 | f263 = MUL_F(FRAC_CONST(-0.1386171691990913), f216); | ||
344 | f264 = f261 + f262; | ||
345 | f265 = f263 - f262; | ||
346 | f266 = f222 + f220; | ||
347 | f267 = MUL_C(COEF_CONST(1.2472250129866711), f222); | ||
348 | f268 = MUL_F(FRAC_CONST(-0.9569403357322089), f266); | ||
349 | f269 = MUL_F(FRAC_CONST(-0.6666556584777469), f220); | ||
350 | f270 = f267 + f268; | ||
351 | f271 = f269 - f268; | ||
352 | f272 = f193 - f228; | ||
353 | f273 = f193 + f228; | ||
354 | f274 = f195 - f229; | ||
355 | f275 = f195 + f229; | ||
356 | f276 = f197 - f234; | ||
357 | f277 = f197 + f234; | ||
358 | f278 = f199 - f235; | ||
359 | f279 = f199 + f235; | ||
360 | f280 = f201 - f240; | ||
361 | f281 = f201 + f240; | ||
362 | f282 = f203 - f241; | ||
363 | f283 = f203 + f241; | ||
364 | f284 = f205 - f246; | ||
365 | f285 = f205 + f246; | ||
366 | f286 = f207 - f247; | ||
367 | f287 = f207 + f247; | ||
368 | f288 = f192 - f252; | ||
369 | f289 = f192 + f252; | ||
370 | f290 = f194 - f253; | ||
371 | f291 = f194 + f253; | ||
372 | f292 = f196 - f258; | ||
373 | f293 = f196 + f258; | ||
374 | f294 = f198 - f259; | ||
375 | f295 = f198 + f259; | ||
376 | f296 = f200 - f264; | ||
377 | f297 = f200 + f264; | ||
378 | f298 = f202 - f265; | ||
379 | f299 = f202 + f265; | ||
380 | f300 = f204 - f270; | ||
381 | f301 = f204 + f270; | ||
382 | f302 = f206 - f271; | ||
383 | f303 = f206 + f271; | ||
384 | f304 = f275 + f273; | ||
385 | f305 = MUL_F(FRAC_CONST(-0.9751575901732920), f275); | ||
386 | f306 = MUL_F(FRAC_CONST(0.9996988186962043), f304); | ||
387 | f307 = MUL_C(COEF_CONST(1.0242400472191164), f273); | ||
388 | y[0] = f305 + f306; | ||
389 | y[31] = f307 - f306; | ||
390 | f310 = f279 + f277; | ||
391 | f311 = MUL_F(FRAC_CONST(-0.8700688593994936), f279); | ||
392 | f312 = MUL_F(FRAC_CONST(0.9924795345987100), f310); | ||
393 | f313 = MUL_C(COEF_CONST(1.1148902097979263), f277); | ||
394 | y[2] = f311 + f312; | ||
395 | y[29] = f313 - f312; | ||
396 | f316 = f283 + f281; | ||
397 | f317 = MUL_F(FRAC_CONST(-0.7566008898816587), f283); | ||
398 | f318 = MUL_F(FRAC_CONST(0.9757021300385286), f316); | ||
399 | f319 = MUL_C(COEF_CONST(1.1948033701953984), f281); | ||
400 | y[4] = f317 + f318; | ||
401 | y[27] = f319 - f318; | ||
402 | f322 = f287 + f285; | ||
403 | f323 = MUL_F(FRAC_CONST(-0.6358464401941451), f287); | ||
404 | f324 = MUL_F(FRAC_CONST(0.9495281805930367), f322); | ||
405 | f325 = MUL_C(COEF_CONST(1.2632099209919283), f285); | ||
406 | y[6] = f323 + f324; | ||
407 | y[25] = f325 - f324; | ||
408 | f328 = f291 + f289; | ||
409 | f329 = MUL_F(FRAC_CONST(-0.5089684416985408), f291); | ||
410 | f330 = MUL_F(FRAC_CONST(0.9142097557035307), f328); | ||
411 | f331 = MUL_C(COEF_CONST(1.3194510697085207), f289); | ||
412 | y[8] = f329 + f330; | ||
413 | y[23] = f331 - f330; | ||
414 | f334 = f295 + f293; | ||
415 | f335 = MUL_F(FRAC_CONST(-0.3771887988789273), f295); | ||
416 | f336 = MUL_F(FRAC_CONST(0.8700869911087114), f334); | ||
417 | f337 = MUL_C(COEF_CONST(1.3629851833384954), f293); | ||
418 | y[10] = f335 + f336; | ||
419 | y[21] = f337 - f336; | ||
420 | f340 = f299 + f297; | ||
421 | f341 = MUL_F(FRAC_CONST(-0.2417766217337384), f299); | ||
422 | f342 = MUL_F(FRAC_CONST(0.8175848131515837), f340); | ||
423 | f343 = MUL_C(COEF_CONST(1.3933930045694289), f297); | ||
424 | y[12] = f341 + f342; | ||
425 | y[19] = f343 - f342; | ||
426 | f346 = f303 + f301; | ||
427 | f347 = MUL_F(FRAC_CONST(-0.1040360035527077), f303); | ||
428 | f348 = MUL_F(FRAC_CONST(0.7572088465064845), f346); | ||
429 | f349 = MUL_C(COEF_CONST(1.4103816894602612), f301); | ||
430 | y[14] = f347 + f348; | ||
431 | y[17] = f349 - f348; | ||
432 | f352 = f274 + f272; | ||
433 | f353 = MUL_F(FRAC_CONST(0.0347065382144002), f274); | ||
434 | f354 = MUL_F(FRAC_CONST(0.6895405447370668), f352); | ||
435 | f355 = MUL_C(COEF_CONST(1.4137876276885337), f272); | ||
436 | y[16] = f353 + f354; | ||
437 | y[15] = f355 - f354; | ||
438 | f358 = f278 + f276; | ||
439 | f359 = MUL_F(FRAC_CONST(0.1731148370459795), f278); | ||
440 | f360 = MUL_F(FRAC_CONST(0.6152315905806268), f358); | ||
441 | f361 = MUL_C(COEF_CONST(1.4035780182072330), f276); | ||
442 | y[18] = f359 + f360; | ||
443 | y[13] = f361 - f360; | ||
444 | f364 = f282 + f280; | ||
445 | f365 = MUL_F(FRAC_CONST(0.3098559453626100), f282); | ||
446 | f366 = MUL_F(FRAC_CONST(0.5349976198870972), f364); | ||
447 | f367 = MUL_C(COEF_CONST(1.3798511851368043), f280); | ||
448 | y[20] = f365 + f366; | ||
449 | y[11] = f367 - f366; | ||
450 | f370 = f286 + f284; | ||
451 | f371 = MUL_F(FRAC_CONST(0.4436129715409088), f286); | ||
452 | f372 = MUL_F(FRAC_CONST(0.4496113296546065), f370); | ||
453 | f373 = MUL_C(COEF_CONST(1.3428356308501219), f284); | ||
454 | y[22] = f371 + f372; | ||
455 | y[9] = f373 - f372; | ||
456 | f376 = f290 + f288; | ||
457 | f377 = MUL_F(FRAC_CONST(0.5730977622997509), f290); | ||
458 | f378 = MUL_F(FRAC_CONST(0.3598950365349881), f376); | ||
459 | f379 = MUL_C(COEF_CONST(1.2928878353697271), f288); | ||
460 | y[24] = f377 + f378; | ||
461 | y[7] = f379 - f378; | ||
462 | f382 = f294 + f292; | ||
463 | f383 = MUL_F(FRAC_CONST(0.6970633083205415), f294); | ||
464 | f384 = MUL_F(FRAC_CONST(0.2667127574748984), f382); | ||
465 | f385 = MUL_C(COEF_CONST(1.2304888232703382), f292); | ||
466 | y[26] = f383 + f384; | ||
467 | y[5] = f385 - f384; | ||
468 | f388 = f298 + f296; | ||
469 | f389 = MUL_F(FRAC_CONST(0.8143157536286401), f298); | ||
470 | f390 = MUL_F(FRAC_CONST(0.1709618887603012), f388); | ||
471 | f391 = MUL_C(COEF_CONST(1.1562395311492424), f296); | ||
472 | y[28] = f389 + f390; | ||
473 | y[3] = f391 - f390; | ||
474 | f394 = f302 + f300; | ||
475 | f395 = MUL_F(FRAC_CONST(0.9237258930790228), f302); | ||
476 | f396 = MUL_F(FRAC_CONST(0.0735645635996674), f394); | ||
477 | f397 = MUL_C(COEF_CONST(1.0708550202783576), f300); | ||
478 | y[30] = f395 + f396; | ||
479 | y[1] = f397 - f396; | ||
480 | } | ||
481 | |||
482 | #ifdef SBR_LOW_POWER | ||
483 | |||
484 | void DCT2_16_unscaled(real_t *y, real_t *x) | ||
485 | { | ||
486 | real_t f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10; | ||
487 | real_t f11, f12, f13, f14, f15, f16, f17, f18, f19, f20; | ||
488 | real_t f21, f22, f23, f24, f25, f26, f27, f28, f31, f32; | ||
489 | real_t f33, f34, f37, f38, f39, f40, f41, f42, f43, f44; | ||
490 | real_t f45, f46, f47, f48, f49, f51, f53, f54, f57, f58; | ||
491 | real_t f59, f60, f61, f62, f63, f64, f65, f66, f67, f68; | ||
492 | real_t f69, f70, f71, f72, f73, f74, f75, f76, f77, f78; | ||
493 | real_t f79, f80, f81, f82, f83, f84, f85, f86, f87, f88; | ||
494 | real_t f89, f90, f91, f92, f95, f96, f97, f98, f101, f102; | ||
495 | real_t f103, f104, f107, f108, f109, f110; | ||
496 | |||
497 | f0 = x[0] - x[15]; | ||
498 | f1 = x[0] + x[15]; | ||
499 | f2 = x[1] - x[14]; | ||
500 | f3 = x[1] + x[14]; | ||
501 | f4 = x[2] - x[13]; | ||
502 | f5 = x[2] + x[13]; | ||
503 | f6 = x[3] - x[12]; | ||
504 | f7 = x[3] + x[12]; | ||
505 | f8 = x[4] - x[11]; | ||
506 | f9 = x[4] + x[11]; | ||
507 | f10 = x[5] - x[10]; | ||
508 | f11 = x[5] + x[10]; | ||
509 | f12 = x[6] - x[9]; | ||
510 | f13 = x[6] + x[9]; | ||
511 | f14 = x[7] - x[8]; | ||
512 | f15 = x[7] + x[8]; | ||
513 | f16 = f1 - f15; | ||
514 | f17 = f1 + f15; | ||
515 | f18 = f3 - f13; | ||
516 | f19 = f3 + f13; | ||
517 | f20 = f5 - f11; | ||
518 | f21 = f5 + f11; | ||
519 | f22 = f7 - f9; | ||
520 | f23 = f7 + f9; | ||
521 | f24 = f17 - f23; | ||
522 | f25 = f17 + f23; | ||
523 | f26 = f19 - f21; | ||
524 | f27 = f19 + f21; | ||
525 | f28 = f25 - f27; | ||
526 | y[0] = f25 + f27; | ||
527 | y[8] = MUL_F(f28, FRAC_CONST(0.7071067811865476)); | ||
528 | f31 = f24 + f26; | ||
529 | f32 = MUL_C(f24, COEF_CONST(1.3065629648763766)); | ||
530 | f33 = MUL_F(f31, FRAC_CONST(-0.9238795325112866)); | ||
531 | f34 = MUL_F(f26, FRAC_CONST(-0.5411961001461967)); | ||
532 | y[12] = f32 + f33; | ||
533 | y[4] = f34 - f33; | ||
534 | f37 = f16 + f22; | ||
535 | f38 = MUL_C(f16, COEF_CONST(1.1758756024193588)); | ||
536 | f39 = MUL_F(f37, FRAC_CONST(-0.9807852804032304)); | ||
537 | f40 = MUL_F(f22, FRAC_CONST(-0.7856949583871021)); | ||
538 | f41 = f38 + f39; | ||
539 | f42 = f40 - f39; | ||
540 | f43 = f18 + f20; | ||
541 | f44 = MUL_C(f18, COEF_CONST(1.3870398453221473)); | ||
542 | f45 = MUL_F(f43, FRAC_CONST(-0.8314696123025455)); | ||
543 | f46 = MUL_F(f20, FRAC_CONST(-0.2758993792829436)); | ||
544 | f47 = f44 + f45; | ||
545 | f48 = f46 - f45; | ||
546 | f49 = f42 - f48; | ||
547 | y[2] = f42 + f48; | ||
548 | f51 = MUL_F(f49, FRAC_CONST(0.7071067811865476)); | ||
549 | y[14] = f41 - f47; | ||
550 | f53 = f41 + f47; | ||
551 | f54 = MUL_F(f53, FRAC_CONST(0.7071067811865476)); | ||
552 | y[10] = f51 - f54; | ||
553 | y[6] = f51 + f54; | ||
554 | f57 = f2 - f4; | ||
555 | f58 = f2 + f4; | ||
556 | f59 = f6 - f8; | ||
557 | f60 = f6 + f8; | ||
558 | f61 = f10 - f12; | ||
559 | f62 = f10 + f12; | ||
560 | f63 = MUL_F(f60, FRAC_CONST(0.7071067811865476)); | ||
561 | f64 = f0 - f63; | ||
562 | f65 = f0 + f63; | ||
563 | f66 = f58 + f62; | ||
564 | f67 = MUL_C(f58, COEF_CONST(1.3065629648763766)); | ||
565 | f68 = MUL_F(f66, FRAC_CONST(-0.9238795325112866)); | ||
566 | f69 = MUL_F(f62, FRAC_CONST(-0.5411961001461967)); | ||
567 | f70 = f67 + f68; | ||
568 | f71 = f69 - f68; | ||
569 | f72 = f65 - f71; | ||
570 | f73 = f65 + f71; | ||
571 | f74 = f64 - f70; | ||
572 | f75 = f64 + f70; | ||
573 | f76 = MUL_F(f59, FRAC_CONST(0.7071067811865476)); | ||
574 | f77 = f14 - f76; | ||
575 | f78 = f14 + f76; | ||
576 | f79 = f61 + f57; | ||
577 | f80 = MUL_C(f61, COEF_CONST(1.3065629648763766)); | ||
578 | f81 = MUL_F(f79, FRAC_CONST(-0.9238795325112866)); | ||
579 | f82 = MUL_F(f57, FRAC_CONST(-0.5411961001461967)); | ||
580 | f83 = f80 + f81; | ||
581 | f84 = f82 - f81; | ||
582 | f85 = f78 - f84; | ||
583 | f86 = f78 + f84; | ||
584 | f87 = f77 - f83; | ||
585 | f88 = f77 + f83; | ||
586 | f89 = f86 + f73; | ||
587 | f90 = MUL_F(f86, FRAC_CONST(-0.8971675863426361)); | ||
588 | f91 = MUL_F(f89, FRAC_CONST(0.9951847266721968)); | ||
589 | f92 = MUL_C(f73, COEF_CONST(1.0932018670017576)); | ||
590 | y[1] = f90 + f91; | ||
591 | y[15] = f92 - f91; | ||
592 | f95 = f75 - f88; | ||
593 | f96 = MUL_F(f88, FRAC_CONST(-0.6666556584777466)); | ||
594 | f97 = MUL_F(f95, FRAC_CONST(0.9569403357322089)); | ||
595 | f98 = MUL_C(f75, COEF_CONST(1.2472250129866713)); | ||
596 | y[3] = f97 - f96; | ||
597 | y[13] = f98 - f97; | ||
598 | f101 = f87 + f74; | ||
599 | f102 = MUL_F(f87, FRAC_CONST(-0.4105245275223571)); | ||
600 | f103 = MUL_F(f101, FRAC_CONST(0.8819212643483549)); | ||
601 | f104 = MUL_C(f74, COEF_CONST(1.3533180011743529)); | ||
602 | y[5] = f102 + f103; | ||
603 | y[11] = f104 - f103; | ||
604 | f107 = f72 - f85; | ||
605 | f108 = MUL_F(f85, FRAC_CONST(-0.1386171691990915)); | ||
606 | f109 = MUL_F(f107, FRAC_CONST(0.7730104533627370)); | ||
607 | f110 = MUL_C(f72, COEF_CONST(1.4074037375263826)); | ||
608 | y[7] = f109 - f108; | ||
609 | y[9] = f110 - f109; | ||
610 | } | ||
611 | |||
612 | void DCT4_16(real_t *y, real_t *x) | ||
613 | { | ||
614 | real_t f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10; | ||
615 | real_t f11, f12, f13, f14, f15, f16, f17, f18, f19, f20; | ||
616 | real_t f21, f22, f23, f24, f25, f26, f27, f28, f29, f30; | ||
617 | real_t f31, f32, f33, f34, f35, f36, f37, f38, f39, f40; | ||
618 | real_t f41, f42, f43, f44, f45, f46, f47, f48, f49, f50; | ||
619 | real_t f51, f52, f53, f54, f55, f56, f57, f58, f59, f60; | ||
620 | real_t f61, f62, f63, f64, f65, f66, f67, f68, f69, f70; | ||
621 | real_t f71, f72, f73, f74, f75, f76, f77, f78, f79, f80; | ||
622 | real_t f81, f82, f83, f84, f85, f86, f87, f88, f89, f90; | ||
623 | real_t f91, f92, f93, f94, f95, f96, f97, f98, f99, f100; | ||
624 | real_t f101, f102, f103, f104, f105, f106, f107, f108, f109, f110; | ||
625 | real_t f111, f112, f113, f114, f115, f116, f117, f118, f119, f120; | ||
626 | real_t f121, f122, f123, f124, f125, f126, f127, f128, f130, f132; | ||
627 | real_t f134, f136, f138, f140, f142, f144, f145, f148, f149, f152; | ||
628 | real_t f153, f156, f157; | ||
629 | |||
630 | f0 = x[0] + x[15]; | ||
631 | f1 = MUL_C(COEF_CONST(1.0478631305325901), x[0]); | ||
632 | f2 = MUL_F(FRAC_CONST(-0.9987954562051724), f0); | ||
633 | f3 = MUL_F(FRAC_CONST(-0.9497277818777548), x[15]); | ||
634 | f4 = f1 + f2; | ||
635 | f5 = f3 - f2; | ||
636 | f6 = x[2] + x[13]; | ||
637 | f7 = MUL_C(COEF_CONST(1.2130114330978077), x[2]); | ||
638 | f8 = MUL_F(FRAC_CONST(-0.9700312531945440), f6); | ||
639 | f9 = MUL_F(FRAC_CONST(-0.7270510732912803), x[13]); | ||
640 | f10 = f7 + f8; | ||
641 | f11 = f9 - f8; | ||
642 | f12 = x[4] + x[11]; | ||
643 | f13 = MUL_C(COEF_CONST(1.3315443865537255), x[4]); | ||
644 | f14 = MUL_F(FRAC_CONST(-0.9039892931234433), f12); | ||
645 | f15 = MUL_F(FRAC_CONST(-0.4764341996931612), x[11]); | ||
646 | f16 = f13 + f14; | ||
647 | f17 = f15 - f14; | ||
648 | f18 = x[6] + x[9]; | ||
649 | f19 = MUL_C(COEF_CONST(1.3989068359730781), x[6]); | ||
650 | f20 = MUL_F(FRAC_CONST(-0.8032075314806453), f18); | ||
651 | f21 = MUL_F(FRAC_CONST(-0.2075082269882124), x[9]); | ||
652 | f22 = f19 + f20; | ||
653 | f23 = f21 - f20; | ||
654 | f24 = x[8] + x[7]; | ||
655 | f25 = MUL_C(COEF_CONST(1.4125100802019777), x[8]); | ||
656 | f26 = MUL_F(FRAC_CONST(-0.6715589548470187), f24); | ||
657 | f27 = MUL_F(FRAC_CONST(0.0693921705079402), x[7]); | ||
658 | f28 = f25 + f26; | ||
659 | f29 = f27 - f26; | ||
660 | f30 = x[10] + x[5]; | ||
661 | f31 = MUL_C(COEF_CONST(1.3718313541934939), x[10]); | ||
662 | f32 = MUL_F(FRAC_CONST(-0.5141027441932219), f30); | ||
663 | f33 = MUL_F(FRAC_CONST(0.3436258658070501), x[5]); | ||
664 | f34 = f31 + f32; | ||
665 | f35 = f33 - f32; | ||
666 | f36 = x[12] + x[3]; | ||
667 | f37 = MUL_C(COEF_CONST(1.2784339185752409), x[12]); | ||
668 | f38 = MUL_F(FRAC_CONST(-0.3368898533922200), f36); | ||
669 | f39 = MUL_F(FRAC_CONST(0.6046542117908008), x[3]); | ||
670 | f40 = f37 + f38; | ||
671 | f41 = f39 - f38; | ||
672 | f42 = x[14] + x[1]; | ||
673 | f43 = MUL_C(COEF_CONST(1.1359069844201433), x[14]); | ||
674 | f44 = MUL_F(FRAC_CONST(-0.1467304744553624), f42); | ||
675 | f45 = MUL_F(FRAC_CONST(0.8424460355094185), x[1]); | ||
676 | f46 = f43 + f44; | ||
677 | f47 = f45 - f44; | ||
678 | f48 = f5 - f29; | ||
679 | f49 = f5 + f29; | ||
680 | f50 = f4 - f28; | ||
681 | f51 = f4 + f28; | ||
682 | f52 = f11 - f35; | ||
683 | f53 = f11 + f35; | ||
684 | f54 = f10 - f34; | ||
685 | f55 = f10 + f34; | ||
686 | f56 = f17 - f41; | ||
687 | f57 = f17 + f41; | ||
688 | f58 = f16 - f40; | ||
689 | f59 = f16 + f40; | ||
690 | f60 = f23 - f47; | ||
691 | f61 = f23 + f47; | ||
692 | f62 = f22 - f46; | ||
693 | f63 = f22 + f46; | ||
694 | f64 = f48 + f50; | ||
695 | f65 = MUL_C(COEF_CONST(1.1758756024193588), f48); | ||
696 | f66 = MUL_F(FRAC_CONST(-0.9807852804032304), f64); | ||
697 | f67 = MUL_F(FRAC_CONST(-0.7856949583871021), f50); | ||
698 | f68 = f65 + f66; | ||
699 | f69 = f67 - f66; | ||
700 | f70 = f52 + f54; | ||
701 | f71 = MUL_C(COEF_CONST(1.3870398453221475), f52); | ||
702 | f72 = MUL_F(FRAC_CONST(-0.5555702330196022), f70); | ||
703 | f73 = MUL_F(FRAC_CONST(0.2758993792829431), f54); | ||
704 | f74 = f71 + f72; | ||
705 | f75 = f73 - f72; | ||
706 | f76 = f56 + f58; | ||
707 | f77 = MUL_F(FRAC_CONST(0.7856949583871022), f56); | ||
708 | f78 = MUL_F(FRAC_CONST(0.1950903220161283), f76); | ||
709 | f79 = MUL_C(COEF_CONST(1.1758756024193586), f58); | ||
710 | f80 = f77 + f78; | ||
711 | f81 = f79 - f78; | ||
712 | f82 = f60 + f62; | ||
713 | f83 = MUL_F(FRAC_CONST(-0.2758993792829430), f60); | ||
714 | f84 = MUL_F(FRAC_CONST(0.8314696123025452), f82); | ||
715 | f85 = MUL_C(COEF_CONST(1.3870398453221475), f62); | ||
716 | f86 = f83 + f84; | ||
717 | f87 = f85 - f84; | ||
718 | f88 = f49 - f57; | ||
719 | f89 = f49 + f57; | ||
720 | f90 = f51 - f59; | ||
721 | f91 = f51 + f59; | ||
722 | f92 = f53 - f61; | ||
723 | f93 = f53 + f61; | ||
724 | f94 = f55 - f63; | ||
725 | f95 = f55 + f63; | ||
726 | f96 = f69 - f81; | ||
727 | f97 = f69 + f81; | ||
728 | f98 = f68 - f80; | ||
729 | f99 = f68 + f80; | ||
730 | f100 = f75 - f87; | ||
731 | f101 = f75 + f87; | ||
732 | f102 = f74 - f86; | ||
733 | f103 = f74 + f86; | ||
734 | f104 = f88 + f90; | ||
735 | f105 = MUL_C(COEF_CONST(1.3065629648763766), f88); | ||
736 | f106 = MUL_F(FRAC_CONST(-0.9238795325112866), f104); | ||
737 | f107 = MUL_F(FRAC_CONST(-0.5411961001461967), f90); | ||
738 | f108 = f105 + f106; | ||
739 | f109 = f107 - f106; | ||
740 | f110 = f92 + f94; | ||
741 | f111 = MUL_F(FRAC_CONST(0.5411961001461969), f92); | ||
742 | f112 = MUL_F(FRAC_CONST(0.3826834323650898), f110); | ||
743 | f113 = MUL_C(COEF_CONST(1.3065629648763766), f94); | ||
744 | f114 = f111 + f112; | ||
745 | f115 = f113 - f112; | ||
746 | f116 = f96 + f98; | ||
747 | f117 = MUL_C(COEF_CONST(1.3065629648763766), f96); | ||
748 | f118 = MUL_F(FRAC_CONST(-0.9238795325112866), f116); | ||
749 | f119 = MUL_F(FRAC_CONST(-0.5411961001461967), f98); | ||
750 | f120 = f117 + f118; | ||
751 | f121 = f119 - f118; | ||
752 | f122 = f100 + f102; | ||
753 | f123 = MUL_F(FRAC_CONST(0.5411961001461969), f100); | ||
754 | f124 = MUL_F(FRAC_CONST(0.3826834323650898), f122); | ||
755 | f125 = MUL_C(COEF_CONST(1.3065629648763766), f102); | ||
756 | f126 = f123 + f124; | ||
757 | f127 = f125 - f124; | ||
758 | f128 = f89 - f93; | ||
759 | y[0] = f89 + f93; | ||
760 | f130 = f91 - f95; | ||
761 | y[15] = f91 + f95; | ||
762 | f132 = f109 - f115; | ||
763 | y[3] = f109 + f115; | ||
764 | f134 = f108 - f114; | ||
765 | y[12] = f108 + f114; | ||
766 | f136 = f97 - f101; | ||
767 | y[1] = f97 + f101; | ||
768 | f138 = f99 - f103; | ||
769 | y[14] = f99 + f103; | ||
770 | f140 = f121 - f127; | ||
771 | y[2] = f121 + f127; | ||
772 | f142 = f120 - f126; | ||
773 | y[13] = f120 + f126; | ||
774 | f144 = f128 - f130; | ||
775 | f145 = f128 + f130; | ||
776 | y[8] = MUL_F(FRAC_CONST(0.7071067811865474), f144); | ||
777 | y[7] = MUL_F(FRAC_CONST(0.7071067811865474), f145); | ||
778 | f148 = f132 - f134; | ||
779 | f149 = f132 + f134; | ||
780 | y[11] = MUL_F(FRAC_CONST(0.7071067811865474), f148); | ||
781 | y[4] = MUL_F(FRAC_CONST(0.7071067811865474), f149); | ||
782 | f152 = f136 - f138; | ||
783 | f153 = f136 + f138; | ||
784 | y[9] = MUL_F(FRAC_CONST(0.7071067811865474), f152); | ||
785 | y[6] = MUL_F(FRAC_CONST(0.7071067811865474), f153); | ||
786 | f156 = f140 - f142; | ||
787 | f157 = f140 + f142; | ||
788 | y[10] = MUL_F(FRAC_CONST(0.7071067811865474), f156); | ||
789 | y[5] = MUL_F(FRAC_CONST(0.7071067811865474), f157); | ||
790 | } | ||
791 | |||
792 | void DCT3_32_unscaled(real_t *y, real_t *x) | ||
793 | { | ||
794 | real_t f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10; | ||
795 | real_t f11, f12, f13, f14, f15, f16, f17, f18, f19, f20; | ||
796 | real_t f21, f22, f23, f24, f25, f26, f27, f28, f29, f30; | ||
797 | real_t f31, f32, f33, f34, f35, f36, f37, f38, f39, f40; | ||
798 | real_t f41, f42, f43, f44, f45, f46, f47, f48, f49, f50; | ||
799 | real_t f51, f52, f53, f54, f55, f56, f57, f58, f59, f60; | ||
800 | real_t f61, f62, f63, f64, f65, f66, f67, f68, f69, f70; | ||
801 | real_t f71, f72, f73, f74, f75, f76, f77, f78, f79, f80; | ||
802 | real_t f81, f82, f83, f84, f85, f86, f87, f88, f89, f90; | ||
803 | real_t f91, f92, f93, f94, f95, f96, f97, f98, f99, f100; | ||
804 | real_t f101, f102, f103, f104, f105, f106, f107, f108, f109, f110; | ||
805 | real_t f111, f112, f113, f114, f115, f116, f117, f118, f119, f120; | ||
806 | real_t f121, f122, f123, f124, f125, f126, f127, f128, f129, f130; | ||
807 | real_t f131, f132, f133, f134, f135, f136, f137, f138, f139, f140; | ||
808 | real_t f141, f142, f143, f144, f145, f146, f147, f148, f149, f150; | ||
809 | real_t f151, f152, f153, f154, f155, f156, f157, f158, f159, f160; | ||
810 | real_t f161, f162, f163, f164, f165, f166, f167, f168, f169, f170; | ||
811 | real_t f171, f172, f173, f174, f175, f176, f177, f178, f179, f180; | ||
812 | real_t f181, f182, f183, f184, f185, f186, f187, f188, f189, f190; | ||
813 | real_t f191, f192, f193, f194, f195, f196, f197, f198, f199, f200; | ||
814 | real_t f201, f202, f203, f204, f205, f206, f207, f208, f209, f210; | ||
815 | real_t f211, f212, f213, f214, f215, f216, f217, f218, f219, f220; | ||
816 | real_t f221, f222, f223, f224, f225, f226, f227, f228, f229, f230; | ||
817 | real_t f231, f232, f233, f234, f235, f236, f237, f238, f239, f240; | ||
818 | real_t f241, f242, f243, f244, f245, f246, f247, f248, f249, f250; | ||
819 | real_t f251, f252, f253, f254, f255, f256, f257, f258, f259, f260; | ||
820 | real_t f261, f262, f263, f264, f265, f266, f267, f268, f269, f270; | ||
821 | real_t f271, f272; | ||
822 | |||
823 | f0 = MUL_F(x[16], FRAC_CONST(0.7071067811865476)); | ||
824 | f1 = x[0] - f0; | ||
825 | f2 = x[0] + f0; | ||
826 | f3 = x[8] + x[24]; | ||
827 | f4 = MUL_C(x[8], COEF_CONST(1.3065629648763766)); | ||
828 | f5 = MUL_F(f3, FRAC_CONST((-0.9238795325112866))); | ||
829 | f6 = MUL_F(x[24], FRAC_CONST((-0.5411961001461967))); | ||
830 | f7 = f4 + f5; | ||
831 | f8 = f6 - f5; | ||
832 | f9 = f2 - f8; | ||
833 | f10 = f2 + f8; | ||
834 | f11 = f1 - f7; | ||
835 | f12 = f1 + f7; | ||
836 | f13 = x[4] + x[28]; | ||
837 | f14 = MUL_C(x[4], COEF_CONST(1.1758756024193588)); | ||
838 | f15 = MUL_F(f13, FRAC_CONST((-0.9807852804032304))); | ||
839 | f16 = MUL_F(x[28], FRAC_CONST((-0.7856949583871021))); | ||
840 | f17 = f14 + f15; | ||
841 | f18 = f16 - f15; | ||
842 | f19 = x[12] + x[20]; | ||
843 | f20 = MUL_C(x[12], COEF_CONST(1.3870398453221473)); | ||
844 | f21 = MUL_F(f19, FRAC_CONST((-0.8314696123025455))); | ||
845 | f22 = MUL_F(x[20], FRAC_CONST((-0.2758993792829436))); | ||
846 | f23 = f20 + f21; | ||
847 | f24 = f22 - f21; | ||
848 | f25 = f18 - f24; | ||
849 | f26 = f18 + f24; | ||
850 | f27 = MUL_F(f25, FRAC_CONST(0.7071067811865476)); | ||
851 | f28 = f17 - f23; | ||
852 | f29 = f17 + f23; | ||
853 | f30 = MUL_F(f29, FRAC_CONST(0.7071067811865476)); | ||
854 | f31 = f27 - f30; | ||
855 | f32 = f27 + f30; | ||
856 | f33 = f10 - f26; | ||
857 | f34 = f10 + f26; | ||
858 | f35 = f12 - f32; | ||
859 | f36 = f12 + f32; | ||
860 | f37 = f11 - f31; | ||
861 | f38 = f11 + f31; | ||
862 | f39 = f9 - f28; | ||
863 | f40 = f9 + f28; | ||
864 | f41 = x[2] + x[30]; | ||
865 | f42 = MUL_C(x[2], COEF_CONST(1.0932018670017569)); | ||
866 | f43 = MUL_F(f41, FRAC_CONST((-0.9951847266721969))); | ||
867 | f44 = MUL_F(x[30], FRAC_CONST((-0.8971675863426368))); | ||
868 | f45 = f42 + f43; | ||
869 | f46 = f44 - f43; | ||
870 | f47 = x[6] + x[26]; | ||
871 | f48 = MUL_C(x[6], COEF_CONST(1.2472250129866711)); | ||
872 | f49 = MUL_F(f47, FRAC_CONST((-0.9569403357322089))); | ||
873 | f50 = MUL_F(x[26], FRAC_CONST((-0.6666556584777469))); | ||
874 | f51 = f48 + f49; | ||
875 | f52 = f50 - f49; | ||
876 | f53 = x[10] + x[22]; | ||
877 | f54 = MUL_C(x[10], COEF_CONST(1.3533180011743526)); | ||
878 | f55 = MUL_F(f53, FRAC_CONST((-0.8819212643483551))); | ||
879 | f56 = MUL_F(x[22], FRAC_CONST((-0.4105245275223575))); | ||
880 | f57 = f54 + f55; | ||
881 | f58 = f56 - f55; | ||
882 | f59 = x[14] + x[18]; | ||
883 | f60 = MUL_C(x[14], COEF_CONST(1.4074037375263826)); | ||
884 | f61 = MUL_F(f59, FRAC_CONST((-0.7730104533627369))); | ||
885 | f62 = MUL_F(x[18], FRAC_CONST((-0.1386171691990913))); | ||
886 | f63 = f60 + f61; | ||
887 | f64 = f62 - f61; | ||
888 | f65 = f46 - f64; | ||
889 | f66 = f46 + f64; | ||
890 | f67 = f52 - f58; | ||
891 | f68 = f52 + f58; | ||
892 | f69 = f66 - f68; | ||
893 | f70 = f66 + f68; | ||
894 | f71 = MUL_F(f69, FRAC_CONST(0.7071067811865476)); | ||
895 | f72 = f65 + f67; | ||
896 | f73 = MUL_C(f65, COEF_CONST(1.3065629648763766)); | ||
897 | f74 = MUL_F(f72, FRAC_CONST((-0.9238795325112866))); | ||
898 | f75 = MUL_F(f67, FRAC_CONST((-0.5411961001461967))); | ||
899 | f76 = f73 + f74; | ||
900 | f77 = f75 - f74; | ||
901 | f78 = f45 - f63; | ||
902 | f79 = f45 + f63; | ||
903 | f80 = f51 - f57; | ||
904 | f81 = f51 + f57; | ||
905 | f82 = f79 + f81; | ||
906 | f83 = MUL_C(f79, COEF_CONST(1.3065629648763770)); | ||
907 | f84 = MUL_F(f82, FRAC_CONST((-0.3826834323650904))); | ||
908 | f85 = MUL_F(f81, FRAC_CONST(0.5411961001461961)); | ||
909 | f86 = f83 + f84; | ||
910 | f87 = f85 - f84; | ||
911 | f88 = f78 - f80; | ||
912 | f89 = f78 + f80; | ||
913 | f90 = MUL_F(f89, FRAC_CONST(0.7071067811865476)); | ||
914 | f91 = f77 - f87; | ||
915 | f92 = f77 + f87; | ||
916 | f93 = f71 - f90; | ||
917 | f94 = f71 + f90; | ||
918 | f95 = f76 - f86; | ||
919 | f96 = f76 + f86; | ||
920 | f97 = f34 - f70; | ||
921 | f98 = f34 + f70; | ||
922 | f99 = f36 - f92; | ||
923 | f100 = f36 + f92; | ||
924 | f101 = f38 - f91; | ||
925 | f102 = f38 + f91; | ||
926 | f103 = f40 - f94; | ||
927 | f104 = f40 + f94; | ||
928 | f105 = f39 - f93; | ||
929 | f106 = f39 + f93; | ||
930 | f107 = f37 - f96; | ||
931 | f108 = f37 + f96; | ||
932 | f109 = f35 - f95; | ||
933 | f110 = f35 + f95; | ||
934 | f111 = f33 - f88; | ||
935 | f112 = f33 + f88; | ||
936 | f113 = x[1] + x[31]; | ||
937 | f114 = MUL_C(x[1], COEF_CONST(1.0478631305325901)); | ||
938 | f115 = MUL_F(f113, FRAC_CONST((-0.9987954562051724))); | ||
939 | f116 = MUL_F(x[31], FRAC_CONST((-0.9497277818777548))); | ||
940 | f117 = f114 + f115; | ||
941 | f118 = f116 - f115; | ||
942 | f119 = x[5] + x[27]; | ||
943 | f120 = MUL_C(x[5], COEF_CONST(1.2130114330978077)); | ||
944 | f121 = MUL_F(f119, FRAC_CONST((-0.9700312531945440))); | ||
945 | f122 = MUL_F(x[27], FRAC_CONST((-0.7270510732912803))); | ||
946 | f123 = f120 + f121; | ||
947 | f124 = f122 - f121; | ||
948 | f125 = x[9] + x[23]; | ||
949 | f126 = MUL_C(x[9], COEF_CONST(1.3315443865537255)); | ||
950 | f127 = MUL_F(f125, FRAC_CONST((-0.9039892931234433))); | ||
951 | f128 = MUL_F(x[23], FRAC_CONST((-0.4764341996931612))); | ||
952 | f129 = f126 + f127; | ||
953 | f130 = f128 - f127; | ||
954 | f131 = x[13] + x[19]; | ||
955 | f132 = MUL_C(x[13], COEF_CONST(1.3989068359730781)); | ||
956 | f133 = MUL_F(f131, FRAC_CONST((-0.8032075314806453))); | ||
957 | f134 = MUL_F(x[19], FRAC_CONST((-0.2075082269882124))); | ||
958 | f135 = f132 + f133; | ||
959 | f136 = f134 - f133; | ||
960 | f137 = x[17] + x[15]; | ||
961 | f138 = MUL_C(x[17], COEF_CONST(1.4125100802019777)); | ||
962 | f139 = MUL_F(f137, FRAC_CONST((-0.6715589548470187))); | ||
963 | f140 = MUL_F(x[15], FRAC_CONST(0.0693921705079402)); | ||
964 | f141 = f138 + f139; | ||
965 | f142 = f140 - f139; | ||
966 | f143 = x[21] + x[11]; | ||
967 | f144 = MUL_C(x[21], COEF_CONST(1.3718313541934939)); | ||
968 | f145 = MUL_F(f143, FRAC_CONST((-0.5141027441932219))); | ||
969 | f146 = MUL_F(x[11], FRAC_CONST(0.3436258658070501)); | ||
970 | f147 = f144 + f145; | ||
971 | f148 = f146 - f145; | ||
972 | f149 = x[25] + x[7]; | ||
973 | f150 = MUL_C(x[25], COEF_CONST(1.2784339185752409)); | ||
974 | f151 = MUL_F(f149, FRAC_CONST((-0.3368898533922200))); | ||
975 | f152 = MUL_F(x[7], FRAC_CONST(0.6046542117908008)); | ||
976 | f153 = f150 + f151; | ||
977 | f154 = f152 - f151; | ||
978 | f155 = x[29] + x[3]; | ||
979 | f156 = MUL_C(x[29], COEF_CONST(1.1359069844201433)); | ||
980 | f157 = MUL_F(f155, FRAC_CONST((-0.1467304744553624))); | ||
981 | f158 = MUL_F(x[3], FRAC_CONST(0.8424460355094185)); | ||
982 | f159 = f156 + f157; | ||
983 | f160 = f158 - f157; | ||
984 | f161 = f118 - f142; | ||
985 | f162 = f118 + f142; | ||
986 | f163 = f117 - f141; | ||
987 | f164 = f117 + f141; | ||
988 | f165 = f124 - f148; | ||
989 | f166 = f124 + f148; | ||
990 | f167 = f123 - f147; | ||
991 | f168 = f123 + f147; | ||
992 | f169 = f130 - f154; | ||
993 | f170 = f130 + f154; | ||
994 | f171 = f129 - f153; | ||
995 | f172 = f129 + f153; | ||
996 | f173 = f136 - f160; | ||
997 | f174 = f136 + f160; | ||
998 | f175 = f135 - f159; | ||
999 | f176 = f135 + f159; | ||
1000 | f177 = f161 + f163; | ||
1001 | f178 = MUL_C(f161, COEF_CONST(1.1758756024193588)); | ||
1002 | f179 = MUL_F(f177, FRAC_CONST((-0.9807852804032304))); | ||
1003 | f180 = MUL_F(f163, FRAC_CONST((-0.7856949583871021))); | ||
1004 | f181 = f178 + f179; | ||
1005 | f182 = f180 - f179; | ||
1006 | f183 = f165 + f167; | ||
1007 | f184 = MUL_C(f165, COEF_CONST(1.3870398453221475)); | ||
1008 | f185 = MUL_F(f183, FRAC_CONST((-0.5555702330196022))); | ||
1009 | f186 = MUL_F(f167, FRAC_CONST(0.2758993792829431)); | ||
1010 | f187 = f184 + f185; | ||
1011 | f188 = f186 - f185; | ||
1012 | f189 = f169 + f171; | ||
1013 | f190 = MUL_F(f169, FRAC_CONST(0.7856949583871022)); | ||
1014 | f191 = MUL_F(f189, FRAC_CONST(0.1950903220161283)); | ||
1015 | f192 = MUL_C(f171, COEF_CONST(1.1758756024193586)); | ||
1016 | f193 = f190 + f191; | ||
1017 | f194 = f192 - f191; | ||
1018 | f195 = f173 + f175; | ||
1019 | f196 = MUL_F(f173, FRAC_CONST((-0.2758993792829430))); | ||
1020 | f197 = MUL_F(f195, FRAC_CONST(0.8314696123025452)); | ||
1021 | f198 = MUL_C(f175, COEF_CONST(1.3870398453221475)); | ||
1022 | f199 = f196 + f197; | ||
1023 | f200 = f198 - f197; | ||
1024 | f201 = f162 - f170; | ||
1025 | f202 = f162 + f170; | ||
1026 | f203 = f164 - f172; | ||
1027 | f204 = f164 + f172; | ||
1028 | f205 = f166 - f174; | ||
1029 | f206 = f166 + f174; | ||
1030 | f207 = f168 - f176; | ||
1031 | f208 = f168 + f176; | ||
1032 | f209 = f182 - f194; | ||
1033 | f210 = f182 + f194; | ||
1034 | f211 = f181 - f193; | ||
1035 | f212 = f181 + f193; | ||
1036 | f213 = f188 - f200; | ||
1037 | f214 = f188 + f200; | ||
1038 | f215 = f187 - f199; | ||
1039 | f216 = f187 + f199; | ||
1040 | f217 = f201 + f203; | ||
1041 | f218 = MUL_C(f201, COEF_CONST(1.3065629648763766)); | ||
1042 | f219 = MUL_F(f217, FRAC_CONST((-0.9238795325112866))); | ||
1043 | f220 = MUL_F(f203, FRAC_CONST((-0.5411961001461967))); | ||
1044 | f221 = f218 + f219; | ||
1045 | f222 = f220 - f219; | ||
1046 | f223 = f205 + f207; | ||
1047 | f224 = MUL_F(f205, FRAC_CONST(0.5411961001461969)); | ||
1048 | f225 = MUL_F(f223, FRAC_CONST(0.3826834323650898)); | ||
1049 | f226 = MUL_C(f207, COEF_CONST(1.3065629648763766)); | ||
1050 | f227 = f224 + f225; | ||
1051 | f228 = f226 - f225; | ||
1052 | f229 = f209 + f211; | ||
1053 | f230 = MUL_C(f209, COEF_CONST(1.3065629648763766)); | ||
1054 | f231 = MUL_F(f229, FRAC_CONST((-0.9238795325112866))); | ||
1055 | f232 = MUL_F(f211, FRAC_CONST((-0.5411961001461967))); | ||
1056 | f233 = f230 + f231; | ||
1057 | f234 = f232 - f231; | ||
1058 | f235 = f213 + f215; | ||
1059 | f236 = MUL_F(f213, FRAC_CONST(0.5411961001461969)); | ||
1060 | f237 = MUL_F(f235, FRAC_CONST(0.3826834323650898)); | ||
1061 | f238 = MUL_C(f215, COEF_CONST(1.3065629648763766)); | ||
1062 | f239 = f236 + f237; | ||
1063 | f240 = f238 - f237; | ||
1064 | f241 = f202 - f206; | ||
1065 | f242 = f202 + f206; | ||
1066 | f243 = f204 - f208; | ||
1067 | f244 = f204 + f208; | ||
1068 | f245 = f222 - f228; | ||
1069 | f246 = f222 + f228; | ||
1070 | f247 = f221 - f227; | ||
1071 | f248 = f221 + f227; | ||
1072 | f249 = f210 - f214; | ||
1073 | f250 = f210 + f214; | ||
1074 | f251 = f212 - f216; | ||
1075 | f252 = f212 + f216; | ||
1076 | f253 = f234 - f240; | ||
1077 | f254 = f234 + f240; | ||
1078 | f255 = f233 - f239; | ||
1079 | f256 = f233 + f239; | ||
1080 | f257 = f241 - f243; | ||
1081 | f258 = f241 + f243; | ||
1082 | f259 = MUL_F(f257, FRAC_CONST(0.7071067811865474)); | ||
1083 | f260 = MUL_F(f258, FRAC_CONST(0.7071067811865474)); | ||
1084 | f261 = f245 - f247; | ||
1085 | f262 = f245 + f247; | ||
1086 | f263 = MUL_F(f261, FRAC_CONST(0.7071067811865474)); | ||
1087 | f264 = MUL_F(f262, FRAC_CONST(0.7071067811865474)); | ||
1088 | f265 = f249 - f251; | ||
1089 | f266 = f249 + f251; | ||
1090 | f267 = MUL_F(f265, FRAC_CONST(0.7071067811865474)); | ||
1091 | f268 = MUL_F(f266, FRAC_CONST(0.7071067811865474)); | ||
1092 | f269 = f253 - f255; | ||
1093 | f270 = f253 + f255; | ||
1094 | f271 = MUL_F(f269, FRAC_CONST(0.7071067811865474)); | ||
1095 | f272 = MUL_F(f270, FRAC_CONST(0.7071067811865474)); | ||
1096 | y[31] = f98 - f242; | ||
1097 | y[0] = f98 + f242; | ||
1098 | y[30] = f100 - f250; | ||
1099 | y[1] = f100 + f250; | ||
1100 | y[29] = f102 - f254; | ||
1101 | y[2] = f102 + f254; | ||
1102 | y[28] = f104 - f246; | ||
1103 | y[3] = f104 + f246; | ||
1104 | y[27] = f106 - f264; | ||
1105 | y[4] = f106 + f264; | ||
1106 | y[26] = f108 - f272; | ||
1107 | y[5] = f108 + f272; | ||
1108 | y[25] = f110 - f268; | ||
1109 | y[6] = f110 + f268; | ||
1110 | y[24] = f112 - f260; | ||
1111 | y[7] = f112 + f260; | ||
1112 | y[23] = f111 - f259; | ||
1113 | y[8] = f111 + f259; | ||
1114 | y[22] = f109 - f267; | ||
1115 | y[9] = f109 + f267; | ||
1116 | y[21] = f107 - f271; | ||
1117 | y[10] = f107 + f271; | ||
1118 | y[20] = f105 - f263; | ||
1119 | y[11] = f105 + f263; | ||
1120 | y[19] = f103 - f248; | ||
1121 | y[12] = f103 + f248; | ||
1122 | y[18] = f101 - f256; | ||
1123 | y[13] = f101 + f256; | ||
1124 | y[17] = f99 - f252; | ||
1125 | y[14] = f99 + f252; | ||
1126 | y[16] = f97 - f244; | ||
1127 | y[15] = f97 + f244; | ||
1128 | } | ||
1129 | |||
1130 | void DCT2_32_unscaled(real_t *y, real_t *x) | ||
1131 | { | ||
1132 | real_t f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10; | ||
1133 | real_t f11, f12, f13, f14, f15, f16, f17, f18, f19, f20; | ||
1134 | real_t f21, f22, f23, f24, f25, f26, f27, f28, f29, f30; | ||
1135 | real_t f31, f32, f33, f34, f35, f36, f37, f38, f39, f40; | ||
1136 | real_t f41, f42, f43, f44, f45, f46, f47, f48, f49, f50; | ||
1137 | real_t f51, f52, f53, f54, f55, f56, f57, f58, f59, f60; | ||
1138 | real_t f63, f64, f65, f66, f69, f70, f71, f72, f73, f74; | ||
1139 | real_t f75, f76, f77, f78, f79, f80, f81, f83, f85, f86; | ||
1140 | real_t f89, f90, f91, f92, f93, f94, f95, f96, f97, f98; | ||
1141 | real_t f99, f100, f101, f102, f103, f104, f105, f106, f107, f108; | ||
1142 | real_t f109, f110, f111, f112, f113, f114, f115, f116, f117, f118; | ||
1143 | real_t f119, f120, f121, f122, f123, f124, f127, f128, f129, f130; | ||
1144 | real_t f133, f134, f135, f136, f139, f140, f141, f142, f145, f146; | ||
1145 | real_t f147, f148, f149, f150, f151, f152, f153, f154, f155, f156; | ||
1146 | real_t f157, f158, f159, f160, f161, f162, f163, f164, f165, f166; | ||
1147 | real_t f167, f168, f169, f170, f171, f172, f173, f174, f175, f176; | ||
1148 | real_t f177, f178, f179, f180, f181, f182, f183, f184, f185, f186; | ||
1149 | real_t f187, f188, f189, f190, f191, f192, f193, f194, f195, f196; | ||
1150 | real_t f197, f198, f199, f200, f201, f202, f203, f204, f205, f206; | ||
1151 | real_t f207, f208, f209, f210, f211, f212, f213, f214, f215, f216; | ||
1152 | real_t f217, f218, f219, f220, f221, f222, f223, f224, f225, f226; | ||
1153 | real_t f227, f228, f229, f230, f231, f232, f233, f234, f235, f236; | ||
1154 | real_t f237, f238, f239, f240, f241, f242, f243, f244, f247, f248; | ||
1155 | real_t f249, f250, f253, f254, f255, f256, f259, f260, f261, f262; | ||
1156 | real_t f265, f266, f267, f268, f271, f272, f273, f274, f277, f278; | ||
1157 | real_t f279, f280, f283, f284, f285, f286; | ||
1158 | |||
1159 | f0 = x[0] - x[31]; | ||
1160 | f1 = x[0] + x[31]; | ||
1161 | f2 = x[1] - x[30]; | ||
1162 | f3 = x[1] + x[30]; | ||
1163 | f4 = x[2] - x[29]; | ||
1164 | f5 = x[2] + x[29]; | ||
1165 | f6 = x[3] - x[28]; | ||
1166 | f7 = x[3] + x[28]; | ||
1167 | f8 = x[4] - x[27]; | ||
1168 | f9 = x[4] + x[27]; | ||
1169 | f10 = x[5] - x[26]; | ||
1170 | f11 = x[5] + x[26]; | ||
1171 | f12 = x[6] - x[25]; | ||
1172 | f13 = x[6] + x[25]; | ||
1173 | f14 = x[7] - x[24]; | ||
1174 | f15 = x[7] + x[24]; | ||
1175 | f16 = x[8] - x[23]; | ||
1176 | f17 = x[8] + x[23]; | ||
1177 | f18 = x[9] - x[22]; | ||
1178 | f19 = x[9] + x[22]; | ||
1179 | f20 = x[10] - x[21]; | ||
1180 | f21 = x[10] + x[21]; | ||
1181 | f22 = x[11] - x[20]; | ||
1182 | f23 = x[11] + x[20]; | ||
1183 | f24 = x[12] - x[19]; | ||
1184 | f25 = x[12] + x[19]; | ||
1185 | f26 = x[13] - x[18]; | ||
1186 | f27 = x[13] + x[18]; | ||
1187 | f28 = x[14] - x[17]; | ||
1188 | f29 = x[14] + x[17]; | ||
1189 | f30 = x[15] - x[16]; | ||
1190 | f31 = x[15] + x[16]; | ||
1191 | f32 = f1 - f31; | ||
1192 | f33 = f1 + f31; | ||
1193 | f34 = f3 - f29; | ||
1194 | f35 = f3 + f29; | ||
1195 | f36 = f5 - f27; | ||
1196 | f37 = f5 + f27; | ||
1197 | f38 = f7 - f25; | ||
1198 | f39 = f7 + f25; | ||
1199 | f40 = f9 - f23; | ||
1200 | f41 = f9 + f23; | ||
1201 | f42 = f11 - f21; | ||
1202 | f43 = f11 + f21; | ||
1203 | f44 = f13 - f19; | ||
1204 | f45 = f13 + f19; | ||
1205 | f46 = f15 - f17; | ||
1206 | f47 = f15 + f17; | ||
1207 | f48 = f33 - f47; | ||
1208 | f49 = f33 + f47; | ||
1209 | f50 = f35 - f45; | ||
1210 | f51 = f35 + f45; | ||
1211 | f52 = f37 - f43; | ||
1212 | f53 = f37 + f43; | ||
1213 | f54 = f39 - f41; | ||
1214 | f55 = f39 + f41; | ||
1215 | f56 = f49 - f55; | ||
1216 | f57 = f49 + f55; | ||
1217 | f58 = f51 - f53; | ||
1218 | f59 = f51 + f53; | ||
1219 | f60 = f57 - f59; | ||
1220 | y[0] = f57 + f59; | ||
1221 | y[16] = MUL_F(FRAC_CONST(0.7071067811865476), f60); | ||
1222 | f63 = f56 + f58; | ||
1223 | f64 = MUL_C(COEF_CONST(1.3065629648763766), f56); | ||
1224 | f65 = MUL_F(FRAC_CONST(-0.9238795325112866), f63); | ||
1225 | f66 = MUL_F(FRAC_CONST(-0.5411961001461967), f58); | ||
1226 | y[24] = f64 + f65; | ||
1227 | y[8] = f66 - f65; | ||
1228 | f69 = f48 + f54; | ||
1229 | f70 = MUL_C(COEF_CONST(1.1758756024193588), f48); | ||
1230 | f71 = MUL_F(FRAC_CONST(-0.9807852804032304), f69); | ||
1231 | f72 = MUL_F(FRAC_CONST(-0.7856949583871021), f54); | ||
1232 | f73 = f70 + f71; | ||
1233 | f74 = f72 - f71; | ||
1234 | f75 = f50 + f52; | ||
1235 | f76 = MUL_C(COEF_CONST(1.3870398453221473), f50); | ||
1236 | f77 = MUL_F(FRAC_CONST(-0.8314696123025455), f75); | ||
1237 | f78 = MUL_F(FRAC_CONST(-0.2758993792829436), f52); | ||
1238 | f79 = f76 + f77; | ||
1239 | f80 = f78 - f77; | ||
1240 | f81 = f74 - f80; | ||
1241 | y[4] = f74 + f80; | ||
1242 | f83 = MUL_F(FRAC_CONST(0.7071067811865476), f81); | ||
1243 | y[28] = f73 - f79; | ||
1244 | f85 = f73 + f79; | ||
1245 | f86 = MUL_F(FRAC_CONST(0.7071067811865476), f85); | ||
1246 | y[20] = f83 - f86; | ||
1247 | y[12] = f83 + f86; | ||
1248 | f89 = f34 - f36; | ||
1249 | f90 = f34 + f36; | ||
1250 | f91 = f38 - f40; | ||
1251 | f92 = f38 + f40; | ||
1252 | f93 = f42 - f44; | ||
1253 | f94 = f42 + f44; | ||
1254 | f95 = MUL_F(FRAC_CONST(0.7071067811865476), f92); | ||
1255 | f96 = f32 - f95; | ||
1256 | f97 = f32 + f95; | ||
1257 | f98 = f90 + f94; | ||
1258 | f99 = MUL_C(COEF_CONST(1.3065629648763766), f90); | ||
1259 | f100 = MUL_F(FRAC_CONST(-0.9238795325112866), f98); | ||
1260 | f101 = MUL_F(FRAC_CONST(-0.5411961001461967), f94); | ||
1261 | f102 = f99 + f100; | ||
1262 | f103 = f101 - f100; | ||
1263 | f104 = f97 - f103; | ||
1264 | f105 = f97 + f103; | ||
1265 | f106 = f96 - f102; | ||
1266 | f107 = f96 + f102; | ||
1267 | f108 = MUL_F(FRAC_CONST(0.7071067811865476), f91); | ||
1268 | f109 = f46 - f108; | ||
1269 | f110 = f46 + f108; | ||
1270 | f111 = f93 + f89; | ||
1271 | f112 = MUL_C(COEF_CONST(1.3065629648763766), f93); | ||
1272 | f113 = MUL_F(FRAC_CONST(-0.9238795325112866), f111); | ||
1273 | f114 = MUL_F(FRAC_CONST(-0.5411961001461967), f89); | ||
1274 | f115 = f112 + f113; | ||
1275 | f116 = f114 - f113; | ||
1276 | f117 = f110 - f116; | ||
1277 | f118 = f110 + f116; | ||
1278 | f119 = f109 - f115; | ||
1279 | f120 = f109 + f115; | ||
1280 | f121 = f118 + f105; | ||
1281 | f122 = MUL_F(FRAC_CONST(-0.8971675863426361), f118); | ||
1282 | f123 = MUL_F(FRAC_CONST(0.9951847266721968), f121); | ||
1283 | f124 = MUL_C(COEF_CONST(1.0932018670017576), f105); | ||
1284 | y[2] = f122 + f123; | ||
1285 | y[30] = f124 - f123; | ||
1286 | f127 = f107 - f120; | ||
1287 | f128 = MUL_F(FRAC_CONST(-0.6666556584777466), f120); | ||
1288 | f129 = MUL_F(FRAC_CONST(0.9569403357322089), f127); | ||
1289 | f130 = MUL_C(COEF_CONST(1.2472250129866713), f107); | ||
1290 | y[6] = f129 - f128; | ||
1291 | y[26] = f130 - f129; | ||
1292 | f133 = f119 + f106; | ||
1293 | f134 = MUL_F(FRAC_CONST(-0.4105245275223571), f119); | ||
1294 | f135 = MUL_F(FRAC_CONST(0.8819212643483549), f133); | ||
1295 | f136 = MUL_C(COEF_CONST(1.3533180011743529), f106); | ||
1296 | y[10] = f134 + f135; | ||
1297 | y[22] = f136 - f135; | ||
1298 | f139 = f104 - f117; | ||
1299 | f140 = MUL_F(FRAC_CONST(-0.1386171691990915), f117); | ||
1300 | f141 = MUL_F(FRAC_CONST(0.7730104533627370), f139); | ||
1301 | f142 = MUL_C(COEF_CONST(1.4074037375263826), f104); | ||
1302 | y[14] = f141 - f140; | ||
1303 | y[18] = f142 - f141; | ||
1304 | f145 = f2 - f4; | ||
1305 | f146 = f2 + f4; | ||
1306 | f147 = f6 - f8; | ||
1307 | f148 = f6 + f8; | ||
1308 | f149 = f10 - f12; | ||
1309 | f150 = f10 + f12; | ||
1310 | f151 = f14 - f16; | ||
1311 | f152 = f14 + f16; | ||
1312 | f153 = f18 - f20; | ||
1313 | f154 = f18 + f20; | ||
1314 | f155 = f22 - f24; | ||
1315 | f156 = f22 + f24; | ||
1316 | f157 = f26 - f28; | ||
1317 | f158 = f26 + f28; | ||
1318 | f159 = MUL_F(FRAC_CONST(0.7071067811865476), f152); | ||
1319 | f160 = f0 - f159; | ||
1320 | f161 = f0 + f159; | ||
1321 | f162 = f148 + f156; | ||
1322 | f163 = MUL_C(COEF_CONST(1.3065629648763766), f148); | ||
1323 | f164 = MUL_F(FRAC_CONST(-0.9238795325112866), f162); | ||
1324 | f165 = MUL_F(FRAC_CONST(-0.5411961001461967), f156); | ||
1325 | f166 = f163 + f164; | ||
1326 | f167 = f165 - f164; | ||
1327 | f168 = f161 - f167; | ||
1328 | f169 = f161 + f167; | ||
1329 | f170 = f160 - f166; | ||
1330 | f171 = f160 + f166; | ||
1331 | f172 = f146 + f158; | ||
1332 | f173 = MUL_C(COEF_CONST(1.1758756024193588), f146); | ||
1333 | f174 = MUL_F(FRAC_CONST(-0.9807852804032304), f172); | ||
1334 | f175 = MUL_F(FRAC_CONST(-0.7856949583871021), f158); | ||
1335 | f176 = f173 + f174; | ||
1336 | f177 = f175 - f174; | ||
1337 | f178 = f150 + f154; | ||
1338 | f179 = MUL_C(COEF_CONST(1.3870398453221473), f150); | ||
1339 | f180 = MUL_F(FRAC_CONST(-0.8314696123025455), f178); | ||
1340 | f181 = MUL_F(FRAC_CONST(-0.2758993792829436), f154); | ||
1341 | f182 = f179 + f180; | ||
1342 | f183 = f181 - f180; | ||
1343 | f184 = f177 - f183; | ||
1344 | f185 = f177 + f183; | ||
1345 | f186 = MUL_F(FRAC_CONST(0.7071067811865476), f184); | ||
1346 | f187 = f176 - f182; | ||
1347 | f188 = f176 + f182; | ||
1348 | f189 = MUL_F(FRAC_CONST(0.7071067811865476), f188); | ||
1349 | f190 = f186 - f189; | ||
1350 | f191 = f186 + f189; | ||
1351 | f192 = f169 - f185; | ||
1352 | f193 = f169 + f185; | ||
1353 | f194 = f171 - f191; | ||
1354 | f195 = f171 + f191; | ||
1355 | f196 = f170 - f190; | ||
1356 | f197 = f170 + f190; | ||
1357 | f198 = f168 - f187; | ||
1358 | f199 = f168 + f187; | ||
1359 | f200 = MUL_F(FRAC_CONST(0.7071067811865476), f151); | ||
1360 | f201 = f30 - f200; | ||
1361 | f202 = f30 + f200; | ||
1362 | f203 = f155 + f147; | ||
1363 | f204 = MUL_C(COEF_CONST(1.3065629648763766), f155); | ||
1364 | f205 = MUL_F(FRAC_CONST(-0.9238795325112866), f203); | ||
1365 | f206 = MUL_F(FRAC_CONST(-0.5411961001461967), f147); | ||
1366 | f207 = f204 + f205; | ||
1367 | f208 = f206 - f205; | ||
1368 | f209 = f202 - f208; | ||
1369 | f210 = f202 + f208; | ||
1370 | f211 = f201 - f207; | ||
1371 | f212 = f201 + f207; | ||
1372 | f213 = f157 + f145; | ||
1373 | f214 = MUL_C(COEF_CONST(1.1758756024193588), f157); | ||
1374 | f215 = MUL_F(FRAC_CONST(-0.9807852804032304), f213); | ||
1375 | f216 = MUL_F(FRAC_CONST(-0.7856949583871021), f145); | ||
1376 | f217 = f214 + f215; | ||
1377 | f218 = f216 - f215; | ||
1378 | f219 = f153 + f149; | ||
1379 | f220 = MUL_C(COEF_CONST(1.3870398453221473), f153); | ||
1380 | f221 = MUL_F(FRAC_CONST(-0.8314696123025455), f219); | ||
1381 | f222 = MUL_F(FRAC_CONST(-0.2758993792829436), f149); | ||
1382 | f223 = f220 + f221; | ||
1383 | f224 = f222 - f221; | ||
1384 | f225 = f218 - f224; | ||
1385 | f226 = f218 + f224; | ||
1386 | f227 = MUL_F(FRAC_CONST(0.7071067811865476), f225); | ||
1387 | f228 = f217 - f223; | ||
1388 | f229 = f217 + f223; | ||
1389 | f230 = MUL_F(FRAC_CONST(0.7071067811865476), f229); | ||
1390 | f231 = f227 - f230; | ||
1391 | f232 = f227 + f230; | ||
1392 | f233 = f210 - f226; | ||
1393 | f234 = f210 + f226; | ||
1394 | f235 = f212 - f232; | ||
1395 | f236 = f212 + f232; | ||
1396 | f237 = f211 - f231; | ||
1397 | f238 = f211 + f231; | ||
1398 | f239 = f209 - f228; | ||
1399 | f240 = f209 + f228; | ||
1400 | f241 = f234 + f193; | ||
1401 | f242 = MUL_F(FRAC_CONST(-0.9497277818777543), f234); | ||
1402 | f243 = MUL_F(FRAC_CONST(0.9987954562051724), f241); | ||
1403 | f244 = MUL_C(COEF_CONST(1.0478631305325905), f193); | ||
1404 | y[1] = f242 + f243; | ||
1405 | y[31] = f244 - f243; | ||
1406 | f247 = f195 - f236; | ||
1407 | f248 = MUL_F(FRAC_CONST(-0.8424460355094192), f236); | ||
1408 | f249 = MUL_F(FRAC_CONST(0.9891765099647810), f247); | ||
1409 | f250 = MUL_C(COEF_CONST(1.1359069844201428), f195); | ||
1410 | y[3] = f249 - f248; | ||
1411 | y[29] = f250 - f249; | ||
1412 | f253 = f238 + f197; | ||
1413 | f254 = MUL_F(FRAC_CONST(-0.7270510732912801), f238); | ||
1414 | f255 = MUL_F(FRAC_CONST(0.9700312531945440), f253); | ||
1415 | f256 = MUL_C(COEF_CONST(1.2130114330978079), f197); | ||
1416 | y[5] = f254 + f255; | ||
1417 | y[27] = f256 - f255; | ||
1418 | f259 = f199 - f240; | ||
1419 | f260 = MUL_F(FRAC_CONST(-0.6046542117908007), f240); | ||
1420 | f261 = MUL_F(FRAC_CONST(0.9415440651830208), f259); | ||
1421 | f262 = MUL_C(COEF_CONST(1.2784339185752409), f199); | ||
1422 | y[7] = f261 - f260; | ||
1423 | y[25] = f262 - f261; | ||
1424 | f265 = f239 + f198; | ||
1425 | f266 = MUL_F(FRAC_CONST(-0.4764341996931611), f239); | ||
1426 | f267 = MUL_F(FRAC_CONST(0.9039892931234433), f265); | ||
1427 | f268 = MUL_C(COEF_CONST(1.3315443865537255), f198); | ||
1428 | y[9] = f266 + f267; | ||
1429 | y[23] = f268 - f267; | ||
1430 | f271 = f196 - f237; | ||
1431 | f272 = MUL_F(FRAC_CONST(-0.3436258658070505), f237); | ||
1432 | f273 = MUL_F(FRAC_CONST(0.8577286100002721), f271); | ||
1433 | f274 = MUL_C(COEF_CONST(1.3718313541934939), f196); | ||
1434 | y[11] = f273 - f272; | ||
1435 | y[21] = f274 - f273; | ||
1436 | f277 = f235 + f194; | ||
1437 | f278 = MUL_F(FRAC_CONST(-0.2075082269882114), f235); | ||
1438 | f279 = MUL_F(FRAC_CONST(0.8032075314806448), f277); | ||
1439 | f280 = MUL_C(COEF_CONST(1.3989068359730783), f194); | ||
1440 | y[13] = f278 + f279; | ||
1441 | y[19] = f280 - f279; | ||
1442 | f283 = f192 - f233; | ||
1443 | f284 = MUL_F(FRAC_CONST(-0.0693921705079408), f233); | ||
1444 | f285 = MUL_F(FRAC_CONST(0.7409511253549591), f283); | ||
1445 | f286 = MUL_C(COEF_CONST(1.4125100802019774), f192); | ||
1446 | y[15] = f285 - f284; | ||
1447 | y[17] = f286 - f285; | ||
1448 | } | ||
1449 | |||
1450 | #else | ||
1451 | |||
1452 | |||
1453 | #define n 32 | ||
1454 | #define log2n 5 | ||
1455 | |||
1456 | // w_array_real[i] = cos(2*M_PI*i/32) | ||
1457 | static const real_t w_array_real[] = { | ||
1458 | FRAC_CONST(1.000000000000000), FRAC_CONST(0.980785279337272), | ||
1459 | FRAC_CONST(0.923879528329380), FRAC_CONST(0.831469603195765), | ||
1460 | FRAC_CONST(0.707106765732237), FRAC_CONST(0.555570210304169), | ||
1461 | FRAC_CONST(0.382683402077046), FRAC_CONST(0.195090284503576), | ||
1462 | FRAC_CONST(0.000000000000000), FRAC_CONST(-0.195090370246552), | ||
1463 | FRAC_CONST(-0.382683482845162), FRAC_CONST(-0.555570282993553), | ||
1464 | FRAC_CONST(-0.707106827549476), FRAC_CONST(-0.831469651765257), | ||
1465 | FRAC_CONST(-0.923879561784627), FRAC_CONST(-0.980785296392607) | ||
1466 | }; | ||
1467 | |||
1468 | // w_array_imag[i] = sin(-2*M_PI*i/32) | ||
1469 | static const real_t w_array_imag[] = { | ||
1470 | FRAC_CONST(0.000000000000000), FRAC_CONST(-0.195090327375064), | ||
1471 | FRAC_CONST(-0.382683442461104), FRAC_CONST(-0.555570246648862), | ||
1472 | FRAC_CONST(-0.707106796640858), FRAC_CONST(-0.831469627480512), | ||
1473 | FRAC_CONST(-0.923879545057005), FRAC_CONST(-0.980785287864940), | ||
1474 | FRAC_CONST(-1.000000000000000), FRAC_CONST(-0.980785270809601), | ||
1475 | FRAC_CONST(-0.923879511601754), FRAC_CONST(-0.831469578911016), | ||
1476 | FRAC_CONST(-0.707106734823616), FRAC_CONST(-0.555570173959476), | ||
1477 | FRAC_CONST(-0.382683361692986), FRAC_CONST(-0.195090241632088) | ||
1478 | }; | ||
1479 | |||
1480 | // FFT decimation in frequency | ||
1481 | // 4*16*2+16=128+16=144 multiplications | ||
1482 | // 6*16*2+10*8+4*16*2=192+80+128=400 additions | ||
1483 | static void fft_dif(real_t * Real, real_t * Imag) | ||
1484 | { | ||
1485 | real_t w_real, w_imag; // For faster access | ||
1486 | real_t point1_real, point1_imag, point2_real, point2_imag; // For faster access | ||
1487 | uint32_t j, i, i2, w_index; // Counters | ||
1488 | |||
1489 | // First 2 stages of 32 point FFT decimation in frequency | ||
1490 | // 4*16*2=64*2=128 multiplications | ||
1491 | // 6*16*2=96*2=192 additions | ||
1492 | // Stage 1 of 32 point FFT decimation in frequency | ||
1493 | for (i = 0; i < 16; i++) | ||
1494 | { | ||
1495 | point1_real = Real[i]; | ||
1496 | point1_imag = Imag[i]; | ||
1497 | i2 = i+16; | ||
1498 | point2_real = Real[i2]; | ||
1499 | point2_imag = Imag[i2]; | ||
1500 | |||
1501 | w_real = w_array_real[i]; | ||
1502 | w_imag = w_array_imag[i]; | ||
1503 | |||
1504 | // temp1 = x[i] - x[i2] | ||
1505 | point1_real -= point2_real; | ||
1506 | point1_imag -= point2_imag; | ||
1507 | |||
1508 | // x[i1] = x[i] + x[i2] | ||
1509 | Real[i] += point2_real; | ||
1510 | Imag[i] += point2_imag; | ||
1511 | |||
1512 | // x[i2] = (x[i] - x[i2]) * w | ||
1513 | Real[i2] = (MUL_F(point1_real,w_real) - MUL_F(point1_imag,w_imag)); | ||
1514 | Imag[i2] = (MUL_F(point1_real,w_imag) + MUL_F(point1_imag,w_real)); | ||
1515 | } | ||
1516 | // Stage 2 of 32 point FFT decimation in frequency | ||
1517 | for (j = 0, w_index = 0; j < 8; j++, w_index += 2) | ||
1518 | { | ||
1519 | w_real = w_array_real[w_index]; | ||
1520 | w_imag = w_array_imag[w_index]; | ||
1521 | |||
1522 | i = j; | ||
1523 | point1_real = Real[i]; | ||
1524 | point1_imag = Imag[i]; | ||
1525 | i2 = i+8; | ||
1526 | point2_real = Real[i2]; | ||
1527 | point2_imag = Imag[i2]; | ||
1528 | |||
1529 | // temp1 = x[i] - x[i2] | ||
1530 | point1_real -= point2_real; | ||
1531 | point1_imag -= point2_imag; | ||
1532 | |||
1533 | // x[i1] = x[i] + x[i2] | ||
1534 | Real[i] += point2_real; | ||
1535 | Imag[i] += point2_imag; | ||
1536 | |||
1537 | // x[i2] = (x[i] - x[i2]) * w | ||
1538 | Real[i2] = (MUL_F(point1_real,w_real) - MUL_F(point1_imag,w_imag)); | ||
1539 | Imag[i2] = (MUL_F(point1_real,w_imag) + MUL_F(point1_imag,w_real)); | ||
1540 | |||
1541 | i = j+16; | ||
1542 | point1_real = Real[i]; | ||
1543 | point1_imag = Imag[i]; | ||
1544 | i2 = i+8; | ||
1545 | point2_real = Real[i2]; | ||
1546 | point2_imag = Imag[i2]; | ||
1547 | |||
1548 | // temp1 = x[i] - x[i2] | ||
1549 | point1_real -= point2_real; | ||
1550 | point1_imag -= point2_imag; | ||
1551 | |||
1552 | // x[i1] = x[i] + x[i2] | ||
1553 | Real[i] += point2_real; | ||
1554 | Imag[i] += point2_imag; | ||
1555 | |||
1556 | // x[i2] = (x[i] - x[i2]) * w | ||
1557 | Real[i2] = (MUL_F(point1_real,w_real) - MUL_F(point1_imag,w_imag)); | ||
1558 | Imag[i2] = (MUL_F(point1_real,w_imag) + MUL_F(point1_imag,w_real)); | ||
1559 | } | ||
1560 | |||
1561 | // Stage 3 of 32 point FFT decimation in frequency | ||
1562 | // 2*4*2=16 multiplications | ||
1563 | // 4*4*2+6*4*2=10*8=80 additions | ||
1564 | for (i = 0; i < n; i += 8) | ||
1565 | { | ||
1566 | i2 = i+4; | ||
1567 | point1_real = Real[i]; | ||
1568 | point1_imag = Imag[i]; | ||
1569 | |||
1570 | point2_real = Real[i2]; | ||
1571 | point2_imag = Imag[i2]; | ||
1572 | |||
1573 | // out[i1] = point1 + point2 | ||
1574 | Real[i] += point2_real; | ||
1575 | Imag[i] += point2_imag; | ||
1576 | |||
1577 | // out[i2] = point1 - point2 | ||
1578 | Real[i2] = point1_real - point2_real; | ||
1579 | Imag[i2] = point1_imag - point2_imag; | ||
1580 | } | ||
1581 | w_real = w_array_real[4]; // = sqrt(2)/2 | ||
1582 | // w_imag = -w_real; // = w_array_imag[4]; // = -sqrt(2)/2 | ||
1583 | for (i = 1; i < n; i += 8) | ||
1584 | { | ||
1585 | i2 = i+4; | ||
1586 | point1_real = Real[i]; | ||
1587 | point1_imag = Imag[i]; | ||
1588 | |||
1589 | point2_real = Real[i2]; | ||
1590 | point2_imag = Imag[i2]; | ||
1591 | |||
1592 | // temp1 = x[i] - x[i2] | ||
1593 | point1_real -= point2_real; | ||
1594 | point1_imag -= point2_imag; | ||
1595 | |||
1596 | // x[i1] = x[i] + x[i2] | ||
1597 | Real[i] += point2_real; | ||
1598 | Imag[i] += point2_imag; | ||
1599 | |||
1600 | // x[i2] = (x[i] - x[i2]) * w | ||
1601 | Real[i2] = MUL_F(point1_real+point1_imag, w_real); | ||
1602 | Imag[i2] = MUL_F(point1_imag-point1_real, w_real); | ||
1603 | } | ||
1604 | for (i = 2; i < n; i += 8) | ||
1605 | { | ||
1606 | i2 = i+4; | ||
1607 | point1_real = Real[i]; | ||
1608 | point1_imag = Imag[i]; | ||
1609 | |||
1610 | point2_real = Real[i2]; | ||
1611 | point2_imag = Imag[i2]; | ||
1612 | |||
1613 | // x[i] = x[i] + x[i2] | ||
1614 | Real[i] += point2_real; | ||
1615 | Imag[i] += point2_imag; | ||
1616 | |||
1617 | // x[i2] = (x[i] - x[i2]) * (-i) | ||
1618 | Real[i2] = point1_imag - point2_imag; | ||
1619 | Imag[i2] = point2_real - point1_real; | ||
1620 | } | ||
1621 | w_real = w_array_real[12]; // = -sqrt(2)/2 | ||
1622 | // w_imag = w_real; // = w_array_imag[12]; // = -sqrt(2)/2 | ||
1623 | for (i = 3; i < n; i += 8) | ||
1624 | { | ||
1625 | i2 = i+4; | ||
1626 | point1_real = Real[i]; | ||
1627 | point1_imag = Imag[i]; | ||
1628 | |||
1629 | point2_real = Real[i2]; | ||
1630 | point2_imag = Imag[i2]; | ||
1631 | |||
1632 | // temp1 = x[i] - x[i2] | ||
1633 | point1_real -= point2_real; | ||
1634 | point1_imag -= point2_imag; | ||
1635 | |||
1636 | // x[i1] = x[i] + x[i2] | ||
1637 | Real[i] += point2_real; | ||
1638 | Imag[i] += point2_imag; | ||
1639 | |||
1640 | // x[i2] = (x[i] - x[i2]) * w | ||
1641 | Real[i2] = MUL_F(point1_real-point1_imag, w_real); | ||
1642 | Imag[i2] = MUL_F(point1_real+point1_imag, w_real); | ||
1643 | } | ||
1644 | |||
1645 | |||
1646 | // Stage 4 of 32 point FFT decimation in frequency (no multiplications) | ||
1647 | // 16*4=64 additions | ||
1648 | for (i = 0; i < n; i += 4) | ||
1649 | { | ||
1650 | i2 = i+2; | ||
1651 | point1_real = Real[i]; | ||
1652 | point1_imag = Imag[i]; | ||
1653 | |||
1654 | point2_real = Real[i2]; | ||
1655 | point2_imag = Imag[i2]; | ||
1656 | |||
1657 | // x[i1] = x[i] + x[i2] | ||
1658 | Real[i] += point2_real; | ||
1659 | Imag[i] += point2_imag; | ||
1660 | |||
1661 | // x[i2] = x[i] - x[i2] | ||
1662 | Real[i2] = point1_real - point2_real; | ||
1663 | Imag[i2] = point1_imag - point2_imag; | ||
1664 | } | ||
1665 | for (i = 1; i < n; i += 4) | ||
1666 | { | ||
1667 | i2 = i+2; | ||
1668 | point1_real = Real[i]; | ||
1669 | point1_imag = Imag[i]; | ||
1670 | |||
1671 | point2_real = Real[i2]; | ||
1672 | point2_imag = Imag[i2]; | ||
1673 | |||
1674 | // x[i] = x[i] + x[i2] | ||
1675 | Real[i] += point2_real; | ||
1676 | Imag[i] += point2_imag; | ||
1677 | |||
1678 | // x[i2] = (x[i] - x[i2]) * (-i) | ||
1679 | Real[i2] = point1_imag - point2_imag; | ||
1680 | Imag[i2] = point2_real - point1_real; | ||
1681 | } | ||
1682 | |||
1683 | // Stage 5 of 32 point FFT decimation in frequency (no multiplications) | ||
1684 | // 16*4=64 additions | ||
1685 | for (i = 0; i < n; i += 2) | ||
1686 | { | ||
1687 | i2 = i+1; | ||
1688 | point1_real = Real[i]; | ||
1689 | point1_imag = Imag[i]; | ||
1690 | |||
1691 | point2_real = Real[i2]; | ||
1692 | point2_imag = Imag[i2]; | ||
1693 | |||
1694 | // out[i1] = point1 + point2 | ||
1695 | Real[i] += point2_real; | ||
1696 | Imag[i] += point2_imag; | ||
1697 | |||
1698 | // out[i2] = point1 - point2 | ||
1699 | Real[i2] = point1_real - point2_real; | ||
1700 | Imag[i2] = point1_imag - point2_imag; | ||
1701 | } | ||
1702 | |||
1703 | #ifdef REORDER_IN_FFT | ||
1704 | FFTReorder(Real, Imag); | ||
1705 | #endif // #ifdef REORDER_IN_FFT | ||
1706 | } | ||
1707 | #undef n | ||
1708 | #undef log2n | ||
1709 | |||
1710 | static const real_t dct4_64_tab[] = { | ||
1711 | COEF_CONST(0.999924719333649), COEF_CONST(0.998118102550507), | ||
1712 | COEF_CONST(0.993906974792480), COEF_CONST(0.987301409244537), | ||
1713 | COEF_CONST(0.978317379951477), COEF_CONST(0.966976463794708), | ||
1714 | COEF_CONST(0.953306019306183), COEF_CONST(0.937339007854462), | ||
1715 | COEF_CONST(0.919113874435425), COEF_CONST(0.898674488067627), | ||
1716 | COEF_CONST(0.876070082187653), COEF_CONST(0.851355195045471), | ||
1717 | COEF_CONST(0.824589252471924), COEF_CONST(0.795836925506592), | ||
1718 | COEF_CONST(0.765167236328125), COEF_CONST(0.732654273509979), | ||
1719 | COEF_CONST(0.698376238346100), COEF_CONST(0.662415742874146), | ||
1720 | COEF_CONST(0.624859452247620), COEF_CONST(0.585797846317291), | ||
1721 | COEF_CONST(0.545324981212616), COEF_CONST(0.503538429737091), | ||
1722 | COEF_CONST(0.460538715124130), COEF_CONST(0.416429549455643), | ||
1723 | COEF_CONST(0.371317148208618), COEF_CONST(0.325310230255127), | ||
1724 | COEF_CONST(0.278519600629807), COEF_CONST(0.231058135628700), | ||
1725 | COEF_CONST(0.183039888739586), COEF_CONST(0.134580686688423), | ||
1726 | COEF_CONST(0.085797272622585), COEF_CONST(0.036807164549828), | ||
1727 | COEF_CONST(-1.012196302413940), COEF_CONST(-1.059438824653626), | ||
1728 | COEF_CONST(-1.104129195213318), COEF_CONST(-1.146159529685974), | ||
1729 | COEF_CONST(-1.185428738594055), COEF_CONST(-1.221842169761658), | ||
1730 | COEF_CONST(-1.255311965942383), COEF_CONST(-1.285757660865784), | ||
1731 | COEF_CONST(-1.313105940818787), COEF_CONST(-1.337290763854981), | ||
1732 | COEF_CONST(-1.358253836631775), COEF_CONST(-1.375944852828980), | ||
1733 | COEF_CONST(-1.390321016311646), COEF_CONST(-1.401347875595093), | ||
1734 | COEF_CONST(-1.408998727798462), COEF_CONST(-1.413255214691162), | ||
1735 | COEF_CONST(-1.414107084274292), COEF_CONST(-1.411552190780640), | ||
1736 | COEF_CONST(-1.405596733093262), COEF_CONST(-1.396255016326904), | ||
1737 | COEF_CONST(-1.383549690246582), COEF_CONST(-1.367511272430420), | ||
1738 | COEF_CONST(-1.348178386688232), COEF_CONST(-1.325597524642944), | ||
1739 | COEF_CONST(-1.299823284149170), COEF_CONST(-1.270917654037476), | ||
1740 | COEF_CONST(-1.238950133323669), COEF_CONST(-1.203998088836670), | ||
1741 | COEF_CONST(-1.166145324707031), COEF_CONST(-1.125483393669128), | ||
1742 | COEF_CONST(-1.082109928131104), COEF_CONST(-1.036129593849182), | ||
1743 | COEF_CONST(-0.987653195858002), COEF_CONST(-0.936797380447388), | ||
1744 | COEF_CONST(-0.883684754371643), COEF_CONST(-0.828443288803101), | ||
1745 | COEF_CONST(-0.771206021308899), COEF_CONST(-0.712110757827759), | ||
1746 | COEF_CONST(-0.651300072669983), COEF_CONST(-0.588920354843140), | ||
1747 | COEF_CONST(-0.525121808052063), COEF_CONST(-0.460058242082596), | ||
1748 | COEF_CONST(-0.393886327743530), COEF_CONST(-0.326765477657318), | ||
1749 | COEF_CONST(-0.258857429027557), COEF_CONST(-0.190325915813446), | ||
1750 | COEF_CONST(-0.121335685253143), COEF_CONST(-0.052053272724152), | ||
1751 | COEF_CONST(0.017354607582092), COEF_CONST(0.086720645427704), | ||
1752 | COEF_CONST(0.155877828598022), COEF_CONST(0.224659323692322), | ||
1753 | COEF_CONST(0.292899727821350), COEF_CONST(0.360434412956238), | ||
1754 | COEF_CONST(0.427100926637650), COEF_CONST(0.492738455533981), | ||
1755 | COEF_CONST(0.557188928127289), COEF_CONST(0.620297133922577), | ||
1756 | COEF_CONST(0.681910991668701), COEF_CONST(0.741881847381592), | ||
1757 | COEF_CONST(0.800065577030182), COEF_CONST(0.856321990489960), | ||
1758 | COEF_CONST(0.910515367984772), COEF_CONST(0.962515234947205), | ||
1759 | COEF_CONST(1.000000000000000), COEF_CONST(0.998795449733734), | ||
1760 | COEF_CONST(0.995184719562531), COEF_CONST(0.989176511764526), | ||
1761 | COEF_CONST(0.980785250663757), COEF_CONST(0.970031261444092), | ||
1762 | COEF_CONST(0.956940352916718), COEF_CONST(0.941544055938721), | ||
1763 | COEF_CONST(0.923879504203796), COEF_CONST(0.903989315032959), | ||
1764 | COEF_CONST(0.881921231746674), COEF_CONST(0.857728600502014), | ||
1765 | COEF_CONST(0.831469595432281), COEF_CONST(0.803207516670227), | ||
1766 | COEF_CONST(0.773010432720184), COEF_CONST(0.740951120853424), | ||
1767 | COEF_CONST(0.707106769084930), COEF_CONST(0.671558916568756), | ||
1768 | COEF_CONST(0.634393274784088), COEF_CONST(0.595699310302734), | ||
1769 | COEF_CONST(0.555570185184479), COEF_CONST(0.514102697372437), | ||
1770 | COEF_CONST(0.471396654844284), COEF_CONST(0.427555114030838), | ||
1771 | COEF_CONST(0.382683426141739), COEF_CONST(0.336889833211899), | ||
1772 | COEF_CONST(0.290284633636475), COEF_CONST(0.242980122566223), | ||
1773 | COEF_CONST(0.195090234279633), COEF_CONST(0.146730497479439), | ||
1774 | COEF_CONST(0.098017133772373), COEF_CONST(0.049067649990320), | ||
1775 | COEF_CONST(-1.000000000000000), COEF_CONST(-1.047863125801086), | ||
1776 | COEF_CONST(-1.093201875686646), COEF_CONST(-1.135906934738159), | ||
1777 | COEF_CONST(-1.175875544548035), COEF_CONST(-1.213011503219605), | ||
1778 | COEF_CONST(-1.247225046157837), COEF_CONST(-1.278433918952942), | ||
1779 | COEF_CONST(-1.306562900543213), COEF_CONST(-1.331544399261475), | ||
1780 | COEF_CONST(-1.353317975997925), COEF_CONST(-1.371831417083740), | ||
1781 | COEF_CONST(-1.387039899826050), COEF_CONST(-1.398906826972961), | ||
1782 | COEF_CONST(-1.407403707504273), COEF_CONST(-1.412510156631470), | ||
1783 | COEF_CONST(0), COEF_CONST(-1.412510156631470), | ||
1784 | COEF_CONST(-1.407403707504273), COEF_CONST(-1.398906826972961), | ||
1785 | COEF_CONST(-1.387039899826050), COEF_CONST(-1.371831417083740), | ||
1786 | COEF_CONST(-1.353317975997925), COEF_CONST(-1.331544399261475), | ||
1787 | COEF_CONST(-1.306562900543213), COEF_CONST(-1.278433918952942), | ||
1788 | COEF_CONST(-1.247225046157837), COEF_CONST(-1.213011384010315), | ||
1789 | COEF_CONST(-1.175875544548035), COEF_CONST(-1.135907053947449), | ||
1790 | COEF_CONST(-1.093201875686646), COEF_CONST(-1.047863125801086), | ||
1791 | COEF_CONST(-1.000000000000000), COEF_CONST(-0.949727773666382), | ||
1792 | COEF_CONST(-0.897167563438416), COEF_CONST(-0.842446029186249), | ||
1793 | COEF_CONST(-0.785694956779480), COEF_CONST(-0.727051079273224), | ||
1794 | COEF_CONST(-0.666655659675598), COEF_CONST(-0.604654192924500), | ||
1795 | COEF_CONST(-0.541196048259735), COEF_CONST(-0.476434230804443), | ||
1796 | COEF_CONST(-0.410524487495422), COEF_CONST(-0.343625843524933), | ||
1797 | COEF_CONST(-0.275899350643158), COEF_CONST(-0.207508206367493), | ||
1798 | COEF_CONST(-0.138617098331451), COEF_CONST(-0.069392144680023), | ||
1799 | COEF_CONST(0), COEF_CONST(0.069392263889313), | ||
1800 | COEF_CONST(0.138617157936096), COEF_CONST(0.207508206367493), | ||
1801 | COEF_CONST(0.275899469852448), COEF_CONST(0.343625962734222), | ||
1802 | COEF_CONST(0.410524636507034), COEF_CONST(0.476434201002121), | ||
1803 | COEF_CONST(0.541196107864380), COEF_CONST(0.604654192924500), | ||
1804 | COEF_CONST(0.666655719280243), COEF_CONST(0.727051138877869), | ||
1805 | COEF_CONST(0.785695075988770), COEF_CONST(0.842446029186249), | ||
1806 | COEF_CONST(0.897167563438416), COEF_CONST(0.949727773666382) | ||
1807 | }; | ||
1808 | |||
1809 | /* size 64 only! */ | ||
1810 | void dct4_kernel(real_t * in_real, real_t * in_imag, real_t * out_real, real_t * out_imag) | ||
1811 | { | ||
1812 | // Tables with bit reverse values for 5 bits, bit reverse of i at i-th position | ||
1813 | const uint8_t bit_rev_tab[32] = { 0,16,8,24,4,20,12,28,2,18,10,26,6,22,14,30,1,17,9,25,5,21,13,29,3,19,11,27,7,23,15,31 }; | ||
1814 | uint16_t i, i_rev; | ||
1815 | |||
1816 | /* Step 2: modulate */ | ||
1817 | // 3*32=96 multiplications | ||
1818 | // 3*32=96 additions | ||
1819 | for (i = 0; i < 32; i++) | ||
1820 | { | ||
1821 | real_t x_re, x_im, tmp; | ||
1822 | x_re = in_real[i]; | ||
1823 | x_im = in_imag[i]; | ||
1824 | tmp = MUL_C(x_re + x_im, dct4_64_tab[i]); | ||
1825 | in_real[i] = MUL_C(x_im, dct4_64_tab[i + 64]) + tmp; | ||
1826 | in_imag[i] = MUL_C(x_re, dct4_64_tab[i + 32]) + tmp; | ||
1827 | } | ||
1828 | |||
1829 | /* Step 3: FFT, but with output in bit reverse order */ | ||
1830 | fft_dif(in_real, in_imag); | ||
1831 | |||
1832 | /* Step 4: modulate + bitreverse reordering */ | ||
1833 | // 3*31+2=95 multiplications | ||
1834 | // 3*31+2=95 additions | ||
1835 | for (i = 0; i < 16; i++) | ||
1836 | { | ||
1837 | real_t x_re, x_im, tmp; | ||
1838 | i_rev = bit_rev_tab[i]; | ||
1839 | x_re = in_real[i_rev]; | ||
1840 | x_im = in_imag[i_rev]; | ||
1841 | |||
1842 | tmp = MUL_C(x_re + x_im, dct4_64_tab[i + 3*32]); | ||
1843 | out_real[i] = MUL_C(x_im, dct4_64_tab[i + 5*32]) + tmp; | ||
1844 | out_imag[i] = MUL_C(x_re, dct4_64_tab[i + 4*32]) + tmp; | ||
1845 | } | ||
1846 | // i = 16, i_rev = 1 = rev(16); | ||
1847 | out_imag[16] = MUL_C(in_imag[1] - in_real[1], dct4_64_tab[16 + 3*32]); | ||
1848 | out_real[16] = MUL_C(in_real[1] + in_imag[1], dct4_64_tab[16 + 3*32]); | ||
1849 | for (i = 17; i < 32; i++) | ||
1850 | { | ||
1851 | real_t x_re, x_im, tmp; | ||
1852 | i_rev = bit_rev_tab[i]; | ||
1853 | x_re = in_real[i_rev]; | ||
1854 | x_im = in_imag[i_rev]; | ||
1855 | tmp = MUL_C(x_re + x_im, dct4_64_tab[i + 3*32]); | ||
1856 | out_real[i] = MUL_C(x_im, dct4_64_tab[i + 5*32]) + tmp; | ||
1857 | out_imag[i] = MUL_C(x_re, dct4_64_tab[i + 4*32]) + tmp; | ||
1858 | } | ||
1859 | |||
1860 | } | ||
1861 | |||
1862 | void DST4_32(real_t *y, real_t *x) | ||
1863 | { | ||
1864 | real_t f0, f1, f2, f3, f4, f5, f6, f7, f8, f9; | ||
1865 | real_t f10, f11, f12, f13, f14, f15, f16, f17, f18, f19; | ||
1866 | real_t f20, f21, f22, f23, f24, f25, f26, f27, f28, f29; | ||
1867 | real_t f30, f31, f32, f33, f34, f35, f36, f37, f38, f39; | ||
1868 | real_t f40, f41, f42, f43, f44, f45, f46, f47, f48, f49; | ||
1869 | real_t f50, f51, f52, f53, f54, f55, f56, f57, f58, f59; | ||
1870 | real_t f60, f61, f62, f63, f64, f65, f66, f67, f68, f69; | ||
1871 | real_t f70, f71, f72, f73, f74, f75, f76, f77, f78, f79; | ||
1872 | real_t f80, f81, f82, f83, f84, f85, f86, f87, f88, f89; | ||
1873 | real_t f90, f91, f92, f93, f94, f95, f96, f97, f98, f99; | ||
1874 | real_t f100, f101, f102, f103, f104, f105, f106, f107, f108, f109; | ||
1875 | real_t f110, f111, f112, f113, f114, f115, f116, f117, f118, f119; | ||
1876 | real_t f120, f121, f122, f123, f124, f125, f126, f127, f128, f129; | ||
1877 | real_t f130, f131, f132, f133, f134, f135, f136, f137, f138, f139; | ||
1878 | real_t f140, f141, f142, f143, f144, f145, f146, f147, f148, f149; | ||
1879 | real_t f150, f151, f152, f153, f154, f155, f156, f157, f158, f159; | ||
1880 | real_t f160, f161, f162, f163, f164, f165, f166, f167, f168, f169; | ||
1881 | real_t f170, f171, f172, f173, f174, f175, f176, f177, f178, f179; | ||
1882 | real_t f180, f181, f182, f183, f184, f185, f186, f187, f188, f189; | ||
1883 | real_t f190, f191, f192, f193, f194, f195, f196, f197, f198, f199; | ||
1884 | real_t f200, f201, f202, f203, f204, f205, f206, f207, f208, f209; | ||
1885 | real_t f210, f211, f212, f213, f214, f215, f216, f217, f218, f219; | ||
1886 | real_t f220, f221, f222, f223, f224, f225, f226, f227, f228, f229; | ||
1887 | real_t f230, f231, f232, f233, f234, f235, f236, f237, f238, f239; | ||
1888 | real_t f240, f241, f242, f243, f244, f245, f246, f247, f248, f249; | ||
1889 | real_t f250, f251, f252, f253, f254, f255, f256, f257, f258, f259; | ||
1890 | real_t f260, f261, f262, f263, f264, f265, f266, f267, f268, f269; | ||
1891 | real_t f270, f271, f272, f273, f274, f275, f276, f277, f278, f279; | ||
1892 | real_t f280, f281, f282, f283, f284, f285, f286, f287, f288, f289; | ||
1893 | real_t f290, f291, f292, f293, f294, f295, f296, f297, f298, f299; | ||
1894 | real_t f300, f301, f302, f303, f304, f305, f306, f307, f308, f309; | ||
1895 | real_t f310, f311, f312, f313, f314, f315, f316, f317, f318, f319; | ||
1896 | real_t f320, f321, f322, f323, f324, f325, f326, f327, f328, f329; | ||
1897 | real_t f330, f331, f332, f333, f334, f335; | ||
1898 | |||
1899 | f0 = x[0] - x[1]; | ||
1900 | f1 = x[2] - x[1]; | ||
1901 | f2 = x[2] - x[3]; | ||
1902 | f3 = x[4] - x[3]; | ||
1903 | f4 = x[4] - x[5]; | ||
1904 | f5 = x[6] - x[5]; | ||
1905 | f6 = x[6] - x[7]; | ||
1906 | f7 = x[8] - x[7]; | ||
1907 | f8 = x[8] - x[9]; | ||
1908 | f9 = x[10] - x[9]; | ||
1909 | f10 = x[10] - x[11]; | ||
1910 | f11 = x[12] - x[11]; | ||
1911 | f12 = x[12] - x[13]; | ||
1912 | f13 = x[14] - x[13]; | ||
1913 | f14 = x[14] - x[15]; | ||
1914 | f15 = x[16] - x[15]; | ||
1915 | f16 = x[16] - x[17]; | ||
1916 | f17 = x[18] - x[17]; | ||
1917 | f18 = x[18] - x[19]; | ||
1918 | f19 = x[20] - x[19]; | ||
1919 | f20 = x[20] - x[21]; | ||
1920 | f21 = x[22] - x[21]; | ||
1921 | f22 = x[22] - x[23]; | ||
1922 | f23 = x[24] - x[23]; | ||
1923 | f24 = x[24] - x[25]; | ||
1924 | f25 = x[26] - x[25]; | ||
1925 | f26 = x[26] - x[27]; | ||
1926 | f27 = x[28] - x[27]; | ||
1927 | f28 = x[28] - x[29]; | ||
1928 | f29 = x[30] - x[29]; | ||
1929 | f30 = x[30] - x[31]; | ||
1930 | f31 = MUL_F(FRAC_CONST(0.7071067811865476), f15); | ||
1931 | f32 = x[0] - f31; | ||
1932 | f33 = x[0] + f31; | ||
1933 | f34 = f7 + f23; | ||
1934 | f35 = MUL_C(COEF_CONST(1.3065629648763766), f7); | ||
1935 | f36 = MUL_F(FRAC_CONST(-0.9238795325112866), f34); | ||
1936 | f37 = MUL_F(FRAC_CONST(-0.5411961001461967), f23); | ||
1937 | f38 = f35 + f36; | ||
1938 | f39 = f37 - f36; | ||
1939 | f40 = f33 - f39; | ||
1940 | f41 = f33 + f39; | ||
1941 | f42 = f32 - f38; | ||
1942 | f43 = f32 + f38; | ||
1943 | f44 = f11 - f19; | ||
1944 | f45 = f11 + f19; | ||
1945 | f46 = MUL_F(FRAC_CONST(0.7071067811865476), f45); | ||
1946 | f47 = f3 - f46; | ||
1947 | f48 = f3 + f46; | ||
1948 | f49 = MUL_F(FRAC_CONST(0.7071067811865476), f44); | ||
1949 | f50 = f49 - f27; | ||
1950 | f51 = f49 + f27; | ||
1951 | f52 = f51 + f48; | ||
1952 | f53 = MUL_F(FRAC_CONST(-0.7856949583871021), f51); | ||
1953 | f54 = MUL_F(FRAC_CONST(0.9807852804032304), f52); | ||
1954 | f55 = MUL_C(COEF_CONST(1.1758756024193588), f48); | ||
1955 | f56 = f53 + f54; | ||
1956 | f57 = f55 - f54; | ||
1957 | f58 = f50 + f47; | ||
1958 | f59 = MUL_F(FRAC_CONST(-0.2758993792829430), f50); | ||
1959 | f60 = MUL_F(FRAC_CONST(0.8314696123025452), f58); | ||
1960 | f61 = MUL_C(COEF_CONST(1.3870398453221475), f47); | ||
1961 | f62 = f59 + f60; | ||
1962 | f63 = f61 - f60; | ||
1963 | f64 = f41 - f56; | ||
1964 | f65 = f41 + f56; | ||
1965 | f66 = f43 - f62; | ||
1966 | f67 = f43 + f62; | ||
1967 | f68 = f42 - f63; | ||
1968 | f69 = f42 + f63; | ||
1969 | f70 = f40 - f57; | ||
1970 | f71 = f40 + f57; | ||
1971 | f72 = f5 - f9; | ||
1972 | f73 = f5 + f9; | ||
1973 | f74 = f13 - f17; | ||
1974 | f75 = f13 + f17; | ||
1975 | f76 = f21 - f25; | ||
1976 | f77 = f21 + f25; | ||
1977 | f78 = MUL_F(FRAC_CONST(0.7071067811865476), f75); | ||
1978 | f79 = f1 - f78; | ||
1979 | f80 = f1 + f78; | ||
1980 | f81 = f73 + f77; | ||
1981 | f82 = MUL_C(COEF_CONST(1.3065629648763766), f73); | ||
1982 | f83 = MUL_F(FRAC_CONST(-0.9238795325112866), f81); | ||
1983 | f84 = MUL_F(FRAC_CONST(-0.5411961001461967), f77); | ||
1984 | f85 = f82 + f83; | ||
1985 | f86 = f84 - f83; | ||
1986 | f87 = f80 - f86; | ||
1987 | f88 = f80 + f86; | ||
1988 | f89 = f79 - f85; | ||
1989 | f90 = f79 + f85; | ||
1990 | f91 = MUL_F(FRAC_CONST(0.7071067811865476), f74); | ||
1991 | f92 = f29 - f91; | ||
1992 | f93 = f29 + f91; | ||
1993 | f94 = f76 + f72; | ||
1994 | f95 = MUL_C(COEF_CONST(1.3065629648763766), f76); | ||
1995 | f96 = MUL_F(FRAC_CONST(-0.9238795325112866), f94); | ||
1996 | f97 = MUL_F(FRAC_CONST(-0.5411961001461967), f72); | ||
1997 | f98 = f95 + f96; | ||
1998 | f99 = f97 - f96; | ||
1999 | f100 = f93 - f99; | ||
2000 | f101 = f93 + f99; | ||
2001 | f102 = f92 - f98; | ||
2002 | f103 = f92 + f98; | ||
2003 | f104 = f101 + f88; | ||
2004 | f105 = MUL_F(FRAC_CONST(-0.8971675863426361), f101); | ||
2005 | f106 = MUL_F(FRAC_CONST(0.9951847266721968), f104); | ||
2006 | f107 = MUL_C(COEF_CONST(1.0932018670017576), f88); | ||
2007 | f108 = f105 + f106; | ||
2008 | f109 = f107 - f106; | ||
2009 | f110 = f90 - f103; | ||
2010 | f111 = MUL_F(FRAC_CONST(-0.6666556584777466), f103); | ||
2011 | f112 = MUL_F(FRAC_CONST(0.9569403357322089), f110); | ||
2012 | f113 = MUL_C(COEF_CONST(1.2472250129866713), f90); | ||
2013 | f114 = f112 - f111; | ||
2014 | f115 = f113 - f112; | ||
2015 | f116 = f102 + f89; | ||
2016 | f117 = MUL_F(FRAC_CONST(-0.4105245275223571), f102); | ||
2017 | f118 = MUL_F(FRAC_CONST(0.8819212643483549), f116); | ||
2018 | f119 = MUL_C(COEF_CONST(1.3533180011743529), f89); | ||
2019 | f120 = f117 + f118; | ||
2020 | f121 = f119 - f118; | ||
2021 | f122 = f87 - f100; | ||
2022 | f123 = MUL_F(FRAC_CONST(-0.1386171691990915), f100); | ||
2023 | f124 = MUL_F(FRAC_CONST(0.7730104533627370), f122); | ||
2024 | f125 = MUL_C(COEF_CONST(1.4074037375263826), f87); | ||
2025 | f126 = f124 - f123; | ||
2026 | f127 = f125 - f124; | ||
2027 | f128 = f65 - f108; | ||
2028 | f129 = f65 + f108; | ||
2029 | f130 = f67 - f114; | ||
2030 | f131 = f67 + f114; | ||
2031 | f132 = f69 - f120; | ||
2032 | f133 = f69 + f120; | ||
2033 | f134 = f71 - f126; | ||
2034 | f135 = f71 + f126; | ||
2035 | f136 = f70 - f127; | ||
2036 | f137 = f70 + f127; | ||
2037 | f138 = f68 - f121; | ||
2038 | f139 = f68 + f121; | ||
2039 | f140 = f66 - f115; | ||
2040 | f141 = f66 + f115; | ||
2041 | f142 = f64 - f109; | ||
2042 | f143 = f64 + f109; | ||
2043 | f144 = f0 + f30; | ||
2044 | f145 = MUL_C(COEF_CONST(1.0478631305325901), f0); | ||
2045 | f146 = MUL_F(FRAC_CONST(-0.9987954562051724), f144); | ||
2046 | f147 = MUL_F(FRAC_CONST(-0.9497277818777548), f30); | ||
2047 | f148 = f145 + f146; | ||
2048 | f149 = f147 - f146; | ||
2049 | f150 = f4 + f26; | ||
2050 | f151 = MUL_F(FRAC_CONST(1.2130114330978077), f4); | ||
2051 | f152 = MUL_F(FRAC_CONST(-0.9700312531945440), f150); | ||
2052 | f153 = MUL_F(FRAC_CONST(-0.7270510732912803), f26); | ||
2053 | f154 = f151 + f152; | ||
2054 | f155 = f153 - f152; | ||
2055 | f156 = f8 + f22; | ||
2056 | f157 = MUL_C(COEF_CONST(1.3315443865537255), f8); | ||
2057 | f158 = MUL_F(FRAC_CONST(-0.9039892931234433), f156); | ||
2058 | f159 = MUL_F(FRAC_CONST(-0.4764341996931612), f22); | ||
2059 | f160 = f157 + f158; | ||
2060 | f161 = f159 - f158; | ||
2061 | f162 = f12 + f18; | ||
2062 | f163 = MUL_C(COEF_CONST(1.3989068359730781), f12); | ||
2063 | f164 = MUL_F(FRAC_CONST(-0.8032075314806453), f162); | ||
2064 | f165 = MUL_F(FRAC_CONST(-0.2075082269882124), f18); | ||
2065 | f166 = f163 + f164; | ||
2066 | f167 = f165 - f164; | ||
2067 | f168 = f16 + f14; | ||
2068 | f169 = MUL_C(COEF_CONST(1.4125100802019777), f16); | ||
2069 | f170 = MUL_F(FRAC_CONST(-0.6715589548470187), f168); | ||
2070 | f171 = MUL_F(FRAC_CONST(0.0693921705079402), f14); | ||
2071 | f172 = f169 + f170; | ||
2072 | f173 = f171 - f170; | ||
2073 | f174 = f20 + f10; | ||
2074 | f175 = MUL_C(COEF_CONST(1.3718313541934939), f20); | ||
2075 | f176 = MUL_F(FRAC_CONST(-0.5141027441932219), f174); | ||
2076 | f177 = MUL_F(FRAC_CONST(0.3436258658070501), f10); | ||
2077 | f178 = f175 + f176; | ||
2078 | f179 = f177 - f176; | ||
2079 | f180 = f24 + f6; | ||
2080 | f181 = MUL_C(COEF_CONST(1.2784339185752409), f24); | ||
2081 | f182 = MUL_F(FRAC_CONST(-0.3368898533922200), f180); | ||
2082 | f183 = MUL_F(FRAC_CONST(0.6046542117908008), f6); | ||
2083 | f184 = f181 + f182; | ||
2084 | f185 = f183 - f182; | ||
2085 | f186 = f28 + f2; | ||
2086 | f187 = MUL_C(COEF_CONST(1.1359069844201433), f28); | ||
2087 | f188 = MUL_F(FRAC_CONST(-0.1467304744553624), f186); | ||
2088 | f189 = MUL_F(FRAC_CONST(0.8424460355094185), f2); | ||
2089 | f190 = f187 + f188; | ||
2090 | f191 = f189 - f188; | ||
2091 | f192 = f149 - f173; | ||
2092 | f193 = f149 + f173; | ||
2093 | f194 = f148 - f172; | ||
2094 | f195 = f148 + f172; | ||
2095 | f196 = f155 - f179; | ||
2096 | f197 = f155 + f179; | ||
2097 | f198 = f154 - f178; | ||
2098 | f199 = f154 + f178; | ||
2099 | f200 = f161 - f185; | ||
2100 | f201 = f161 + f185; | ||
2101 | f202 = f160 - f184; | ||
2102 | f203 = f160 + f184; | ||
2103 | f204 = f167 - f191; | ||
2104 | f205 = f167 + f191; | ||
2105 | f206 = f166 - f190; | ||
2106 | f207 = f166 + f190; | ||
2107 | f208 = f192 + f194; | ||
2108 | f209 = MUL_C(COEF_CONST(1.1758756024193588), f192); | ||
2109 | f210 = MUL_F(FRAC_CONST(-0.9807852804032304), f208); | ||
2110 | f211 = MUL_F(FRAC_CONST(-0.7856949583871021), f194); | ||
2111 | f212 = f209 + f210; | ||
2112 | f213 = f211 - f210; | ||
2113 | f214 = f196 + f198; | ||
2114 | f215 = MUL_C(COEF_CONST(1.3870398453221475), f196); | ||
2115 | f216 = MUL_F(FRAC_CONST(-0.5555702330196022), f214); | ||
2116 | f217 = MUL_F(FRAC_CONST(0.2758993792829431), f198); | ||
2117 | f218 = f215 + f216; | ||
2118 | f219 = f217 - f216; | ||
2119 | f220 = f200 + f202; | ||
2120 | f221 = MUL_F(FRAC_CONST(0.7856949583871022), f200); | ||
2121 | f222 = MUL_F(FRAC_CONST(0.1950903220161283), f220); | ||
2122 | f223 = MUL_C(COEF_CONST(1.1758756024193586), f202); | ||
2123 | f224 = f221 + f222; | ||
2124 | f225 = f223 - f222; | ||
2125 | f226 = f204 + f206; | ||
2126 | f227 = MUL_F(FRAC_CONST(-0.2758993792829430), f204); | ||
2127 | f228 = MUL_F(FRAC_CONST(0.8314696123025452), f226); | ||
2128 | f229 = MUL_C(COEF_CONST(1.3870398453221475), f206); | ||
2129 | f230 = f227 + f228; | ||
2130 | f231 = f229 - f228; | ||
2131 | f232 = f193 - f201; | ||
2132 | f233 = f193 + f201; | ||
2133 | f234 = f195 - f203; | ||
2134 | f235 = f195 + f203; | ||
2135 | f236 = f197 - f205; | ||
2136 | f237 = f197 + f205; | ||
2137 | f238 = f199 - f207; | ||
2138 | f239 = f199 + f207; | ||
2139 | f240 = f213 - f225; | ||
2140 | f241 = f213 + f225; | ||
2141 | f242 = f212 - f224; | ||
2142 | f243 = f212 + f224; | ||
2143 | f244 = f219 - f231; | ||
2144 | f245 = f219 + f231; | ||
2145 | f246 = f218 - f230; | ||
2146 | f247 = f218 + f230; | ||
2147 | f248 = f232 + f234; | ||
2148 | f249 = MUL_C(COEF_CONST(1.3065629648763766), f232); | ||
2149 | f250 = MUL_F(FRAC_CONST(-0.9238795325112866), f248); | ||
2150 | f251 = MUL_F(FRAC_CONST(-0.5411961001461967), f234); | ||
2151 | f252 = f249 + f250; | ||
2152 | f253 = f251 - f250; | ||
2153 | f254 = f236 + f238; | ||
2154 | f255 = MUL_F(FRAC_CONST(0.5411961001461969), f236); | ||
2155 | f256 = MUL_F(FRAC_CONST(0.3826834323650898), f254); | ||
2156 | f257 = MUL_C(COEF_CONST(1.3065629648763766), f238); | ||
2157 | f258 = f255 + f256; | ||
2158 | f259 = f257 - f256; | ||
2159 | f260 = f240 + f242; | ||
2160 | f261 = MUL_C(COEF_CONST(1.3065629648763766), f240); | ||
2161 | f262 = MUL_F(FRAC_CONST(-0.9238795325112866), f260); | ||
2162 | f263 = MUL_F(FRAC_CONST(-0.5411961001461967), f242); | ||
2163 | f264 = f261 + f262; | ||
2164 | f265 = f263 - f262; | ||
2165 | f266 = f244 + f246; | ||
2166 | f267 = MUL_F(FRAC_CONST(0.5411961001461969), f244); | ||
2167 | f268 = MUL_F(FRAC_CONST(0.3826834323650898), f266); | ||
2168 | f269 = MUL_C(COEF_CONST(1.3065629648763766), f246); | ||
2169 | f270 = f267 + f268; | ||
2170 | f271 = f269 - f268; | ||
2171 | f272 = f233 - f237; | ||
2172 | f273 = f233 + f237; | ||
2173 | f274 = f235 - f239; | ||
2174 | f275 = f235 + f239; | ||
2175 | f276 = f253 - f259; | ||
2176 | f277 = f253 + f259; | ||
2177 | f278 = f252 - f258; | ||
2178 | f279 = f252 + f258; | ||
2179 | f280 = f241 - f245; | ||
2180 | f281 = f241 + f245; | ||
2181 | f282 = f243 - f247; | ||
2182 | f283 = f243 + f247; | ||
2183 | f284 = f265 - f271; | ||
2184 | f285 = f265 + f271; | ||
2185 | f286 = f264 - f270; | ||
2186 | f287 = f264 + f270; | ||
2187 | f288 = f272 - f274; | ||
2188 | f289 = f272 + f274; | ||
2189 | f290 = MUL_F(FRAC_CONST(0.7071067811865474), f288); | ||
2190 | f291 = MUL_F(FRAC_CONST(0.7071067811865474), f289); | ||
2191 | f292 = f276 - f278; | ||
2192 | f293 = f276 + f278; | ||
2193 | f294 = MUL_F(FRAC_CONST(0.7071067811865474), f292); | ||
2194 | f295 = MUL_F(FRAC_CONST(0.7071067811865474), f293); | ||
2195 | f296 = f280 - f282; | ||
2196 | f297 = f280 + f282; | ||
2197 | f298 = MUL_F(FRAC_CONST(0.7071067811865474), f296); | ||
2198 | f299 = MUL_F(FRAC_CONST(0.7071067811865474), f297); | ||
2199 | f300 = f284 - f286; | ||
2200 | f301 = f284 + f286; | ||
2201 | f302 = MUL_F(FRAC_CONST(0.7071067811865474), f300); | ||
2202 | f303 = MUL_F(FRAC_CONST(0.7071067811865474), f301); | ||
2203 | f304 = f129 - f273; | ||
2204 | f305 = f129 + f273; | ||
2205 | f306 = f131 - f281; | ||
2206 | f307 = f131 + f281; | ||
2207 | f308 = f133 - f285; | ||
2208 | f309 = f133 + f285; | ||
2209 | f310 = f135 - f277; | ||
2210 | f311 = f135 + f277; | ||
2211 | f312 = f137 - f295; | ||
2212 | f313 = f137 + f295; | ||
2213 | f314 = f139 - f303; | ||
2214 | f315 = f139 + f303; | ||
2215 | f316 = f141 - f299; | ||
2216 | f317 = f141 + f299; | ||
2217 | f318 = f143 - f291; | ||
2218 | f319 = f143 + f291; | ||
2219 | f320 = f142 - f290; | ||
2220 | f321 = f142 + f290; | ||
2221 | f322 = f140 - f298; | ||
2222 | f323 = f140 + f298; | ||
2223 | f324 = f138 - f302; | ||
2224 | f325 = f138 + f302; | ||
2225 | f326 = f136 - f294; | ||
2226 | f327 = f136 + f294; | ||
2227 | f328 = f134 - f279; | ||
2228 | f329 = f134 + f279; | ||
2229 | f330 = f132 - f287; | ||
2230 | f331 = f132 + f287; | ||
2231 | f332 = f130 - f283; | ||
2232 | f333 = f130 + f283; | ||
2233 | f334 = f128 - f275; | ||
2234 | f335 = f128 + f275; | ||
2235 | y[31] = MUL_F(FRAC_CONST(0.5001506360206510), f305); | ||
2236 | y[30] = MUL_F(FRAC_CONST(0.5013584524464084), f307); | ||
2237 | y[29] = MUL_F(FRAC_CONST(0.5037887256810443), f309); | ||
2238 | y[28] = MUL_F(FRAC_CONST(0.5074711720725553), f311); | ||
2239 | y[27] = MUL_F(FRAC_CONST(0.5124514794082247), f313); | ||
2240 | y[26] = MUL_F(FRAC_CONST(0.5187927131053328), f315); | ||
2241 | y[25] = MUL_F(FRAC_CONST(0.5265773151542700), f317); | ||
2242 | y[24] = MUL_F(FRAC_CONST(0.5359098169079920), f319); | ||
2243 | y[23] = MUL_F(FRAC_CONST(0.5469204379855088), f321); | ||
2244 | y[22] = MUL_F(FRAC_CONST(0.5597698129470802), f323); | ||
2245 | y[21] = MUL_F(FRAC_CONST(0.5746551840326600), f325); | ||
2246 | y[20] = MUL_F(FRAC_CONST(0.5918185358574165), f327); | ||
2247 | y[19] = MUL_F(FRAC_CONST(0.6115573478825099), f329); | ||
2248 | y[18] = MUL_F(FRAC_CONST(0.6342389366884031), f331); | ||
2249 | y[17] = MUL_F(FRAC_CONST(0.6603198078137061), f333); | ||
2250 | y[16] = MUL_F(FRAC_CONST(0.6903721282002123), f335); | ||
2251 | y[15] = MUL_F(FRAC_CONST(0.7251205223771985), f334); | ||
2252 | y[14] = MUL_F(FRAC_CONST(0.7654941649730891), f332); | ||
2253 | y[13] = MUL_F(FRAC_CONST(0.8127020908144905), f330); | ||
2254 | y[12] = MUL_F(FRAC_CONST(0.8683447152233481), f328); | ||
2255 | y[11] = MUL_F(FRAC_CONST(0.9345835970364075), f326); | ||
2256 | y[10] = MUL_C(COEF_CONST(1.0144082649970547), f324); | ||
2257 | y[9] = MUL_C(COEF_CONST(1.1120716205797176), f322); | ||
2258 | y[8] = MUL_C(COEF_CONST(1.2338327379765710), f320); | ||
2259 | y[7] = MUL_C(COEF_CONST(1.3892939586328277), f318); | ||
2260 | y[6] = MUL_C(COEF_CONST(1.5939722833856311), f316); | ||
2261 | y[5] = MUL_C(COEF_CONST(1.8746759800084078), f314); | ||
2262 | y[4] = MUL_C(COEF_CONST(2.2820500680051619), f312); | ||
2263 | y[3] = MUL_C(COEF_CONST(2.9246284281582162), f310); | ||
2264 | y[2] = MUL_C(COEF_CONST(4.0846110781292477), f308); | ||
2265 | y[1] = MUL_C(COEF_CONST(6.7967507116736332), f306); | ||
2266 | y[0] = MUL_R(REAL_CONST(20.3738781672314530), f304); | ||
2267 | } | ||
2268 | |||
2269 | #endif | ||
2270 | |||
2271 | #endif | ||