BAKALÁŘSKÁ PRÁCE. Martina Klejchová Rychlá Fourierova transformace

Podobné dokumenty
KTE/TEVS - Rychlá Fourierova transformace. Pavel Karban. Katedra teoretické elektrotechniky Fakulta elektrotechnická Západočeská univerzita v Plzni

Transformace obrazu Josef Pelikán KSVI MFF UK Praha

FOURIEROVA ANAL YZA 2D TER ENN ICH DAT Karel Segeth

Quantization of acoustic low level signals. David Bursík, Miroslav Lukeš

Přednáška 3: Limita a spojitost

Matematika (KMI/PMATE)

Matematika I (KMI/PMATE)

Matice přechodu. Pozorování 2. Základní úkol: Určete matici přechodu od báze M k bázi N. Každou bázi napíšeme do sloupců matice, např.

Funkce komplexní proměnné a integrální transformace

(Cramerovo pravidlo, determinanty, inverzní matice)

BAKALÁŘSKÁ PRÁCE. Podmíněné hustoty

0.1 Funkce a její vlastnosti

0.1 Úvod do lineární algebry

Aplikovaná numerická matematika - ANM

Řetězové zlomky. již čtenář obeznámen. Důraz bude kladen na implementační stránku, protože ta je ve

0.1 Úvod do matematické analýzy

7. Funkce jedné reálné proměnné, základní pojmy

APROXIMACE KŘIVEK V MATLABU NEWTONŮV INTERPOLAČNÍ POLYNOM CURVE FITTING IN MATLAB NEWTON INTERPOLATION POLYNOMIAL

X = x, y = h(x) Y = y. hodnotám x a jedné hodnotě y. Dostaneme tabulku hodnot pravděpodobnostní

Filtrace snímků ve frekvenční oblasti. Rychlá fourierova transformace

Racionální čísla. teorie řešené úlohy cvičení tipy k maturitě výsledky. Víš, že. Naučíš se

VYUŽITÍ MATLABU PRO PODPORU VÝUKY A PŘI ŘEŠENÍ VÝZKUMNÝCH ÚKOLŮ NA KATEDŘE KOMUNIKAČNÍCH A INFORMAČNÍCH SYSTÉMŮ

CVIČNÝ TEST 15. OBSAH I. Cvičný test 2. Mgr. Tomáš Kotler. II. Autorské řešení 6 III. Klíč 15 IV. Záznamový list 17

31ZZS 9. PŘEDNÁŠKA 24. listopadu 2014

SIGNÁLY A SOUSTAVY, SIGNÁLY A SYSTÉMY

PRIMITIVNÍ FUNKCE DEFINICE A MOTIVACE

Úvod do zpracování signálů

Limita funkce. FIT ČVUT v Praze. (FIT) Limita funkce 3.týden 1 / 39

PRIMITIVNÍ FUNKCE. Primitivní funkce primitivní funkce. geometrický popis integrály 1 integrály 2 spojité funkce konstrukce prim.

9. T r a n s f o r m a c e n á h o d n é v e l i č i n y

1 Determinanty a inverzní matice

1 Mnohočleny a algebraické rovnice

MATURITNÍ TÉMATA Z MATEMATIKY

Periodicita v časové řadě, její popis a identifikace, exponenciální vyrovnáván

Úlohy nejmenších čtverců

Volba zobrazení (Direct Current, Scaling) - FFT 1D, FFT 2D

1 Mnohočleny a algebraické rovnice

Modelování systémů a procesů (11MSP) Bohumil Kovář, Jan Přikryl, Miroslav Vlček. 8. přednáška 11MSP pondělí 20. dubna 2015

sin(x) x lim. pomocí mocninné řady pro funkci sin(x) se středem x 0 = 0. Víme, že ( ) k=0 e x2 dx.

Lineární algebra : Násobení matic a inverzní matice

Matematika (CŽV Kadaň) aneb Úvod do lineární algebry Matice a soustavy rovnic

12 DYNAMIKA SOUSTAVY HMOTNÝCH BODŮ

9. T r a n s f o r m a c e n á h o d n é v e l i č i n y

Příklad 1. Řešení 1a. Řešení 1b ŘEŠENÉ PŘÍKLADY Z M1B ČÁST 5

ANALÝZA LIDSKÉHO HLASU

Příklad 1. Řešení 1a Máme vyšetřit lichost či sudost funkce ŘEŠENÉ PŘÍKLADY Z M1A ČÁST 3

VYBRANÉ PARTIE Z NUMERICKÉ MATEMATIKY

Derivace funkce Otázky

Management rekreace a sportu. 10. Derivace

Zimní semestr akademického roku 2014/ prosince 2014

1 Projekce a projektory

Pomocný text. Polynomy

Metody výpočtu limit funkcí a posloupností

