fftw 2d 예제

이전과 마찬가지로 #include 변환에 대한 계획을 수립하고, fftwnd_plan 형식의 이 시간: 지혜는 누적되며 FFTW에서 내부적으로 관리하는 글로벌 개인 데이터 구조에 저장됩니다. 필요한 저장 공간은 지혜가 생성 된 크기의 로거에 비례하여 최소한의. 지혜는 fftw_forget_wisdom()에 대한 호출로 잊혀질 수 있습니다(그리고 관련 메모리가 해제됨). 그렇지 않으면 프로그램이 종료될 때까지 기억됩니다. 또한 fftw_export_wisdom를 사용하여 파일, 문자열 또는 다른 매체로 내보낼 수 있으며 fftw_import_wisdom를 사용하여 프로그램(또는 다른 프로그램)을 후속 실행하는 동안 복원할 수 있습니다(이러한 함수는 아래에 설명되어 있음). 이 섹션에서는 다차원 배열이 저장되는 형식에 대해 설명합니다. 이 주제에 대한 자세한 설명은 사용자 간에 혼동의 원인이며 여러 가지 형식이 일반적이기 때문에 필요하다고 생각했습니다. 아래 주석은 fftwnd를 참조하지만 rfftwnd 루틴에도 적용됩니다. FFTW_ESTIMATE 계획으로 만든 계획은 지혜를 사용할 수 있지만 생성할 수는 없습니다. FFTW_MEASURE 계획만이 실제로 지혜를 생성합니다. 또한 계획은 동일한 방향과 플래그로 만든 계획에서 생성된 지혜만 사용할 수 있습니다. 예를 들어 크기 42 FFTW_BACKWARD 변환은 크기 42 FFTW_FORWARD 변환에서 생성된 지혜를 사용하지 않습니다.

이 규칙의 유일한 예외는 FFTW_ESTIMATE 계획이 FFTW_MEASURE 계획의 지혜를 사용할 수 있다는 것입니다. 다음은 파일에서 지혜를 읽고 계획이 만들어지고 (더 많은 지혜를 생성 할 수 있음) 지혜를 문자열로 내보내고 stdout에 인쇄되는 간단한 예입니다. 계획의 계산은 복잡한 변환의 계산과 유사합니다. 먼저 를 #include. 그런 다음 호출하여 계획(rfftw_plan 유형)을 만듭니다. 의 배열은 수정되지 않습니다. 사용자는 FFTW가 fftw_create_plan의 dir 매개 변수에 의해 지수가 부여되는 비정규화된 DFT를 계산한다는 점에 유의해야 합니다. 따라서 앞으로 를 계산한 다음 뒤로 변환(또는 그 반대)을 수행하면 원래 배열이 n으로 배율이 조정됩니다. DFT의 정의에 대한 FFTW 실제로 계산하는 섹션(fftw_real은 FFTW가 컴파일된 부동 점 형식의 별칭입니다.) 계획의 방향에 따라 입력 또는 출력 배열이 반만이며 다음과 같은 형식으로 저장됩니다: 1D 복합 컨볼루션 예제 1D Hermitian 컨볼루션 예제를 만든 후, 계획은 임의의 수의 변환에 사용될 수 있으며, rfftw_destroy_plan(계획)을 호출하여 완료될 때 할당처리됩니다. 각 실제 배열을 fftw_complex 포인터로 캐스팅하여 인시던트 변환의 복잡한 출력에 액세스합니다. 이것은 “플랫” 포인터이기 때문에 컨볼루션 제품 루프에서 행 주요 인덱스 ij를 명시적으로 계산해야 합니다. 컨볼루션을 정규화하려면 배율 계수를 곱해야 합니다.

루프의 한계와 다양한 배열의 차원을 확인합니다. 변환 자체는 입력 및 출력 배열과 함께 계획을 fftw_one에 전달하여 계산됩니다: FFTW는 임의의 수의 차원(순위)의 변환을 계산할 수도 있습니다. 구문은 1차원 변환의 경우 `fftw_`가 `fftwnd_`로 대체되어 `fftwnd_`(“N차원의 fftw”를 의미합니다)와 유사합니다. 2차원 및 3차원 변환의 경우 FFTWND는 순위와 크기 배열을 간접적으로 전달하지 않고 각 차원의 크기를 직접 허용하는 대체 루틴을 제공합니다. 그렇지 않으면 fftwnd_create_plan과 동일하며 때로는 더 편리합니다. 즉.

Este post foi publicado em Sem categoria em por .