comparison peck_fft.c @ 1:cfec79393811

cleanup
author Peter Meerwald <p.meerwald@bct-electronic.com>
date Fri, 16 Sep 2011 12:57:27 +0200
parents 723f588b82ac
children 2d6c49fcafcb
comparison
equal deleted inserted replaced
0:723f588b82ac 1:cfec79393811
13 */ 13 */
14 14
15 15
16 #include "_peck_fft_guts.h" 16 #include "_peck_fft_guts.h"
17 /* The guts header contains all the multiplication and addition macros that are defined for 17 /* The guts header contains all the multiplication and addition macros that are defined for
18 fixed or floating point complex numbers. It also delares the kf_ internal functions. 18 * fixed or floating point complex numbers. It also delares the kf_ internal functions.
19 */ 19 */
20 20
21 static void kf_bfly2( 21 static void kf_bfly2(
22 peck_fft_cpx * Fout, 22 peck_fft_cpx * Fout,
23 const size_t fstride, 23 const size_t fstride,
24 const peck_fft_cfg st, 24 const peck_fft_cfg st,
25 int m 25 int m) {
26 )
27 {
28 26
29 //printf("kf_bfly2\n"); 27 //printf("kf_bfly2\n");
30 28
31 peck_fft_cpx * Fout2; 29 peck_fft_cpx * Fout2;
32 peck_fft_cpx * tw1 = st->twiddles; 30 peck_fft_cpx * tw1 = st->twiddles;
33 peck_fft_cpx t; 31 peck_fft_cpx t;
34 Fout2 = Fout + m; 32 Fout2 = Fout + m;
35 do{ 33 do {
36 C_FIXDIV(*Fout,2); C_FIXDIV(*Fout2,2); 34 C_FIXDIV(*Fout, 2);
37 35 C_FIXDIV(*Fout2, 2);
38 C_MUL (t, *Fout2 , *tw1); 36
37 C_MUL(t, *Fout2, *tw1);
39 tw1 += fstride; 38 tw1 += fstride;
40 C_SUB( *Fout2 , *Fout , t ); 39 C_SUB(*Fout2, *Fout, t);
41 C_ADDTO( *Fout , t ); 40 C_ADDTO(*Fout, t);
42 ++Fout2; 41 ++Fout2;
43 ++Fout; 42 ++Fout;
44 }while (--m); 43 } while (--m);
45 } 44 }
46 45
47 static void kf_bfly4( 46 static void kf_bfly4(
48 peck_fft_cpx * Fout, 47 peck_fft_cpx * Fout,
49 const size_t fstride, 48 const size_t fstride,
50 const peck_fft_cfg st, 49 const peck_fft_cfg st,
51 const size_t m 50 const size_t m) {
52 )
53 {
54 peck_fft_cpx *tw1,*tw2,*tw3; 51 peck_fft_cpx *tw1,*tw2,*tw3;
55 peck_fft_cpx scratch[6]; 52 peck_fft_cpx scratch[6];
56 size_t k=m; 53 size_t k=m;
57 const size_t m2=2*m; 54 const size_t m2=2*m;
58 const size_t m3=3*m; 55 const size_t m3=3*m;
59 56
60 //printf("kf_bfly4\n"); 57 //printf("kf_bfly4\n");
61 58
62
63 tw3 = tw2 = tw1 = st->twiddles; 59 tw3 = tw2 = tw1 = st->twiddles;
64 60
65 do { 61 do {
66 C_FIXDIV(*Fout,4); C_FIXDIV(Fout[m],4); C_FIXDIV(Fout[m2],4); C_FIXDIV(Fout[m3],4); 62 C_FIXDIV(*Fout, 4);
67 63 C_FIXDIV(Fout[m], 4);
68 C_MUL(scratch[0],Fout[m] , *tw1 ); 64 C_FIXDIV(Fout[m2], 4);
69 C_MUL(scratch[1],Fout[m2] , *tw2 ); 65 C_FIXDIV(Fout[m3], 4);
70 C_MUL(scratch[2],Fout[m3] , *tw3 ); 66
71 67 C_MUL(scratch[0], Fout[m], *tw1);
72 C_SUB( scratch[5] , *Fout, scratch[1] ); 68 C_MUL(scratch[1], Fout[m2], *tw2);
69 C_MUL(scratch[2], Fout[m3], *tw3);
70
71 C_SUB(scratch[5], *Fout, scratch[1]);
73 C_ADDTO(*Fout, scratch[1]); 72 C_ADDTO(*Fout, scratch[1]);
74 C_ADD( scratch[3] , scratch[0] , scratch[2] ); 73 C_ADD(scratch[3], scratch[0], scratch[2]);
75 C_SUB( scratch[4] , scratch[0] , scratch[2] ); 74 C_SUB(scratch[4], scratch[0], scratch[2]);
76 C_SUB( Fout[m2], *Fout, scratch[3] ); 75 C_SUB(Fout[m2], *Fout, scratch[3]);
77 tw1 += fstride; 76 tw1 += fstride;
78 tw2 += fstride*2; 77 tw2 += fstride*2;
79 tw3 += fstride*3; 78 tw3 += fstride*3;
80 C_ADDTO( *Fout , scratch[3] ); 79 C_ADDTO(*Fout, scratch[3]);
81 80
82 if(st->inverse) { 81 if (st->inverse) {
83 Fout[m].r = scratch[5].r - scratch[4].i; 82 Fout[m].r = scratch[5].r - scratch[4].i;
84 Fout[m].i = scratch[5].i + scratch[4].r; 83 Fout[m].i = scratch[5].i + scratch[4].r;
85 Fout[m3].r = scratch[5].r + scratch[4].i; 84 Fout[m3].r = scratch[5].r + scratch[4].i;
86 Fout[m3].i = scratch[5].i - scratch[4].r; 85 Fout[m3].i = scratch[5].i - scratch[4].r;
87 }else{ 86 } else {
88 Fout[m].r = scratch[5].r + scratch[4].i; 87 Fout[m].r = scratch[5].r + scratch[4].i;
89 Fout[m].i = scratch[5].i - scratch[4].r; 88 Fout[m].i = scratch[5].i - scratch[4].r;
90 Fout[m3].r = scratch[5].r - scratch[4].i; 89 Fout[m3].r = scratch[5].r - scratch[4].i;
91 Fout[m3].i = scratch[5].i + scratch[4].r; 90 Fout[m3].i = scratch[5].i + scratch[4].r;
92 } 91 }
93 ++Fout; 92 ++Fout;
94 }while(--k); 93 } while (--k);
95 } 94 }
96 95
97 static void kf_bfly3( 96 static void kf_bfly3(
98 peck_fft_cpx * Fout, 97 peck_fft_cpx * Fout,
99 const size_t fstride, 98 const size_t fstride,
100 const peck_fft_cfg st, 99 const peck_fft_cfg st,
101 size_t m 100 size_t m) {
102 )
103 {
104 size_t k=m; 101 size_t k=m;
105 const size_t m2 = 2*m; 102 const size_t m2 = 2*m;
106 peck_fft_cpx *tw1,*tw2; 103 peck_fft_cpx *tw1, *tw2;
107 peck_fft_cpx scratch[5]; 104 peck_fft_cpx scratch[5];
108 peck_fft_cpx epi3; 105 peck_fft_cpx epi3;
109 epi3 = st->twiddles[fstride*m]; 106 epi3 = st->twiddles[fstride*m];
110 107
111 printf("kf_bfly3\n"); 108 printf("kf_bfly3\n");
112 109
113 110
114 tw1=tw2=st->twiddles; 111 tw1=tw2=st->twiddles;
115 112
116 do{ 113 do {
117 C_FIXDIV(*Fout,3); C_FIXDIV(Fout[m],3); C_FIXDIV(Fout[m2],3); 114 C_FIXDIV(*Fout,3); C_FIXDIV(Fout[m],3); C_FIXDIV(Fout[m2],3);
118 115
119 C_MUL(scratch[1],Fout[m] , *tw1); 116 C_MUL(scratch[1],Fout[m] , *tw1);
120 C_MUL(scratch[2],Fout[m2] , *tw2); 117 C_MUL(scratch[2],Fout[m2] , *tw2);
121 118
136 133
137 Fout[m].r -= scratch[0].i; 134 Fout[m].r -= scratch[0].i;
138 Fout[m].i += scratch[0].r; 135 Fout[m].i += scratch[0].r;
139 136
140 ++Fout; 137 ++Fout;
141 }while(--k); 138 } while (--k);
142 } 139 }
143 140
144 static void kf_bfly5( 141 static void kf_bfly5(
145 peck_fft_cpx * Fout, 142 peck_fft_cpx * Fout,
146 const size_t fstride, 143 const size_t fstride,

Repositories maintained by Peter Meerwald, pmeerw@pmeerw.net.