[an error occurred while processing this directive]
|
не могу разобраться с FFT, вроде бы все теоретически ясно, но
хз. - что-то не работает, вот даже код:
int size = 8;
CComplex* src = new CComplex[size];
//здеся входные данные формируется - просто cos из 8-ми точек. //это коэффициенты CComplex* coeffs = new CComplex[4]; CComplex* res1 = new CComplex[size]; // здесь восстановление из 2->4 // здесь восстановление из 4->8 //а это палки спектра все просто и тем не менее не работает, может кто-то прояснит мне
E-mail:
info@telesys.ru
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;
}
*/
coeffs[0] = W(2,0);
coeffs[1] = W(2,0);
coeffs[2] = W(2,0);
coeffs[3] = W(2,1);
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];
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];
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;
этот вопрос???
Ответы