]> mj.ucw.cz Git - ads2.git/commitdiff
Korektury prednasky o FFT.
authorMartin Mares <mj@ucw.cz>
Sun, 20 Jan 2008 20:42:22 +0000 (21:42 +0100)
committerMartin Mares <mj@ucw.cz>
Sun, 20 Jan 2008 20:42:22 +0000 (21:42 +0100)
8-fft/8-fft.tex

index 2bbc93f04e3f98f3459c7f7315e982bdb2119a9d..0d20b9bde2ea574f017c2d94b2551bcc48f07d26 100644 (file)
@@ -1,53 +1,53 @@
 \input lecnotes.tex
 \prednaska{8}{Fourierova transformace}{(K.Jakubec, M.Polák a G.Ocsovszky)}
 
 \input lecnotes.tex
 \prednaska{8}{Fourierova transformace}{(K.Jakubec, M.Polák a G.Ocsovszky)}
 
-Násobení polynomù mù¾e mnohým pøipadat jako pomìrnì (algoritmicky) snadný problém. Asi ka¾dého hned napadne \uv{hloupý} algoritmus -- vezmeme koeficienty prvního polynomu a vynásobíme ka¾dý se v¹emi koeficienty druhého polynomu a pøíslu¹nì u toho vynásobíme i exponenty (stejnì jako to dìláme, kdy¾ násobíme polynomy na papíøe). Pokud stupeò prvního polynomu je $n$ a druhého $m$, tak èasová slo¾itost nám vyjde $\O(mn)$. To není a¾ tak ¹patné, v nejhor¹ím pøípadì se dostaneme na $\O(n^{2})$ (pokud $m = n$). Na první pohled se mù¾e zdát, ¾e rychleji to prostì nejde (pøeci musíme v¾dy vynásobit \uv{ka¾dý s ka¾dým}). Ve skuteènosti to ale rychleji fungovat mù¾e, ale k tomu je potøeba znát trochu tajemný algoritmus FFT neboli {\I Fast Fourier Transform}.
+Násobení polynomù mù¾e mnohým pøipadat jako pomìrnì (algoritmicky) snadný problém. Asi ka¾dého hned napadne \uv{hloupý} algoritmus -- vezmeme koeficienty prvního polynomu a vynásobíme ka¾dý se v¹emi koeficienty druhého polynomu a pøíslu¹nì u toho seèteme i exponenty (stejnì jako to dìláme, kdy¾ násobíme polynomy na papíøe). Pokud stupeò prvního polynomu je $n$ a druhého $m$, strávíme tím èas $\Omega(mn)$. Pro $m=n$ je to kvadraticky pomalé. Na první pohled se mù¾e zdát, ¾e rychleji to prostì nejde (pøeci musíme v¾dy vynásobit \uv{ka¾dý s ka¾dým}). Ve skuteènosti to ale rychleji fungovat mù¾e, ale k tomu je potøeba znát trochu tajemný algoritmus FFT neboli {\I Fast Fourier Transform}.
 
 
 \ss{Trochu algebry na zaèátek:}
 \>Libovolný polynom $P$ stupnì $n$ mù¾e být reprezentován dvìma rùznými zpùsoby:
 
 \itemize\ibull
 
 
 \ss{Trochu algebry na zaèátek:}
 \>Libovolný polynom $P$ stupnì $n$ mù¾e být reprezentován dvìma rùznými zpùsoby:
 
 \itemize\ibull
-\:svými koeficienty, èili èísly $a_{0}, a_{1}, \ldots ,a_{n}$, nebo
+\:svými koeficienty, èili èísly $p_{0}, p_{1}, \ldots ,p_{n}$, nebo
 \:svými hodnotami v $n$ rùzných bodech $x_{0}, x_{1}, \ldots , x_{n}$, èili èísly $P(x_{0}),$ $P(x_{1}),$ $\ldots , P(x_{n})$.
 \endlist
 
 \:svými hodnotami v $n$ rùzných bodech $x_{0}, x_{1}, \ldots , x_{n}$, èili èísly $P(x_{0}),$ $P(x_{1}),$ $\ldots , P(x_{n})$.
 \endlist
 
