1 /*****************************************************************************
2 * srfft.h: A52 FFT tables
3 *****************************************************************************
4 * Copyright (C) 1999, 2000 VideoLAN
5 * $Id: srfft.h,v 1.1 2002/08/04 17:23:42 sam Exp $
7 * Authors: Renaud Dartus <reno@videolan.org>
8 * Aaron Holtzman <aholtzma@engr.uvic.ca>
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
23 *****************************************************************************/
25 static const complex_t delta16[4] ATTR_ALIGN(16) =
26 { {1.00000000000000, 0.00000000000000},
27 {0.92387953251129, -0.38268343236509},
28 {0.70710678118655, -0.70710678118655},
29 {0.38268343236509, -0.92387953251129}};
31 static const complex_t delta16_3[4] ATTR_ALIGN(16) =
32 { {1.00000000000000, 0.00000000000000},
33 {0.38268343236509, -0.92387953251129},
34 {-0.70710678118655, -0.70710678118655},
35 {-0.92387953251129, 0.38268343236509}};
37 static const complex_t delta32[8] ATTR_ALIGN(16) =
38 { {1.00000000000000, 0.00000000000000},
39 {0.98078528040323, -0.19509032201613},
40 {0.92387953251129, -0.38268343236509},
41 {0.83146961230255, -0.55557023301960},
42 {0.70710678118655, -0.70710678118655},
43 {0.55557023301960, -0.83146961230255},
44 {0.38268343236509, -0.92387953251129},
45 {0.19509032201613, -0.98078528040323}};
47 static const complex_t delta32_3[8] ATTR_ALIGN(16) =
48 { {1.00000000000000, 0.00000000000000},
49 {0.83146961230255, -0.55557023301960},
50 {0.38268343236509, -0.92387953251129},
51 {-0.19509032201613, -0.98078528040323},
52 {-0.70710678118655, -0.70710678118655},
53 {-0.98078528040323, -0.19509032201613},
54 {-0.92387953251129, 0.38268343236509},
55 {-0.55557023301960, 0.83146961230255}};
57 static const complex_t delta64[16] ATTR_ALIGN(16) =
58 { {1.00000000000000, 0.00000000000000},
59 {0.99518472667220, -0.09801714032956},
60 {0.98078528040323, -0.19509032201613},
61 {0.95694033573221, -0.29028467725446},
62 {0.92387953251129, -0.38268343236509},
63 {0.88192126434836, -0.47139673682600},
64 {0.83146961230255, -0.55557023301960},
65 {0.77301045336274, -0.63439328416365},
66 {0.70710678118655, -0.70710678118655},
67 {0.63439328416365, -0.77301045336274},
68 {0.55557023301960, -0.83146961230255},
69 {0.47139673682600, -0.88192126434835},
70 {0.38268343236509, -0.92387953251129},
71 {0.29028467725446, -0.95694033573221},
72 {0.19509032201613, -0.98078528040323},
73 {0.09801714032956, -0.99518472667220}};
75 static const complex_t delta64_3[16] ATTR_ALIGN(16) =
76 { {1.00000000000000, 0.00000000000000},
77 {0.95694033573221, -0.29028467725446},
78 {0.83146961230255, -0.55557023301960},
79 {0.63439328416365, -0.77301045336274},
80 {0.38268343236509, -0.92387953251129},
81 {0.09801714032956, -0.99518472667220},
82 {-0.19509032201613, -0.98078528040323},
83 {-0.47139673682600, -0.88192126434836},
84 {-0.70710678118655, -0.70710678118655},
85 {-0.88192126434835, -0.47139673682600},
86 {-0.98078528040323, -0.19509032201613},
87 {-0.99518472667220, 0.09801714032956},
88 {-0.92387953251129, 0.38268343236509},
89 {-0.77301045336274, 0.63439328416365},
90 {-0.55557023301960, 0.83146961230255},
91 {-0.29028467725446, 0.95694033573221}};
93 static const complex_t delta128[32] ATTR_ALIGN(16) =
94 { {1.00000000000000, 0.00000000000000},
95 {0.99879545620517, -0.04906767432742},
96 {0.99518472667220, -0.09801714032956},
97 {0.98917650996478, -0.14673047445536},
98 {0.98078528040323, -0.19509032201613},
99 {0.97003125319454, -0.24298017990326},
100 {0.95694033573221, -0.29028467725446},
101 {0.94154406518302, -0.33688985339222},
102 {0.92387953251129, -0.38268343236509},
103 {0.90398929312344, -0.42755509343028},
104 {0.88192126434836, -0.47139673682600},
105 {0.85772861000027, -0.51410274419322},
106 {0.83146961230255, -0.55557023301960},
107 {0.80320753148064, -0.59569930449243},
108 {0.77301045336274, -0.63439328416365},
109 {0.74095112535496, -0.67155895484702},
110 {0.70710678118655, -0.70710678118655},
111 {0.67155895484702, -0.74095112535496},
112 {0.63439328416365, -0.77301045336274},
113 {0.59569930449243, -0.80320753148064},
114 {0.55557023301960, -0.83146961230255},
115 {0.51410274419322, -0.85772861000027},
116 {0.47139673682600, -0.88192126434835},
117 {0.42755509343028, -0.90398929312344},
118 {0.38268343236509, -0.92387953251129},
119 {0.33688985339222, -0.94154406518302},
120 {0.29028467725446, -0.95694033573221},
121 {0.24298017990326, -0.97003125319454},
122 {0.19509032201613, -0.98078528040323},
123 {0.14673047445536, -0.98917650996478},
124 {0.09801714032956, -0.99518472667220},
125 {0.04906767432742, -0.99879545620517}};
127 static const complex_t delta128_3[32] ATTR_ALIGN(16) =
128 { {1.00000000000000, 0.00000000000000},
129 {0.98917650996478, -0.14673047445536},
130 {0.95694033573221, -0.29028467725446},
131 {0.90398929312344, -0.42755509343028},
132 {0.83146961230255, -0.55557023301960},
133 {0.74095112535496, -0.67155895484702},
134 {0.63439328416365, -0.77301045336274},
135 {0.51410274419322, -0.85772861000027},
136 {0.38268343236509, -0.92387953251129},
137 {0.24298017990326, -0.97003125319454},
138 {0.09801714032956, -0.99518472667220},
139 {-0.04906767432742, -0.99879545620517},
140 {-0.19509032201613, -0.98078528040323},
141 {-0.33688985339222, -0.94154406518302},
142 {-0.47139673682600, -0.88192126434836},
143 {-0.59569930449243, -0.80320753148065},
144 {-0.70710678118655, -0.70710678118655},
145 {-0.80320753148065, -0.59569930449243},
146 {-0.88192126434835, -0.47139673682600},
147 {-0.94154406518302, -0.33688985339222},
148 {-0.98078528040323, -0.19509032201613},
149 {-0.99879545620517, -0.04906767432742},
150 {-0.99518472667220, 0.09801714032956},
151 {-0.97003125319454, 0.24298017990326},
152 {-0.92387953251129, 0.38268343236509},
153 {-0.85772861000027, 0.51410274419322},
154 {-0.77301045336274, 0.63439328416365},
155 {-0.67155895484702, 0.74095112535496},
156 {-0.55557023301960, 0.83146961230255},
157 {-0.42755509343028, 0.90398929312344},
158 {-0.29028467725446, 0.95694033573221},
159 {-0.14673047445536, 0.98917650996478}};
161 #define HSQRT2 0.707106781188;
163 #define TRANSZERO(A0,A4,A8,A12) { \
165 v_i = u_r - wTB[k*2].real; \
166 u_r += wTB[k*2].real; \
168 v_r = wTB[k*2].imag - u_i; \
169 u_i += wTB[k*2].imag; \
196 #define TRANSHALF_16(A2,A6,A10,A14) {\
241 #define TRANS(A1,A5,A9,A13,WT,WB,D,D3) { \