x 2k

Transkrypt

x 2k
9. Dyskretna transformata Fouriera – algorytm FFT
Transformata Fouriera ma szerokie zastosowanie w analizie i syntezie
układów i systemów elektronicznych, gdyż pozwala na połączenie dwóch
sposobów przedstawiania sygnałów — reprezentacji w dziedzinie czasu i
reprezentacji w dziedzinie częstotliwości.
Dyskretna transformata Fouriera (ang. discrete fourier transform - DFT)
stosowana jest wtedy, gdy wartości liczbowe sygnału x t  są określone dla
skończonej liczby N wartości zmiennej t (czas) należącej do pewnego
przedziału [0, T ]. Najczęściej przyjmuje się, że wartości te są równoodległe
o jednakowy przedział czasu  t =T / N =1 / f p , gdzie f p jest częstotliwością próbkowania. Sygał x t  jest zatem reprezentowany przez skończony
ciąg {x n} , n=0,1, , N −1 , wartości liczbowych — próbek sygnału.
Zadanie obliczenia dyskretnej transformacji Fouriera sygnału sprowadza się
do wyznaczenia wartości liczbowych sum
N −1
X k = ∑ x n W nk
N
k =0,1,  , N −1 ,
9.1.a
n=0
dla przekształcenia prostego (czas — częstotliwość) oraz sum
1
x  n=
N
N −1
∑
k =0
X k  W −nk
N
n=0, 1, , N −1 ,
9.1.b
dla przekształcenia odwrotnego IDFT (ang. inverse DFT) - częstotliwość —
m
− j 2m/ N
czas, gdzie
W =e
9.1.c
N
to współczynnik obrotu.
9. Dyskretna transformata Fouriera – algorytm FFT
Wyznaczenie DFT w oparciu o zależność 9.1.a (oraz IDFT z wykorzys2
taniem 9.1.b) wymaga wykonania N mnożeń oraz N dodawań.
Stosując algorytm szybkiej transformacji Fouriera FFT (odwrotnej szybkiej
transformacji Fouriera) liczbę obliczeń można zmniejszyć do ok. N / 2⋅log 2 N .
Zmniejszenie nakładu obliczeń transformaty DFT można uzyskać stosując
następujący ciąg przekształceń.
1. Podział sekwencji wejściowej {x n}={ x 0 , x 1 , , x  N −1} na
dwie połowy:
{x  0  , x  1  , , x


  

N
N
N
−1 } oraz {x
,x
1 ,  , x  N −1  }.
2
2
2
Transformatę DFT całej sekwencji z uwzględnieniem transformat obydwu
części można zapisać odpowiednio
 N /2−1
X k =
∑
nk
N
N −1
x nW 
n=0
∑
n= N / 2
nk
x nW N
9.1.d
Podstawiając n=nN / 2 w drugiej sumie powyższego wzoru otrzymuje
się
 N /2−1
X k =
∑
n=0
nk
N
x nW W
kN / 2
N
 N / 2−1
∑
n=0

x n

N
nk
WN
2
9.1.e
9. Dyskretna transformata Fouriera – algorytm FFT
Wykorzystując własność wyrażenia 9.1.c
kN / 2
WN
− jk 
=e
zależność 9.1.e
 N /2−1
−j k
=e
k
 =cos − j sin  =−1
k
przyjmuje postać
[
]

N
X k = ∑ x n−1 x n
W nk
9.1.f 
N .
2
n=0
k
Z kolei wyrażenie −1 =1 dla k parzystego i −1 dla k nieparzystego.
Pozwala to zapisać równanie 9.1.f  oddzielnie dla k parzystego
 N /2−1
∑
X k =
n=0
k
[
N
x n x n
2
[
x n− x n

]
WN.
9.1.g
]
W nk
N .
9.1.h
nk
k nieparzystego.
 N /2−1
X k =
∑
n=0

