2009년 5월 23일 토요일
DFT C/C++ code
void DFT(int nData, double *xr, double *xi, int forward)
{
int i, j;
double w;
double wr, wi;
double *Xr, *Xi;
Xr = new double[nData];
Xi = new double[nData];
for(i=0; i<nData; i++)
{
Xr[i] = 0;
Xi[i] = 0;
for(j=0; j<nData; j++)
{
w = 2 * PI * j * i / nData;
if(forward)
w = -w;
wr = cos(w);
wi = sin(w);
Xr[i] += wr * xr[j] - wi * xi[j];
Xi[i] += wr * xi[j] + wi * xr[j];
}
Xr[i] /= sqrt(nData);
Xi[i] /= sqrt(nData);
}
// copy back the data
for(i=0; i<nData; i++)
{
xr[i] = Xr[i];
xi[i] = Xi[i];
}
delete[] Xr;
delete[] Xi;
}
C에서는 new 대신 (double *) malloc(nData * sizeof(double))을,
delete[] 대신 free()를 사용하면 된다.
데이터 복사해야 되는 줄 모르고 포인터 값만 바꿔 썼다가 프로그램 에러났다. 왜 안되는 줄 몰라서 한참 고생했네..
2009년 5월 8일 금요일
피드 구독하기:
덧글 (Atom)