Derivace funkce DERIVACE A SPOJITOST DERIVACE A KONSTRUKCE FUNKCÍ. Aritmetické operace

0.1 Úvod do lineární algebry

9. cvičení z Matematické analýzy 2

5. Náhodná veličina. 2. Házíme hrací kostkou dokud nepadne šestka. Náhodná veličina nabývá hodnot z posloupnosti {1, 2, 3,...}.

" Furierova transformace"

Univerzita Karlova v Praze procesy II. Zuzana. funkce

Lineární algebra : Násobení matic a inverzní matice

NMAF 051, ZS Zkoušková písemná práce 16. ledna 2009

Hisab al-džebr val-muqabala ( Věda o redukci a vzájemném rušení ) Muhammada ibn Músá al-chvárizmího (790? - 850?, Chiva, Bagdád),

South Bohemia Mathematical Letters Volume 23, (2015), No. 1, DĚLENÍ KRUHU NA OBLASTI ÚVOD

Interpolace, ortogonální polynomy, Gaussova kvadratura

Numerická stabilita algoritmů

U Úvod do modelování a simulace systémů

Posloupnosti a jejich limity

Definice. Vektorový prostor V nad tělesem T je množina s operacemi + : V V V, tj. u, v V : u + v V : T V V, tj. ( u V )( a T ) : a u V které splňují


Číselné charakteristiky a jejich výpočet

Derivace funkcí více proměnných

Nejčastějšími funkcemi, s kterými se setkáváme v matematice i v jejích aplikacích, jsou

SIGNÁLY A LINEÁRNÍ SYSTÉMY

Determinanty. Obsah. Aplikovaná matematika I. Pierre Simon de Laplace. Definice determinantu. Laplaceův rozvoj Vlastnosti determinantu.

Monotonie a lokální extrémy. Konvexnost, konkávnost a inflexní body. 266 I. Diferenciální počet funkcí jedné proměnné

Gymnázium Jiřího Ortena, Kutná Hora

Několik aplikací. Kapitola 12

MĚŘENÍ A ANALÝZA ELEKTROAKUSTICKÝCH SOUSTAV NA MODELECH. Petr Kopecký ČVUT, Fakulta elektrotechnická, Katedra Radioelektroniky

Kapitola 1: Reálné funkce 1/13

CVIČENÍ 4 Doc.Ing.Kateřina Hyniová, CSc. Katedra číslicového návrhu Fakulta informačních technologií České vysoké učení technické v Praze 4.

1 Lineární prostory a podprostory

SOUSTAVY LINEÁRNÍCH ALGEBRAICKÝCH ROVNIC

Polynomy. Mgr. Veronika Švandová a Mgr. Zdeněk Kříž, Ph. D. 1.1 Teorie Zavedení polynomů Operace s polynomy...

Soustavy se spínanými kapacitory - SC. 1. Základní princip:

Maticí typu (m, n), kde m, n jsou přirozená čísla, se rozumí soubor mn veličin a jk zapsaných do m řádků a n sloupců tvaru:

Relativní Eulerova funkce

označme j = (0, 1) a nazvěme tuto dvojici imaginární jednotkou. Potom libovolnou (x, y) = (x, 0) + (0, y) = (x, 0) + (0, 1)(y, 0) = x + jy,

Derivace funkce. prof. RNDr. Čestmír Burdík DrCs. prof. Ing. Edita Pelantová CSc. Katedra matematiky BI-ZMA ZS 2009/2010

Funkce základní pojmy a vlastnosti

Teorie informace a kódování (KMI/TIK) Reed-Mullerovy kódy

Gymnázium Jiřího Ortena, Kutná Hora

Mgr. Ladislav Zemánek Maturitní okruhy Matematika Obor reálných čísel

10. N á h o d n ý v e k t o r

[1] Determinant. det A = 0 pro singulární matici, det A 0 pro regulární matici

2 Reálné funkce jedné reálné proměnné

VZOROVÝ TEST PRO 1. ROČNÍK (1. A, 3. C)

CVIČNÝ TEST 5. OBSAH I. Cvičný test 2. Mgr. Václav Zemek. II. Autorské řešení 6 III. Klíč 17 IV. Záznamový list 19

1. Několik základních pojmů ze středoškolské matematiky. Na začátku si připomeneme následující pojmy:

SIGNÁLY A LINEÁRNÍ SYSTÉMY

Transkript:

Univerzita Karlova v Praze Matematicko-fyzikální fakulta BAKALÁŘSKÁ PRÁCE Martina Klejchová Rychlá Fourierova transformace Katedra numerické matematiky Vedoucí bakalářské práce: Doc. RNDr. Najzar Karel, CSc. Studijní program: Matematika, Obecná matematika 2008

