2012-01-09 4 views
5

matlab에서 fft를했고 java에서 jtransforms 라이브러리를 사용했지만 결과가 약간 다릅니다.fft matlab 및 java

Matlab results: 
-0.0530528652679544 
-0.00775535711930750 + 0.0281791646147104i 
-0.0304104457750988 - 0.209776156064443i 
0.266945753193636 + 0.200338044445226i 

Jtransforms results: 
-0.05305448436232618 
-0.007755593801247046 + 0.028180024600812384 
-0.03041137385657606 -0.20978255812004887 
0.26695389998013486 + 0.20034415846373468 

결과가 다릅니 까 아니면 Matlab에서 값을 반올림하고 있습니까?

+1

약간 이상 차이가 있습니다. 하나의 라이브러리가 32 비트 부동 소수점을 사용하고 다른 하나는 64 비트를 사용합니까? –

답변

7

FFT를 수행 할 때 several different algorithms이 있습니다. 원칙적으로 그들은 모두 동등하지만 실제로는 floating-point arithmetic과 결합하면 결과가 약간 다를 것입니다. 기본 FFT 알고리즘이 같더라도 합계의 순서와 같은 구현 세부 사항으로 인해 차이가 발생할 수 있습니다. 최적화 플래그에 따라 특별한 작업을하지 않더라도 많은 modern processors do this입니다.

결과에서 차이는 약 5 번째 유효 숫자입니다. 합리적으로 작은 차이입니다. 결과의 역변환 (Matlab과 JTransforms IFT를 모두 사용)을 시도해 볼 수 있습니다. 변환 중 하나가 분명히 더 정확한지 확인하십시오.

1

차이점은 배정 밀도 부동 소수점 산술을위한 일반적인 숫자 정밀도 문제보다 큰 것으로 나타납니다. FFT 중 하나가 짧은 부동 소수점 연산 또는 데이터를 대신 사용하는 것처럼 보입니다. 결과를 두 개로 인쇄하면 (이렇게하면 여분의 모든 숫자가 헛되게됩니다).

+0

이 경우에는 그렇지 않을 수도 있지만 FPA 정밀도의 경우 "정상적인"것은 없습니다. 특히 누산기/적분기 (FFT 알고리즘에는 필연적으로 포함)에서 반올림 오류가 거의 무한히 누적 될 수 있습니다. –