-\ss{Konvence}
-\>Celé polynomy oznaèujeme velkými písmeny, jednotlivé èleny polynomù pak pøíslu¹nými malými písmeny. (Pø.: Polynom $W$ stupnì $n$ má èleny $w_{1}, w_{2},\ldots, w_{n}$.)
+\ss{Konvence:}
+\>Celé polynomy oznaèujeme velkými písmeny, jednotlivé èleny polynomù pak pøíslu¹nými malými písmeny. (Pø.: Polynom $W$ stupnì $n$ má koeficienty $w_{0}, w_{1}, w_{2},\ldots, w_{n}$.)
 
 
-\>Pov¹imnìme si jedné skuteènosti -- máme-li dva polynomy $A$ a $B$ stupnì $n$ a body $x_{0}, \ldots, x_{k}$, pak platí $C(x_{k}) = A(x_{k}) \cdot B(x_{k}), k = 0,1,2, \ldots, n.$ Toto èiní tento druhý zpùsob reprezentace polynomu velice atraktivním pro násobení. Problémem je, ¾e typicky máme polynom zadaný koeficienty a ne hodnotami v bodech. Tím pádem potøebujeme nìjaký hodnì rychlý algorimtus (tj. rychlej¹í ne¾ kvadratický, jinak bychom si nepomohli oproti hloupému algoritmu) na pøevod polynomu z jedné reprezentace do druhé a zase zpìt.
+Pov¹imnìme si jedné skuteènosti -- máme-li dva polynomy $A$ a $B$ stupnì $n$ a body $x_{0}, \ldots, x_{k}$, dále polynom $C=A \cdot B$ (stupnì $2n$), pak platí $C(x_{k}) = A(x_{k}) \cdot B(x_{k}), k = 0,1,2, \ldots, n.$ Toto èiní tento druhý zpùsob reprezentace polynomu velice atraktivním pro násobení. Problémem je, ¾e typicky máme polynom zadaný koeficienty a ne hodnotami v bodech. Tím pádem potøebujeme nìjaký hodnì rychlý algorimtus (tj. rychlej¹í ne¾ kvadratický, jinak bychom si nepomohli oproti hloupému algoritmu) na pøevod polynomu z jedné reprezentace do druhé a zase zpìt.
 
 
-Dále bychom si mìli uvìdomit, ¾e stupeò na¹eho výsledného polynomu $C$ bude $\leq 2n$ (kde $n$ je stupeò výchozích polynomù). To snad netøeba nijak vysvìtlovat, ka¾dý si to snadno ovìøí, jen dodáme, ¾e pokud chceme polynom $C$ reprezentovat pomocí jeho hodnot v bodech, musíme vzít alespoò $2n$ bodù. Tímto konèí malá algebraická vsuvka.
+Dále bychom si mìli uvìdomit, ¾e stupeò na¹eho výsledného polynomu $C$ bude $\leq 2n$ (kde $n$ je stupeò výchozích polynomù). Pokud chceme polynom $C$ reprezentovat pomocí jeho hodnot v bodech, musíme tedy vzít alespoò $2n$ bodù. Tímto konèí malá algebraická vsuvka.
 
 \s{Idea, jak by mìl algoritmus pracovat:}
 \algo
 
 \s{Idea, jak by mìl algoritmus pracovat:}
 \algo
-\:Vybereme $2n$ bodù $x_{0}, x_{1}, \ldots , x_{2n}$.
+\:Vybereme $2n$ bodù $x_{0}, x_{1}, \ldots , x_{2n-1}$.
 \:V tìchto bodech vyhodnotíme polynomy $A$ a $B$.
 \:V tìchto bodech vyhodnotíme polynomy $A$ a $B$.
-\:Nyní ji¾ v lineárním èase získáme polynom $C$ (viz vý¹e).
-\:Inverznì pøevedeme hodnoty polynomu $C$ v $2n$ bodech na jeho koeficienty.
+\:Nyní ji¾ v lineárním èase získáme hodnoty polynomu $C$ v tìchto bodech (viz vý¹e).
+\:Pøevedeme hodnoty polynomu $C$ na jeho koeficienty.
 \endalgo
 
 \endalgo
 
