www.pudn.com > ica_C.rar > spec.c
#include "spec.h"
static void make_sintbl(int n, vector sintbl)
{
int i,n2,n4,n8;
SCALAR c,s,dc,ds,t;
n2=n/2; n4=n/4; n8=n/8;
t =sin(PI/n);
dc=2*t*t; ds=sqrt(dc*(2-dc));
t =2*dc; c =sintbl[n4]=1; s=sintbl[0]=0;
for(i=1;i=n) break;
k=n2;
while(k<=j){j-=k;k/=2;}
j+=k;
}
}
int fft(int n, vector x, vector y)
{
static int last_n = 0;
static int *bitrev = NULL;
static SCALAR *sintbl = NULL;
int i, j, k, ik, h, d, k2, n4, inverse;
SCALAR t, s, c, dx, dy;
if (n < 0) {
n = -n; inverse = 1;
} else inverse = 0;
n4 = n/4;
if (n!=last_n || n==0) {
last_n = n;
if (sintbl != NULL) free(sintbl);
if (bitrev != NULL) free(bitrev);
if (n == 0) return 0;
sintbl=new_vector(n+n4);
bitrev=malloc(n*sizeof(int));
if (sintbl == NULL || bitrev == NULL) {
fprintf(stderr, "no memory space\n"); return 1;
}
make_sintbl(n, sintbl);
make_bitrev(n, bitrev);
}
for (i=0;i0)
for(t=f_size-1;t