N
2
9. Dyskretna transformata Fouriera – algorytm FFT
Zastępując k =2 k dla parzystych k oraz k =2 k 1 dla nieparzystych k
równania 9.1.g oraz 9.1.h dla k =0, 1, , N / 2−1 przyjmują
odpowiednio postać
 N /2 −1
X 2k=
∑
n=0
[
 N / 2−1
X 2k1=

x n x n
∑
n =0
[

N
2
]
x n−x n
2nk
WN ,
N
2
]
9.1.i 
n
2nk
WN WN .
9.1.j 
Wykorzystując własność współczynnika obrotu 9.1.c
m
W 2m
=W
N
N/2 ,
9.1.k
oraz stosując podstawienia

a n=x nx n

N
,
2

bn=x n−x n

N
,
2
9. Dyskretna transformata Fouriera – algorytm FFT
Wyrażenia 9.1.i oraz 9.1.j przyjmują bardziej czytelną postać
dwóch  N / 2 -punktowych transformat DFT
 N /2 −1
X 2k=
∑
n=0
 N / 2−1
X 2k1=
∑
n =0
nk
a nW N / 2 ,
b nW nN W nk
N /2 .
9.1.l 
9.1.m 
9. Dyskretna transformata Fouriera – algorytm FFT
2. Podział uzyskanych dwóch sekwencji {a 0 , a 1 , , a  N / 2−1} oraz
{b 0W 0N , b1W 1N ,  , b N / 2−1W NN / 2−1 } na cztery sekwencje  N / 4
punktowe. Wyznaczenie transformat DFT dla poszczególnych sekwencji w
sposób analogiczny do czynności w punkcie nr 1.
9. Dyskretna transformata Fouriera – algorytm FFT
3. Przeprowadzanie dekompozycji DFT do momentu uzyskanych  N / 2
sekwencji dwuelementowych tzw. ''motylków''.
W przypadku 2-punktowego DFT równanie
1
X k =∑ x n W nk
2
lub
k =0,1 ,
przyjmuje postać
9.1.n
n=0
0
0
X 0=a 0W 2a 1 W 2=a 0a 1
X 1=a 0W 02a 1W 12 =a 0−a1
9.1.o
W drugim równaniu 9.1.0 wykorzystano własność współczynnika
obrotu
1
− j 2 / 2
W 2=e
=−1
9.1.c
9. Dyskretna transformata Fouriera – algorytm FFT
Omówiona metoda dekompozycji DFT nosi nazwę algorytmu FFT z
podziałem w dziedzinie częstotliwości DIF (ang. decimation in
frequency ).
9. Dyskretna transformata Fouriera – algorytm FFT
Jak można zauważyć w fazie końcowej algorytm ten wymaga posortowania
uzyskanych wartości widma. Można do tego wykorzystać metodę numeracji
o odwróconej kolejności bitów (ang. bit-reversal procedure)
0 (000)2 → (000)2 0
1 (001)2 → (100)2 4
2 (010)2 → (010)2 2
3 (011)2 →
(110)2 6
5 (101)2 → (101)2 5
7 (111)2 →
(111)2 7
9. Dyskretna transformata Fouriera – algorytm FFT
Istnieje również metoda dekompozycji DFT z podziałem w dziedzinie
czasu DIT (ang. decimation in time ). Powstaje ona w wyniku rozkładu
algorytmu spowodowanego podziałami danych wejściowych na ciagi danych
parzystych i nieparzystych.
k N / 2
k
X k N / 2=C  k −W N D  k  ,
k
WN
=−W N
k =0 , 1, , N / 2−1
9. Dyskretna transformata Fouriera – algorytm FFT
FFT z podziałem w dziedzinie czasu DIT.
Dla N =8
X k =C  k W k8 D k  ,
X k 4=C k −W 8k D k  ,
k =0 , 1, 2, 3,
k =0 , 1, 2, 3.