-\>Je asi vidìt, ¾e klíèové jsou kroky 2 a 4. Vybrání bodù jistì stihneme pohodlnì v lineárním èase a vynásobení samotných hodnot té¾ (máme $2n$ bodù a $C(x_{k}) = A(x_{k}) \cdot B(x_{k}), k = 0,1,2, \ldots , 2n$, tak¾e na to nepotøebujeme více ne¾ $2n$ násobení).
+\>Je asi vidìt, ¾e klíèové jsou kroky 2 a 4. Vybrání bodù jistì stihneme pohodlnì v lineárním èase a vynásobení samotných hodnot té¾ (máme $2n$ bodù a $C(x_{k}) = A(x_{k}) \cdot B(x_{k}), k = 0,1,2, \ldots , 2n-1$, tak¾e na to nepotøebujeme více ne¾ $2n$ násobení).
 
 
-Celý trik spoèívá v chytrém vybrání onìch bodù, ve kterých budeme polynomy vyhodnocovat. Je na to potøeba vìdìt pár zajímavostí o komplexních èíslech, na stránce Matrina Mare¹e jsou k dispozici slajdy, zde to bude zapsáno o trochu struènìji.
+Celý trik spoèívá v chytrém vybrání onìch bodù, ve kterých budeme polynomy vyhodnocovat. Je na to potøeba vìdìt pár zajímavostí o komplexních èíslech, na webové stránce pøedná¹ky jsou k dispozici slajdy, zde to bude zapsáno o trochu struènìji.
 
 \ss{  Vyhodnocení polynomu metodou Rozdìl a panuj (algoritmus FFT):}
 
 \ss{  Vyhodnocení polynomu metodou Rozdìl a panuj (algoritmus FFT):}
-Mìjme polynom $P$ øádu $n$ a chceme jej vyhodnotit v $n$ bodech. Vybereme si body tak, aby byly spárované, èili $\pm x_{0}, \pm x_{1}, \ldots , \pm x_{n/2} $. To nám výpoèet urychlí, proto¾e pak se druhé mocniny $x_{j}$ shodují s druhými mocninami $-x_{j}$.
+Mìjme polynom $P$ øádu $n$ a chtìjme jej vyhodnotit v $n$ bodech. Vybereme si body tak, aby byly spárované, èili $\pm x_{0}, \pm x_{1}, \ldots , \pm x_{n/2-1} $. To nám výpoèet urychlí, proto¾e pak se druhé mocniny $x_{j}$ shodují s druhými mocninami $-x_{j}$.
 
 Polynom $P$ rozlo¾íme na dvì èásti, první obsahuje èleny se sudými exponenty, druhá s lichými:
 
 Polynom $P$ rozlo¾íme na dvì èásti, první obsahuje èleny se sudými exponenty, druhá s lichými:
-$P(x) = p_{0}x^{0} + p_{2}x^{2} + \ldots + p_{n-2}x^{n-2} + p_{1}x^{1} + p_{3}x^{3} + \ldots + p_{n-1}x^{n-1}$
+$P(x) = (p_{0}x^{0} + p_{2}x^{2} + \ldots + p_{n-2}x^{n-2}) + (p_{1}x^{1} + p_{3}x^{3} + \ldots + p_{n-1}x^{n-1})$.
 
 $S(x^{2}) = p_{0}x^{0} + p_{2}x^{2} + \ldots + p_{n - 2}x^{n - 2}$,
 $L(x^{2}) = p_{1}x^{1} + p_{3}x^{3} + \ldots + p_{n - 1}x^{n - 1}$
 
 \>Tak¾e obecnì $P(x) = S(x^{2}) + xL(x^{2})$ a $P(-x) = S(x^{2}) - xL(x^{2})$.
 
 $S(x^{2}) = p_{0}x^{0} + p_{2}x^{2} + \ldots + p_{n - 2}x^{n - 2}$,
 $L(x^{2}) = p_{1}x^{1} + p_{3}x^{3} + \ldots + p_{n - 1}x^{n - 1}$
 
 \>Tak¾e obecnì $P(x) = S(x^{2}) + xL(x^{2})$ a $P(-x) = S(x^{2}) - xL(x^{2})$.
