| 2783 | } |
| 2784 | |
| 2785 | static void rfft8pt(SPFLOAT * ioptr) |
| 2786 | { |
| 2787 | /*** RADIX 16 rfft ***/ |
| 2788 | SPFLOAT w0r = 1.0 / MYROOT2; /* cos(pi/4) */ |
| 2789 | SPFLOAT w1r = MYCOSPID8; /* cos(pi/8) */ |
| 2790 | SPFLOAT w1i = MYSINPID8; /* sin(pi/8) */ |
| 2791 | SPFLOAT f0r, f0i, f1r, f1i, f2r, f2i, f3r, f3i; |
| 2792 | SPFLOAT f4r, f4i, f5r, f5i, f6r, f6i, f7r, f7i; |
| 2793 | SPFLOAT t0r, t0i, t1r, t1i; |
| 2794 | const SPFLOAT Two = 2.0; |
| 2795 | const SPFLOAT scale = 0.5; |
| 2796 | |
| 2797 | /* bit reversed load */ |
| 2798 | f0r = ioptr[0]; |
| 2799 | f0i = ioptr[1]; |
| 2800 | f1r = ioptr[8]; |
| 2801 | f1i = ioptr[9]; |
| 2802 | f2r = ioptr[4]; |
| 2803 | f2i = ioptr[5]; |
| 2804 | f3r = ioptr[12]; |
| 2805 | f3i = ioptr[13]; |
| 2806 | f4r = ioptr[2]; |
| 2807 | f4i = ioptr[3]; |
| 2808 | f5r = ioptr[10]; |
| 2809 | f5i = ioptr[11]; |
| 2810 | f6r = ioptr[6]; |
| 2811 | f6i = ioptr[7]; |
| 2812 | f7r = ioptr[14]; |
| 2813 | f7i = ioptr[15]; |
| 2814 | /* Butterflys */ |
| 2815 | /* |
| 2816 | f0 - - t0 - - f0 - - f0 |
| 2817 | f1 - 1 - f1 - - f1 - - f1 |
| 2818 | f2 - - f2 - 1 - f2 - - f2 |
| 2819 | f3 - 1 - t1 - -i - f3 - - f3 |
| 2820 | f4 - - t0 - - f4 - 1 - t0 |
| 2821 | f5 - 1 - f5 - - f5 - w3 - f4 |
| 2822 | f6 - - f6 - 1 - f6 - -i - t1 |
| 2823 | f7 - 1 - t1 - -i - f7 - iw3- f6 |
| 2824 | */ |
| 2825 | |
| 2826 | t0r = f0r + f1r; |
| 2827 | t0i = f0i + f1i; |
| 2828 | f1r = f0r - f1r; |
| 2829 | f1i = f0i - f1i; |
| 2830 | |
| 2831 | t1r = f2r - f3r; |
| 2832 | t1i = f2i - f3i; |
| 2833 | f2r = f2r + f3r; |
| 2834 | f2i = f2i + f3i; |
| 2835 | |
| 2836 | f0r = t0r + f2r; |
| 2837 | f0i = t0i + f2i; |
| 2838 | f2r = t0r - f2r; |
| 2839 | f2i = t0i - f2i; |
| 2840 | |
| 2841 | f3r = f1r - t1i; |
| 2842 | f3i = f1i + t1r; |