Zaawansowane metody numeryczne Dyskretna transformacja
Transkrypt
Zaawansowane metody numeryczne Dyskretna transformacja
Transformacje Fouriera Zaawansowane metody numeryczne dr Artur Woike Wykład 8 Transformacje Fouriera dr Artur Woike Transformacje Fouriera Zaawansowane metody numeryczne Dyskretna i szybka transformacja Fouriera Dyskretna transformacja sinusowa i cosinusowa Dyskretna transformacja Fouriera i jej odwrotność Definicja 8.1. (DFT, IDFT) i2π Niech N > 0 będzie dowolne, wN = e N i a = {a0 , . . . , aN−1 } będzie wektorem danych. Oznaczmy wektor wynikowy przez A = {A0 , . . . , AN−1 }. Dyskretna transformacja Fouriera (DFT) wektora a jest zdefiniowana następująco: ∀n=0,...,N−1 X 1 N−1 An = ak wN−kn . N k=0 Odwrotna dyskretna transformacja Fouriera (IDFT) jest dana przez: ∀k=0,...,N−1 ak = N−1 X An wNkn . n=0 dr Artur Woike Zaawansowane metody numeryczne Dyskretna i szybka transformacja Fouriera Dyskretna transformacja sinusowa i cosinusowa Transformacje Fouriera Interpretacja dyskretnej transformacji Fouriera Fakt 8.1. Jeżeli współczynniki ak są wartościami pewnej funkcji zespolonej f w punktach xk = 2πk N (k = 0, . . . , N − 1), czyli 2πk ∀k=0,...,N−1 ak = f , N to funkcję f można przybliżać zespolonym wielomianem trygonometrycznym F postaci N−1 X F (x) = An e ikx , n=0 gdzie ∀n=0,...,N−1 N−1 i2πkn 1 X 2πk f An = e− N . N N k=0 dr Artur Woike Transformacje Fouriera Zaawansowane metody numeryczne Dyskretna i szybka transformacja Fouriera Dyskretna transformacja sinusowa i cosinusowa Interpretacja dyskretnej transformacji Fouriera Uwaga. 1) W interpretacji DFT przyjmuje się na ogół, że funkcja f jest okresowa (o okresie 2π), a wektor danych a można przedłużyć do okresowego ciągu danych. 2) Jeśli wektor danych a zawiera wartości funkcji zespolonej f w odpowiednich węzłach , to wtedy wektor wynikowy DFT zastosowanej do a zawiera współczynniki zespolonego wielomianu trygonometrycznego F przybliżającego funkcję f . dr Artur Woike Zaawansowane metody numeryczne Transformacje Fouriera Dyskretna i szybka transformacja Fouriera Dyskretna transformacja sinusowa i cosinusowa Szybka transformacja Fouriera i jej algorytmy Szybka transformacja Fouriera (FFT) jest po prostu szybszym sposobem obliczania dyskretnej transformacji Fouriera. Standardowe algorytmy obliczania DFT dla wektora danych o długości N mają złożoność obliczeniową O(N 2 ). Wykorzystanie jednego ze znanych algorytmów obliczania FFT redukuje złożoność obliczeniową tego zagadnienia do O(N log2 N). Omówimy dwa popularne algorytmy FFT dla przypadku gdy N jest potegą liczby 2. dr Artur Woike Transformacje Fouriera Zaawansowane metody numeryczne Dyskretna i szybka transformacja Fouriera Dyskretna transformacja sinusowa i cosinusowa Szybka transformacja Fouriera i jej algorytmy Przykład 8.1. (złożoność obliczeniowa algorytmów DFT i FFT) Niech N = 100. Algorytm obliczenia DFT dla wektora tej długości wymaga wykonania O(N 2 ) = O(1002 ) = O(10000) mnożeń liczb zespolonych, podczas gdy algorytm obliczenia FFT dla wektora o takiej samej długości wymaga wykonania jedynie O(N log2 N) = O(100 log2 100) ≈ O(664) mnożeń liczb zespolonych. dr Artur Woike Zaawansowane metody numeryczne Transformacje Fouriera Dyskretna i szybka transformacja Fouriera Dyskretna transformacja sinusowa i cosinusowa Lemat Danielsona–Lanczosa Lemat 8.1. Dyskretna transformacja Fouriera dla wektora danych o długości N może być obliczona jako suma dwóch dyskretnych transformacji Fouriera dla wektorów danych o długości N2 . Jedna z nich jako dane bierze podwektor oryginalnego wektora danych o parzystych indeksach, a druga o nieparzystych indeksach. Uwaga. Lemat Danielsona–Lanczosa może być stosowany rekurencyjnie, aż do momentu, w którym mamy do czynienia jedynie z wektorami danych o długości 2. dr Artur Woike Transformacje Fouriera Zaawansowane metody numeryczne Dyskretna i szybka transformacja Fouriera Dyskretna transformacja sinusowa i cosinusowa Przygotowanie danych dla pierwszej wersji algorytmu FFT Algorytm przygotowania danych ma na celu takie ich przestawienie aby można było zastosować rekurencyjnie Lemat 5.1 (Danielsona– Lanczosa). Pozwoli to na zredukowanie problemu obliczenia dyskretnej transformacji Fouriera dla wektora danych o długości N do problemu obliczenia N2 dyskretnych transformacji Fouriera, każda dla wektora danych o długości 2. Uwaga. Po zakończeniu działania algorytmu przygotowania danych dla pierwszej wersji algorytmu obliczania FFT z N = 2r wektor danych a zawiera elementy już posortowane. Jeżeli w dalszym ciągu będziemy potrzebować początkowego wektora danych, to należy zapamiętać jego kopię przed rozpoczęciem procesu wstępnego sortowania danych. dr Artur Woike Zaawansowane metody numeryczne Transformacje Fouriera Dyskretna i szybka transformacja Fouriera Dyskretna transformacja sinusowa i cosinusowa Przygotowanie danych dla pierwszej wersji algorytmu FFT Niech N = 2r (r 1), a = {a0 , . . . , aN−1 } będzie wektorem danych i b = {b0 , . . . , bN−1 } będzie wektorem pomocniczym. Ponadto niech div (x, y ), gdzie x, y ∈ N, oznacza wynik dzielenia całkowitego (bez reszty) liczby x przez liczbę y . ALGORYTM SORTOWANIA DANYCH: dla j = 1, . . . , r − 1 (z krokiem 1) dla s = 1, . . . , 2j (z krokiem 2) dla l = 0, . . . , 2r −j − 1 (z krokiem 1) b(s−1)2r −j +l := adiv (s,2)2r −j+1 +2l ; dla s = 2, . . . , 2j (z krokiem 2) dla l = 0, . . . , 2r −j − 1 (z krokiem 1) b(s−1)2r −j +l := a(div (s,2)−1)2r −j+1 +2l+1 ; a := b; dr Artur Woike Transformacje Fouriera Zaawansowane metody numeryczne Dyskretna i szybka transformacja Fouriera Dyskretna transformacja sinusowa i cosinusowa Algorytm obliczania FFT - wersja pierwsza Niech N = 2r (r 1), a = {a0 , . . . , aN−1 } będzie wektorem danych (wcześniej odpowiednio posortowanych) i b = {b0 , . . . , bN−1 } będzie wektorem pomocniczym. ALGORYTM OBLICZANIA FFT - WERSJA NR 1: dla j = 0, . . . , r − 1 (z krokiem 1) dla s = 0, . . . , 2r −j−1 − 1 (z krokiem 1) dla k = 0, . . . , 2j − 1 (z krokiem 1) bs2j+1 +k := as2j+1 +k + w2−k j+1 a(2s+1)2j +k ; bs2j+1 +2j +k := as2j+1 +k − w2−k j+1 a(2s+1)2j +k ; a := b; a := N1 a; dr Artur Woike Zaawansowane metody numeryczne Transformacje Fouriera Dyskretna i szybka transformacja Fouriera Dyskretna transformacja sinusowa i cosinusowa Przygotowanie danych dla drugiej wersji algorytmu FFT Najpierw każde n, k = 0, . . . , N − 1 (gdzie N = 2r i r 1) zapisujemy w systemie binarnym: n= ∀q=1,...,r q=1 nq 2q−1 = n1 20 + n2 21 + . . . + nr 2r −1 , nq ∈ {0, 1} , k= ∀m=1,...,r Pr Pr m=1 kr −m+1 2m−1 = kr 20 + kr −1 21 + . . . + k1 2r −1 , kr −m+1 ∈ {0, 1} . Uwaga. Cyfry binarne w rozwinięciu liczby k zostały ponumerowane w odwrotną stronę niż zazwyczaj. Taki sposób numerowania cyfr jest nazywany odwróceniem bitowym. dr Artur Woike Transformacje Fouriera Zaawansowane metody numeryczne Dyskretna i szybka transformacja Fouriera Dyskretna transformacja sinusowa i cosinusowa Algorytm obliczania FFT - wersja druga Przykład 8.2. (indeksowanie w drugiej wersji algorytmu FFT) Niech r = 3, N = 8. Załóżmy, że mamy dane n, k ∈ {0, . . . , 7}, takie że (n)10 = (n3 n2 n1 )2 . Aby obliczyć współczynnik An musimy kolejno obliczać: A0 (000) = a0 A1 (n1 00) A2 (n1 n2 0) A3 (n1 n2 n3 ) = An A0 (001) = a1 A1 (n1 01) A2 (n1 n2 1) A0 (010) = a2 A1 (n1 10) A0 (011) = a3 A1 (n1 11) A0 (100) = a4 A0 (101) = a5 A0 (110) = a6 A0 (111) = a7 dr Artur Woike Zaawansowane metody numeryczne Dyskretna i szybka transformacja Fouriera Dyskretna transformacja sinusowa i cosinusowa Transformacje Fouriera Algorytm obliczania FFT - wersja druga Niech N = 2r (r 1), a = {a0 , . . . , aN−1 } będzie wektorem danych (nieposortowanych) i A = {A0 , . . . , AN−1 } będzie wektorem wynikowym. ALGORYTM OBLICZANIA FFT - WERSJA NR 2: dla (k)10 = 0, . . . , N−1 (z krokiem 1 i (k)10 = (k1 k2 . . . kr )2 ) A0 (k1 k2 . . . kr ) := a(k1 k2 ...kr )2 (= a(k)10 ); dla (n)10 = 0, . . . , N−1 (z krokiem 1 i (n)10 = (nr nr −1 . . . n1 )2 ) dla l = 1, . . . , r (z krokiem 1) Al (n1 n2 . . . nl kl+1 kl+2 . . . kr ) := 1 P1 2 A(n)10 −2π i kl 2−l Pl s=1 kl =0 e := Ar (n1 n2 . . . nr ); ns 2s−1 dr Artur Woike Transformacje Fouriera ·Al−1 (n1 n2 . . . nl−1 kl kl+1 . . . kr ); Zaawansowane metody numeryczne Dyskretna i szybka transformacja Fouriera Dyskretna transformacja sinusowa i cosinusowa Dyskretna transformacja sinusowa Definicja 8.2. (DST) Niech N > 0 będzie dowolne i f = {f0 , . . . , fN−1 } będzie wektorem danych, takich że f0 = 0. Oznaczmy wektor wynikowy przez F = {F0 , . . . , FN−1 }. Dyskretna transformacja sinusowa (DST) wektora f jest zdefiniowana następująco: ∀n=0,...,N−1 Fn = N−1 X k=1 dr Artur Woike fk sin πkn . N Zaawansowane metody numeryczne Dyskretna i szybka transformacja Fouriera Dyskretna transformacja sinusowa i cosinusowa Transformacje Fouriera Okresowe i nieparzyste przedłużanie funkcji Fakt 8.2. Jeżeli f jest funkcją określoną na przedziale h0, πi i taką, że f (0) = f (π) = 0, to można ją przybliżać w sposób okresowy i nieparzysty funkcją F postaci F (x) = N−1 X bn sin nx, n=1 gdzie ∀k=0,...,N−1 xk = πk N , ∀k=0,...,N−1 fk = f (xk ), ∀n=1,...,N−1 bn = dr Artur Woike Transformacje Fouriera 2 N PN−1 k=1 fk sin nxk . Zaawansowane metody numeryczne Dyskretna i szybka transformacja Fouriera Dyskretna transformacja sinusowa i cosinusowa Okresowe i nieparzyste przedłużanie funkcji Uwaga. Po porównaniu wzorów z Definicji 8.2 i Faktu 8.2 otrzymujemy: ∀n=1,...,N−1 bn = 2 Fn . N Oznacza to, że dyskretna transformacja sinusowa może być wykorzystana do wyznaczania współczynników okresowego i nieparzystego przedłużenia dla pewnej klasy funkcji. dr Artur Woike Zaawansowane metody numeryczne Transformacje Fouriera Dyskretna i szybka transformacja Fouriera Dyskretna transformacja sinusowa i cosinusowa Obliczanie DST za pomocą DFT lub FFT Niech f = {f0 , . . . , fN−1 } będzie wektorem danych dla DST. Tworzymy wektor a danych dla DFT (lub FFT) następująco: ∀k=0,...,N−1 ak = fk , aN = fN = 0, ∀k=1,...,N−1 a2N−k = −fk . Niech A będzie wektorem wynikowym DFT (lub FFT) dla wektora danych a. Wtedy zachodzi nastepująca zależność: ∀n=0,...,N−1 Fn = − dr Artur Woike Transformacje Fouriera Ni An . 2 Zaawansowane metody numeryczne Dyskretna i szybka transformacja Fouriera Dyskretna transformacja sinusowa i cosinusowa Obliczanie DST za pomocą DFT lub FFT Uwaga. 1) Nowy wektor danych a = {a0 , . . . , a2N−1 } ma dwukrotnie większą długość w stosunku do wyjściowego wektora f . 2) Istnieją algorytmy pozwalające uniknąć wydłużenia wektora danych przy wykorzystywaniu DFT do obliczania DST. 3) Jeżeli przyjmiemy dodatkowo, że a2N = 0, to wektor a będzie nieparzysty ze względu na indeks k = N. dr Artur Woike Zaawansowane metody numeryczne Transformacje Fouriera Dyskretna i szybka transformacja Fouriera Dyskretna transformacja sinusowa i cosinusowa Dyskretna transformacja cosinusowa Definicja 8.3. (DCT) Niech N > 0 będzie dowolne i f = {f0 , . . . , fN } będzie wektorem danych. Oznaczmy wektor wynikowy przez F = {F0 , . . . , FN }. Dyskretna transformacja cosinusowa (DCT) wektora f jest zdefiniowana następująco: ∀n=0,...,N N−1 X 1 πkn n Fn = (f0 + (−1) fN ) + fk cos . 2 N k=1 dr Artur Woike Transformacje Fouriera Zaawansowane metody numeryczne Dyskretna i szybka transformacja Fouriera Dyskretna transformacja sinusowa i cosinusowa Obliczanie DCT za pomocą DFT lub FFT Niech f = {f0 , . . . , fN } będzie wektorem danych dla DST. Tworzymy wektor a danych dla DFT (lub FFT) następująco: ∀k=0,...,N ak = f k , ∀k=0,...,N−1 a2N−k = fk . Niech A będzie wektorem wynikowym DFT (lub FFT) dla wektora danych a. Wtedy zachodzi nastepująca zależność: ∀n=0,...,N Fn = dr Artur Woike N An . 2 Zaawansowane metody numeryczne Transformacje Fouriera Dyskretna i szybka transformacja Fouriera Dyskretna transformacja sinusowa i cosinusowa Obliczanie DCT za pomocą DFT lub FFT Uwaga. 1) Nowy wektor danych a = {a0 , . . . , a2N } ma dwukrotnie większą długość w stosunku do wyjściowego wektora f . 2) Istnieją algorytmy pozwalające uniknąć wydłużenia wektora danych przy wykorzystywaniu DFT do obliczania DCT. 3) Wektor a jest parzysty ze względu na indeks k = N. 4) DCT można wykorzystać do okresowego i parzystego przedłużania funkcji w podobny sposób jak DST do okresowego i nieparzystego przedłużania funkcji. dr Artur Woike Zaawansowane metody numeryczne