Na tomto místě bych chtěla poděkovat Doc. RNDr. Karlu Najzarovi, CSc. za zapůjčení veškeré potřebné literatury a za ochotu při vedení mé práce. Prohlašuji, že jsem svou bakalářskou práci napsala samostatně a výhradně s použitím citovaných pramenů. Souhlasím se zapůjčováním práce a jejím zveřejňováním. V Praze dne 29.5.2008 Martina Klejchová

Obsah 1 Úvod 5 2 Diskrétní Fourierova transformace 6 2.1 Definice diskrétní Fourierovy transformace............. 6 2.2 Vyjádření diskrétní Fourierovy transformace pomocí vybraných posloupností.................................. 7 3 Rychlá Fourierova transformace pro N = 2 m 9 3.1 Danielsonovo-Lanczosovo lemma................... 9 3.2 Algoritmus rychlé Fourierovy transformace metodou vybraných vstupních posloupností........................... 10 3.3 Znázornění algoritmu pomocí signálových grafů.......... 11 3.4 Složitost výpočtu........................... 13 3.5 Modifikace algoritmu......................... 14 3.6 Algoritmus rychlé Fourierovy transformace metodou vybraných obrazových posloupností.......................... 16 4 Rychlá Fourierova transformace s obecným základem 20 4.1 Rychlá Fourierova transformace pro N = r 1 r 2...r m......... 20 4.2 Rychlá Fourierova transformace pro N prvočíselné......... 21 5 Testování algoritmu na zadaných datech 22 Literatura 25 3

Název práce: Rychlá Fourierova transformace Autor: Martina Klejchová Katedra: Katedra numerické matematiky Vedoucí bakalářské práce: Doc. RNDr. Najzar Karel, CSc. e-mail vedoucího: Karel.Najzar@mff.cuni.cz Abstrakt: Diskrétní Fourierova transformace je nejrozšířenějším prostředkem pro numerický výpočet Fourierovy transformace a pro numerickou harmonickou analýzu. Obsahem této práce je podrobný popis asi nejznámějšího algoritmu pro její výpočet - algoritmu rychlé Fourierovy transformace (FFT). Je tu popsáno odvození algoritmu jak pro speciální případ posloupnosti dat s počtem členů 2 m, tak pro obecné posloupnosti vstupních dat. Algoritmus i některé jeho modifikace jsou zde též znázorněny pomocí signálových grafů. Práce pojednává také o výpočetní složitosti rychlé Fourierovy transformace v porovnání s přímým výpočtem diskrétní Fourierovy transformace. V závěru obsahuje konkrétní výsledky použití algoritmu na zadaných datech. Klíčová slova: rychlá Fourierova transformace, diskrétní Fourierova transformace, Danielsonovo- Lanczosovo lemma Title: Fast Fourier Transform Author: Martina Klejchová Department: Department of Numerical Mathematics Supervisor: Doc. RNDr. Najzar Karel, CSc. Supervisor s e-mail address: Karel.Najzar@mff.cuni.cz Abstract: Discrete Fourier transform is the most common tool for numeric calculation of Fourier transform and numeric harmonic analysis. This work contains detailed description of probably the most popular algorithm for its calculation - algorithm of Fast Fourier Transform (FFT). It describes the derivation of the algorithm for special case of data sequence with 2 m terms as well as for general input data sequence. The algorithm and some of its modifications are here depicted with the help of signal graphs. The work also deals with computing complexity of Fast Fourier Transform comparing to direct calculation of discrete Fourier transform. At the end of this work, there are concrete results of applying the algorithm on given data. Keywords: Fast Fourier Transform, Discret Fourier Transform, Danielson- Lanczos lemma 4

Kapitola 1 Úvod Rychlá Fourierova transformace je jedním z nejznámějších a také nejčastěji používaných algoritmů pro výpočet diskrétní Fourierovy transformace. Můžeme se s ní setkat všude, kde se používá diskrétní Fourierova transformace. Pro velké množství dat totiž nelze ani na současných počítačích diskrétní Fourierovu transformaci tak, jak je definována, spočítat v přijatelném čase. Využití nějakého efektivního postupu je tedy nutností. Diskrétní Fourierova transformace se uplatňuje v mnoha oborech - v elektrotechnice, při zpracování signálů, v akustice, geofyzice, seismologii, optice, při zpracování obrazů, spektrální analýze apod. Nalézáme ji především tam, kde nahrazuje spojitou Fourierovu transformaci, ale také například při matematickém a statistickém zpracovaní naměřených dat. O významu rychlé Fourierovy transformace tedy nemůže být pochyb. Algoritmus rychlé Fourierovy transformace byl poprvé publikován v roce 1965 J. W. Cooleyem a J. W. Tukeyem pod názvem Fast Fourier Transform (FFT). Po roce 1965 byl předmětem intenzivního zájmu a vznikaly různé modifikace. Pro běžné použití k výpočtům na počítačích jsou tyto modifikace víceméně ekvivalentní. V následující kapitole zavedu pojem diskrétní Fourierovy transformace a zmíním se o některých jejích vlastnostech důležitých pro popis rychlé Fourierovy transformace. Dále již přijde na řadu popis a odvození samotného algoritmu a také jeho znázornění pomocí signálových grafů, vše nejprve pro speciální případ posloupnosti dat délky N = 2 m, poté i pro obecnější posloupnost. Zmíním se také o počtu operací potřebných pro výpočet. Na závěr uvedu výsledky testování algoritmu na konkrétních datech. 5

