Fourierova transformace srozumitelně

Tento článek by vám měl umožnit lépe "vidět" do Fourierovy transformace, vysvětlit základní principy a několik dalších důležitých detailů, které se jinde příliš neříkají. Článek bude opět trochu neformální, ale po jeho přečtení by vám měly být formality více srozumitelné.

Předpoklady

Než začnete číst, měli byste vědět, co jsou komplexní čísla, goniometrické funkce (sinus, kosinus) a integrál.

Úvod

Předpokládám, že jste o Fourierově transformaci již něco slyšeli. Většinou se ukazuje, jak součet sinusoid s různou periodou a amplitudou vytvoří "obdélníkovou" či jinou funkci. Pak se z ničeho nic vyloupnou kosíny, komplexní čísla a vražedný zápis $e^i$ (to mě odrovnalo, protože jsem neuměl mocnit komplexními čísly). V tomto článku se na věc podíváme úplně jinak. Jdeme na to.

Představme si kolečko s průměrem $r_0$, které má vpravo od středu na okraji puntík(bod), má počáteční úhel $\alpha_0$ a otáčí se rychlostí $s_0$. Tento puntík kreslí obrázek kružnice.

Představme si, že na puntíku tohoto kolečka je další kolečko s průměrem $r_1$ natočené pod úhlem $\alpha_1$, které se otáčí rychlosti $s_1$. Tato soustava dvou koleček kreslí už mnohem zajímavější tvar.

Představme si, že na puntíku posledního kolečka můžeme mít další kolečko, na něm další a tak dál. Koleček může být až nespočetně mnoho. Co všechno lze takovýmito soustavami koleček nakreslit?

Věta: Pomocí soustav koleček lze nakreslit libovolnou křivku.

Můžeme tedy nakreslit nejen kružnici, ale třeba i čtverec, trojúhelník nebo přímku. Na tomto videu soustava koleček kreslí Homera Simpsona. Všimněme si také, že každé kolečko pouze "přidává posun" od puntíku předchozího kolečka. Kolečka v soustavě můžeme libovolně prohazovat, nezáleží na jejich pořadí (jelikož sčítání je komutativní).

Věta: Pokud dvě kolečka v soustavě mají stejnou rychlost, lze je "spojit" do jediného kolečka (se stejnou rychlostí, ale novým poloměrem a úhlem).

Máme tedy křivku (spojitou funkci $f: \mathbb{R} \rightarrow \mathbb{R}^2$), která pro každý parametr $t$ vrátí pozici (x,y) - bod křivky. Pro ni chceme najít soustavu koleček, která bude kreslit danou křivku. Soustavu můžeme reprezentovat také jako funkci $g$, která pro každou rychlost $s$ vrátí dvojici (r,$\alpha$) - poloměr a úhel kolečka s rychlosti $s$ v dané soustavě (např. když kolečko s danou rychlostí není potřeba, $g$ mu dá poloměr 0). Teď se nadechněte a připravte se na šokující odhalení. Operaci, která pro danou křivku $f$ najde správnou soustavu koleček $g$, se říká Fourierova transformace.

Příklad

Mějme křivku, která má jediný bod (0,0), tedy $f(t) = (0,0)$. Jaká je její Fourierova transformace? Stačí dát všem kolečkům poloměr a úhel 0, tedy $g(s) = (0,0)$.

Mějme křivku, kružnici, která má poloměr 0.6 a střed v bodě (4,3), tedy $f(t) = (4+0.6\cdot \cos(t), 3+0.6\cdot \sin(t))$. Jaká je její Fourierova transformace? Kolečkem s rychlostí 0 můžeme celou věc někam posouvat, nějakým jiným kolečkem můžeme nakreslit kružnici. Tedy třeba:

  • $g(0) = (5, 37.64°)$
  • $g(1) = (0.6, 0)$
  • $g(s) = (0,0)$ jinak

Komplexní čísla

