[an error occurred while processing this directive]
|
#define FFT_LENGTH 64
#define FFT_RANGE 6
int wRe[FFT_LENGTH];
int wIm[FFT_LENGTH];void BitReverse(void)
{
int i,j;
j = 0;
for (i=0; i{
int k;
if (i < j)
{
int tRe, tIm;
tRe = wRe[i];
tIm = wIm[i];
wRe[i] = wRe[j];
wIm[i] = wIm[j];
wRe[j] = tRe;
wIm[j] = tIm;
}
k = FFT_LENGTH >> 1;
while (k <= j)
{
j -= k;
k >>= 1;
}
j += k;
}
}void FFT(void)
{
int i,j,l;
int i1, l1,l2;
long u1,u2;
long c1, c2, z;
c1 = -256;
c2 = 0;
l2 = 1;
for (l=0; l{
l1 = l2;
l2 <<= 1;
u1 = 256;
u2 = 0;
for (j=0;j{
for (i=j; i{
long t1,t2;
i1 = i + l1;
t1 = u1 * wRe[i1] - u2 * wIm[i1];
t1>>=8;
t2 = u1 * wIm[i1] + u2 * wRe[i1];
t2>>=8;
wRe[i1] = wRe[i] - (int)t1;
wIm[i1] = wIm[i] - (int)t2;
wRe[i] += (int)t1;
wIm[i] += (int)t2;
}
z = (u1 * c1 - u2 * c2)>>8;
u2 = (u1 * c2 + u2 * c1)>>8;
u1 = z;
}
c2 = isqrt((256 - c1)<<7);
c1 = isqrt((256 + c1)<<7);
}
}
E-mail: info@telesys.ru