98
//find --2pi/N/2 = pi/N
long double piN= M_PI / N;
if (complement)
piN= -piN;
//find x_[n] = x[n]*e^--2*j*pi*n*n/N/2 = x[n]*e^j*piN*n*n
x_= new ShortComplex[N_];
Complex v;
int n;
for(n= 0; n < N; ++n)
{
arg= piN*n*n;
v.re= cosl(arg);
v.im= sinl(arg);
complex_mul(x_ + n, x + n, &v);
}
for(; n < N_; ++n)
x_[n].re= x_[n].im= 0;
//find w[n] = e^-j*2*pi*(2*N-2-n)^2/N/2= e^-j*piN*(2*N-2-n)^2
w= new ShortComplex[N_];
int N22= 2*N - 2;
for(n= 0; n < N_; ++n, --N22)
{
arg= -piN*N22*N22;
w[n].re= (double)cos(arg);
w[n].im= (double)sin(arg);
}
//FFT1
Wstore= createWstore(N_);
fft_step(x_, T, false, Wstore);
//FFT2
fft_step(w, T, false, Wstore);