2017-01-21 2 views
1

C++에서이 MATLAB 라인 코드와 정확히 일치하는 FFTW는 무엇입니까?FFTW 라이브러리에서 matlab의 FFT 및 FFTShift C++

fftshift(fft(x,4096))); 

참고 : X는 4096 개의 이중 데이터 배열입니다.

는 지금은 그것은 MATLAB에서 FFT 기능의 단지와 동일 FFT

int n = 4096 
fftw_complex *x; 
fftw_complex *y; 
x = (fftw_complex *)fftw_malloc(sizeof(fftw_complex) * n); 
y = (fftw_complex *)fftw_malloc(sizeof(fftw_complex) * n); 

for (int i=0; i<n; i++) 
{ 
     x[i][REAL] = MyDoubleData[i]; 
     x[i][IMAG] = 0; 
} 

fftw_plan plan = fftw_plan_dft_1d(n, x, y, FFTW_FORWARD, FFTW_ESTIMATE); 

fftw_execute(plan); 
fftw_destroy_plan(plan); 
fftw_cleanup(); 

을 계산하기 위해이 C++ 코드의 라인과 FFTW를 사용합니다. FFTW 라이브러리에 FFTShift에 해당하는 기능이 있습니까?

답변

0

제공 한 FFTW 함수 호출은 fft(x,4096)과 같습니다. x가 실제라면, matlab은 공액 대칭 FFT를 제공합니다. FFTW로이 작업을 수행하려면 r2c and c2r functions (실수 -> 복합물/복합 - 실제)을 사용해야합니다.

직접 이동해야합니다. 당신은 직접적인 대체 할 수있는 (성능 저하하지만, 직관적이어야 함)

for (int i=0; i<n; i++) 
{ 
    fftw_complex tmp; 
    int src = i; 
    int dst = (i + n/2 - 1) % n; 

    tmp=y[src]; 
    y[src]=x[dst]; 
    y[dst]=tmp; 
} 

는 또한 몇 방어 적이기의 (및/또는 memmove를의) 또는

+0

modify your input data 감사합니다, 내가 가진 내 대답을 사용합니다. 고마워. –

+0

fftshift (fft (x))와 같지 않습니다. fft (x)와 동일합니다. – Elias