FFT

FFT

Közepes

Bevezetés

Fourier-transzformáció

A Fourier-transzformáció gyakran felbukkan a fizikában és a matematikában, ami azt is jelenti, hogy a mindennapi életben is sokfelé használják.

Röviden, a Fourier-transzformáció egy bemeneti jelet, amely gyakran idő- vagy tértartományban van, átalakít a frekvenciatartományba. Konkrétabban, ha a bemeneti jel különböző frekvenciák keverékéből (azaz szuperpozíciójából) áll, a transzformáció különválasztja az egyes frekvenciákat, és megmutatja a relatív erősségüket.

Ez a transzformációt a jelfeldolgozás (például szűrés, tömörítés stb.) és számos adattudományi alkalmazás egyik fő eszközévé teszi. Ezért talán szélesebb körben használják, mint azt elsőre gondolnánk, ami egyben kiváló példa is arra, ahol a képzetes számok nélkülözhetetlenné válnak, tekintve, hogy a Fourier-transzformáció kimenete általában komplex szám.

Bár a Fourier-transzformációnak van integrálos alakja, mi digitálisak vagyunk, ezért a diszkrét változat érdekel minket. A transzformáció levezetése meghaladja ennek a feladatnak a kereteit, de az előremenő diszkrét transzformáció (a frekvenciatartományba) a következő alakot ölti: Xₖ = Σ xₙ * ℯ^(-2iπk * n/N) Itt az összegzés n felett fut, N a minták száma, k a frekvencia, i a képzetes egység, xₙ pedig egyetlen minta.

Gyors Fourier-transzformáció

Bár rendkívül hasznos, a Fourier-transzformáció naiv megvalósítása kissé lassú (O(n²)). A gyors Fourier-transzformáció (FFT) egy olyan algoritmus, amely jelentősen felgyorsítja ezt. Ez általában egy oszd meg és uralkodj stratégián keresztül történik, amely kihasználja a formulában rejlő szimmetriákat, és aszimptotikusan O(Nlog(N)) komplexitást eredményez. Ez a gyorsítás nagymértékben javítja a transzformáció gyakorlati használhatóságát és a rá alkalmas alkalmazások körét.

Utasítások

A barátod hangmérnök, és megkért, hogy segíts neki megírni egy Fourier-transzformációt egy saját fejlesztésű szoftverhez, amit éppen összeállít. Mivel ezt szeretnéd jól megcsinálni, először a diszkrét Fourier-transzformációt (DFT) fogod implementálni a maga teljes naiv pompájában. Ezután ezzel tesztelheted majd a végső célod, a gyors Fourier-transzformáció (FFT) helyességét.

1. DFT

Implementáld a DFT-t.

Vedd észre, hogy ez O(n²) bonyolultságú, mert egy k-hoz végig kell menned az összes n-en, és szeretnéd, hogy az Xₖ vektor ugyanolyan hosszú legyen, mint az Xₙ jelvektor (hogy invertálható legyen), tehát n alkalommal n ponton O(n²).

2. FFT

Implementáld az FFT-t.

Note

Rengeteg forrás áll rendelkezésre, ha részletesebben szeretnél tájékozódni ennek az algoritmusnak a sajátosságairól, úgyhogy nyugodtan kutass egy kicsit.

Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Julia Exercism

Készen állsz elkezdeni a(z) FFT feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Julia nyelvet 35 fogalom128 feladat segítségével, valódi emberi mentorálással, mindez ingyen.