Kapitola 2 Diskrétní Fourierova transformace 2.1 Definice diskrétní Fourierovy transformace Pod názvem diskrétní Fourierova transformace budeme rozumět jak přímou, tak i inverzní (zpětnou) Fourierovu transformaci. Definice přímé diskrétní Fourierovy transformace Mějme posloupnost N konečných komplexních čísel x j, j = 0, 1,..., N 1. Potom její přímá Fourierova transformace je definována jako posloupnost N komplexních hodnot X k daných vzorcem X k = N 1 j=0 x j e ijk2π/n, k = 0, 1,...N 1. (2.1) Posloupnost X k nazývame též obrazem posloupnosti x j. Definice inverzní diskrétní Fourierovy transformace Je-li X k, k = 0, 1,..., N 1, posloupnost N komplexních čísel, její zpětná Fourierova je dána posloupností x j, kde x j = 1 N N 1 k=0 X k e ijk2π/n, pro j = 0, 1,..., N 1. (2.2) Je-li posloupnost X k obrazem posloupnosti x j, potom jejím dosazením do vztahu (2.2) získáme původní posloupnost x j. Vztah (2.2) je tedy inverzní k vzorci (2.1) a oba vztahy vyjadřují jednoznačné přiřazení jedné posloupnosti k druhé. Z definic také vyplývá, že přímá diskrétní Fourierova transformace a inverzní diskrétní Fourierova transformace definují periodické posloupnosti x j = x j+µn, µ = 0, ±1, ±2,..., X k = X k+νn, ν = 0, ±1, ±2,... 6

To platí, neboť x j+µn = 1 N N 1 k=0 X k e i(j+µn)k2π/n = 1 N N 1 k=0 X k e ijk2π/n e iµnk2π/n = analogicky i pro X k. = 1 N N 1 k=0 X k e ijk2π/n = x j, V dalších kapitolách budeme používat pro zjednodušení zápis x i ˆ=X k pro vyjádření vzájemně jednoznačného přiřazení posloupností x i a X k pomocí diskrétní Fourierovy transformace. Dále potom budeme někdy pro větší přehlednost značit e i2π/n = W N. Algoritmus rychlé Fourierovy transformace budeme odvozovat pouze pro přímou diskrétní Fourierovu transformaci. Pro inverzní transformaci totiz stačí dosadit do algoritmu místo hodnot x j posloupnost 1 X N k a místo W N číslo komplexně sdružené, tedy WN = e 2π/N. 2.2 Vyjádření diskrétní Fourierovy transformace pomocí vybraných posloupností Mějmě posloupnost x j, j = 0, 1,..., N 1, a její diskrétní Fourierovu transformaci popsanou vzorcem X k = N 1 j=0 x j e ijk2π/n, k = 0, 1,...N 1. Pokud N lze napsat jako součin celých čísel p, M (tedy N = pm), můžeme diskrétní Fourierovu transformaci vyjádřit také pomocí diskrétní Fourierovy transformace vybraných posloupností vytvořených následujícím způsobem: Z posloupnosti x j vezmeme každý p-tý člen počínaje m-tým členem. Tak vznikne celkem p vybraných posloupností délky M = N/p. Diskrétní Fourierovu transformaci celé posloupnosti můžeme potom tedy napsat, pro k = 0, 1,..., N 1, ve tvaru X k = p 1 M 1 m=0 ν=0 x m+νp e ik(m+νp)2π/n = p 1 M 1 m=0 ν=0 7 x νp+m e ikν2π/m e ikm2π/n. (2.3)

Dále pokud vyjádříme index k ve tvaru k = µm + n, µ = 0, 1,..., p 1, n = 0, 1,..., M 1, dostaneme následující vzorec: X µm+n = p 1 m=0 [e imn2π/n ( M 1 ν=0 x νp+m e iνn2π/m )] e iµm2π/p. (2.4) Tato dvě vyjádření jsou důležitá pro pozdější odvození algoritmu rychlé Fourierovy transformace. Představují totiž základ pro snížení počtu početních úkonů. 8