Řekli jsme si, co je Fourierova transformace. K jedné funkci hledá jinou funkci. Funkce na jedné straně pracuje se souřadnicemi x, y, zatímco funkce na druhé straně pracuje s poloměry a úhly. Bylo by dobré to trochu sjednotit. Navíc, pro křivku není soustava koleček vždy jednoznačná. Pokud k počátečnímu úhlu nějakého kolečka přičteme 360°, nová soustava bude stále kreslit stejnou křivku.

Místo 2D souřadnic na levé straně pracujme s komplexními čísly. Tedy místo $(x,y)$ mějme $(x+y\cdot i)$. Naše křivka je tedy $f: \mathbb{R} \rightarrow \mathbb{C}$. S tím se ještě lze smířit. Druhá část bude o něco těžší.

Na druhé straně máme kolečka (dvojice poloměr + úhel). Rádi bychom i sem dostali komplexní čísla. Tímo číslem nechť je počáteční poloha puntíku v komplexní rovině (vzhledem ke středu kolečka). Tedy místo $(r,\alpha)$ mějme $r \cdot (\cos(\alpha)+\sin(\alpha)\cdot i) = (a + b\cdot i)$. Jak ale takové kolečko otočit např. o 30 stupňů? V předchozí reprezentaci jsme jen přičetli rotaci ke starému úhlu a dostali nový úhel (poloměr zůstal stejný). Jak ale otočit komplexní číslo? Teď pozor! Pro otočení komplexního čísla ho stačí vynásobit jiným komplexním číslem.. A to konkrétně číslem $(\cos(30°) + \sin(30°)\cdot i)$. Nyní je i naše soustava koleček ve tvaru $g: \mathbb{R} \rightarrow \mathbb{C}$.

Jaké výhody má použití komplexních čísel oproti předchozí reprezentaci? Jednak to celou věc komplikuje, komplexní čísla se násobí blbě a nikdo je nemá rád. Kolečka zde už nejsou tolik zřejmá, ačkoli tam pořád jsou! Dostali jsme ale i pár výhod. Obě věci (křivka i soustava koleček) jsou funkce tvaru $\mathbb{R} \rightarrow \mathbb{C}$. Navíc Fourierova transformace mezi nimi je jednoznačná - pro danou křivku existuje právě jedna soustava koleček z komplexních čísel. Lze navíc dokázat, že FT v "komplexní podobě" je prostá a na. Měla by tedy existovat inverzní FT, která dané soustavě koleček přiřadí určitou křivku.

Definujme si Fourierovu transformaci znovu. Je to stále operace, která k parametrické křivce hledá soustavu koleček, ale nyní jsou obě strany reprezentovány pomocí komplexních čísel (funkcemi $\mathbb{R} \rightarrow \mathbb{C}$).

Upřesněme si, jak budou kolečka fungovat, aby byla FT opravdu jednoznačná. Puntík soustavy koleček má kreslit naši křivku, tedy při parametru $t$ má být puntík na pozici $f(t)$. Chtějme, aby pro $t=0$ bylo každé kolečko ve své počáteční poloze. Chtějme, aby při zvýšení $t$ o 1 se kolečko s rychlostí 1 otočilo jednou (tedy o $2 \pi$) a obecně, kolečko s rychlostí $s$ se otočí $s$-krát (tedy o $s \cdot 2 \pi$) .

Vlastnosti Fourierovy transformace

Představme si, že máme parametrickou křivku $f$ a k ní jsme našli soustavu koleček $g$. Tuto křivku si "nazoomujeme" parametrem $k$, $(k\cdot f)(t) = k\cdot (x + y\cdot i)$. Jak bude vypadat soustava koleček pro tuto novou křivku? Stačí poloměry všech koleček vynásobit $k$! V naší reprezentaci jím vynásobíme komplexní čísla. Tedy:

$FT(f)=g \Rightarrow FT(k\cdot f) = k \cdot g$.

Malý šokující detail: toto platí i pro $k\in \mathbb{C}$ (lze vidět z Moivreovy věty).