-Jinak øeèeno, vyhodnocování $P$ v $n$ bodech se nám smrskne na vyhodnocení $S(x)$ a $L(x)$ (oba jsou polynomy stupnì $n/2$ a vyhodcujeme je nyní v $x^{2}$) v $n/2$ bodech (proto¾e $(x_{i})^{2} = (-x_{i})^{2}$).
+Jinak øeèeno, vyhodnocování $P$ v $n$ bodech se nám smrskne na vyhodnocení $S(x)$ a $L(x)$ (oba jsou polynomy stupnì $n/2$ a vyhodnocujeme je nyní v $x^{2}$) v $n/2$ bodech (proto¾e $(x_{i})^{2} = (-x_{i})^{2}$).
 
 \s{Pøíklad:}
 $3 + 4x + 6x^{2} + 2x^{3} + x^{4} + 10x^{5} = (3 + 6x^{2} + x^{4}) + x(4 + 2x^{2} + 10x^{4})$.
 
 
 
 \s{Pøíklad:}
 $3 + 4x + 6x^{2} + 2x^{3} + x^{4} + 10x^{5} = (3 + 6x^{2} + x^{4}) + x(4 + 2x^{2} + 10x^{4})$.
 
 
-Teï nám ov¹em vyvstane problém s oním párováním -- druhá mocina pøece nemù¾e být záporná a tím pádem u¾ v druhé úrovni rekurze body spárované nebudou. Z tohoto dùvodu musíme pou¾ít komplexní èísla -- tam druhé mocniny záporné býti mohou. Jako $x_{0}, \ldots , x_{n-1} $ si zvolíme $n$-tou primitvní odmocninu z jedné (oznaèíme si ji jako $\omega$). Máme $n$ $n$-tých primitivních odmocnin z jednièky, rovnomìrnì rozesetých po jednotkové kru¾nici, BÚNO $n=2^{k}, k \in N$ (jinak viz slajdy Martina Mare¹e). Jednotlivé odmociny vypadají takto: $1, \omega, \omega^{2}, \ldots , \omega^{n - 1} $, kde $\omega = e^{2 \pi i/ n}$.
+Teï nám ov¹em vyvstane problém s oním párováním -- druhá mocina pøece nemù¾e být záporná a tím pádem u¾ v druhé úrovni rekurze body spárované nebudou. Z tohoto dùvodu musíme pou¾ít komplexní èísla -- tam druhé mocniny záporné býti mohou. Jako $x_{0}, \ldots , x_{n-1} $ si zvolíme mocniny $n$-té primitvní odmocniny z jedné (oznaèíme si ji jako $\omega$). Máme $n$ $n$-tých primitivních odmocnin z jednièky, rovnomìrnì rozesetých po jednotkové kru¾nici, BÚNO $n=2^{k}, k \in N$ (jinak viz slajdy Martina Mare¹e). Jednotlivé mocniny vypadají takto: $1, \omega, \omega^{2}, \ldots , \omega^{n - 1} $, kde $\omega = e^{2 \pi i/ n}$.
 
 \s{Dvì poznámky:}
 \itemize\ibull
 
 \s{Dvì poznámky:}
 \itemize\ibull
@@ -55,7 +55,7 @@ Te
 \:umocníme-li v¹echny na druhou, vznikne nám $n/2$ $n/2$-tých odmocnin z jedné, které jsou i nadále spárované.
 \endlist
 
 \:umocníme-li v¹echny na druhou, vznikne nám $n/2$ $n/2$-tých odmocnin z jedné, které jsou i nadále spárované.
 \endlist
 
-\ss{Tak a teï koneènì ten slavný algoritmus:}
+\ss{Celý algoritmus bude vypadat takto:}
 \>FFT($P$, $ \omega$)
 
 \>{\sl Vstup:} $p_{0}, \ldots , p_{n-1}$, koeficienty polynomu $P$, a $\omega$, $n-$tá odmocina z jedné.
 \>FFT($P$, $ \omega$)
 
 \>{\sl Vstup:} $p_{0}, \ldots , p_{n-1}$, koeficienty polynomu $P$, a $\omega$, $n-$tá odmocina z jedné.
@@ -63,9 +63,15 @@ Te
 \>{\sl Výstup:} Hodnoty polynomu v~bodech $1, \omega, \omega^{2}, \ldots , \omega^{n - 1}$, èili èísla $P(1), P(\omega), P(\omega^{2}),$ $\ldots , P(\omega^{n - 1})$.
 
 \algo
 \>{\sl Výstup:} Hodnoty polynomu v~bodech $1, \omega, \omega^{2}, \ldots , \omega^{n - 1}$, èili èísla $P(1), P(\omega), P(\omega^{2}),$ $\ldots , P(\omega^{n - 1})$.
 
 \algo