Kapitola 3 Rychlá Fourierova transformace pro N = 2 m 3.1 Danielsonovo-Lanczosovo lemma Lemma: Mějme posloupnost x j ˆ=X k o N členech, kde N je sudé. Rozdělíme ji na posloupnost lichých členů a na posloupnost sudých členů, obě o N/2 členech. Potom posloupnost X k lze popsat následujícím vztahem: X k = N 1 j=0 x j e ijk2π/n = (N/2) 1 ν=0 Označíme obraz posloupnosti sudých členů (N/2) 1 ν=0 a obraz posloupnosti lichých členů (N/2) 1 ν=0 (N/2) 1 x 2ν e iνk2π/(n/2) + e ik2π/n ν=0 x 2ν+1 e iνk2π/(n/2), (3.1) k = 0, 1,..., N 1. x 2ν e iνk2π/(n/2) = X 0 k, k = 0, 1,..., N/2 1, (3.2) x 2ν+1 e iνk2π/(n/2) = X 1 k, k = 0, 1,...N/2 1. (3.3) Pak obraz původní posloupnosti můžeme zapsat ve tvaru X k = X 0 k + e ik2π/n X 1 k = X 0 k + W k NX 1 k, k = 0, 1,..., N 1. (3.4) Důkaz: Jde vlastně o speciální případ vzorce (2.3) pro p = 2. 9

Pokud si navíc uvědomíme, že posloupnosti hodnot X 0 k a X 1 k, k = 0, 1,..., N/2 1, jsou periodické s periodou N/2, a tudíž X 0 k = X 0 k+n/2, k = 0, 1,..., N/2 1, X 1 k = X 1 k+n/2, k = 0, 1,..., N/2 1, pro hodnoty obrazu původní posloupnosti platí následující dva vztahy: k = 0, 1,..., N/2 1. X k = X 0 k + W k NX 1 k, (3.5) X k+n/2 = X 0 k + W k+n/2 N X 1 k = X 0 k W k NX 1 k, (3.6) 3.2 Algoritmus rychlé Fourierovy transformace metodou vybraných vstupních posloupností Tato varianta algoritmu vytvořená J.W.Cooleyem a J. W. Tukeyem bývá též nazývána "algoritmem decimování v čase" neboli algoritmem DIT. Základem tohoto algoritmu je rekurentní vzorec (3.4) získaný z Danielsonova- Lanczosova lemmatu. Tento vzorec nám původní vztah (2.1) pro výpočet diskrétní Fourierovy transformace posloupnosti x j, j = 0, 1,..., N 1, rozdělí na součet diskrétních Fourierových transformací dvou podposloupností o polovičním počtu složek - posloupnosti sudých členů {Xk}, 0 popsané vzorcem (3.2) a posloupnosti lichých členů {Xk}, 1 dané pomocí (3.3). Posloupnost {X k } tedy můžeme vypočítat tak, že nejprve stanovíme posloupnosti {Xk} 0 a {Xk} 1, a potom pomocí vzorců (3.5) a (3.6) spočteme hodnoty X k, k = 0, 1,...N 1. Nic nám ovšem nebrání obě posloupnosti, {Xk} 0 i {Xk}, 0 každou zvlášť, znovu rozložit na podposloupnost sudých a podposloupnost lichých členů, a poté na ně opět aplikovat Danielsonovo- Lanczosovo lemma a vzorce (3.5) a (3.6). Při použití značení zavedeného v lemmatu, máme nyní čtyři posloupnosti (Xk 00, Xk 01, Xk 10, Xk 11 ) délky N/4 získané Fourierovou transformací členů posloupnosti {x j }. Pomocí nich můžeme vypočítat všechny prvky X k. Předchozí postup provádíme rekurzívně tak dlouho, dokud nemáme celou posloupnost X k, k = 0, 1,..., N 1, díky opakovanému užití vzorců (3.5) a (3.6) vyjádřenou jako lineární kombinaci N Fourierových transformací délky 1 vzniklých z některého prvku x j, j = 0, 1,..., N 1, původní posloupnosti. Tyto Fourierovy transformace označíme X 00...0 k, X 00...1 k,..., X 11...1 k, kde horních indexů je právě m (neboť N = 2 m ). Zjistit, které j odpovídá konkrétní posloupnosti indexů 0 a 1, můžeme tak, že posloupnost 0 a 1 čteme odzadu. Výsledkem je potom dvojkový zápis čísla j. 10

