[an error occurred while processing this directive]
Поело таки. Еще раз.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
миниатюрный аудио-видеорекордер mAVR

Отправлено VVT 19 июля 2002 г. 15:10
В ответ на: не поело бы чего отправлено VVT 19 июля 2002 г. 15:07


#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<(FFT_LENGTH-1); 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<(FFT_RANGE); l++)
{
l1 = l2;
l2 <<= 1;
u1 = 256;
u2 = 0;
for (j=0; j<(l1); j++)
{
for (i=j; i<(FFT_LENGTH); i+=l2)
{
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