-\:Pokud $n = 1$, vra» $P_{0}$ a konec.
-\:Jinak rozdìl $P$ na sudé a liché koeficienty rekurzivnì zavolej FFT($S$, $\omega^{2}$) a FFT($L$, $\omega^{2}$).
-\:Pro $j = 0, \ldots , n - 1$ spoèítej: $P(\omega^{j}) = S(\omega^{2j}) + \omega^{j} \cdot L(\omega^{2j})$.
+\:Pokud $n = 1$, vrátíme $P_{0}$ a skonèíme.
+\:Jinak rozdìlíme $P$ na sudé a liché koeficienty a rekurzivnì zavoláme FFT($S$, $\omega^{2}$) a FFT($L$, $\omega^{2}$).
+\:Pro $j = 0, \ldots , n/2 - 1$ spoèítáme: 
+
+$P(\omega^{j}) = S(\omega^{2j}) + \omega^{j} \cdot L(\omega^{2j})$.
+
+$P(\omega^{j+n/2}) = S(\omega^{2j}) - \omega^{j} \cdot L(\omega^{2j})$.
+
+$j$ je z intervalu $[0,  {n \over 2}-1]$
 
 \endalgo
 
 
 \endalgo
 
@@ -76,24 +82,18 @@ Te
 
 
 
 
 
 
-Máme tedy algoritmus, který \uv{pøevede} koeficienty polynomu na hodnoty tohoto polynomu v rùzných bodech .
-Ale potøebujeme také algoritmus, který doká¾e reprezentaci polynomu pomocí hodnot pøevést zpìt na koeficienty polynomu.
-Tedy nìjaký inverzní algoritmus. Definujeme si DFT - diskrétní Fourierovu transformaci, která vyu¾ívá
- maticovou reprezentaci a s její¾ pomocí získáme hledaný algoritmus.
+Máme tedy algoritmus, který pøevede koeficienty polynomu na hodnoty tohoto polynomu v rùzných bodech .
+Potøebujeme ale také algoritmus, který doká¾e reprezentaci polynomu pomocí hodnot pøevést zpìt na koeficienty polynomu. K tomu nám pomù¾e podívat se na ná¹ algoritmus trochu obecnìji.
 
 
-\s{Definice:}
->{\I Diskretní Fourierova transformace} $(DFT)$
-je funkce $f: { {\bb C} ^n} \rightarrow { {\bb C} ^n}$, kde $y=f(x) \equiv \forall j \ y_{j} = \sum \limits ^{n-1}_{k=0} x_{k} . \omega ^{k}$.
 
 
-\s{Poznámka:}
-Vezmeme polynom, který má $x_{kj}$ jako koeficienty a vyhodnotíme ho v~bodì 
-$\omega ^{j} [y_{j} = x(\omega^{j})] \Rightarrow {f}$ je linearní $\Rightarrow$ mù¾eme napsat $f(x) = \Omega . x ,\ \Omega _{jk} =\omega ^{jk}$, kde $\Omega$ je matice.
+\s{Definice:}
+\>{\I Diskretní Fourierova transformace} $(DFT)$
+je funkce $f: { {\bb C} ^n} \rightarrow { {\bb C} ^n}$, kde $y=f(x) \equiv \forall j \ y_{j} = \sum \limits ^{n-1}_{k=0} x_{k} \cdot \omega ^{k}$.
 
 
 \s{Jak najít inverzní matici?} Víme, ¾e $\Omega =\Omega ^{T}$ proto¾e $\omega ^{jk} = \omega ^{kj}$.
 
 
 
 \s{Jak najít inverzní matici?} Víme, ¾e $\Omega =\Omega ^{T}$ proto¾e $\omega ^{jk} = \omega ^{kj}$.
 
-\ss{Jak vypadají øádky této matice?}
-Vyu¾ijeme následující lemma, které si ale napøed doká¾eme :)
+Vyu¾ijeme následující lemma:
 
 \ss{Lemma:}
 
 
 \ss{Lemma:}
 
@@ -102,16 +102,26 @@ Vyu
 {\displaystyle 1 \ldots j=k}
 \right.$.
 
 {\displaystyle 1 \ldots j=k}
 \right.$.
 
