FFT의 유물


10

나는 최근에 FFT가 완벽하지 않다는 것을 깨달았습니다. 신호를 가져 와서 FFT로 가져온 다음 역 FFT를 수행하면 결과 출력이 입력과 정확히 동일하지 않습니다. 여기에 내가 무슨 뜻인지 보여주는 이미지가 있습니다.FFT가 항상 작동하지는 않습니다

나는 이미지가 상당히 설명 적이라고 생각합니다. IFFT 신호는 "FFT 스펙트럼"의 역변환이며 "차이"플롯은 IFFT 신호와 원래 신호 ( )의 차이입니다.IFFT-원본

비록 아주 작지만 분명히 일부 인공물이 있습니다. 나는 왜 그들이 처음에 발생하는지 알고 싶습니다. 푸리에 변환의 유한 창 때문입니까? 아니면 FFT 알고리즘에 문제가 있습니까?

참고 : 이 그림에는 32 점이 있지만 100, 1000, 1024, 256 및 64 점으로 확인했으며 비슷한 크기의 차이 ( 또는 ).10161015


4
모든 정밀 정밀도 수학에는 FFT뿐만 아니라 이러한 오류가 있습니다.
endolith

답변:


16

표시되는 차이점은 부동 소수점 형식의 숫자 오류로 인한 것입니다. FFT 및 역 FFT를 수행하는 데 필요한 모든 작업은 유한 정밀도로만 수행 할 수 있으며이 유한 정확도의 결과를 오른쪽 아래 플롯에 표시했습니다.


이 오류가 부동 소수점 정밀도 이상으로 폭발 할 수있는 상황이 있습니까?
Kitchi

6
@MattL의 대답을 확인하기 위해 이며 배정 밀도 부동 소수점 숫자에는 53 비트의 가수가 있습니다. 따라서 반올림 오류는 마지막 2 비트에 있습니다. 그것은 얻을만큼 좋은 것입니다. 1016253
방황 논리

@Kitchi : 예. 부동 소수점 형식에서도 숫자 오류가 큰 문제가 될 수있는 상황이 많이 있습니다. 행렬 반전은 많은 예 중 하나입니다. 그것은 모두 조건 번호 와 관련이 있습니다 .
Matt L.

1
@MattL. - 훌륭한! 참조 주셔서 감사합니다.
Kitchi

7

일반적으로 숫자는 디지털 형식으로 정확하게 표현 될 수 없습니다. 오류가 발생했습니다. Matlab에 있으면 명령에 eps를 쓸 수 있으며 숫자를 제공합니다.

인수가없는 EPS는 1.0에서 다음으로 큰 배정 밀도 숫자까지의 거리, 즉 EPS = 2 ^ (-52)입니다.

플롯에 표시되는 오류는 eps로 반환되는 범위에 있습니다 (즉, 2 ^ (-52)).

IFFT 출력에서 ​​실제 값을 기대하더라도 가상 부분이 정확히 0이 아닌 것을 알 수 있습니다. 같은 것.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.