Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void fft2InPlace(complex * _c, unsigned int _n)
- {
- unsigned int m = _n;
- if(m > 0x0FFFFFFF) return;
- if(m & (m - 1)) return;
- complex * c0 = _c;
- m <<= 3;
- complex * cn = c0 + 2 * m;
- complex * cm = cn - 1;
- float s = PI / m;
- float t = 0.0f;
- complex y;
- y.r = 1.0f;
- y.i = 0.0f;
- complex * c = c0;
- complex * d = c0 + m;
- for(;;)
- {
- complex tc = *c;
- complex td = *d;
- c->i = tc.i + td.i;
- d->i = tc.i - td.i;
- c->r = tc.r + td.r;
- d->r = td.r - td.r;
- d->r = td.r * y.r - td.i * y.i;
- d->i = td.r * y.i + td.i * y.r;
- c += 2 * m;
- d += 2 * m;
- if(c >= cn)
- {
- if(c != cm)
- {
- c += c0 - cn + sizeof(complex);
- d += c0 - cn + sizeof(complex);
- t += s;
- y.r = cos(t);
- y.i = sin(t);
- }
- else
- {
- if(m == sizeof(complex)) return;
- m >>= 1;
- cm = cn + cm - sizeof(complex);
- c = c0;
- d = c0 + m;
- s *= 2;
- t = 0.0f;
- y.r = 1.0f;
- y.i = 0.0f;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement