| 3183 | } |
| 3184 | |
| 3185 | static void rifft4pt(SPFLOAT * ioptr, SPFLOAT scale) |
| 3186 | { |
| 3187 | /*** RADIX 8 rifft ***/ |
| 3188 | SPFLOAT f0r, f0i, f1r, f1i, f2r, f2i, f3r, f3i; |
| 3189 | SPFLOAT t0r, t0i, t1r, t1i; |
| 3190 | SPFLOAT w0r = 1.0 / MYROOT2; /* cos(pi/4) */ |
| 3191 | const SPFLOAT Two = 2.0; |
| 3192 | |
| 3193 | /* bit reversed load */ |
| 3194 | t0r = ioptr[0]; |
| 3195 | t0i = ioptr[1]; |
| 3196 | f2r = ioptr[2]; |
| 3197 | f2i = ioptr[3]; |
| 3198 | f1r = Two * ioptr[4]; |
| 3199 | f1i = Two * ioptr[5]; |
| 3200 | f3r = ioptr[6]; |
| 3201 | f3i = ioptr[7]; |
| 3202 | |
| 3203 | /* start rfft */ |
| 3204 | f0r = t0r + t0i; /* compute Re(x[0]) */ |
| 3205 | f0i = t0r - t0i; /* compute Re(x[N/2]) */ |
| 3206 | |
| 3207 | t1r = f2r + f3r; |
| 3208 | t1i = f2i - f3i; |
| 3209 | t0r = f2r - f3r; |
| 3210 | t0i = f2i + f3i; |
| 3211 | |
| 3212 | f2r = t1r - w0r * t0r - w0r * t0i; |
| 3213 | f2i = t1i + w0r * t0r - w0r * t0i; |
| 3214 | f3r = Two * t1r - f2r; |
| 3215 | f3i = f2i - Two * t1i; |
| 3216 | |
| 3217 | /* Butterflys */ |
| 3218 | /* |
| 3219 | f0 - - t0 - - f0 |
| 3220 | f1 - 1 - f1 - - f1 |
| 3221 | f2 - - f2 - 1 - f2 |
| 3222 | f3 - 1 - t1 - i - f3 |
| 3223 | */ |
| 3224 | |
| 3225 | t0r = f0r + f1r; |
| 3226 | t0i = f0i - f1i; |
| 3227 | f1r = f0r - f1r; |
| 3228 | f1i = f0i + f1i; |
| 3229 | |
| 3230 | t1r = f2r - f3r; |
| 3231 | t1i = f2i - f3i; |
| 3232 | f2r = f2r + f3r; |
| 3233 | f2i = f2i + f3i; |
| 3234 | |
| 3235 | f0r = t0r + f2r; |
| 3236 | f0i = t0i + f2i; |
| 3237 | f2r = t0r - f2r; |
| 3238 | f2i = t0i - f2i; |
| 3239 | |
| 3240 | f3r = f1r + t1i; |
| 3241 | f3i = f1i - t1r; |
| 3242 | f1r = f1r - t1i; |