Niedawno zdałem sobie sprawę, że FFT nie są idealne. Oznacza to, że jeśli wezmę sygnał, a następnie wezmę FFT, a następnie zrobię odwrotną FFT, wynikowy wynik nie jest dokładnie taki sam jak na wejściu. Oto zdjęcie pokazujące, co mam na myśli:
Myślę, że obraz jest dość oczywisty. Sygnał IFFT jest tylko odwrotną transformacją „widma FFT”, a wykres „Różnica” jest różnicą między sygnałem IFFT a sygnałem oryginalnym ( ).
Oczywiście są pewne artefakty, choć są one naprawdę małe. Chciałbym wiedzieć, dlaczego występują one w pierwszej kolejności. Czy to z powodu skończonego okna transformacji Fouriera? A może z powodu czegoś w algorytmie FFT?
Uwaga: ten wykres ma 32 punkty, ale sprawdziłem z 100, 1000, 1024, 256 i 64 punktami i zawsze jest ta pozostałość o różnej wielkości ( lub ).
źródło
Odpowiedzi:
Różnice, które widzisz, wynikają z błędów numerycznych w formacie zmiennoprzecinkowym. Wszystkie operacje potrzebne do wykonania FFT i odwrotnego FFT można wykonać tylko ze skończoną precyzją, a wynik tej skończonej dokładności pokazany jest na prawym dolnym wykresie.
źródło
Zasadniczo liczby nie można przedstawić dokładnie w formie cyfrowej. Wystąpił błąd. Jeśli jesteś w Matlabie, możesz napisać eps na polecenie, to da ci liczbę.
Błąd, który widzisz na wykresie, mieści się w zakresie zwracanym przez eps (to znaczy 2 ^ (- 52)).
Nawet jeśli spodziewasz się rzeczywistych wartości na wyjściu z IFFT, możesz zauważyć, że twoja urojona część nie jest dokładnie równa zero. Ta sama rzecz.
źródło