| 3254 | } |
| 3255 | |
| 3256 | static void rifft8pt(SPFLOAT * ioptr, SPFLOAT scale) |
| 3257 | { |
| 3258 | /*** RADIX 16 rifft ***/ |
| 3259 | SPFLOAT w0r = (SPFLOAT)(1.0 / MYROOT2); /* cos(pi/4) */ |
| 3260 | SPFLOAT w1r = MYCOSPID8; /* cos(pi/8) */ |
| 3261 | SPFLOAT w1i = MYSINPID8; /* sin(pi/8) */ |
| 3262 | SPFLOAT f0r, f0i, f1r, f1i, f2r, f2i, f3r, f3i; |
| 3263 | SPFLOAT f4r, f4i, f5r, f5i, f6r, f6i, f7r, f7i; |
| 3264 | SPFLOAT t0r, t0i, t1r, t1i; |
| 3265 | const SPFLOAT Two = 2.0; |
| 3266 | |
| 3267 | /* bit reversed load */ |
| 3268 | t0r = ioptr[0]; |
| 3269 | t0i = ioptr[1]; |
| 3270 | f4r = ioptr[2]; |
| 3271 | f4i = ioptr[3]; |
| 3272 | f2r = ioptr[4]; |
| 3273 | f2i = ioptr[5]; |
| 3274 | f6r = ioptr[6]; |
| 3275 | f6i = ioptr[7]; |
| 3276 | f1r = Two * ioptr[8]; |
| 3277 | f1i = Two * ioptr[9]; |
| 3278 | f5r = ioptr[10]; |
| 3279 | f5i = ioptr[11]; |
| 3280 | f3r = ioptr[12]; |
| 3281 | f3i = ioptr[13]; |
| 3282 | f7r = ioptr[14]; |
| 3283 | f7i = ioptr[15]; |
| 3284 | |
| 3285 | /* start rfft */ |
| 3286 | f0r = t0r + t0i; /* compute Re(x[0]) */ |
| 3287 | f0i = t0r - t0i; /* compute Re(x[N/2]) */ |
| 3288 | |
| 3289 | t0r = f2r + f3r; |
| 3290 | t0i = f2i - f3i; |
| 3291 | t1r = f2r - f3r; |
| 3292 | t1i = f2i + f3i; |
| 3293 | |
| 3294 | f2r = t0r - w0r * t1r - w0r * t1i; |
| 3295 | f2i = t0i + w0r * t1r - w0r * t1i; |
| 3296 | f3r = Two * t0r - f2r; |
| 3297 | f3i = f2i - Two * t0i; |
| 3298 | |
| 3299 | t0r = f4r + f7r; |
| 3300 | t0i = f4i - f7i; |
| 3301 | t1r = f4r - f7r; |
| 3302 | t1i = f4i + f7i; |
| 3303 | |
| 3304 | f4r = t0r - w1i * t1r - w1r * t1i; |
| 3305 | f4i = t0i + w1r * t1r - w1i * t1i; |
| 3306 | f7r = Two * t0r - f4r; |
| 3307 | f7i = f4i - Two * t0i; |
| 3308 | |
| 3309 | t0r = f6r + f5r; |
| 3310 | t0i = f6i - f5i; |
| 3311 | t1r = f6r - f5r; |
| 3312 | t1i = f6i + f5i; |
| 3313 | |