Představme si dvě křivky $f_1, f_2$. Vytvořme novou křivku jejich "sečtením", tedy $(f_1+f_2)(t) = (x_1+y_1\cdot i) + (x_2+y_2\cdot i)$. Každá z křivek měla svoji soustavu koleček $g_1, g_2$. Jak vypadá soustava koleček kreslící tuto novou křivku $(f_1+f_2)$? Stačí druhou soustavu napojit na "puntík" předchozí soustavy. Pro každou rychlost budeme mít tedy dvě kolečka a výše jsme si řekli, že dvě kolečka stejné rychlosti jdou převést na jedno. Jak konkrétně bude vypadat? Stačí sečíst komplexní čísla! Tedy:

$FT(f_1)=g_1, FT(f_2)=g_2 \Rightarrow FT(f_1 + f_2) = g_1 + g_2$.

Těmto vlastnostem se často říká Linearita Fourierovy transformace.

Výpočet Fourierovy transformace

Výpočet inverzní FT

Teď by nás zajímalo, jak převádět mezi křivkami a soustavami koleček. Nejdříve si ukažme inverzní FT, jelikož je více zřejmá. Známe soustavu koleček $g(s)$ a zajímá nás pohyb puntíku - jeho poloha při parametru $t$, tedy $f(t)$.

Nechť má soustava jediné kolečko (s nenulovým poloměrem). Má rychlost $s$ a poloměr a počáteční úhel představuje komplexní číslo $g(s) = a+b\cdot i$. Jaká je hodnota křivky pro parametr $t$? Stačí nám kolečko natočit o $t*s$ a spočítat polohu puntíku. "Otáčet komplexní čísla" už umíme.

$ f(t) = (\cos(t\cdot s\cdot 2 \pi) + \sin(t\cdot s\cdot 2 \pi) i) \cdot g(s) $

Co když máme $n$ koleček (s nenulovými poloměry)? Každé má svoji rychlost $s_j$ a komplexní číslo (poloměr a poč. úhel). Každé kolečko určuje nějaký posun od puntíku předchozího kolečka a stačí nám tyto posuny sečíst.

$ f(t) = \sum\limits_{j=1}^n (\cos(t \cdot s_j \cdot 2 \pi) + \sin(t \cdot s_j\cdot 2 \pi) i) \cdot g(s_j) $

Co když máme koleček nekonečně (nespočetně) mnoho? Nekonečný součet se změní na integrál.

$ f(t) = \int\limits_{s\in\mathbb{R}} (\cos(t\cdot s\cdot 2 \pi) + \sin(t \cdot s \cdot 2 \pi) i) \cdot g(s) \mathrm{d} s$

Jelikož víme, jak fungují kolečka a jak se otáčí komplexní čísla, tento vzorec (inverzní FT) můžeme vymyslet "za běhu" a nemusíme si ho pamatovat.

Výpočet FT

Samotná FT je trochu složitější. Máme tedy křivku $f$ a chceme k ní najít soustavu koleček $g$. Zajímá nás kompl. číslo u kolečka s rychlostí $s$. Níže je vzorec.

$g(s) = \int\limits_{t\in\mathbb{R}} (\cos(- t\cdot s\cdot 2 \pi) + \sin(- t \cdot s \cdot 2 \pi) i) \cdot f(t) \mathrm{d} t$

Ideu tohoto vzorce ani já sám příliš nechápu. Všimněme si, že pokud je $s=0$, hodnota celé závorky je 1 a výsledek je integrál přes body křivky, někdo za tím může vidět jakýsi "průměrný bod křivky". Výsledek pak odpovídá posunu celé křivky směrem od středu.

Pokud je $s$ nenulové, výraz v závorce generuje jakýsi kruhový pohyb, ale opačným směrem, než u IFT. výsledek pak opět může připomínat nějaký "průměrný bod", přenásobený kruhovým pohybem.

Fourierovy řady

Věta: Je-li křivka $f$ periodická, lze ji vyjádřit soustavou koleček s nezápornými celočíselnými rychlostmi.