-\s{Dùkaz:}
+\s{Poznámka:}
+$\Omega _{j} \cdot \Omega _{k}$ myslíme skalární souèin.
+Jsou-li $x = (x _{0}, \ldots, x _{n})$ a $y = (y _{0}, \ldots, y _{n})$ dva komplexní vektory,
+pak jejich skalární souèin definujeme jako:
+$x^{*}y = \sum \limits ^{n}_{i=0} \overline{x _{i}}y_{i}$.
+
+
+\>V této definici $\overline{x}$ oznaèuje èíslo komplexnì sdru¾ené k èíslu $x$.
+
+\>
+
 \proof Souèin
 $$\Omega _{j} \Omega _{k} = \sum \limits ^{n-1}_{l=0} \Omega _{jl} \overline{\Omega _{kl}} = \sum \limits _{l} \omega ^{jl} \overline{\omega ^{kl}} = \sum \limits _{l} \omega ^{jl} \omega ^{-kl} = \sum \limits _{l} \omega ^{(j-k)l } = \sum \limits ^{n-1}_{l=0} (\omega^{j-k}) ^{l}, $$
 
 proto¾e $ \overline{\omega^{kl}} = \overline{\omega} ^{kl} = {({1 \over \omega} )}^{kl} = \omega ^{-kl}$.
 
 \itemize\ibull
 \proof Souèin
 $$\Omega _{j} \Omega _{k} = \sum \limits ^{n-1}_{l=0} \Omega _{jl} \overline{\Omega _{kl}} = \sum \limits _{l} \omega ^{jl} \overline{\omega ^{kl}} = \sum \limits _{l} \omega ^{jl} \omega ^{-kl} = \sum \limits _{l} \omega ^{(j-k)l } = \sum \limits ^{n-1}_{l=0} (\omega^{j-k}) ^{l}, $$
 
 proto¾e $ \overline{\omega^{kl}} = \overline{\omega} ^{kl} = {({1 \over \omega} )}^{kl} = \omega ^{-kl}$.
 
 \itemize\ibull
-\:Pokud $j\neq k$, pou¾ijeme vzoreèek pro souèet geometrické posloupnosti, kde $a_{1}=1$ a $q=\omega ^{(j-k) }$ a dostaneme ${{\omega^{(j-k)n} -1} \over {\omega^{(j-k)} -1}} ={1-1 \over @ -1} = {0 \over \neq 0} = 0$.
+\:Pokud $j\neq k$, pou¾ijeme vzoreèek pro souèet geometrické posloupnosti, kde $a_{1}=1$ a $q=\omega ^{(j-k) }$ a dostaneme ${{\omega^{(j-k)n} -1} \over {\omega^{(j-k)} -1}} ={1-1 \over r- 1} = {0 \over \neq 0} = 0$. Kde $r$ je èíslo rùzné od jednièky.
 
 
-\:Pokud $j=k \sum \limits ^{n-1}_{l=0} (\omega ^{0}) ^{l} = n$.
+\:Pokud $j=k$, pak $ \sum \limits ^{n-1}_{l=0} (\omega ^{0}) ^{l} = n$.
 \endlist
 \qed
 
 \endlist
 \qed
 
@@ -119,22 +129,20 @@ proto
 
 \s{Dùsledek:} \quad $\Omega \cdot \overline{\Omega} = nE$.
 
 
 \s{Dùsledek:} \quad $\Omega \cdot \overline{\Omega} = nE$.
 
-
-\>Jedná se o skalární souèin (jako pøedtím, èili prvek na pozici $ij$ je $0$ nebo $n$) $\Rightarrow\Omega^{-1} = {1 \over n} \overline{\Omega}$.
+\>Jedná se o násobení matic, èili prvek na pozici $ij$ je $0$ nebo $n$. $\Rightarrow\Omega^{-1} = {1 \over n} \overline{\Omega}$.
 
 
 \>Na¹li jsme inverzi:
 
 $\Omega({1 \over n} \overline{\Omega}) = {1 \over n}\Omega \cdot \overline{\Omega} = E$, \quad
 $\Omega^{-1}_{jk} = {1 \over n}\overline{\omega^{jk}} = {1 \over n}\omega^{-jk} = {1 \over n} {(\omega^{-1})}^{jk}$, \quad
 
 
 \>Na¹li jsme inverzi:
 
 $\Omega({1 \over n} \overline{\Omega}) = {1 \over n}\Omega \cdot \overline{\Omega} = E$, \quad
 $\Omega^{-1}_{jk} = {1 \over n}\overline{\omega^{jk}} = {1 \over n}\omega^{-jk} = {1 \over n} {(\omega^{-1})}^{jk}$, \quad
