From: Martin Mares Date: Mon, 2 Jan 2012 21:40:37 +0000 (+0100) Subject: FFT: Prepsan i zbytek kapitoly X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=bbcd222acc4772dd762074f659e9f05d5d5c8bd3;p=ads2.git FFT: Prepsan i zbytek kapitoly --- diff --git a/7-fft/7-fft.tex b/7-fft/7-fft.tex index c9ee32f..6ff0982 100644 --- a/7-fft/7-fft.tex +++ b/7-fft/7-fft.tex @@ -115,7 +115,7 @@ Dostaneme n \:Nalezneme koeficienty polynomu~$R$ tak, aby odpovídaly grafu. \endalgo -\>Krok~4 trvá $\O(n)$, tak¾e rychlost celého algoritmu stojí a padá s~efektivitou +\>Krok~4 trvá $\Theta(n)$, tak¾e rychlost celého algoritmu stojí a padá s~efektivitou pøevodù mezi koeficientovou a hodnotovou reprezentací polynomù. Uká¾e se, ¾e aèkoliv to obecnì není snadný problém, mù¾eme si body $x_0,\ldots,x_{n-1}$ zvolit tak ¹ikovnì, aby pøevod probìhl rychle. @@ -159,6 +159,7 @@ i po~n \h{Intermezzo: Pøipomenutí komplexních èísel} \def\ii{\mkern 0.5mu{\bf i}} \def\im{{\bf i}} +\def\e{{\rm e}} \def\\{\hfil\break} \s{Základní operace} @@ -203,188 +204,194 @@ Pak plat \s{Exponenciální tvar} \itemize\ibull -\:Eulerova formule: $e^{\im\varphi} = \cos\varphi + \im\sin\varphi$. +\:Eulerova formule: $\e^{\im\varphi} = \cos\varphi + \im\sin\varphi$. -\:Ka¾dé $x\in{\bb C}$ lze tedy zapsat jako $\vert x\vert \cdot e^{\ii \varphi(x)}$. +\:Ka¾dé $x\in{\bb C}$ lze tedy zapsat jako $\vert x\vert \cdot \e^{\ii \varphi(x)}$. -\:Násobení: $xy = \left(\vert x\vert\cdot e^{\ii\varphi(x)}\right) \cdot - \left(\vert y\vert\cdot e^{\ii\varphi(y)}\right) = \vert x\vert - \cdot \vert y\vert \cdot e^{\ii(\varphi(x) + \varphi(y))}$. \\ +\:Násobení: $xy = \left(\vert x\vert\cdot \e^{\ii\varphi(x)}\right) \cdot + \left(\vert y\vert\cdot \e^{\ii\varphi(y)}\right) = \vert x\vert + \cdot \vert y\vert \cdot \e^{\ii(\varphi(x) + \varphi(y))}$. \\ (absolutní hodnoty se násobí, argumenty sèítají) -\:Umocòování: $x^\alpha = \left(\vert x\vert\cdot e^{\ii\varphi(x)}\right)^ - \alpha = {\vert x\vert}^\alpha\cdot e^{\ii \alpha \varphi(x)}$. - -\:Odmocòování: $\root n\of x = {\vert x\vert}^{1/n} \cdot e^{\ii \varphi(x)/n}$. \\ -Pozor, odmocnina není jednoznaèná: $1^4=(-1)^4=\ii^4=(-\ii)^4=1$. +\:Umocòování: $x^\alpha = \left(\vert x\vert\cdot \e^{\ii\varphi(x)}\right)^ + \alpha = {\vert x\vert}^\alpha\cdot \e^{\ii \alpha \varphi(x)}$. \endlist \s{Odmocniny z~jednièky} \smallskip -\>Je-li nìjaké $x\in{\bb C}$ $n$-tou odmocninou z~jednièky, musí platit: +Odmocòování v~komplexních èíslech obecnì není jednoznaèné: jestli¾e tøeba +budeme hledat ètvrtou odmocninu z~jednièky, toti¾ øe¹it rovnici $x^4=1$, nalezneme +hned ètyøi taková~$x$: 1, $-1$, $\im$ a $-\im$. + +Prozkoumejme nyní obecnìji, jak se chovají $n$-té odmocniny z~jednièky, tedy +komplexní koøeny rovnice $x^n=1$: \itemize\ibull -\:$\vert x \vert = 1$, tak¾e $x=e^{\ii\varphi}$ pro nìjaké~$\varphi$. -\:$x^n = e^{\ii\varphi n} = \cos{\varphi n} + \im\sin\varphi n = 1$, +\:$\vert x \vert = 1$, tak¾e $x=\e^{\ii\varphi}$ pro nìjaké~$\varphi$. +\:$x^n = \e^{\ii\varphi n} = \cos{\varphi n} + \im\sin\varphi n = 1$, co¾ nastane, kdykoliv $\varphi n = 2k\pi$ pro nìjaké $k\in{\bb Z}$. -\:Dostáváme $n$ rùzných $n$-tých odmocnin: \\ - $2k\pi/n$ pro $k=0,\ldots,n-1$. \endlist -\>Pro obecné~$x$ pak platí: $\root n \of x = {\vert x\vert}^{1/n} \cdot e^{\ii\varphi (x)/n} \cdot u$, kde $u=\root n\of 1$. +\>Dostáváme tedy $n$ rùzných $n$-tých odmocnin z~1, toti¾ +$\e^{2k\pi/n}$ pro $k=0,\ldots,n-1$. +(Mimochodem, budeme-li odmocòovat nìjaké jiné komplexní èíslo ne¾ jednièku +a nulu, dostaneme opìt $n$ rùzných $n$-tých odmocnin, které se od~sebe budou +li¹it vynásobením nìjakou $n$-tou odmocninou z~jedné. To ale nebudeme potøebovat.) \s{Primitivní odmocniny} -\s{Definice:} $x$ je {\I primitivní} $k$-tá odmocnina z 1 $\equiv x^k=1 \land \forall j: 0Tuto definici splòují napøíklad èísla $\omega = e^{2\pi \ii / k}$ a $\overline\omega = e^{-2\pi\ii/k}$. -Platí toti¾, ¾e $\omega^j = e^{2\pi\ii j/k}$, co¾ je rovno~1 právì tehdy, +\s{Pøíklad:} Tuto definici splòují napøíklad èísla $\omega = \e^{2\pi \ii / k}$ a $\overline\omega = \e^{-2\pi\ii/k}$. +Platí toti¾, ¾e $\omega^j = \e^{2\pi\ii j/k}$, co¾ je rovno~1 právì tehdy, je-li $j$ násobkem~$k$ (jednotlivé mocniny èísla~$\omega$ postupnì obíhají jednotkovou kru¾nici). Analogicky pro~$\overline\omega$. -\>Uka¾me si nìkolik pozorování fungujících pro libovolné èíslo~$\omega$, -které je primitivní $k$-tou odmocninou z~jednièky (nìkdy budeme potøebovat, -aby navíc $k$ bylo sudé): +\s{Pozorování:} Pro sudé~$n$ a libovolné èíslo~$\omega$, které je primitivní +$n$-tou odmocninou z~jednièky, platí: \itemize\ibull -\:Pro $0\leq jFFT($P$, $ \omega$) +Uká¾eme, ¾e primitivních odmocnin lze vyu¾ít k~záchranì na¹eho párovacího +algoritmu na vyhodnocování polynomù. -\>{\sl Vstup:} $p_{0}, \ldots , p_{n-1}$, koeficienty polynomu $P$ stupnì -nejvý¹e $n-1$, a~$\omega$, -$n$-tá primitivní odmocina z jedné. +Nejprve polynomy doplníme nulami tak, aby jejich velikost~$n$ byla mocninou dvojky. +Poté zvolíme nìjakou primitivní $n$-tou odmocninu z~jednièky~$\omega$ a budeme +polynom vyhodnocovat v~bodech $\omega^0,\omega^1,\ldots,\omega^{n-1}$. To jsou +navzájem rùzná komplexní èísla, která jsou správnì spárovaná: pro $0\le j{\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})$. +Ná¹ plán tedy vy¹el, opravdu máme algoritmus o~slo¾itosti $\Theta(n\log n)$ +pro vyhodnocení polynomu. Je¹tì ho upravíme tak, aby místo s~polynomy pracoval +s~vektory jejich koeficientù èi hodnot. Tomuto algoritmu se øíká FFT, vzápìtí +prozradíme, proè. +\s{Algoritmus FFT:} \algo -\:Pokud $n = 1$, vrátíme $p_{0}$ a~skonèíme. -\:Jinak rozdìlíme $P$ na èleny se sudými a lichými exponenty (jako v pùvodní -my¹lence) a~rekurzivnì zavoláme FFT($P_s$, $\omega^{2}$) a~FFT($P_l$, -$\omega^{2}$) -- $P_l$ i~$P_s$ jsou stupnì max. $n/2-1$, $\omega^2$ je -$n/2$-tá primitivní odmocnina, a mocniny $\omega^2$ jsou stále po dvou -spárované ($n$ je mocnina dvojky, a tedy i $n/2$ je sudé; popø. $n=2$ a je to -zøejmé). -\:Pro $j = 0, \ldots , n/2 - 1$ spoèítáme: +\:\algin Èíslo~$n=2^k$, primitivní $n$-tá odmocnina z~jednièky~$\omega$ + a vektor $(p_0,\ldots,p_{n-1})$ koeficientù polynomu~$P$. +\:Pokud $n=1$, polo¾íme $y_0\leftarrow p_0$ a skonèíme. +\:Jinak se rekurzivnì zavoláme na sudou a lichou èást koeficientù: +\::$(s_0,\ldots,s_{n/2-1}) \leftarrow {\rm FFT}(p_0,p_2,p_4,\ldots,p_{n-2})$. +\::$(\ell_0,\ldots,\ell_{n/2-1}) \leftarrow {\rm FFT}(p_1,p_3,p_5,\ldots,p_{n-1})$. +\:Z~grafù obou èástí poskládáme graf celého polynomu: +\::Pro $j=0,\ldots,n/2-1$: +\:::$y_j \leftarrow s_j + \omega^j\cdot \ell_j$. +\:::$y_{j+n/2} \leftarrow s_j - \omega^j\cdot \ell_j$. +\:\algout Graf polynomu~$P$, tedy vektor $(y_0,\ldots,y_{n-1})$, kde $y_j = P(\omega^j)$. +\endalgo -\:\qquad $P(\omega^{j}) = P_s(\omega^{2j}) + \omega^{j}\cdot P_l(\omega^{2j})$. +\h{Diskrétní Fourierova transformace} -\:\qquad $P(\omega^{j+n/2})=P_s(\omega^{2j})-\omega^{j}\cdot P_l(\omega^{2j})$. +Vyhodnotit polynom v~mocninách èísla~$\omega$ umíme, ale je¹tì nejsme v~cíli. +Potøebujeme umìt provést rychle i opaèný pøevod -- z~hodnot na~koeficienty. K~tomu nám pomù¾e +podívat se na vyhodnocování polynomu trochu abstraktnìji jako na nìjaké zobrazení, +které jednomu vektoru komplexních èísel pøiøadí jiný vektor. Toto zobrazení +matematici v~mnoha rùzných kontextech potkávají u¾ nìkolik staletí a nazývají +ho Fourierovou transformací. -\endalgo +\s{Definice:} +{\I Diskrétní Fourierova transformace (DFT)} je zobrazení ${\cal F}: { {\bb C} ^n} \rightarrow { {\bb C} ^n}$, +které vektoru ${\bf x}$ pøiøadí vektor ${\bf y}$, jeho¾ slo¾ky jsou dány +pøedpisem $$y_j = \sum_{k=0}^{n-1} x_k \cdot \omega^{jk},$$ +kde $\omega$ je nìjaká pevnì zvolená primitivní $n$-tá odmocnina z~jedné. +\s{Pozorování:} +Pokud oznaèíme ${\bf p}$ vektor koeficientù nìjakého polynomu~$P$, pak jeho +Fourierova transformace ${\cal F}({\bf p})$ není nic jiného ne¾ graf tohoto polynomu +v~bodech $\omega^0,\ldots,\omega^{n-1}$. Snadno ovìøíme dosazením do definice. -\s{Èasová slo¾itost:} -\>$T(n)=2T(n/2) + \Theta(n) \Rightarrow$ slo¾itost $\Theta(n \log n)$, jako -MergeSort. +Ná¹ algoritmus tedy poèítá Diskrétní Fourierovu transformaci v~èase $\Theta(n\log n)$. +Odtud pramení jeho název FFT -- Fast Fourier Transform. +\def\OO{{\bf\Omega}} -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. +Také si v¹imnìme, ¾e DFT je lineární zobrazení. Mù¾eme ho proto zapsat +jako násobení nìjakou maticí~$\OO$, kde $\OO_{jk} = \omega^{jk}$. +Pro pøevod grafu na~koeficienty tedy potøebujeme najít inverzní zobrazení +urèené inverzní maticí $\OO^{-1}$. +Jeliko¾ $\omega^{-1} = \overline{\omega}$, pojïme zkusit, zda $\overline{\OO}$ +není hledanou inverzní maticí. -\s{Definice:} -\>{\I Diskrétní Fourierova transformace} $(DFT)$ -je zobrazení $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 ^{jk}$$ -(DFT si lze mimo jiné pøedstavit jako funkci vyhodnocující polynom -s~koeficienty $x_k$ v~bodech $\omega^j$). Takovéto zobrazení je lineární -a~tedy popsatelné maticí $\Omega$ s~prvky $\Omega_{jk} = \omega^{jk}$. -Chceme-li umìt pøevádìt z~hodnot polynomu na koeficienty, zajímá nás inverze -této matice. - - -\ss{Jak najít inverzní matici?} -Znaème $\overline{\Omega}$ matici, její¾ prvky -jsou komplexnì sdru¾ené odpovídajícím prvkùm $\Omega$, a vyu¾ijme následující -lemma: - -\ss{Lemma:}$\quad \Omega\cdot \overline{\Omega} = n\cdot E$. - -\proof $$ (\Omega\cdot \overline{\Omega})_{jk} = \sum_{l=0}^{n-1} \omega^{jl} -\cdot \overline{\omega^{lk}} = \sum \omega^{jl} \cdot \overline{\omega}^{lk} = -\sum \omega^{jl} \cdot \omega^{-lk} = \sum \omega^{l(j-k)}\hbox{.}$$ -\itemize\ibull -\:Pokud $j=k$, pak $ \sum \limits ^{n-1}_{l=0} (\omega ^{0}) ^{l} = n$. +\s{Lemma:} $\OO \cdot \overline{\OO} = n\cdot{\bf E}$, kde ${\bf E}$ je jednotková matice. -\:Pokud $j\neq k$, pou¾ijeme vzoreèek pro souèet geometrické øady -s kvocientem $\omega ^{(j-k) }$ a~dostaneme ${{\omega^{(j-k)n} -1} \over -{\omega^{(j-k)} -1}} ={1-1 \over \neq 0} = 0$ ( -$\omega^{j-k} - 1$ je jistì $\neq 0$, nebo» $\omega$ je $n$-tá primitivní -odmoncina a $j-kNa¹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 -(pøipomínáme, $\omega^{-1}$ je $\overline{\omega}$). +Matice~$\OO$ tedy je regulární a její inverze se kromì vydìlení~$n$ +li¹í pouze komplexním sdru¾ením. Navíc $\overline{\omega} = \omega^{-1}$ +je také primitivní $n$-tá odmocnina z~jednièky, tak¾e a¾ na faktor $1/n$ +se jedná opìt o~Fourierovu transformaci, kterou mù¾eme spoèítat stejným +algoritmem FFT. Shròme, co jsme zjistili, do následující vìty: -Vyhodnocení polynomu lze provést vynásobením $\Omega$, pøevod do pùvodní -reprezentace vynásobením $\Omega^{-1}$. My jsme si ale v¹imli chytrého -spárování, a vyhodnocujeme polynom rychleji ne¾ kvadraticky (proto FFT, -jako¾e {\it fast}, ne jako {\it fuj}). Uvìdomíme-li si, ¾e $\overline \omega = -\omega^{-1}$ je také $n$-tá primitivní odmocnina z 1 (má akorát -úhel s opaèným znaménkem), tak mù¾eme stejným trikem vyhodnotit i~zpìtný -pøevod -- nejprve vyhodnotíme $A$ a $B$ v $\omega^j$, poté pronásobíme -hodnoty a~dostaneme tak hodnoty polynomu $C=A\cdot B$, a pustíme na nì -stejný algoritmus s~$\omega^{-1}$ (hodnoty $C$ -vlastnì budou v~algoritmu \uv{koeficienty polynomu}). Nakonec jen získané -hodnoty vydìlíme $n$ a~máme chtìné koeficienty. +\s{Vìta:} Je-li $n$ mocnina dvojky, lze v~èase $\Theta(n\log n)$ spoèítat +diskrétní Fourierovu transformaci na~${\bb C}^n$ i její inverzi. -\s{Výsledek:} Pro $n= 2^k$ lze DFT na~${\bb C}^n$ spoèítat v~èase $\Theta(n -\log n)$ a~DFT$^{-1}$ takté¾. +Tím jsme také doplnili poslední èást algoritmu na násobení polynomù: -\s{Dùsledek:} -Polynomy stupnì $n$ lze násobit v~èase $\Theta(n \log n)$: -$\Theta(n \log n)$ pro vyhodnocení, $\Theta(n)$ pro vynásobení a~$\Theta(n -\log n)$ pro pøevedení zpìt. +\s{Vìta:} Polynomy velikosti~$n$ nad tìlesem ${\bb C}$ lze násobit v~èase +$\Theta(n\log n)$. -\s{Pou¾ití FFT:} +V~obou vìtách pøitom èiníme pøedpoklad, ¾e základní operace s~komplexními +èísly umíme provést v~konstantním èase. Pokud tomu tak není, staèí slo¾itost +vynásobit slo¾itostí jedné operace. -\itemize\ibull +\s{Dal¹í pou¾ití FFT:} +Dodejme je¹tì, ¾e Fourierova transformace se hodí i k~jiným vìcem ne¾ +k~násobení polynomù. Své uplatnìní nachází i v~dal¹ích algebraických algoritmech, +tøeba v~násobení velkých èísel (lze se dostat a¾ ke~slo¾itosti $\Theta(n)$). +Mimo to skýtá i lecjaké fyzikální aplikace, jeliko¾ odpovídá spektrálnímu +rozkladu signálu na siny a cosiny o~rùzných frekvencích. Na tom jsou zalo¾eny +algoritmy pro filtrování zvuku a tøeba také kompresi zvuku a obrazu (MP3, JPEG). -\:Zpracování signálu -- rozklad na~siny a~cosiny o~rùzných frekvencích -$\Rightarrow$ spektrální rozklad. -\:Komprese dat -- napøíklad formát JPEG. -\:Násobení dlouhých èísel v~èase $\Theta(n \log n)$. -\endlist +\h{Paralelní implementace FFT} -\s{Paralelní implementace FFT} +Zkusme si je¹tì prùbìh algoritmu FFT znázornit graficky: \figure{img.eps}{Pøíklad prùbìhu algoritmu na~vstupu velikosti 8}{3in} -Zkusme si prùbìh algoritmu FFT znázornit graficky (podobnì, jako jsme kreslili -hradlové sítì). Na~levé stranì obrázku se nachází vstupní vektor $x_0,\ldots,x_{n-1}$ +Na~levé stranì obrázku se nachází vstupní vektor $x_0,\ldots,x_{n-1}$ (v~nìjakém poøadí), na~pravé stranì pak výstupní vektor $y_0,\ldots,y_{n-1}$. Sledujme chod algoritmu pozpátku: Výstup spoèítáme z~výsledkù \uv{polovièních} transformací vektorù $x_0,x_2,\ldots,x_{n-2}$ a $x_1,x_3,\ldots,x_{n-1}$. @@ -394,16 +401,17 @@ krou transformace velikosti $n/4$ atd. Celkovì výpoèet probíhá v~$\log_2 n$ vrstvách po~$\Theta(n)$ operacích. -Jeliko¾ operace na~ka¾dé vrstvì probíhají na sobì nezávisle, mù¾eme je poèítat -paralelnì. Ná¹ diagram tedy popisuje hradlovou sí» pro paralelní výpoèet FFT -v~èase $\Theta(\log n\cdot T)$ a prostoru $\O(n\cdot S)$, kde $T$ a~$S$ znaèí -èasovou a prostorovou slo¾itost výpoètu lineární kombinace dvou komplexních èísel. +Na obrázek se mù¾eme dívat také jako na schéma hradlové sítì pro výpoèet DFT. +Krou¾ky jsou pøitom \uv{hradla} pracující s~komplexními èísly. V¹echny operace +v~jedné vrstvì jsou na sobì nezávislé, tak¾e je sí» poèítá paralelnì. Sí» proto +pracuje v~èase $\Theta(\log n)$ a prostoru $\Theta(n)$, opìt pøípadnì vynásobeno +slo¾itostí jedné operace s~komplexními èísly \s{Cvièení:} Doka¾te, ¾e permutace vektoru $x_0,\ldots,x_{n-1}$ odpovídá bitovému zrcadlení, tedy ¾e na pozici~$b$ shora se vyskytuje prvek $x_d$, kde~$d$ je èíslo~$b$ zapsané ve~dvojkové soustavì pozpátku. -\s{Nerekurzivní FFT} +\h{Nerekurzivní FFT} Obvod z~pøedchozího obrázku také mù¾eme vyhodnocovat po~hladinách zleva doprava, èím¾ získáme elegantní nerekurzivní algoritmus pro výpoèet FFT v~èase $\Theta(n\log n)$ @@ -423,13 +431,13 @@ a prostoru $\Theta(n)$: \algout $y_0,\ldots,y_{n-1}$ \endalgo -\s{FFT v~koneèných tìlesech} +\h{FFT v~koneèných tìlesech} Nakonec dodejme, ¾e Fourierovu transformaci lze zavést nejen nad tìlesem komplexních èísel, ale i v~nìkterých koneèných tìlesech, pokud zaruèíme existenci primitivní $n$-té odmocniny z~jednièky. Napøíklad v~tìlese ${\bb Z}_p$ pro prvoèíslo $p=2^k+1$ platí $2^k=-1$, tak¾e $2^{2k}=1$ -a $2^0,2^1,\ldots,2^{2k-1}$ jsou navzájem rùzná, tak¾e èíslo~2 je~primitivní +a $2^0,2^1,\ldots,2^{2k-1}$ jsou navzájem rùzná. Èíslo~2 je tedy primitivní $2k$-tá odmocnina z~jedné. To se nám ov¹em nehodí pro algoritmus FFT, jeliko¾ $2k$ bude málokdy mocnina dvojky. @@ -440,12 +448,18 @@ zapsat jako mocniny n je jedním takovým generátorem èíslo~$3$. Jeliko¾ mezi èísly $g^1,g^2,\ldots,g^{p-1}$ se musí ka¾dý nenulový prvek tìlesa vyskytnout právì jednou, je~$g$ primitivní $2^k$-tou odmocninou z~jednièky, tak¾e mù¾eme poèítat FFT pro libovolný vektor, -jeho¾ velikost je mocnina dvojky men¹í nebo rovná $2^k$.\foot{Bli¾¹í prùzkum +jeho¾ velikost je mocnina dvojky men¹í nebo rovná $2^k$. + +Bli¾¹í prùzkum na¹ich úvah o~FFT dokonce odhalí, ¾e není ani potøeba tìleso. Postaèí libovolný komutativní okruh, ve~kterém existuje pøíslu¹ná primitivní odmocnina z~jednièky, její multiplikativní inverze (ta ov¹em existuje v¾dy, proto¾e $\omega^{-1} = \omega^{n-1}$) a multiplikativní inverze èísla~$n$. To nám poskytuje je¹tì daleko více volnosti ne¾ tìlesa, ale není snadné takové okruhy -hledat.} +hledat. + +Výhodou tìchto podob Fourierovy transformace je, ¾e na rozdíl od~té klasické komplexní +nejsou zatí¾eny zaokrouhlovacími chybami (komplexní odmocniny z~jednièky mají obì slo¾ky +iracionální). To se hodí napøíklad ve~zmiòovaných algoritmech na násobení velkých èísel. \bye