지금 영상처리 fft소스 분석중인데요 2차원 fft에서 일차원 fft함수를 호출하는데 이해가 되질 않네요..
2차원 fft함수내부는 그래도 어느정도 알것는데...
아래보시는 소스가 일차원fft함수 인데요
이거 분석??아니 어느정도라도좀 가르처 주세요..이해가 되질 않네요..
밑에 소스에서 complex 로 선언된것은 실수부와 허수부를 가진 구조체로 만들어 놓은 변수이구요
topow함수는 지수승을 반환하는 함수입니다
cpx_complx함수는 실수값 및 허수값으로부터 복소수 값을 생성해서 린턴하는 함수구요
cpx_add 는 두복소수에 대한 덧셈연산의 결과를 리턴하는 함수
cpx_div는 두복소수에 대한 나눗셈 연산의 결과를 리턴하는 함수
cpx_conj는 켤레복소수를 리턴하는 함수
cpx_mult는 두 복소수에 대한 곱셈연산의 결과를 리턴하는 함수
cpx_sun는 두 복소수에 대한 뺄셈 연산의 결과를 리턴하는 함수
입니다...
아래 식은 일차원 fft함수라는데 이해가 되질 않네요...다 모르시더라도 아는데라도 해석 부탁드립니다
void fft(complex *x, int n, int id)
{
    complex u,w,t;
    int le,le1,nm1,nv2;
    int i,j,l,k,m,ip;
        if(n!=ToPow2(n)){
                printf("\n\t[] not 2's power !!");
                return;
        }
    m = (int)(log((double)n)/log(2.0)+0.1);
    nm1 = (n-1);
    nv2 = (n>>1);
    for (i=j=0; i < nm1; ++i) {
        if (i < j) {
            t = *(x+j);
            *(x+j) = *(x+i);
            *(x+i) = t;
        }            
        k = nv2;
        while (k <= j) {
            j -= k;
            k >>= 1;
        } 
        j += k;
    }
    le = 1;
    for (l=1; l <= m; ++l) {
        le1 = le;
        le = (le1<<1);
        u = CPX_cmplx(1.0,0.0);
        w = CPX_cmplx(cos(PI/(double)le1),-sin(PI/(double)le1));
        if (id != 0) w = CPX_conj(w);
        for (j=0; j < le1; ++j) {
            for (i=j; i < n; i += le) {
                ip = i + le1;
                t = CPX_mult(*(x+ip),u);
                *(x+ip) = CPX_sub(*(x+i),t);
                *(x+i) = CPX_add(*(x+i),t);
            }
            u = CPX_mult(u,w);
        }
    }
    if (id != 0) {
        u = CPX_cmplx((double)n,0.);
        for (i=0; i < n; ++i)
            *(x+i) = CPX_div(*(x+i),u);
    }
}