2017-11-09 1 views
0

fftw 라이브러리 (link to FFTW documentation)를 사용하여 DFT를 구현하려고합니다.fftw 라이브러리를 사용하는 동안 C++ 코드가 실행되지 않습니다.

모든 라이브러리가 올바르게 링크되었으며 프로젝트가 올바르게 구축되었습니다. 그러나 코드는 fftw 라이브러리의 모든 함수가 호출되는 순간 실행되지 않습니다.

#include <iostream> 
#include <fftw3.h> 

using namespace std; 

int main() { 

    int vectorSize = 100; 
    cout << vectorSize << endl; 

    fftw_complex vec[vectorSize], vecOut[vectorSize]; 

    for(int i = 0; i < vectorSize; i++) { 
     vec[i][0] = i; 
     vec[i][1] = 1; 
    } 

    // Call to function to create an FFT plan 
    fftw_plan plan = fftw_plan_dft_1d(vectorSize, vec, vecOut, FFTW_FORWARD, FFTW_ESTIMATE); 

    cout << "test" << endl; 

    return 0; 
} 

fftw_plan이 인스턴스화 된 줄을 주석으로 작성하면 코드는 100과 "test"를 예상대로 출력합니다. 내가 말할 수있는 한 빌드에는 아무런 문제가 없습니다. 비슷한 문제를 설명하는 게시물을 실제로 찾을 수 없었습니다.

저는 MinGW와 32 비트 버전의 미리 컴파일 된 바이너리를 윈도우 (download link)에서 사용할 수있는 이클립스에서 실행하고 있습니다.

은 어떤 도움이 정말 감사하겠습니다 :)

+0

디버거에서 _Pause_를 누르면 어떻게됩니까? 코드가 여전히 실행 중이거나'fftw_plan_dft_1d' 호출을 통해 충돌합니다. 다른 fftw 호출을 시도해 보셨습니까? 더 간단한 호출입니까? [찾은 문서] (http://www.fftw.org/fftw3_doc/Complex-One_002dDimensional-DFTs.html)는'fftw_malloc'에 대한 호출을 제안하므로'fftw_complex'를 스택에 생성 할 수 있는지 확실하지 않습니다. 문제를 일으키는 지 여부. 작동하는지 확인하기 위해 더 간단한 함수 호출을 시도하는 것이 좋습니다. – Tas

+0

디버거가 종료되어 종료되고 코드에 넣은 중단 점에 도달하지 않습니다. –

+0

코드를 다시 반복하기 만하면 코드 자체가 "충돌"하지 않습니다. 그것은 아무것도 출력하지 않습니다, 나는 그것이 백그라운드에서 작동하는지 확실하지 않습니다. (오류가 없기 때문에 내 추측입니다) –

답변

0

FFTW는 16 바이트 정렬로 입력/출력을 필요로한다. 스택에 배열을 선언하면 이것이 보장 될 수 없습니다. 따라서 fftw_malloc이나 다른 함수를 호출하여 배열을 할당해야합니다. 또한 코드는 계획 만 작성하지만 실행하지 않으므로 입력 데이터에서 fft가 수행되지 않습니다.

+0

나는 fft 알고리즘을 끝까지 실행하지 않는다는 것을 알고 있습니다. 이 스 니펫을 업로드 한 이유는 라이브러리 (fftw_malloc() 포함)에 대한 호출이 발생해도 출력이 생성되지 않는 결과를 보여주기 때문입니다. –

+0

호기심입니다. VS2017을 사용하여 코드를 컴파일하고 링크하면 정상적으로 실행됩니다. mingw 설치 또는 lib 생성에 문제가 있습니까? – kjpus

+0

그래, 나는 윙윙 어 버전이나 다른 것들과 충돌 할 수도 있다고 생각했다. 고마워, 그래도 ... 나는 Visual Studio로 작업 해 볼 생각이다. :) –

관련 문제