Jelikož N = 2 m, algoritmus má celkem m kroků. Některé operace s prvky se díky periodičnosti Fourierovy transformace během algoritmu opakují, proto pokud správně využijeme všechny mezivýsledky, výrazně snížíme počet potřebných komplexních sčítání i násobení. To bude dobře vidět v další kapitole, až si znázorníme algoritmus pomocí signálových grafů. 3.3 Znázornění algoritmu pomocí signálových grafů Během algoritmu se stále opakuje výpočet podle vzorců (3.5) a (3.6). Ten můžeme graficky znázornit pomocí tzv. motýlků, které odpovídají znázornění výpočtu diskrétní Fourierovy transformace pro N = 2. Obr.1: Motýlek (převzato z [1] str. 116). Nalevo ještě před zjednodušením, obsahuje dvě komplexní násobení, dvě komplexní sčítání. Napravo výhodnější varianta je zde pouze jedno komplexní násobení (násobení číslem -1 nepočítáme, jde jen o úpravu znaménka) a dvě komplexní sčítání. V jednom motýlku se provádí jedno komplexní sčítání, jedno komplexní odčítání a jedno komplexní násobení. Nyní si ukážeme jednotlivé kroky algoritmu znázorněné pomocí signálových grafů pro konkrétní případ N = 8: 11

Obr. 2: První krok výpočtu diskrétní Fourierovy transformace pro N = 8 vybíráním ze vstupní posloupnosti (převzato z [1] str. 116). Obr. 3: Druhý krok výpočtu diskrétní Fourierovy transformace pro N = 8 vybíráním ze vstupní posloupnosti (převzato z [1] str. 117). 12

Obr. 4: Celkový postup výpočtu diskrétní Fourierovy transformace pro N = 8 vybíráním ze vstupní posloupnosti - algoritmus rychlé Fourierovy transformace s neproměnným pořadím a s bitově invertovanou vstupní posloupností (převzato z [1] str. 118). 3.4 Složitost výpočtu Abychom zjistili počet komplexních operací, které musíme provést v průběhu algoritmu rychlé Fourierovy transformace, vyjdeme ze signálových grafů. Místo N = 8 budeme nyní uvažovat obecné N = 2 m. Počet sloupců v grafu bude v tomto případě roven číslu m, tedy log 2 N, a v každém sloupci je N/2 motýlků. Z obrázku 1 vidíme, že v každém motýlku se provádí jedno komplexní násobení a dvě komplexní sčítání (přesněji tedy jedno komplexní sčítání a jedno komplexní odčítání). Celkem nás tedy algoritmus rychlé Fourierovy transformace "stojí" N 2 log 2N komplexních násobení a Nlog 2 N komplexních sčítání. Pokud bychom chtěli vypočítat hodnoty X k, k = 0, 1,..., N 1, prostým dosazením do definičního vzorce diskrétní Fourierovy transformace X k = N 1 j=0 x j e ijk2π/n, k = 0, 1,...N 1, 13

museli bychom provést N 2 komplexních násobení a N 2 komplexních sčítání. Řádově tedy dojde k výrazné úspoře, místo původních O (N 2 ) operací se při Fourierově transformaci dostaneme na pouhých O (Nlog 2 N). Pro velká N, která při praktických výpočtech rozhodně nejsou výjimkou, se tento rozdíl projeví opravdu viditelně. 3.5 Modifikace algoritmu Výsledkem algoritmu popsaného v předchozích kapitolách jsou všechny hodnoty X k, k = 0, 1,..., N 1, získané v přirozeném pořadí. Vstupní posloupnost ovšem má v tomto případě bitově invertované pořadí indexů. Algoritmus však můžeme v případě potřeby snadno modifikovat tak, že vstupní posloupnost do něj dosazujeme v původním pořadí indexů a v bitově invertovaném pořadí jsou výstupní hodnoty X k (obr. 5). Případně lze graf upravit i tak, že v původním pořadí jsou obě posloupnosti, vstupní i výstupní (obr. 6). Další variantou je algoritmus s neproměnnou strukturou(tzn. všechny sloupce mají stejnou strukturu) s bitově invertovanou vstupní posloupností (obr. 7). Máme tedy celkem tři různé modifikace původního algoritmu, které si nyní znázorníme pro N = 8 pomocí signálových grafů. Obr. 5: Algoritmus rychlé Fourierovy transformace s neproměnným pořadím a s bitově invertovanou výstupní posloupností (převzato z [1] str. 119). 14

Obr. 6: Algoritmus rychlé Fourierovy transformace s proměnnou strukturou a přirozeným pořadím ve vstupní i obrazové posloupnosti (převzato z [1] str. 120). Obr. 7: Algoritmus rychlé Fourierovy transformace s neproměnnou strukturou a s bitově invertovanou vstupní posloupností (převzato z [1] str. 120). 15