Tohoto jsme si všimli u kružnice, kde stačí 1 kolečko o rychlosti 1. Pro čtverec asi bude potřeba mnohem více koleček, ale díky větě víme, že si vystačíme s kolečky o rychlostech 0, 1, 2, 3 .... Jako FT pro periodickou funkci $f$ můžeme uvažovat funkci $g$ tvaru $\mathbb{N}\rightarrow\mathbb{C}$. Inverzní FT už nemusí být integrál, ale stačí řada:

$ f(t) = \sum\limits_{j\in\mathbb{N}} (\cos(t \cdot j \cdot 2 \pi) + \sin(t \cdot j\cdot 2 \pi) i) \cdot g(j) $

Komplexní exponenciela

Jak jsme si ukázali ve článku o Taylorově polynomu, funkce $e^x, x \in \mathbb{R}$ má taylorův rozvoj ve tvaru:

$e^x = \frac{x^0 }{ 0! } + \frac{x^1 }{ 1! } + \frac{x^2 }{ 2! }+ \frac{x^3 }{ 3! } + ...$

Inspirovaní tímto rozvojem si definujme komplexní exponencielu:

$e^{a+bi} = \frac{ (a+bi)^0 }{ 0! } + \frac{ (a+bi)^1 }{ 1! } + \frac{(a+bi)^2 }{ 2! }+ \frac{(a+bi)^3 }{ 3! } + ...$

Po pár úpravách (které jsem rozepsal na české Wikipedii) dostaneme tzv. Eulerův vzorec:

$e^{ix} = \cos(x) + i \sin(x)$

Teď můžeme všude místo sínů a kosínů psát $e^{ix}$, např. u vzorce pro FT:

$g(s) = \int\limits_{t\in\mathbb{R}} (\cos(- t\cdot s\cdot 2 \pi) + \sin(- t \cdot s \cdot 2 \pi) i) \cdot f(t) \mathrm{d} t = \int\limits_{t\in\mathbb{R}} e^{-t\cdot s \cdot 2 \pi \cdot i} \cdot f(t) \mathrm{d} t$

Tvary s $e^{ix}$ se používají místo sínů a kosínů ze třech důvodů:

  • aby vzorce byly kratší
  • aby autor působil chytře
  • aby čtenář měl další překážku v cestě k pochopení FT

8 komentářů:

  1. Anonymní ... (6. června 2014 12:47)

    Vrele diky. Precetl jsem mraky ruznych clanku o FT, ale teprve ted jsem prozrel.

  2. Anonymní ... (16. února 2015 4:59)

    úžasný článek, díky! jen autor s velmi dobrým pochopením látky dokáže stvořit něco takového.

  3. Anonymní ... (25. února 2015 11:58)

    hezky vysvětleno :)

  4. Roman Hocke ... (11. prosince 2015 7:51)

    Tak to je parádní názorné vysvětlení! Dobrá práce! :-)

  5. Jiří Jagoš ... (14. prosince 2015 11:51)

    klobouček. Autor musí mít pod čepicí, pokud to dokázal takto interpretovat

  6. Anonymní ... (4. května 2016 3:49)

    Děkuji!! Jen tak dále - opravdu perfektní práce!!

  7. Unknown ... (28. července 2016 0:05)

    Zde je názorná 3d prezentace
    https://www.youtube.com/watch?v=r18Gi8lSkfM

  8. Anonymní ... (1. září 2016 14:15)

    S tím vyjádřením komplexního čísla ve tvaru |Z|*e^(jx) bych s vámi oponoval. Pro násobení je právě tento tvar ideální a je i názorný pro otáčení, protože v argumentu e s komplexní jednotkou je vždy úhel. Pak je hezky vidět, že otočení o 30° vznikne násobením e^(jx) * e^(j*1/6*PI) = e^j(x+1/6*PI). Argumenty se prostě sečtou. Pro zjednodušení jsem vynechal velikosti fázorů, ale je zřejmé, že ty se taky jednoduše vynásobí.
    Hodnotu e^jx není třeba počítat, protože stačí znát x, které udává právě otočení fázoru. Nicméně s takovou hodnotou lze pracovat např. pomocí Taylorova polynomu.
    Jinak děkuji za hezký pojhled na řešení FT :-)

Okomentovat