| 714 | } |
| 715 | |
| 716 | static void fft4pt(SPFLOAT * ioptr) |
| 717 | { |
| 718 | /*** RADIX 4 fft ***/ |
| 719 | SPFLOAT f0r, f0i, f1r, f1i, f2r, f2i, f3r, f3i; |
| 720 | SPFLOAT t0r, t0i, t1r, t1i; |
| 721 | |
| 722 | /* bit reversed load */ |
| 723 | f0r = ioptr[0]; |
| 724 | f0i = ioptr[1]; |
| 725 | f1r = ioptr[4]; |
| 726 | f1i = ioptr[5]; |
| 727 | f2r = ioptr[2]; |
| 728 | f2i = ioptr[3]; |
| 729 | f3r = ioptr[6]; |
| 730 | f3i = ioptr[7]; |
| 731 | |
| 732 | /* Butterflys */ |
| 733 | /* |
| 734 | f0 - - t0 - - f0 |
| 735 | f1 - 1 - f1 - - f1 |
| 736 | f2 - - f2 - 1 - f2 |
| 737 | f3 - 1 - t1 - -i - f3 |
| 738 | */ |
| 739 | |
| 740 | t0r = f0r + f1r; |
| 741 | t0i = f0i + f1i; |
| 742 | f1r = f0r - f1r; |
| 743 | f1i = f0i - f1i; |
| 744 | |
| 745 | t1r = f2r - f3r; |
| 746 | t1i = f2i - f3i; |
| 747 | f2r = f2r + f3r; |
| 748 | f2i = f2i + f3i; |
| 749 | |
| 750 | f0r = t0r + f2r; |
| 751 | f0i = t0i + f2i; |
| 752 | f2r = t0r - f2r; |
| 753 | f2i = t0i - f2i; |
| 754 | |
| 755 | f3r = f1r - t1i; |
| 756 | f3i = f1i + t1r; |
| 757 | f1r = f1r + t1i; |
| 758 | f1i = f1i - t1r; |
| 759 | |
| 760 | /* store result */ |
| 761 | ioptr[0] = f0r; |
| 762 | ioptr[1] = f0i; |
| 763 | ioptr[2] = f1r; |
| 764 | ioptr[3] = f1i; |
| 765 | ioptr[4] = f2r; |
| 766 | ioptr[5] = f2i; |
| 767 | ioptr[6] = f3r; |
| 768 | ioptr[7] = f3i; |
| 769 | } |
| 770 | |
| 771 | static void fft8pt(SPFLOAT * ioptr) |
| 772 | { |