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