3.6 Algoritmus rychlé Fourierovy transformace metodou vybraných obrazových posloupností Tuto variantu algoritmu můžeme v literatuře nalézt též pod názvem metoda decimování ve frekvencích nebo metoda DIF. Jde vpodstatě o jakési "obrácení" algoritmu decimování v čase. Tentokrát nejprve samostatně vyjádříme sudé a liché členy z obrazové posloupnosti X k, k = 0, 1,..., N 1: K tomu vvyužijeme vzorec (2.4). Máme tedy pro sudé členy výraz X 2µ = N/2 1 + j=0 N 1 j=0 pro liché členy pak X 2µ+1 = N 1 j=0 x j e ij2µ2π/n = x j+n/2 e ijµ2π/(n/2) = x j e ij(2µ+1)2π/n = N 1 j=0 N/2 1 j=0 N/2 1 j=0 x j e ijµ2π/(n/2) = N/2 1 j=0 x j e ijµ2π/(n/2) + ( xj e ijµ2π/(n/2) + x j+n/2 e ijµ2π/(n/2)), [ xj e ijµ2π/(n/2) x j+n/2 e ijµ2π/(n/2)] e ij2π/n, kde µ = 0, 1,..., N/2 1. Členy X 2µ tedy nyní máme vyjádřené ve tvaru diskrétní Fourierovy transformace posloupnosti { } x j + x j+n/2 a členy X2µ+1 počítáme jako diskrétní Fourierovu transformaci posloupnosti {( x j x j+n/2 ) e ij2π/n }, j = 0, 1,..., N 1. Z těchto dvou nově vzniklých Fourierových transformací opět zvlášť vyjádříme sudé a liché členy, tak jako jsme to provedli pro původní obrazovou posloupnost {X k }. Postupujeme analogicky, dokud nemáme posloupnost rozloženou na N transformací délky 1. Počet potřebných operací se nám sníží stejně jako v předchozích případech použitím motýlků: 16

Celý postup si znázorníme pro N = 8: Obr. 9: První krok výpočtu diskrétní Fourierovy transformace pro N = 8 vybíráním z obrazové posloupnosti (převzato z [1] str. 121). 17

Obr. 10: Druhý krok výpočtu diskrétní Fourierovy transformace pro N = 8 vybíráním z obrazové posloupnosti (převzato z [1] str. 122). Obr. 11: Celkový postup výpočtu diskrétní Fourierovy transformace pro N = 8 vybíráním z obrazové posloupnosti - algoritmus rychlé Fourierovy transformace s neproměnným pořadím a s bitově invertovanou výstupní posloupností (převzato z [1] str. 123). 18

Je vidět, že k tomu, abychom z grafu popisujícího metodu vybraných obrazových posloupností získali graf algoritmu založeného na vybraných vstupních posloupnostech, stačí pouze zaměnit směry všech šipek. Koeficienty u W N zůstávají stejné. Je tedy jasné, že co se týče počtu operací, jsou oba algoritmy stejně náročné. I u metody vybraných obrazových posloupností můžeme vytvořit další tři modifikace základního algoritmu, které odpovídají grafům na obrázcích 5, 6 a 7, pokud v nich změníme směry šipek a čteme je zprava doleva. 19

Kapitola 4 Rychlá Fourierova transformace s obecným základem 4.1 Rychlá Fourierova transformace pro N = r 1 r 2...r m Algoritmus rychlé Fourierovy transformace pro N = 2 M popsaný v předchozí kapitole lze snadno zobecnit pro N = r M, kde r 2 je celé číslo. Posloupnost {x j } rozdělíme na r vybraných podposloupností { } x m j, m = 0, 1,...r 1, délky r M 1 tak, že vždy bereme každý r-tý člen počínaje m-tým. Pro tyto posloupnosti použijeme opět vyjádření pomocí vztahu (2.4), tentokrát ovšem místo p = 2 dosazujeme p = r. Dále se postupuje analogicky jako pro případ p = 2, tedy rekurzivně rozkládáme vzniklé podposloupnosti vždy znovu na r dalších podposloupností, dokud neobdržíme podposloupnosti délky právě jedna, které odpovídají Fourierovým transformacím délky jedna členů původní posloupnosti {x j }. I v tomto případě využijeme periodičnosti diskrétní Fourierovy transformace - některé mezivýsledky budeme moci využít vícekrát, aniž bychom je vícekrát museli počítat, čímž snížíme počet potřebných operací (v grafu bychom toto znázornili pomocí motýlků). Podobně, opět s využitím vztahu (2.4), bychom mohli postupovat i pro obecné N = r 1 r 2...r m. Pro větší názornost zde uvedu znázornění algoritmu pro konkrétní případ N = 3.2 = 6 (obr. 12). Vzorec, který v tomto případě dostaneme z (2.4), je v následujícím tvaru: ( 1 2 ) X 3µ+n = e imn2π/6 x 2ν+m e inν2π/3 e imµ2π/2. m=0 ν=0 20

Obr. 12: Postup výpočtu diskrétní Fourierovy transformace pro N = 6, p = 2, M = 3 (převzato z [1] str. 127). 4.2 Rychlá Fourierova transformace pro N prvočíselné Pokud N je prvočíslo, nemůžeme algoritmy popsané výše použít. V tom případě je jednou z možností rozšířít původní posloupnost nulovými členy tak, aby počet členů takto vzniklé posloupnosti byl roven 2 m pro nějaké celé číslo m. Potom můžeme použít algoritmus rychlé Fourierovy transformace pro N = 2 m. 21

