Witam,
mam pytanie chyba bardziej matematyczne niż programistyczne, ale jednak dotyczy mojego kodu w C++
Napisałem sobie program do liczenia DFT i jestem w trakcie pisania programu do liczenia FFT.
Ale już myślę, a nawet częściowo zaimplementowalem, odwrotność tych funkcji, czyli IDFT oraz IFFT.
I dla zwykłych sinusoid (o pełnym przebiegu) fajnie to wychodzi, wszystko wydaje się cacy. Ale kiedy mam sinusoidy o niepełnym przebiegu, to normalne, że zaczynają się przecieki, wtedy wyniki mojej IDFT wyglądają dziwnie. Próbowałem oczywiście okienkowania - standardowego Hanna - ale to nic nie daje.
Oczywiscie przy okienkowaniu wyniki DFT są super (mówię o spectrum), wszystko git, ale już przy inwersji zaczyna wszystko się sypać. I dla mnie to jest nawet logiczne, bo przecież stosując okienkowanie, do DFT wysyłamy tak naprawdę lekko okrojony materiał (na początku próbkowania i na końcu), więc skoro podajemy DFT okrojony materiał, to i do inwersji wchodzi okrojony. A zatem zastanawiam się jak go przed IDFT "od okroić" :)
Czytałem, że się stosuje nakładanie badanych okienek (overlaping) jeszcze nie wiem jak to zrobic, ale wydaje mi się, że kumam ideę. Jednak mam wrażenie, że u mnie mimo wszystko chodzi o coś innego, gdyż:
jak okroję materiał za pomocą okienka Hanna to wyciszam materiał na poczatku i na końcu próbkowania - dla uproszczenia przyjmijmy, że jest to ksztalt paraboli z ramionami w dół.
Jednak po inwersji, mój sygnal wygląda odwrotnie, tzn. na początku i na końcu mam sygnał o najwyższej amplitudzie, a w srodku jest wyciszony - takie odwrotne okienko Hanna (parabola z ramionami do góry).
Jak na to zaradzic? Jak "od okroić" materiał przed poddaniem go inversji? A moze to zrobic juz po inwersji, ale jak ?