2009년 5월 23일 토요일

Present Like Steve Jobs

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()를 사용하면 된다.

데이터 복사해야 되는 줄 모르고 포인터 값만 바꿔 썼다가 프로그램 에러났다. 왜 안되는 줄 몰라서 한참 고생했네..