-kde $\omega^{-1}$ je $\overline{\omega}$.
-
+kde $\omega^{-1}$ je $\overline{\omega}$ a $\omega _{n}$ je $n$-tá primitivní odmocnina z jednièky.
 
 \>Ná¹ algoritmus poèítá tedy i inverzní transformaci, pouze místo $\omega_n$ pou¾ijeme komplexnì zdru¾ené
  $\overline{\omega_n}$ a matici vynásobíme $(1/n)$. Co¾ je skvìlé -- 
  staèí znát pouze jeden algoritmus u~kterého staèí v~jednom pøípadì pou¾ít transformovanou matici a vydìlit $n$.
 
 
 \>Ná¹ algoritmus poèítá tedy i inverzní transformaci, pouze místo $\omega_n$ pou¾ijeme komplexnì zdru¾ené
  $\overline{\omega_n}$ a matici vynásobíme $(1/n)$. Co¾ je skvìlé -- 
  staèí znát pouze jeden algoritmus u~kterého staèí v~jednom pøípadì pou¾ít transformovanou matici a vydìlit $n$.
 
-\s{Vìta:} Pro $n= 2^k$ lze DFT na ${\bb C}^n$ spoèítat v~èase $\O(n \log n)$ a DFT$^{-1}$ takté¾.
+\s{Výsledek:} Pro $n= 2^k$ lze DFT na ${\bb C}^n$ spoèítat v~èase $\O(n \log n)$ a DFT$^{-1}$ takté¾.
 
 \s{Dùsledek:}
 
 
 \s{Dùsledek:}
 
@@ -150,7 +158,7 @@ $\O(n \log n)$ pro vyhodnocen
 \:Násobení dlouhých èísel v èase $\O(n \log n)$.
 \endlist
 
 \:Násobení dlouhých èísel v èase $\O(n \log n)$.
 \endlist
 
-\s{Hardwareová implementace FFT -- takzvaná motýlková m:}
+\s{Hardwarová implementace FFT}
 
 \figure{img.eps}{Pøíklad prùbìhu algoritmu na vstupu velikosti 8}{3in}
 
 
 \figure{img.eps}{Pøíklad prùbìhu algoritmu na vstupu velikosti 8}{3in}
 
@@ -159,15 +167,15 @@ $\O(n \log n)$ pro vyhodnocen
 
 \>Základem je kombinaèní obvod tzv. motýlek. (Na obrázku znázornìn dvìma èarami, pøekøí¾enými v jejich støedech). Co motýlek dìlá? Podívejme se na následující obrázek.
 
 
 \>Základem je kombinaèní obvod tzv. motýlek. (Na obrázku znázornìn dvìma èarami, pøekøí¾enými v jejich støedech). Co motýlek dìlá? Podívejme se na následující obrázek.
 
-\figure{img2.eps}{Kombinaèní obvod tzv. motýlek}{3in}
+\figure{img2.eps}{Kombinaèní obvod tzv. motýlek}{1in}
 
 
-\>vstup jsou komplexní èísla $x_1$ a $x_2$ a výstup komplexní èísla $y_1$ a $y_2$
+\>Vstup jsou komplexní èísla $x_1$ a $x_2$ a výstup komplexní èísla $y_1$ a $y_2$, taková ¾e
 \>$y_1 = x_1 + \omega^j \cdot x_2$
 \>$y_2 = x_1 - \omega^j \cdot x_2$
 
 \>kde index $j$ znaèí
 
 \>$y_1 = x_1 + \omega^j \cdot x_2$
 \>$y_2 = x_1 - \omega^j \cdot x_2$
 
 \>kde index $j$ znaèí
 
-\>V¹imìme si poøadí vstupních hodnot(koeficientù). Èísla jsou v binarním tvaru 0-7 pøeètená pozpátku.
+\>V¹imìme si poøadí vstupních hodnot (koeficientù). Èísla jsou v binarním tvaru 0-7 pøeètená pozpátku.
 
 \s{Z toho:}
 
 
 \s{Z toho:}