Kapitola 5 Testování algoritmu na zadaných datech Efektivitu algoritmu rychlé Fourierovy transformace jsem ověřila na konkrétním příkladě. Jako testovací vstupní data jsem použila posloupnost danou vzorcem x j = sin πj2, j = 0, 1,..., N 1 256 (viz [2], str.9, cvičení 1.2.3). Za N jsem postupně volila hodnoty 2 m pro m = 3,..., 9. Diskrétní Fourierovu transformaci jsem potom pro každé N vypočítala nejprve pomocí algoritmu rychlé Fourierovy transformace metodou vybraných vstupních posloupností s neproměnným pořadím a s bitově invertovanou vstupní posloupností, který je popsán v kapitole 3.2, potom i přímým dosazením do vzorce (2.1), kterým je diskrétní Fourierova transformace definována. Pro hodnoty N vyšší než 512 byl již výpočet diskrétní Fourierovy transformace dosazením do definičního vzorce příliš časově náročný, proto jsem pro N = 1024 a N = 2048 použila už jen rychlou Fourierovu transformaci. Doby výpočtů v sekundách jsou pro jednotlivá N pro oba algoritmy uvedeny v následující tabulce: 22

Jak je vidět z údajů uvedených v tabulce, výhodnost rychlé Fourierovy transformace se pro velké hodnoty N projevuje opravdu výrazně. Pro N = 128 je rychlá Fourierova transformace rychlejší téměř stokrát, pro N = 512 dokonce skoro tisíckrát. Rozdílu si však můžeme všimnout již u N = 32. Oba algoritmy jsem vytvořila v programu Mathematica 6. Zde jsou jejich realizace. Nejprve program pro výpočet diskrétní Fourierovy transformace dosazením do (2.1): (*delka vstupni posloupnosti*) n=128; (*vektor vstupni posloupnosti*) A=Array[Sin[(p*(#) 2 )/256]&,n,0]; W= - *2*p/n; Wk=Array[0,n]; X=Array[0,n]; For[k=0,k<n,k++,X[[k+1]]=0;] (*predpocitane hodnoty (W^k): *) For[k=0,k<n,k++,Wk[[k+1]]=W k ;] (*DFT vypocitana podle definicniho vzorce:*) For[k=0,k<n,k++, For[i=0,i<n,i++, X[[k+1]]=X[[k+1]]+A[[i+1]]*Wk[[Mod[k*i,n] +1]]; ] ] (*zobrazi hodnoty obrazove posloupnosti:*) Print[N[X]]; Na následující straně se potom nachází realizace algoritmu rychlé Fourierovy transformace metodou vybraných vstupních posloupností s neproměnným pořadím a s bitově invertovanou vstupní posloupností: 23

(*delka vstupni posloupnosti*) n=128; (*vektor vstupni posloupnosti*) A=Array[Sin[(p*(#)2)/256]&,n,0]; log=log[2,n]; W= - *2*p/n; X=Array[0,n]; (*bitova inverze:cleny vstupni posloupnosti se ulozi do pole X v poradi potrebnem pro algoritmus FFT, predstavuji vlastne jiz DFT delky 1 *) For[i=0,i<n,i++, k=mod[i,2]; t=integerpart[i/2]; For[j=1,j<log,j++, k=mod[t,2]+k*2; t=integerpart[t/2] ]; X[[k+1]]=A[[i+1]]; ]; (*predpocitani hodnot W^i,i=0,...,N/2-1, jsou ulozeny do pole A:*) For[i=0,i<n/2,i++,A[[i+1]]=Wi;] (*vlastni algoritmus FFT: d...aktualni delka posloupnosti, ze kterych v danem kroku vybirame liche a sude cleny pocetposl...pocet posloupnosti v danem kroku *) d=1; For[i=0,i<log,i++, d=d*2; pocetposl=n/d; For[k=1,k<(n+1),k=k+d, For[j=0,j<d/2,j++, (*MOTYLEK:*) X[[k+j+d/2]]=X[[k+j+d/2]]*A[[j*pocetposl+1]]; pom=x[[k+j+d/2]]+x[[k+j]]; X[[k+j+d/2]]=X[[k+j]]-X[[k+j+d/2]]; X[[k+j]]=pom; ]; ] ] Print[N[X]]; (* zobrazi obrazovou posloupnost*) 24

Literatura [1] Čížek V.: Diskrétní Fourierova transformace a její použití, SNTL, Praha, 1981. [2] Najzar K.: Základy teorie waveletů, Karolinum, Praha, 2004. [3] Segeth K.: Numerický software I, Karolinum, Praha, 1998. 25