2013-04-17 2 views
2

FFTW를 사용한 2D FFT/IFFT 구현.fftw 크기 및 위상 배열에서 C++ 역 2D FFT

현재 SFML을 사용하여 이미지를로드했으며 그 크기와 위상 구성 요소를 fftw_plan_dft_2d으로 분해했습니다.

이것은 괜찮 았고 알려진 작동 소프트웨어에 대한 나의 크기 이미지를 확인했으며 그 결과는 정확합니다. (Forward FFT)

ifft는 직접 FFT (Inverse FFT)에서 직접 역 2D FFT를 수행하여 첫 번째 FFT의 실수 및 허수 출력을 사용하여 작업하고 있음을 확인했습니다. 어딘가에 있지만 다른 날입니다)

IFFT를 수행하기 위해 크기와 위상을 재결합하여 실제 부품과 복잡한 부품을 형성해야하는 방식에 더 관심이 있습니다.

Google은 MATLAB을 많이 반환합니다. 전혀 이해가되지 않아서 도움이되지 않습니다.

사이드 노트 : 수학은 내 강한 편이 아닙니다. 그래서 내가 조금 고생하고 있다고 생각합니다. 가능하다면 나는 10 살이라고 설명해주세요!

+0

"IFFT를 수행하기 위해 실제 부품과 복잡한 부품을 형성하기 위해 크기와 위상을 재결합해야하는 방식은 무엇을 의미합니까?" FFTW의 구현을 사용하는 대신 손으로이 작업을 수행한다고 말하고 있습니까? (왜?) 어떤 기능을 사용해야할지 몰라요? 먼저 그들을 조작하고 FFTW의 IFFT를 사용하겠습니까? (FFT는 DFT에 대한 빠른 알고리즘 일 뿐이므로 FFT보다 간단하게 설명 할 수있는 I/DFT에 대한 Google 수식을 사용할 수 있습니다 (예 : [here] (http://www.engineeringproductivitytools.com/stuff))./T0001/PT01.HTM). – metal

+0

필자는 역 FFT에 대해 실제 값과 복소수 값이 필요하다고 생각했지만, 크기와 위상 값은 모두 같았습니다. 바울의 대답은 제가 찾고 있던 것입니다. 실제와 가상의 구성 요소를 크기와 단계에서 다시 얻는 방법입니다. – finlaybob

답변

3

먼저 당신은 다시 복잡한 (가상 현실 +)로 크기와 위상 값을 변환 :

re = mag * cos(phi); 
im = mag * sin(phi); 

이 그럼 당신은 이러한 복잡한 값에 대한 역 FFT을한다.

+1

필자는 루프에서 사용하여이 작업을했습니다. : [input [i] [0] = fftMag [i] * cos (fftPhase [i])'및'input [i] [1] = fftMag [i] * sin (fftPhase [i])' 답변 해 주셔서 감사합니다. – finlaybob

+1

예 - 그럴 것 같습니다. –