소스 10-2는 이산 푸리에 변환 수식을 그대로 C/C++ 형태로 변환한 DFT1d 함수의 정의를 보여준다. 이 함수는 IppFourier.cpp 파일에 작성하도록 하자.

    소스 10-2 1차원 데이터에 대한 DFT 구현 함수(IppFourier.cpp)
    #include "StdAfx.h"
    #include "IppFourier.h"
    
    #include  <math.h>
    
    const double PI = 3.14159265358979323846;
    
    void DFT1d(double* re, double* im, int N, int dir)
    {
        double* tr = new double[N];
        double* ti = new double[N];
        memcpy(tr, re, sizeof(double) * N);
        memcpy(ti, im, sizeof(double) * N);
    
        register int i, x;
        double sum_re, sum_im, temp;
    
        for (i = 0; i < N; i++)
        {
            sum_re = sum_im = 0;
      
            for (x = 0; x < N; x++)
            {
                temp = 2 * dir * PI * ((double)i * x / N);
    
                sum_re += (tr[x] * cos(temp) + ti[x] * sin(temp));
                sum_im += (ti[x] * cos(temp) - tr[x] * sin(temp));
            }
    
            re[i] = sum_re;
            im[i] = sum_im;
        }
      
        if (dir == -1) // IDFT
        {
            for (i = 0; i < N; i++)
            {
                re[i] /= (double)N;
                im[i] /= (double)N;
            }
        }
    
        delete[] tr;
        delete[] ti;
    }
    
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.