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

Отправлено VVT 19 июля 2002 г. 15:07
В ответ на: Покажите код. Может дело в том, что на ПК sizeof(int)==4, а на МК sizeof(int)==2? отправлено Mik 19 июля 2002 г. 14:31


#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