1
먼저 나쁜 영어에 사과드립니다 ...FFTW3 역으로 작동하지 않습니다
여기 내 문제가 있습니다. 나는 간단한 입력 신호와 함께 FFTW3 라이브러리를 테스트 중이다. 그런 다음 FFT를 계산하고 좋은 결과를 얻습니다. 주파수 0의 신호 만 0 이외의 모든 것은 0입니다.
그런 다음 역방향 FFT로 입력을 다시 가져오고 싶지만 작동하지 않습니다. 여기 내 코드는 다음과 같습니다.
fftw_complex* imgIn;
fftw_complex* imgIn2;
fftw_complex* imgOut;
fftw_plan plan;
int taille = 100;
int i;
//Allocation des entrées et sorties
imgIn = fftw_malloc(sizeof(fftw_complex)*taille);
imgIn2 = fftw_malloc(sizeof(fftw_complex)*taille);
imgOut = fftw_malloc(sizeof(fftw_complex)*taille);
//Remplissage des données d'entrées pour le calcul de la FFT
for(i = 0 ; i < taille ; i++){
imgIn[i][0] = 1.0;
imgIn[i][1] = 0.0;
}
//Plan d'execution
plan = fftw_plan_dft_2d(taille/10, taille/10, imgIn, imgOut, FFTW_FORWARD, FFTW_ESTIMATE);
//Execute la FFT
fftw_execute(plan);
//Inverse
plan = fftw_plan_dft_2d(taille/10, taille/10, imgOut, imgIn2, FFTW_BACKWARD, FFTW_ESTIMATE);
for(i = 0 ; i < taille ; i++){
printf("%d : %g\n%d : %g\n", i, imgIn2[i][0], i, imgIn2[i][1]);
}
정상적인 FFT를 수행 한 다음 되돌릴 수 있습니다. 문제는 내 출력 imgIn2가 1과 0 대신에 0으로 가득 차 있다는 것입니다 ...
내 코드에 어떤 문제가 있습니까?
감사합니다.
두 번째 계획을 실행하지 않았습니까? –
또한 FFTW에서 forward를 수행하고 reverse를 수행하면 정규화의 일부가 생략되고 변환 후 단계로 수행해야 할 수 있으므로 일반적으로 배율 조정 결과가 남습니다. FFTW 문서에 자세히 설명되어 있습니다 ... – twalberg
@OliCharlesworth : 답변으로 게시하지 않으면 귀하의 평판을 "훔쳐"당신에게 공과를 가르쳐 줄 것입니다. :-) –