#include "math.h" #include "fft.h" void conjugate_complex(int n,complex in[],complex out[]) { int i = 0; for(i=0;ireal = a.real + b.real; c->imag = a.imag + b.imag; } void c_sub(complex a,complex b,complex *c) { c->real = a.real - b.real; c->imag = a.imag - b.imag; } void c_mul(complex a,complex b,complex *c) { c->real = a.real * b.real - a.imag * b.imag; c->imag = a.real * b.imag + a.imag * b.real; } void c_div(complex a,complex b,complex *c) { c->real = (a.real * b.real + a.imag * b.imag)/(b.real * b.real +b.imag * b.imag); c->imag = (a.imag * b.real - a.real * b.imag)/(b.real * b.real +b.imag * b.imag); } #define SWAP(a,b) tempr=(a);(a)=(b);(b)=tempr void Wn_i(int n,int i,complex *Wn,char flag) { Wn->real = iot_cos(2*PI*i/n); if(flag == 1) Wn->imag = -iot_sin(2*PI*i/n); else if(flag == 0) Wn->imag = -iot_sin(2*PI*i/n); } void fft(int N,complex f[]) { complex t,wn; int i,j,k,m,n,l,r,M; int la,lb,lc; /*----M=log2(N)----*/ for(i=N,M=1;(i=i/2)!=1;M++); for(i=1,j=N/2;i<=N-2;i++) { if(i