+ c - GDR!

Transkrypt

+ c - GDR!
1
Dyskretna transformata
falkowa z wykorzystaniem
falek Haara
Alfréd Haar
1885 -1933
2
Przypomnijmy, że istotą DWT jest podział
pierwotnego sygnału za pomocą pary filtrów
(górnoprzepustowego i dolnoprzepustowego) na
dwie składowe i następnie hierarchiczna
dekompozycja jednej z tych składowych
(niskoczęstotliwościowej) w analogiczny sposób.
3
Pojedynczy krok wielopoziomowej
dekompozycja danych
1000 próbek
dolnoprzepustowy
Filtry
~1000 próbek
górnoprzepustowy
~1000 próbek
2
2
cA
~500
współczynników
~500
współczynników
cD
4
Na każdym etapie realizacji piramidy Mallata
wykonywana jest bazowa operacja splotu wejściowego szeregu
danych x(n) z dwoma zestawami współczynników wagowych:
współczynniki odpowiedzi impulsowej filtru
dolnoprzepustowego
Współczynniki
aproksymacji
a
(i)
n
L − 1
= ∑ g m ⋅ a 2( in−+1 m) ,
m =0
i = 1, K ,
współczynniki odpowiedzi impulsowej filtru
górnoprzepustowego
detale
d
(i)
n
L − 1
= ∑ h m ⋅ a 2( in−+1m) ,
m =0
a n( 0 ) = x ( n )
oraz operacja „downsamplingu” – odrzucania co drugiej próbki
odfiltrowanego sygnału w każdej ze składowych w celu redukcji
5
nadmiarowości zbioru danych.
Na
dzień
dzisiejszy
istnieje
wiele
opracowanych zestawów współczynników filtrów.
Są to filtry Haara, Daubechies, Coiflety, Simflety
i inne.
6
DWT w bazie Haara jest najprostszym,
lecz dość skutecznym sposobem wieloskalowej
reprezentacji danych.
Zastosowanie
Zastosowanie filtrów
filtrów Haara
Haara powoduje,
powoduje, że
że na
na
każdym
etapie
dekompozycji
procedura
każdym
etapie
dekompozycji
procedura
dolnoprzepustowej
dolnoprzepustowej filtracji
filtracji sprowadza
sprowadza się
się do
do
obliczania
obliczania znormalizowanej
znormalizowanej wartości
wartości średniej
średniej
sąsiednich
sąsiednich elementów
elementów sekwencji
sekwencji danych,
danych, zaś
zaś
procedura
procedura filtracji
filtracji górnoprzepustowej
górnoprzepustowej –– do
do
obliczania
obliczania znormalizowanej
znormalizowanej różnicy
różnicy tych
tych
samych
samych elementów.
elementów.
7
Filtr pasmowy H przekształca wejście x w
wyjście y=H(x).
Jeśli filtr pasmowy jest liniowy, to
odpowiednie
transformaty
mogą
być
reprezentowane jako macierz H, a obliczenie
transformaty sygnału X osiąga się przez obliczenie
mnożenia macierzy Y=H·X.
8
Poniższy schemat pokazuje dobrze znany
przykład filtru pasmowego stosowanego do
analizy, który rozdziela częstotliwości sygnału
dyskretnego na niskie i wysokie.
H0
H0
(n )
⋅X
↓? 2
Y0 = D ( n ) H 0
(n )
⋅X
⎡Y ⎤
Y = ⎢ 0⎥
⎣Y1 ⎦
x
H1
H1
(n )
⋅X
↓? 2
Y1 = D ( n ) H 1
(n )
⋅X
9
Jako przykład obliczmy macierz H dla filtru
pasmowego Haara, biorąc wejście X zawierające N
próbek.
Operacja
ta
dla
filtru
niskoczęstotliwościowego może być przedstawiona za
pomocą macierzy:
H0
(n )
⎡1 1
⎤
⎢ 1 1
⎥
⎢
⎥
⎥
1 1
1 ⎢
=
⎢
⎥
O
2⎢
⎥
⎢
1 1⎥
⎢
⎥
1⎥⎦
⎢⎣
Należy przypomnieć, że filtr
dolnoprzepustowy Haara H0
uśrednia sąsiednie elementy
wejścia.
10
Filtr górnoprzepustowy Haara H1 oblicza
połowę różnicy pomiędzy kolejnymi próbkami
wejściowymi, co może być przedstawione za
pomocą macierzy:
H1
(n )
⎤
⎡1 − 1
⎥
⎢
1 −1
⎥
⎢
⎥
1 −1
1 ⎢
=
⎥
⎢
O
2⎢
⎥
⎢
1 − 1⎥
⎥
⎢
1 ⎥⎦
⎢⎣
11
Operacja
downsamplingu
może
reprezentowana za pomocą macierzy:
D (n )
⎡1
⎢0
⎢
= ⎢0
⎢
⎢M
⎢⎣0
być
0 0 0 0 ... 0 0⎤
⎥
0 1 0 0 ... 0 0⎥
0 0 0 1 ... 0 0⎥
⎥
⎥
0 0 0 0 ... 1 0⎥⎦
która wybiera pierwszy, trzeci, itd. element X.
12
Połączona
operacja
filtrowania
dolnoprzepustowego i downsamplingu może być
reprezentowana za pomocą macierzy:
(n )
L
(n )
= D H0
(n )
⎤
⎡1 1
⎥
⎢
1 1
⎥
⎢
1
⎥
⎢
=
...
2⎢
⎥
1 1
⎥
⎢
⎢⎣
1 1⎥⎦
13
Podobnie, połączona operacja filtracji
wysokoprzepustowej i downsamplingu jest
reprezentowana jako:
B
(n )
(n )
= D H1
(n )
⎡1 − 1
⎤
⎢
⎥
−
1
1
⎥
1 ⎢
⎢
⎥
=
...
2⎢
⎥
1 −1
⎢
⎥
⎢⎣
1 − 1⎥⎦
14
Górna i dolna gałąź filtru pasmowego
wytwarza odpowiednio:
(n )
Y0 = L X
Y1 = B (n ) X
Wyjściem filtru pasmowego jest:
(n )
⎡
Y
L
⋅ X⎤
⎡ 0⎤
⎢
⎥
⎢
⎥
Y = ⎢ − ⎥ = ⎢ − ⎥ = H (n ) ⋅ X ∈, gdzie
⎢⎣ Y1 ⎥⎦ ⎢⎣B ( n ) ⋅ X⎥⎦
H (n)
⎡ L(n ) ⎤
⎢
⎥
= ⎢ − ⎥∈
⎢B ( n ) ⎥
⎣
⎦
15
Możemy także zbudować hierarchiczną
reprezentację sygnału poprzez rekursywne
filtrowanie niskoprzepustowego wyjścia filtru
pasmowego:
16
W każdym kroku rekursji wielkość sygnału
zmniejsza się dwukrotnie.
Jeśli sygnał jest dyskretny i skończony (i jego
długość jest potęgą dwójki), to możemy w
ostateczności uzyskać sygnał o długości jednej
próbki.
Suma wymiarów wszystkich wyjść jest równa
wymiarowi oryginalnego sygnału wejściowego.
17
Ostateczna,
hierarchiczna
reprezentacja
sygnału wejściowego jest zbiorem współczynników
szczegółowości o różnych poziomach rozkładu
(skale) i gruboziarnistą wersją oryginalnego
sygnału (wyjście filtru dolnoprzepustowego).
18
Operację analizy falkowej w całym bloku
filtrującym można przedstawić w postaci
macierzowej za pomocą następującego równania
macierzowego:
⎡ a0 ⎤
⎤ ⎡ x0 ⎤
⎡1 1
⎢ c ⎥
⎥ ⎢ x ⎥
⎢1 − 1
⎢ 0 ⎥
⎥ ⎢ 1 ⎥
⎢
⎢ a1 ⎥
⎥ ⎢ x2 ⎥
⎢
1 1
1 ⎢
⎥
⎢
⎥
⎥ ⎢
•
=
c
x
1 −1
⎢ 1 ⎥
⎥ ⎢ 3 ⎥
⎢
2⎢
⎢ M ⎥
⎥ ⎢ M ⎥
O
⎥
⎢
⎥
⎥ ⎢
⎢
1 1 ⎥ ⎢ x N −2 ⎥
⎢a N −1 ⎥
⎢
⎢c ⎥
⎥ ⎢x ⎥
⎢
1
1
−
⎦ ⎣ N −1 ⎦
⎣
⎣ N −1 ⎦
19
Odwrotną
transformatę
Haara
przedstawić w następujący sposób:
można
20
Wzór na odtworzenie współczynnika
aproksymacji będzie miał postać:
a1(n-1) = (L(n))T·a2(n) + (B(n))T·c2(n),
gdzie macierze (L(n))T i (B(n))T wyglądają
następująco:
21
⎡1
⎤
⎢1
⎥
⎢
⎥
⎢ 1
⎥
⎢
⎥
1
⎢
⎥
1
⎥
=⎢
(L(n ) ) Τ =
M
⎥
2 ⎢
1 ⎥
⎢
⎢
1 ⎥
⎢
⎥
1⎥
⎢
⎢
⎥
1
⎣
⎦
22
⎡1
⎢− 1
⎢
⎢
1
⎢
−1
⎢
1
(n ) Τ
(B ) =
=⎢
M
2 ⎢
⎢
⎢
⎢
⎢
⎢
⎣
⎤
⎥
⎥
⎥
⎥
⎥
⎥
⎥
−1
⎥
⎥
1
⎥
1⎥
− 1⎥⎦
23
Operacja rekonstrukcji sygnału w całym
bloku filtrującym będzie miała postać:
⎡ x0 ⎤
⎡1 1
⎤ ⎡ a0 ⎤
⎢ x ⎥
⎢1 − 1
⎥ ⎢ c ⎥
⎢ 1 ⎥
⎢
⎥ ⎢ 0 ⎥
⎢ x2 ⎥
⎢
⎥ ⎢ a1 ⎥
1 1
1 ⎢
⎢
⎥
⎥
⎥ ⎢
1 −1
⎢ x3 ⎥ =
⎢
⎥ • ⎢ c1 ⎥
2⎢
⎢ M ⎥
⎥ ⎢ M ⎥
O
⎢
⎥
⎥
⎢
⎥ ⎢
1 1 ⎥ ⎢a N −1 ⎥
⎢ x N −2 ⎥
⎢
⎢x ⎥
⎢
⎥ ⎢c ⎥
−
1
1
⎣
⎦ ⎣ N −1 ⎦
⎣ N −1 ⎦
24
Przykłady:
Transformata Falkowa Haara dla N=8
X = [x 0
H0
x∈R
(1)
(1)
a
0
?↓22
n
x1
x2
H 0(2)
H 1(2)
H1
(1)
x3
x4
?↓22 a1
?↓22 c1
x5
(2)
(2)
x6
H0
x7 ]
Τ
(3)
H 1(3)
(3)
a
2
?↓22
?↓22
c2(3)
(1)
c
0
?↓22
25
Krok 1:
a0(1) = D(1)H0(1) · X = L(1) · X ,
c0(1) = D(1)H1(1) · X= =B(1) · X
Macierze
dla
wyglądają następująco:
H0
(1)
⎛1
⎜
⎜0
⎜0
⎜
1 ⎜0
=
⎜
2 ⎜0
⎜0
⎜
⎜0
⎜0
⎝
odpowiednich
filtrów
1 0 0 0 0 0 0⎞
⎛1 −1 0 0 0 0 0 0 ⎞
⎟
⎜
⎟
1 1 0 0 0 0 0⎟
⎜0 1 −1 0 0 0 0 0 ⎟
⎜0 0 1 −1 0 0 0 0 ⎟
0 1 1 0 0 0 0⎟
⎟
⎜
⎟
0 0 1 1 0 0 0 ⎟ (1)
1 ⎜0 0 0 1 −1 0 0 0 ⎟
=
H
⎜
⎟
0 0 0 1 1 0 0 ⎟⎟ 1
2 ⎜0 0 0 0 1 −1 0 0 ⎟
⎜0 0 0 0 0 1 −1 0 ⎟
0 0 0 0 1 1 0⎟
⎟
⎜
⎟
0 0 0 0 0 1 1⎟
0
0
0
0
0
0
1
1
−
⎜
⎟
⎜ 0 0 0 0 0 0 26
0 0 0 0 0 0 1 ⎟⎠
0 1 ⎟⎠
⎝
Operacja
downsamplingu
reprezentowana przez macierz:
D (1)
⎛1
⎜
⎜0
=⎜
0
⎜
⎜0
⎝
będzie
0 0 0 0 0 0 0⎞
⎟
0 1 0 0 0 0 0⎟
0 0 0 1 0 0 0⎟
⎟
0 0 0 0 0 1 0 ⎟⎠
Macierze przekształceń L i B mają więc
postać:
⎛1
⎜
1 ⎜0
L(1) =
2 ⎜⎜ 0
⎜0
⎝
1 0 0 0 0 0 0⎞
⎛1 −1
⎟
⎜
0 1 1 0 0 0 0⎟
1 ⎜0 0
(1)
B
=
⎜0 0
0 0 0 1 1 0 0⎟
2
⎜
⎟
⎜0 0
⎟
0 0 0 0 0 1 1⎠
⎝
0⎞
⎟
0⎟
1 −1 0 0 ⎟
⎟
0 0 1 − 1⎟⎠
0 0 0
1 −1 0
0
0
0
0
0
0
0
0
27
W wyniku otrzymujemy wektory:
a0
c0
(1)
(1)
⎡ x0 + x1
=⎢
2
⎣
⎡ x 0 − x1
=⎢
2
⎣
x 2 + x3
2
x 2 − x3
2
x 4 + x5
2
x 4 − x5
2
x6 + x7 ⎤
⎥
2 ⎦
Τ
x6 − x7 ⎤
⎥
2 ⎦
Τ
28
Krok 2:
a1(2) = D(2)H0(2) · a0(1) = L(2)·a0(1),
c1(2) = D(2)H1(2) · a0(1) = B(2)· a0(1)
Macierze
dla
odpowiednich
wyglądają następująco:
H0
(2 )
⎛1
⎜
1 ⎜0
=
2 ⎜⎜ 0
⎜0
⎝
filtrów
1 0 0⎞
⎛1 −1 0 0 ⎞
⎟
⎟
⎜
1 1 0⎟
1 ⎜0 1 −1 0 ⎟
(2 )
H1 =
⎟
⎜ 0 0 1 − 1⎟
0 1 1
2
⎟
⎟
⎜
⎟
⎟
⎜0 0
0 0 1⎠
0
1
⎠
⎝
29
Operacja
downsamplingu
reprezentowana przez macierz:
D
(2 )
będzie
⎛1 0 0 0⎞
⎟⎟
= ⎜⎜
⎝0 0 1 0⎠
Macierze przekształceń L i B mają więc
postać:
1 ⎛1 1 0 0⎞
⎜⎜
⎟⎟
L =
2 ⎝0 0 1 1⎠
(1)
B
(1)
1 ⎛1 −1 0 0 ⎞
⎜⎜
⎟⎟
=
2 ⎝ 0 0 1 − 1⎠
30
W wyniku otrzymamy wektory:
a1
c1
( 2)
( 2)
⎡ x0 + x1 + x 2 + x3
=⎢
2
⎣
x 4 + x5 + x 6 + x 7 ⎤
⎥
2
⎦
⎡ x 0 + x1 − x 2 − x3
=⎢
2
⎣
x 4 + x5 − x6 − x7 ⎤
⎥
2
⎦
T
T
31
Krok 3:
a2(3) = D(3)H0(3) · a1(2) = L(3) · a1(2),
c2(3) = D(3)H1(3) · a1(2) = B(3)· a1(2)
H0
(3 )
1 ⎛ 1 1⎞
⎜⎜
⎟⎟
=
2 ⎝ 0 1⎠
H1
(3 )
1 ⎛ 1 − 1⎞
⎜⎜
⎟⎟
=
2 ⎝0 1 ⎠
Operacja downsamplingu będzie reprezentowana
przez macierz:
D (3 ) = (1 0 )
32
Macierze przekształceń L i B mają więc
postać:
(3 )
L
=
1
2
(1 1)
B
(3 )
=
1
2
(1
− 1)
Otrzymamy skalary:
a2
c2
( 3)
( 3)
=
=
x0 + x1 + x 2 + x3 + x 4 + x5 + x6 + x7
2 2
x 0 + x1 + x 2 + x3 − x 4 − x5 − x6 − x7
2 2
33
Odwrotna Transformata Falkowa Haara N=8
Krok 1:
a1(2) = (L(3))T·a2(3) + (B(3))T·c2(3)
1 ⎛1⎞
⎜⎜ ⎟⎟
(L ) =
2 ⎝1⎠
(3 )
a1
( 2)
Τ
B
(3 )
1 ⎛1⎞
⎜⎜ ⎟⎟
=
2 ⎝ − 1⎠
⎡ x0 + x1 + x 2 + x3 + x 4 + x5 + x 6 + x7 ⎤ ⎡ x0 + x1 + x 2 + x3 − x 4 − x5 − x6 − x7 ⎤
⎥
⎥ ⎢
⎢
2
2
2
2
=⎢
⎥=
⎥+⎢
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
−
−
−
−
+
+
+
+
+
+
+
+
+
+
+
1
2
3
4
5
6
7 ⎥
1
2
3
4
5
6
7 ⎥
⎢ 0
⎢ 0
⎥⎦
⎥⎦ ⎢⎣
⎢⎣
2 2
2 2
⎡ x0 + x1 + x 2 + x3 ⎤
⎥
⎢
2
⎢x + x + x + x ⎥
5
6
7
⎥
⎢ 4
2
⎦
⎣
34
Krok 2:
a0(1) = (L(2))T·a1(2) + (B(2))T·c1(2)
⎛1
⎜
1 ⎜1
(2 ) Τ
(L ) =
2 ⎜⎜ 0
⎜0
⎝
a0
(1)
0⎞
⎟
0⎟
1⎟
⎟
1 ⎟⎠
⎡ x0 + x1 + x 2
⎢
2 2
⎢
⎢ x0 + x1 + x 2
⎢
2 2
=⎢
x 4 + x5 + x6
⎢
2 2
⎢
⎢ x 4 + x5 + x6
⎢
2 2
⎣
0⎞
⎛1
⎟
⎜
1 ⎜−1 0 ⎟
(1) Τ
(B ) =
2 ⎜⎜ 0 1 ⎟⎟
⎜ 0 − 1⎟
⎠
⎝
+ x3 ⎤ ⎡ x 0 + x1 − x 2 − x3 ⎤ ⎡ x0 + x1 ⎤
⎥
⎥ ⎢
⎥ ⎢
2
2
2
⎥
⎥ ⎢
⎥ ⎢
+ x3 ⎥ ⎢ − x0 − x1 + x 2 + x3 ⎥ ⎢ x 2 + x3 ⎥
⎥
⎥ ⎢
⎥ ⎢
2
2
2
=
+
+ x 7 ⎥ ⎢ x 4 + x5 − x 6 − x 7 ⎥ ⎢ x 4 + x5 ⎥
⎥
⎥ ⎢
⎥ ⎢
2 2
2 ⎥
⎥ ⎢
⎥ ⎢
+ x 7 ⎥ ⎢ − x 4 − x5 + x6 + x 7 ⎥ ⎢ x6 + x7 ⎥
⎥ ⎢
⎥ ⎢
2 2
2 ⎥⎦
⎦ ⎣
⎦ ⎣
35
Krok 3: X = (L(1))T·a0(1) + (B(1))T·c0(1)
⎛1
⎜
⎜1
⎜0
⎜
1 ⎜0
(1) Τ
(L ) =
⎜0
2⎜
⎜0
⎜
⎜0
⎜0
⎝
0 0 0⎞
⎟
0 0 0⎟
1 0 0⎟
⎟
1 0 0⎟
0 1 0 ⎟⎟
0 1 0⎟
⎟
0 0 1⎟
0 0 1 ⎟⎠
0 0 0⎞
⎛1
⎜
⎟
⎜−1 0 0 0 ⎟
⎜0 1
0 0⎟
⎜
⎟
1 ⎜ 0 −1 0 0 ⎟
(1) Τ
(B ) =
⎜
0 ⎟⎟
2⎜ 0 0 1
⎜ 0 0 −1 0 ⎟
⎜
⎟
0
0
0
1
⎜
⎟
⎜ 0 0 0 − 1⎟
⎝
⎠
36
⎡ x0
⎢
⎢x
⎢ 0
⎢
⎢ x2
⎢
⎢x
⎢ 2
X=⎢
⎢ x4
⎢
⎢x
⎢ 4
⎢
⎢ x6
⎢
⎢x
⎢ 6
⎣
+ x1 ⎤ ⎡ x 0 − x1 ⎤
⎥
2 ⎥ ⎢
2
+ x1 ⎥ ⎢ − x 0 + x1 ⎥
⎥
⎥ ⎢
2 ⎥ ⎢
2
⎥ ⎡ x0 ⎤
+ x3 ⎥ ⎢ x 2 − x3 ⎥ ⎢ x ⎥
⎢ 1⎥
⎥
⎢
⎥
2
2
⎢ ⎥
⎢
⎥
+ x3
− x 2 + x3 ⎥ ⎢ x 2 ⎥
⎥
⎥ ⎢
2 ⎥+⎢
2
⎥ = ⎢ x3 ⎥
+ x5 ⎥ ⎢ x 4 − x5 ⎥ ⎢ x 4 ⎥
⎥ ⎢ ⎥
2 ⎥ ⎢
2
x5 ⎥
⎢
⎥
⎢
⎥
+ x5
− x + x5
⎥ ⎢ x6 ⎥
⎥ ⎢ 4
2 ⎥ ⎢
2
⎥ ⎢ ⎥
+ x 7 ⎥ ⎢ x 6 − x 7 ⎥ ⎢⎣ x 7 ⎥⎦
⎥
2 ⎥ ⎢
2
+ x7 ⎥ ⎢ − x6 + x7 ⎥
⎥
⎥ ⎢
2 ⎦ ⎣
2
⎦
37
Graf algorytmu transformaty falkowej
w baze Haara dla N=8
( x0 + x1 )
1 ⎛ 1
⎜
( x0 + x1 ) + 1 (x 2 + x 3 )⎞⎟
2⎝ 2
2
⎠
1 ⎛ 1 ⎛ 1
⎜⎜
⎜
(x 0 + x1 ) + 1 (x 2 + x3 )⎞⎟ + 1 ⎛⎜ 1 (x 4 + x5 ) + 1 (x 6 + x 7 )⎞⎟ ⎞⎟⎟
2⎝ 2⎝ 2
2
2⎝ 2
2
⎠
⎠⎠
(x 2 + x3 )
1 ⎛ 1
1
(x 4 + x5 ) + (x 6 + x7 )⎞⎟
⎜
2⎝ 2
2
⎠
1 ⎛ 1 ⎛ 1
1
1
1
1
⎞
⎜⎜
⎜
(x 0 + x1 ) + (x 2 + x3 )⎞⎟ − ⎛⎜ ( x4 + x5 ) + (x 6 + x 7 )⎞⎟ ⎟⎟
2 ⎝ 2⎝ 2
2
2⎝ 2
2
⎠
⎠⎠
(x 4 + x5 )
1 ⎛ 1
1
(x0 − x1 ) + (x2 − x3 )⎞⎟
⎜
2⎝ 2
2
⎠
1 ⎛ 1
1
⎜
(x 0 + x1 ) − ( x2 + x3 )⎞⎟
2⎝ 2
2
⎠
(x6 + x7 )
1 ⎛ 1
1
(x 4 − x5 ) + (x6 − x7 )⎞⎟
⎜
2⎝ 2
2
⎠
1 ⎛ 1
1
(x 4 − x5 ) + (x6 − x7 )⎞⎟
⎜
2⎝ 2
2
⎠
x0
1
x1
1
x2
1
x3
1
x4
1
x5
1
x6
1
x7
1
(x 6 − x7 )
2
2
2
2
2
2
2
2
(x0 − x1 )
1
(x 2 − x3 )
1
(x 4 − x5 )
1
2
2
2
(x0 − x1 )
(x 2 − x3 )
(x 4 − x5 )
1
(x 6 − x7 )
2
38
Dyskretna transformata
falkowa z wykorzystaniem
filtrów Daubechies
Ingrid Daubechies
39
Jest kilka rodzajów filtrów Daubechies:
DAUB2, DAUB4, ... , DAUB20.
Najprostszą jest falka DAUB4, która ma
cztery współczynniki: , gdzie:
c0 =
1+ 3
4 2
, c1 =
3+ 3
4 2
, c2 =
3− 3
4 2
, c3 =
1− 3
4 2
40
Macierz pojedynczej iteracji transformaty
Daubechies jest dana w postaci:
⎡c 0
⎢c
⎢ 3
⎢
⎢
⎢
⎢ ...
T=⎢
⎢ ...
⎢
⎢
⎢
⎢c
⎢ 2
⎢⎣ c1
c1
− c2
...
...
c2
c1
c3
− c0
c0
c3
c1
− c2
c2
c1
c3
− c0
...
...
c0
c1
c2
c3
− c2
c3
c1
c0
− c0
c3
gdzie puste pozycje oznaczając zera.
⎤
⎥
⎥
⎥
⎥
⎥
⎥
⎥
⎥
c3 ⎥
⎥
− c0 ⎥
c1 ⎥
⎥
− c 2 ⎥⎦
Wiersze
nieparzyste
reprezentują
filtrację
dolnoprzepustową, a wiersze parzyste operację filtracji
41
górnoprzepustowej
Procedura polega na przemnożeniu wektora
danych
wejściowych
X
przez
macierz
transformaty T.
Oryginalny wektor X ma długość N, gdzie N
musi być potęgą dwójki.
Konsekwentnie macierz filtrowania w
pierwszym kroku rekursji ma rozmiar N×N.
W następnym kroku rekursji macierz ma
rozmiar ½N×½N
42
Operacja odwrotna polega na przemnożeniu
wektora
współczynników
przez
macierz
odwrotną, która jest po prostu transpozycją
macierzy transformaty.
T −1
⎡c 0
⎢c
⎢ 1
⎢c 2
⎢
⎢ c3
= TΤ = ⎢
⎢
⎢
⎢
⎢
⎢
⎢
⎣
c3
− c2
c1
− c0
c2
c3
c0
c1
c3
− c2
O
c2
c3
c1
− c0
c0
c1
c2
c3
c3
− c2
c1
− c0
c0
c1
c1 ⎤
− c0 ⎥⎥
⎥
⎥
⎥
⎥
⎥
⎥
⎥
⎥
c3 ⎥
− c 2 ⎥⎦
43
Macierz TT jest odwrotną do macierzy T,
wtedy i tylko wtedy, gdy zachodzą dwa równania:
2
2
2
2
c0 + c1 + c 2 + c3 = 1
c 2 c0 + c3 c1 = 0
Dodatkowo potrzebujemy zależności:
c3 − c 2 + c1 − c 0 = 0
0 ⋅ c3 − 1 ⋅ c 2 + 2 ⋅ c1 − 3 ⋅ c0 = 0
44
c0 + c1 + c 2 + c3 = 1 c3 − c 2 + c1 − c 0 = 0
2
2
2
2
c 2 c0 + c3 c1 = 0
0 ⋅ c3 − 1 ⋅ c 2 + 2 ⋅ c1 − 3 ⋅ c0 = 0
Równania te są czterema równaniami z
czterema niewiadomymi c0, c1, c2, c3 po raz pierwszy
odkrytymi przez Ingrid Daubechies.
Rozwiązaniem tych równań są
współczynniki przedstawione już wcześniej:
c0 =
1+ 3
4 2
, c1 =
3+ 3
4 2
, c2 =
3− 3
4 2
, c3 =
cztery
1− 3
4 2
45
DAUB4 jest najbardziej zwartym zbiorem ze
zbiorów współczynników falkowych.
Jeśli będziemy mieli sześć współczynników
w miejsce czterech, otrzymamy rozwiązanie
postaci.
c0 =
c3 =
1 + 10 + 5 + 2 10
16 2
, c1 =
10 − 2 10 − 2 5 + 2 10
16 2
5 + 10 + 3 5 + 2 10
, c4 =
16 2
, c2 =
5 + 10 − 3 5 + 2 10
16 2
10 − 2 10 + 2 5 + 2 10
, c5 =
16 2
1 + 10 − 5 + 2 10
16 2
To jest zbior wspólczynnikoów DAUB6.
46
,
Przykład:
Transformata Falkowa „Daubechies-4”, N=8
X = [x 0
Krok 1:
x1
x2
x3
a0(1) = L(1)·X
x4
x5
x6
x7 ]
Τ
c0(1) = B(1)·X
47
Macierze
dla
odpowiednich
wyglądają następująco:
⎡c 0
⎢
L(1) = ⎢
⎢
⎢
⎣c 2
B
(1)
⎡c 3
⎢
=⎢
⎢
⎢
⎣ c1
c1
c2
c3
c0
c1
c2
c0
c3
c1
c3
− c2
− c0
c2
c0
c1
c3
− c0
− c2
c1
c3
− c0
− c2
c1
c3
filtrów
⎤
⎥
⎥
c3 ⎥
⎥
c1 ⎦
⎤
⎥
⎥
− c0 ⎥
⎥
− c2 ⎦
48
W wyniku otrzymamy dwa wektory o
wymiarze 4×1: a0(1) i c0(1).
Krok 2:
a1(2) = L(2)·a0(1)
c1(2) = B(2)·a0(1)
Macierze dla odpowiednich filtrów mają
postać:
(2 )
L
⎡c 0
=⎢
⎣c 2
c1
c3
c2
c0
c3 ⎤
⎥
c1 ⎦
B
(2 )
⎡c 3
=⎢
⎣ c1
− c2
− c0
c1
c3
− c0 ⎤
− c 2 ⎥⎦
W wyniku otrzymamy dwa wektory o
wymiarze 2×1: a1(2) i c1(2).
49
W ten sposób otrzymaliśmy zakończyliśmy
proces transformaty, którą można przedstawić za
pomocą schematu:
⎡a1 (2 ) 0 ⎤
⎡a 0 (1) 0 ⎤
⎡ x0 ⎤
⎢ (2 ) ⎥
⎢ (1) ⎥
⎢x ⎥
⎢ a1 1 ⎥
⎢ a0 1 ⎥
⎢ 1⎥
⎢ c (2 ) 0 ⎥
⎢a (1) 2 ⎥
⎢ x2 ⎥
⎢ 1 (2 ) ⎥
⎢ 0 (1) ⎥
⎢ ⎥
⎢ x 3 ⎥ → ⎢ a 0 3 ⎥ → ⎢ c1 1 ⎥
⎢ c (1) 0 ⎥
⎢ c (1) 0 ⎥
⎢ x4 ⎥
⎢ 0 (1) ⎥
⎢ 0 (1) ⎥
⎢ ⎥
⎢ c0 1 ⎥
⎢ c0 1 ⎥
⎢ x5 ⎥
⎢ c (1) ⎥
⎢ c (1) ⎥
⎢x ⎥
⎢ 0 2⎥
⎢ 0 2⎥
⎢ 6⎥
⎢⎣ c0 (1) 3 ⎥⎦
⎢⎣ c0 (1) 3 ⎥⎦
⎢⎣ x7 ⎥⎦
50
Odwrotna transformata falkowa
„Daubechies-4”, N=8
Krok 1:
a0(1) = (L(2))T ·a1(2) + (B(2))T ·c1(2)
Macierze dla odpowiednich filtrów wyglądają
następująco:
⎡c 0
⎢c
1
(2 ) Τ
⎢
(L ) =
⎢c 2
⎢
⎣ c3
c2 ⎤
⎥
c3 ⎥
c0 ⎥
⎥
c1 ⎦
⎡ c3
⎢− c
(B ( 2 ) ) Τ = ⎢ 2
⎢ c1
⎢
⎣− c0
c1 ⎤
− c0 ⎥⎥
c3 ⎥
⎥
− c2 ⎦
51
Krok 2:
X = (L(1))T·a0(1) + (B(1))T·c0(1)
Macierze dla odpowiednich filtrów mają
postać:
⎡c 0
⎢c
⎢ 1
⎢c 2
⎢
c3
(1) Τ
⎢
(L ) =
⎢
⎢
⎢
⎢
⎢
⎢⎣
c0
c1
c2
c3
c0
c1
c2
c3
c2 ⎤
c3 ⎥⎥
⎥
⎥
⎥
⎥
⎥
⎥
c0 ⎥
⎥
c1 ⎥⎦
⎡ c3
⎢− c
⎢ 2
⎢ c1
⎢
− c0
(1) Τ
⎢
(B ) =
⎢
⎢
⎢
⎢
⎢
⎢⎣
c3
− c2
c1
− c0
c3
− c2
c1
− c0
c1 ⎤
− c0 ⎥⎥
⎥
⎥
⎥
⎥
⎥
⎥
c3 ⎥
⎥
− c 2 ⎥⎦
W ten sposób odzyskujemy wektor X o
52
wymiarze 1 × 8.
Jeśli chcemy podobnie jak w transformacie
Haara w ostatnim kroku uzyskać skalary, musimy
zastosować transformatę, w której współczynniki
aproksymacji i szczegółowości obliczamy z
następujących równań:
ai = c0 ⋅ x 2i + c1 ⋅ x 2i +1 + c 2 ⋅ x 2i + 2 + c3 ⋅ x 2i +3
ci = c3 ⋅ x 2i − c 2 ⋅ x 2i +1 + c1 ⋅ x 2i + 2 − c0 ⋅ x 2i +3
Macierze odpowiednich filtracji będą
miały postać:
53
⎡c 0
⎢0
L(1) = ⎢
⎢0
⎢
⎣0
B (1)
⎡c 3
⎢0
=⎢
⎢0
⎢
⎣0
c1
c2
c3
0
0
0
0
0
0
c0
0
c1
0
c2
c0
c3
c1
0
c2
0
c3
0
0
0
0
0
c0
c1
− c2
0
0
c1
c3
0
− c0
− c2
0
0
c1
c3
0
− c0
− c2
0
0
c1
0
0
− c0
0
0
0
0
0
c3
− c2
c2
⎤
⎥
⎥
⎥
⎥
c3 ⎦
c1
⎤
⎥
⎥
⎥
⎥
− c0 ⎦
54
W ostatniej iteracji współczynniki macierzy
będą mnożone przez elementy sygnału: xN-2, xN-1,
xN i xN+1.
⎡c 0
⎢0
L(1) = ⎢
⎢0
⎢
⎣0
B (1)
⎡c 3
⎢0
=⎢
⎢0
⎢
⎣0
c2
c0
0
0
c3
c1
0
0
0
c2
c0
0
0
c3
c1
0
0
0
c2
c0
0
0
c3
c1
− c2
0
0
c1
c3
0
− c0
− c2
0
0
c1
c3
0
− c0
− c2
0
0
c1
0
0
− c0
0
0
0
0
0
c3
− c2
c1
0
0
0
c2
⎤
⎥
⎥
⎥
⎥
c3 ⎦
c1
⎤
⎥
⎥
⎥
⎥
− c0 ⎦
I tu pojawi się
problem, ponieważ
xN i xN+1 nie
istnieją.
55
Istnieją trzy metody radzenia sobie z tym
problemem:
1. Potraktowanie
okresowych.
zbioru
danych
jako
Na początek sekwencji danych wstawiamy
końcowe elementy sygnału (w przypadku DWT),
lub na końcu wektora umieszczamy początkowe
elementy sekwencji danych (w przypadku
IDWT).
56
2. Powturzenie
skrajnich
elementów
znajdujących się po każdej stronie wektora
danych (na początku i na końcu) tyle razy ile
jest to konecznie dla uzupelnienia nezbędnej
dlugości wektora.
3. Dopisywanie po jednej lub obydwu stronach
wektora danych odpowiedniej licby „zer”.
57
Krok 1: W pierwszym kroku będziemy więc
mnożyć macierz L(1) i macierz B(1) przez wektor:
X = [x6
x7
x0
x1
x2
x3
x4
x5
x6
x7 ]
Τ
Otrzymamy:
a0
(1)
⎡ c3 x6 − c 2 x7 + c1 x0 − c 0 x1 ⎤
⎡ c0 x6 + c1 x7 + c 2 x0 + c3 x1 ⎤
⎢c x − c x + c x − c x ⎥
⎢c x + c x + c x + c x ⎥
(1)
3 0
2 1
1 2
0 3⎥
0 0
1 1
2 2
3 3⎥
⎢
⎢
c
=
=
⎢c3 x 2 − c 2 x3 + c1 x 4 − c0 x5 ⎥
⎢c0 x 2 + c1 x3 + c 2 x 4 + c3 x5 ⎥ 0
⎢
⎥
⎢
⎥
⎣c0 x 4 + c1 x5 + c 2 x 6 + c3 x7 ⎦
⎣c3 x 4 − c 2 x5 + c1 x 6 − c0 x7 ⎦
58
Krok 2: W drugim kroku będziemy obliczać
równania: a1(2)=L(2)·a0(1)+ ; c1(2) = B(2)·a0(1)+,
gdzie wektor a0(1)+ jest wektorem a0(1), do którego
początku dodano dwa końcowe elementy, macierze
L(2) i B(2) będą miały postać
(2 )
L
B
(2 )
⎡c 0
=⎢
⎣0
⎡c 3
=⎢
⎣0
c1
0
c2
c0
c3
c1
− c2
0
c1
c3
− c0
− c2
c2
c1
⎤
c3 ⎥⎦
⎤
− c0 ⎥⎦
59
Krok 3: będziemy obliczać równania:
a2(3) = L(3) ·a1(2)+;
c2(3) = B(3) ·a1(2)+
L(3) = [c 0
c1
c2
c3 ]
B (3) = [c3
− c2
c1
− c0 ]
60
Operacja
odwrotna
następujących kroków:
składa
się
z
Krok 1: a1(2) = (L(3))T· a2(3)+ + (B(3))T· c2(3)+
gdzie macierze (L(3))T i (B(3))T mają postać:
⎡c 0 ⎤
⎢c ⎥
(L(3 ) ) Τ = ⎢ 1 ⎥
⎢c 2 ⎥
⎢ ⎥
⎣ c3 ⎦
⎡ c3 ⎤
⎢− c ⎥
( B (3 ) ) Τ = ⎢ 2 ⎥
⎢ c1 ⎥
⎥
⎢
⎣− c0 ⎦
61
Krok 2: a0(1) = (L(2))T· a1(2)+ + (B(2))T· c1(2)+,
gdzie macierze (L(2))T i (B(2))T mają postać:
⎡c 0
⎢c
⎢ 1
⎢c 2
(2 ) Τ
(L ) = ⎢
⎢ c3
⎢
⎢
⎢⎣
0⎤
0 ⎥⎥
c0 ⎥
⎥
c1 ⎥
c2 ⎥
⎥
c3 ⎥⎦
⎡ c3
⎢− c
⎢ 2
⎢ c1
(2 ) Τ
(B ) = ⎢
⎢− c0
⎢
⎢
⎢⎣
0 ⎤
0 ⎥⎥
c3 ⎥
⎥
− c2 ⎥
c1 ⎥
⎥
− c0 ⎥⎦
62
Krok 3: X = a0(1)·(L(1))T + c0(1)·(B(1))T
⎡c 0
⎢c
⎢ 1
⎢c 2
⎢
⎢c3
⎢0
(1) Τ
(L ) = ⎢
⎢0
⎢0
⎢
⎢0
⎢
⎢
⎢⎣
0
0
0
c1
c2
0
0
c3
c4
0
0
0
c0
c1
c2
c3
0⎤
⎡ c3
⎢− c
0 ⎥⎥
⎢ 2
⎢ c1
0⎥
⎥
⎢
0⎥
⎢− c0
⎢ 0
0⎥
(1) Τ
⎥ (B ) = ⎢
0⎥
⎢ 0
⎢ 0
c0 ⎥
⎥
⎢
c1 ⎥
⎢ 0
⎢
c2 ⎥
⎥
⎢
c3 ⎥⎦
⎢⎣
0
0
c3
− c2
c1
− c0
0
0
0
0
0
0
c3
− c2
c1
− c0
0 ⎤
0 ⎥⎥
0 ⎥
⎥
0 ⎥
0 ⎥
⎥
0 ⎥
c3 ⎥
⎥
− c2 ⎥
c1 ⎥
⎥
− c0 ⎥⎦
63
64