[an error occurred while processing this directive]
подскажите человеку, может я не все понял...
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено КАРАБАС 18 августа 2003 г. 12:53

не могу разобраться с FFT, вроде бы все теоретически ясно, но
хз. - что-то не работает, вот даже код:

int size = 8;
CComplex* src = new CComplex[size];

//здеся входные данные формируется - просто cos из 8-ми точек.
float arg = 360.0/(float)(2*size);
float freq = 1.0;
for(int i=0; i {
float re = 100*cos(2*PI*freq*arg/360.0);
CComplex tmp(re,0);
src[i] = tmp;
arg += 360.0/(float)(size);
}

//это коэффициенты
/*
CComplex W(int n, int pow)
{
float re = cos(2*PI*pow/n);
float im = -sin(2*PI*pow/n);
CComplex tmp(re,im);
return tmp;
}
*/

CComplex* coeffs = new CComplex[4];
coeffs[0] = W(2,0);
coeffs[1] = W(2,0);
coeffs[2] = W(2,0);
coeffs[3] = W(2,1);

CComplex* res1 = new CComplex[size];
CComplex* res2 = new CComplex[size];

//вычисление бабочек
//бабочка 1
res1[0] = src[BitRev(0)]*coeffs[0] + src[BitRev(1)]*coeffs[1];
res1[1] = src[BitRev(0)]*coeffs[2] + src[BitRev(1)]*coeffs[3];
//бабочка 2
res1[2] = src[BitRev(2)]*coeffs[0] + src[BitRev(3)]*coeffs[1];
res1[3] = src[BitRev(2)]*coeffs[2] + src[BitRev(3)]*coeffs[3];
//бабочка 3
res1[4] = src[BitRev(4)]*coeffs[0] + src[BitRev(5)]*coeffs[1];
res1[5] = src[BitRev(4)]*coeffs[2] + src[BitRev(5)]*coeffs[3];
//бабочка 4
res1[6] = src[BitRev(6)]*coeffs[0] + src[BitRev(7)]*coeffs[1];
res1[7] = src[BitRev(6)]*coeffs[2] + src[BitRev(7)]*coeffs[3];

// здесь восстановление из 2->4
res2[0] = res1[0]+res1[2];
res2[1] = res1[1]+res1[3];
res2[2] = res1[0]-res1[2];
res2[3] = res1[1]-res1[3];
res2[4] = res1[4]+res1[6];
res2[5] = res1[5]+res1[7];
res2[6] = res1[4]-res1[6];
res2[7] = res1[5]-res1[7];

// здесь восстановление из 4->8
res1[0] = res2[0]+res2[4];
res1[1] = res2[1]+res2[5];
res1[2] = res2[2]+res2[6];
res1[3] = res2[3]+res2[7];
res1[4] = res2[0]-res2[4];
res1[5] = res2[1]-res2[5];
res1[6] = res2[2]-res2[6];
res1[7] = res2[3]-res2[7];

//а это палки спектра
float m;
m=res1[0].mod();
m=res1[1].mod();
m=res1[2].mod();
m=res1[3].mod();
m=res1[4].mod();
m=res1[5].mod();
m=res1[6].mod();
m=res1[7].mod();
return;

все просто и тем не менее не работает, может кто-то прояснит мне
этот вопрос???


Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru