práci s množstvím matematiky a grafiky

Transkript

práci s množstvím matematiky a grafiky
Dodatek D
Fourierova transformace
V tomto dodatku se budeme v přı́stupné formě zabývat Fourierovou transformacı́. Vzhledem k jejı́ důležitosti pro oblast analýzy a zpracovánı́ časového
i obrazového signálu a také kvůli skutečnosti, že Fourierova transformace tvořı́
nativnı́ součást zpracovánı́ primárnı́ho signálu u některých diagnostických metod, jako např. u magnetické rezonance, se budeme věnovat hlavně pochopenı́
metody, nikoli matematickým detailům, které lze nalézt v početné literatuře,
např. v [67, 79]. Základnı́ informace o Fourierově transformaci lze zı́skat např.
v [66], velmi názorné animace jsou dostupné v elektronické učebnici [64].
D.1. Od Fourierovy řady k Fourierově transformaci
V roce 1822 publikoval JEAN BAPTISTE JOSEPH FOURIER (narozen 21. března
1768 v Auxerre, zemřel 16. května 1830 v Pařı́ži) Théorie analytique de la
chaleur, v nı́ž zdůvodnil Newtonův ochlazovacı́ zákon. V této práci ukazuje, že
jakákoli periodická funkce může být rozložena do řady sinů a kosinů celočı́selných násobků nezávisle proměnné — výsledek, který je od té doby v modernı́
analýze i technice hojně využı́ván.
Periodický reálný signál s(t) definovaný na oboru R s frekvencı́ f = 1/T a
lichým průběhem (s(−t) = −s(t)) lze rozložit do řady s koeficienty bn ∈ R
s(t) = b1 sin 2π f t + b2 sin 4π f t + b3 sin 6π f t + b4 sin 8π f t + · · · .
| {z } | {z } | {z } | {z }
základnı́ frekv.
2. harmonická
3. harmonická
(D.1)
4. harmonická
Podobně periodický reálný signál s(t) definovaný na oboru R s frekvencı́ f =
1/T a sudým průběhem (s(−t) = s(t)) lze rozložit do řady s koeficienty an ∈ R
s(t) =
a0
+ a1 cos 2π f t + a2 cos 4π f t + a3 cos 6π f t + · · · .
|
{z
} |
{z
} |
{z
}
2
základnı́ frekv.
2. harmonická
185
3. harmonická
(D.2)
186
Dodatek D. Fourierova transformace
Obecně, periodický reálný signál s(t) definovaný na oboru R s frekvencı́ f =
1/T lze rozložit do řady s koeficienty an , bn ∈ R (resp. cn ∈ h0, ∞), ϕn ∈
h−π/2, π/2i)
s(t) =
a 0 X∞
+
(an cos 2πn f t + bn sin 2πn f t) ,
n=1
2
(D.3)
a 0 X∞
+
cn cos(2πn f t − ϕn ) .
(D.4)
n=1
2
Koeficienty cn (resp. ϕn ) v (D.4) tvořı́ amplitudové (resp. fázové) spektrum
signálu s(t). Řada (D.3) resp. (D.4) se nazývá Fourierova řada signálu s(t).
Intuitivnı́ pohled na vztah (D.4) je zřejmý: signál s(t) lze „namı́chat“ z kosinusovek o základnı́ frekvenci f a jejı́ch celočı́selných násobků (vyššı́ch harmonických), přičemž koeficienty ϕn udávajı́ fázový posun n-té harmonické (např.
pro ϕn = π/2 se z kosinu stane sinus), a koeficienty cn udávajı́, jak mnoho n-té
harmonické složky je třeba přimı́chat.
Koeficienty Fourierovy řady (D.3) se určı́ podle vzorců
s(t) =
2
an =
T
Z
T
2
s(t) cos 2πn f t dt , b0 = 0 , bn =
T
0
Z
T
s(t) sin 2πn f t dt , (D.5)
0
n = 0, 1, 2, . . . Přepočet na spektrálnı́ koeficienty Fourierovy řady (D.4) se
provede pomocı́ vztahů
q
cn = an2 + bn2 ,
cos ϕn =
an
,
cn
sin ϕn =
bn
.
cn
(D.6)
Periodický komplexnı́ signál s(t) definovaný na oboru R s frekvencı́ f = 1/T
lze rozložit do řady s koeficienty ŝn ∈ C
s(t) =
X∞
n=−∞
ŝn e−2πin f t ,
(D.7)
kde koeficienty ŝn jsou dány formulı́
1
ŝn =
T
Z
T
s(t) e2πin f t dt ,
(D.8)
0
n = 0, ±1, ±2, . . . Analogicky (D.6) se spektrálnı́ koeficienty vypočı́tajı́ ze
vztahů (ℜ a ℑ označujı́ reálnou a imaginárnı́ část)
cn = |ŝn | ,
cos ϕn =
ℜŝn
,
cn
sin ϕn =
ℑŝn
.
cn
(D.9)
187
D.1. Od Fourierovy řady k Fourierově transformaci
s(t) ≡
= 1×
+ 13 ×
+ 15 ×
+ 17 ×
+ 19 ×
1 ×
+ 11
1 ×
+ 13
1 ×
+ 15
A
Parciálnı́ součty a srovnánı́ s s(t)
0
-A
0
2
4
6
8
10
12
14
time [ms]
18
A
A
0
základnı́ frekv.
0
-A
-A
0
2
4
6
8
10
12
14
time [ms]
18
A
0
2
4
6
8
10
12
14
time [ms]
18
0
2
4
6
8
10
12
14
time [ms]
18
0
2
4
6
8
10
12
14
time [ms]
18
0
2
4
6
8
10
12
14
time [ms]
18
0
2
4
6
8
10
12
14
time [ms]
18
0
2
4
6
8
10
12
14
time [ms]
18
0
2
4
6
8
10
12
14
time [ms]
18
0
2
4
6
8
10
12
14
time [ms]
18
A
0
3. harmonická
0
-A
-A
0
2
4
6
8
10
12
14
time [ms]
18
A
A
0
5. harmonická
0
-A
-A
0
2
4
6
8
10
12
14
time [ms]
18
0
2
4
6
8
10
12
14
time [ms]
18
A
A
0
7. harmonická
0
-A
-A
A
A
0
9. harmonická
0
-A
-A
0
2
4
6
8
10
12
14
time [ms]
18
A
A
0
11. harmonická
0
-A
-A
0
2
4
6
8
10
12
14
time [ms]
18
0
2
4
6
8
10
12
14
time [ms]
18
A
A
0
13. harmonická
0
-A
-A
A
A
0
15. harmonická
0
-A
-A
0
2
4
6
+···
8
10
12
14
time [ms]
18
···
···
vyššı́ harmon.
Obrázek D.1. V levém sloupci nahoře je průběh dvou period obdélnı́kového signálu,
pod nı́m pak jednotlivé harmonické složky. V pravém sloupci jsou částečné součty
postupně konvergujı́cı́ k obdélnı́kovému průběhu.
s(t) ≡
= 1×
A
1
0
-1
-A
Parciálnı́ součty a srovnánı́ s s(t)
0
2
4
6
10
12
14
time [ms]
18
A
1
0
-1
-A
0
− 12 ×
A
1
0
-1
-A
+ 13 ×
A
1
0
-1
-A
− 14 ×
A
1
0
-1
-A
+ 15 ×
A
1
0
-1
-A
− 16 ×
A
1
0
-1
-A
+ 17 ×
A
1
0
-1
-A
− 18 ×
A
1
0
-1
-A
+ 19 ×
A
1
0
-1
-A
2
4
6
8
10
12
14
time [ms]
18
základnı́ frekv.
0
2
4
6
8
10
12
14
time [ms]
18
0
2
4
6
8
10
12
14
time [ms]
18
0
2
4
6
8
10
12
14
time [ms]
18
0
2
4
6
8
10
12
14
time [ms]
18
0
2
4
6
8
10
12
14
time [ms]
18
0
2
4
6
8
10
12
14
time [ms]
18
0
2
4
6
8
10
12
14
time [ms]
18
0
2
4
6
8
10
12
14
time [ms]
18
0
2
4
6
8
10
12
14
time [ms]
18
A
1
0
-1
-A
0
2
4
6
8
10
12
14
time [ms]
18
2. harmonická
A
1
0
-1
-A
0
2
4
6
8
10
12
14
time [ms]
18
3. harmonická
A
1
0
-1
-A
0
2
4
6
8
10
12
14
time [ms]
18
4. harmonická
A
1
0
-1
-A
0
2
4
6
8
10
12
14
time [ms]
18
5. harmonická
A
1
0
-1
-A
0
2
4
6
8
10
12
14
time [ms]
18
6. harmonická
A
1
0
-1
-A
0
2
4
6
8
10
12
14
time [ms]
18
7. harmonická
A
1
0
-1
-A
0
2
4
6
8
10
12
14
time [ms]
18
8. harmonická
A
1
0
-1
-A
0
2
4
6
+···
8
10
12
14
time [ms]
18
9. harmonická
···
1 ×
− 12
A
1
0
-1
-A
1 ×
+ 13
A
1
0
-1
-A
1 ×
− 14
A
1
0
-1
-A
1 ×
+ 15
A
1
0
-1
-A
1 ×
− 16
A
1
0
-1
-A
+···
8
A
1
0
-1
-A
···
···
A
1
0
-1
-A
0
2
4
6
8
10
12
14
time [ms]
18
0
2
4
6
8
10
12
14
time [ms]
18
12. harmonická
0
2
4
6
8
10
12
14
time [ms]
18
0
2
4
6
8
10
12
14
time [ms]
18
0
2
4
6
8
10
12
14
time [ms]
18
0
2
4
6
8
10
12
14
time [ms]
18
0
2
4
6
8
10
12
14
time [ms]
18
A
1
0
-1
-A
13. harmonická
A
1
0
-1
-A
0
2
4
6
8
10
12
14
time [ms]
18
14. harmonická
A
1
0
-1
-A
0
2
4
6
8
10
12
14
time [ms]
18
15. harmonická
A
1
0
-1
-A
0
2
4
6
8
···
10
12
14
time [ms]
18
16. harmonická
···
vyššı́ harmon.
Obrázek D.2. V levém sloupci nahoře je průběh dvou period pilovitého signálu, pod
nı́m pak jednotlivé harmonické složky. V pravém sloupci jsou částečné součty postupně
konvergujı́cı́ k pilovitému průběhu.
188
Dodatek D. Fourierova transformace
Ilustrujme uvedené vztahy na jednoduchém přı́kladu obdélnı́kového signálu.
Mějme signál o frekvenci f = 110 Hz (perioda T = 9.09091 ms) s lichým
obdélnı́kovým průběhem a amplitudou A = π/4 ≈ 0.785398. Takový signál
lze rozložit do sinové Fourierovy řady (D.1) s koeficienty b1 = 1, b3 = 1/3,
b5 = 1/5, . . . (sudé koeficienty jsou nulové). Proces aproximace obdélnı́kového
signálu částečnými součty Fourierovy řady je znázorněn na obrázku D.1.
Jako dalšı́ jednoduchý ilustračnı́ přı́klad uved’me pilový signál o stejné frekvenci jako u předchozı́ ilustrace a s amplitudou A = π/2 ≈ 1.570796. Nynı́ jsou
koeficienty b1 = 1, b2 = −1/2, b3 = 1/3, b4 = −1/4, b5 = 1/5, . . . Proces
aproximace pilovitého signálu částečnými součty Fourierovy řady je znázorněn
na obrázku D.2.
Spektrum {cn , ϕn }∞
n=−∞ obsahuje kompletnı́ informaci o signálu s(t), jenž
může být ze spektra zrekonstruován podle vztahů (D.3), (D.4) nebo (D.7). Spektra
obdélnı́kového a pilovitého signálu jsou ilustrována na obrázku D.3. Periodický
signál má diskrétnı́ (čárové) spektrum.
Neperiodický signál s(t) definovaný na oboru R lze chápat jako limitnı́ přı́pad
periodického signálu s periodou T → ∞. Potom f = 1/T → 0, čáry spekter
(viz obrázek D.3) se k sobě přibližujı́ a diskrétnı́ spektrum přecházı́ na spojité
spektrum. Vztahy (D.8) a (D.7) přecházejı́ na přı́mou a inverznı́ Fourierovu
transformaci (D.23), jı́ž se budeme věnovat v následujı́cı́ sekci D.3.
Než tak však učinı́me, položme si základnı́ otázku: jsou spektra obou ilustračnı́ch reálných signálů konečného trvánı́ podle obrázků D.1 a D.2 skutečně
striktně diskrétnı́, jak vidı́me na obrázku D.3? Odpověd’ znı́: nikoliv! Striktně
Obdélnı́k
Amplitudové spektrum cn
1
π/2
1/2
0
1/3
1/4
1/8
-π/2
0
0
Pila
Fázové spektrum ϕn
f
2f
3f
4f
5f
6f
7f
8f
9f
10f 11f 12f 13f 14f 15f 16f
1
π/2
1/2
0
0
f
2f 3f 4f 5f 6f 7f 8f 9f 10f 11f 12f 13f 14f 15f 16f
0
f
2f 3f 4f 5f 6f 7f 8f 9f 10f 11f 12f 13f 14f 15f 16f
1/3
1/4
1/8
-π/2
0
0
f
2f
3f
4f
5f
6f
7f
8f
9f
10f 11f 12f 13f 14f 15f 16f
Obrázek D.3. Spektra obdélnı́kového a pilovitého signálu. Vzhledem k tomu, že řada
(D.4) obsahuje pouze siny, obsahuje fázové spektrum hodnoty ±π/2, čı́mž se z kosinu
stane sinus a znaménko fázového posunu vyjadřuje změnu znaménka koeficientů bn .
189
D.1. Od Fourierovy řady k Fourierově transformaci
diskrétnı́ spektrum by totiž měl pouze nekonečně dlouho trvajı́cı́ signál, periodický na celé reálné ose R. Skutečný signál je vždy konečný v čase, a mimo dobu
trvánı́ může být dodefinován nulou, takže ve skutečnosti nikdy nenı́ periodický
na celém R, a jeho spektrum dané Fourierovou transformacı́ (D.23) tedy nenı́
diskrétnı́, nýbrž spojité. Signály, které se striktnı́ periodicitě pouze blı́žı́, at’ už
svou ohraničenostı́ v čase nebo ne zcela přesným opakovánı́m jednoho vzoru,
bývá zvykem označovat jako téměř periodické nebo repetičnı́.
1
1
∆f
1/2
∆f
1/2
1/3
1/4
1/3
1/4
1/8
1/8
0
0
0
f
2f
3f
4f
5f
6f
7f
8f
9f
10f 11f 12f 13f 14f 15f 16f
0
f
2f
3f
4f
5f
6f
(a)
7f
8f
9f
10f 11f 12f 13f 14f 15f 16f
9f
10f 11f 12f 13f 14f 15f 16f
9f
10f 11f 12f 13f 14f 15f 16f
(b)
1
1
∆f
1/2
∆f
1/2
1/3
1/4
1/3
1/4
1/8
1/8
0
0
0
f
2f
3f
4f
5f
6f
7f
8f
9f
10f 11f 12f 13f 14f 15f 16f
0
f
2f
3f
4f
5f
6f
(c)
7f
8f
(d)
1
1
∆f
1/2
1/2
1/3
1/4
1/3
1/4
1/8
1/8
0
0
0
f
2f
3f
4f
5f
6f
7f
8f
(e)
9f
10f 11f 12f 13f 14f 15f 16f
0
f
2f
3f
4f
5f
6f
7f
8f
(f)
Obrázek D.4. Amplitudové spektrum původnı́ho pilovitého signálu. (a) Délka trvánı́
1t = 2.97215 s (počet vzorků 65536=216 , cca 327 period). Neurčitost frekvence 1 f ≈
0.34 Hz je nepatrná. (b) Délka trvánı́ signálu zkrácena na 1t = 92.88 ms (počet vzorků
2048=211 , cca 10 period). Neurčitost frekvence vzrůstá na 1 f ≈ 11 Hz. (c) Délka trvánı́
signálu zkrácena na 1t = 46.44 ms (počet vzorků 1024=210 , cca 5 period). Neurčitost
frekvence vzrůstá na 1 f ≈ 22 Hz, pı́ky se rozšiřujı́. (d) Délka trvánı́ signálu zkrácena na
1t = 23.22 ms (počet vzorků 512=29 , necelé 3 periody). Neurčitost frekvence vzrůstá
na 1 f ≈ 43 Hz — srovnatelná se základnı́ frekvencı́. (e) Délka trvánı́ signálu zkrácena
na 1t = 11.61 ms (256=28 vzorků, zhruba jedna a čtvrt periody). Neurčitost frekvence
1 f ≈ 86 Hz ∼ f = 110 Hz potlačuje rozlišitelnost pı́ků. (f) Délka trvánı́ signálu
zkrácena na 1t = 5.805 ms (počet vzorků 128=27 , něco přes půl periody). Neurčitost
frekvence 1 f ≈ 172 Hz > f = 110 Hz zcela smazává periodicitu.
190
Dodatek D. Fourierova transformace
Spektrum dostatečně dlouho trvajı́cı́ho signálu — tj. signálu, jehož trvánı́ 1t
je mnohonásobkem jeho „periody“ T = 1/ f (tj. f 1t ≫ 1) — je však blı́zké
diskrétnı́mu spektru, a to tı́m vı́ce, čı́m je délka trvánı́ signálu většı́. Budeme-li
dobu trvánı́ signálu 1t zkracovat, budou se úzké (ideálně diskrétnı́) pı́ky spektra
čı́m dál vı́c rozšiřovat a odlišovat od diskrétnı́ho spektra. V extrémnı́m přı́padě,
kdy signál obsahuje jen několik málo „period“ T = 1/ f , rozšı́řı́ se původně
úzké pı́ky spektra natolik, že jsou výrazně zastoupeny i frekvence ležı́cı́ mimo
původnı́ pı́ky — spektrum se rozmaže. Dá se ukázat, že „neurčitost frekvence“
1 f je spojena s trvánı́m signálu 1t vztahem
1 f 1t ≈ 1
(D.10)
nazývaným relacı́ neurčitosti. Čı́m kratšı́ dobu trvá signál, tı́m hůře jsou definovány jeho frekvence. Tento fundamentálnı́ výsledek ilustruje na přı́kladu pilovitého signálu obrázek D.4. (Srovnej je s diskrétnı́m spektrem na obrázku D.3.)
Relace neurčitosti řı́ká, že přesná znalost frekvence a jejı́ časová lokalizace jsou
vzájemně neslučitelné požadavky — bud’známe přesně frekvence, ale nevı́me nic
o jejich časové lokalizaci, nebo obráceně, nebo obojı́ s jistou dávkou neurčitosti
danou (D.10).
D.2. Diracova δ-funkce
Diracovu δ-funkci budeme v dalšı́m často potřebovat. Aby kontinuita výkladu
nebyla přerušována vsuvkami, věnujeme δ-funkci samostatnou sekci.
Ve skutečnosti nenı́ Diracova δ-funkci funkcı́ v matematickém slova smyslu
(korektnı́ definici podává teorie distribucı́ — viz např. [79]), avšak pro naše účely
zcela postačı́ následujı́cı́ intuitivnı́ zavedenı́: uvažujme jednorozměrný pohyb
bodové hmoty m řı́dı́cı́ se II. Newtonovým zákonem m dv/dt = F(t), která je na
počátku v klidu, a působenı́ sı́ly je omezeno na konečný časový interval délky τ
(viz obrázek D.5a).
F
F
F
I
I
I
rychlost 0
τ/2
−τ/2
(a)
rychlost vf
t
rychlost 0
−τ/2
τ/2
(b)
rychlost vf
t
rychlost 0
−τ/2
τ/2
rychlost vf
t
(c)
Obrázek D.5. Zkracovánı́ doby působenı́ sı́ly tak, aby celkový impuls zůstal konstantnı́.
191
D.2. Diracova δ-funkce
Po ukončenı́ působenı́ silového impulsu (v čase t ≥ τ/2) zı́ská hmota rychlost
1
vf =
m
Z
τ/2
1
F(t) dt =
m
−τ/2
Z
∞
1
F(t) dt = I .
m
| −∞ {z
}
(D.11)
I ≡ impuls sı́ly
Když zkracujeme dobu působenı́ τ a přitom zvětšujeme F tak, aby celkový impuls
I (plocha pod grafem F(t)) zůstal stejný podle obrázků D.5b,c, konečná rychlost
vf zůstane podle (D.11) stejná. V limitnı́m přı́padě dostaneme sı́lu působı́cı́ po
nekonečně krátkou dobu v čase t = 0, ale „nekonečně velikou“ tak, aby integrál
R∞
−∞ F(t) dt = I, čı́mž částice opět zı́ská rychlost vf = I/m. Idealizovaný,
nekonečně krátkou dobu působı́cı́ silový impuls, který udělı́ částici rychlost vf ,
lze psát jako F(t) = Iδ(t), kde δ-„funkce“ δ(t) má tyto vlastnosti:
δ(t) =
(
0
pro t 6 = 0 ,
∞ pro t = 0
(D.12)
tak, že
Z
∞
−∞
δ(t) dt = 1 .
(D.13)
Jedná se tedy o pı́k v bodě t = 0 „nekonečně úzký“ a „nekonečné vysoký“ tak,
že plocha jı́m a osou t omezená je jednotková. Taková funkce pochopitelně neexistuje, ale vždy si δ-funkci můžeme představit jako pı́k s jednotkovou plochou
„dostatečně úzký“ a „dostatečně vysoký“ tak, aby jeho rozměry byly adekvátnı́
řešené situaci. Diracova δ-funkce má následujı́cı́ vlastnosti [71]:
Z
∞
−∞
δ(t − t0 ) f (t) dt = f (t0 ) ,
(D.14)
δ(−t) = δ(t) ,
(D.15)
δ(at) =
(D.16)
δ(t)
, a 6= 0 ,
|a|
X δ(t − ta )
,
δ( f (t)) =
′ (t )|
|
f
a
a
(D.17)
kde ta jsou kořeny rovnice f (t) = 0. Vlastnost (D.16) je speciálnı́m přı́padem
vlastnosti (D.17) pro f (t) = at. Vztahy (D.13) a (D.14) se dajı́ zobecnit v tom
192
Dodatek D. Fourierova transformace
s
1
η
t
Obrázek D.6. Pro t < 0 je pı́k δ-funkce mimo integračnı́ interval a η(t) = 0. Pro t ≥ 0
je pı́k δ-funkce o jednotkové ploše zahrnut v integračnı́m intervalu a η(t) = 1.
smyslu, že integračnı́ interval rovný celé reálné ose nahradı́me libovolným integračnı́m intervalem, přičemž (D.13) resp. (D.14) platı́, patřı́-li 0 resp. t0 do tohoto
integračnı́ho intervalu, jinak je hodnota pravých stran (D.13) a (D.14) nulová.
S Diracovou δ-funkcı́ úzce souvisı́ jednotkový skok (Heavisideova funkce,
viz obrázek D.6)
η(t) ≡
Z
t
−∞
δ(t ′ ) dt ′ =
(
0
1
pro t < 0 ,
pro t ≥ 0 .
(D.18)
V diskrétnı́ch aplikacı́ch má vlastnosti analogické Diracově δ-funkci Kroneckerova δ definovaná pro celočı́selné indexy i, k ∈ Z zcela regulárně jako
δik =
(
0 pro i 6 = k ,
(D.19)
1 pro i = k .
Vztahy (D.13) a (D.14) majı́ diskrétnı́ ekvivalent
∞
X
k=−∞
∞
X
k=−∞
δik = 1 ,
(D.20)
δik f k = fi .
(D.21)
Diskrétnı́ analogie Heavisideovy funkce je
ηi =
i
X
k=−∞
δik =
(
0
pro i < 0 ,
1
pro i ≥ 0 .
(D.22)
Vztahy (D.20) a (D.21) se opět dajı́ zobecnit v tom smyslu, že sumačnı́ množinu
rovnou všem celým čı́slům nahradı́me libovolným intervalem celých čı́sel, přičemž (D.20) resp. (D.21) platı́, patřı́-li 0 resp. i do sumačnı́ho intervalu, jinak je
hodnota pravých stran (D.20) a (D.21) nulová.
193
D.3. Spojitá Fourierova transformace
D.3. Spojitá Fourierova transformace
Fyzikálnı́ procesy a signály můžeme studovat
• v časové doméně, kde jsou reprezentovány obecně komplexnı́ funkcı́ (signálem) s(t) vyjadřujı́cı́ závislost nějaké veličiny na čase, přičemž t může
reprezentovat i jinou než časovou souřadnici; může se jednat typicky o délku,
přı́p. také o dvě nebo vı́ce proměnných, opět typicky délkových — tj. vlastně
obrázek;
• ve frekvenčnı́ doméně, kde jsou reprezentovány obecně komplexnı́ funkcı́
ŝ( f ) vyjadřujı́cı́, jak je signál „poskládán“ ze sinusovek a kosinusovek (komplexnı́ch exponenciel e−2πi f t ). Analogicky f může reprezentovat i jinou než
časovou frekvenci, může se jednat typicky o délkovou frekvenci, přı́p. také a
o frekvence ve dvou nebo vı́ce prostorových souřadnicı́ch.
Jak bylo řečeno výše, v limitě T → ∞ nahradı́me sumy v (D.7) integrálem,
čı́mž přejdou spektrálnı́ koeficienty ŝn na spojitou funkci ŝ( f ). Signál s(t) a jeho
Fourierův obraz ŝ( f ) jsou jen různé reprezentace (obrazy) téhož signálu. Jsou
vázány přı́mou a inverznı́ Fourierovou transformacı́. Řı́káme, ze s(t) a ŝ( f ) tvořı́
transformačnı́ pár mezi časovou doménou a frekvenčnı́ doménou:
ŝ( f ) =
|{z}
frekv. dom.
Z
∞
2πi f t
s(t) e
−∞ |{z}
čas. dom.
FT
dt ⇐⇒ s(t) =
|{z}
čas. dom.
Z
∞
−∞
ŝ( f ) e−2πi f t d f .
|{z}
(D.23)
frekv. dom.
Fourierův obraz ŝ( f ) můžeme intuitivně chápat jako váhovou funkci určujı́cı́,
jak mnoho „vlnek“ e−2πi f t obsahuje vyšetřovaný signál s(t) ve frekvenčnı́m
intervalu h f, f + d f i.
Snadno se lze přesvědčit, že pro reálnou a imaginárnı́ část signálu s(t) platı́
ℜs(t) =
Z
∞
S( f ) cos[2π f t − α( f )] d f ,
−∞
Z ∞
ℑs(t) = −
−∞
(D.24)
S( f ) sin[2π f t − α( f )] d f ,
(D.25)
kde reálné funkce S( f ) a α( f ) jsou dány vztahy (srovnej s (D.9))
S( f ) ≡ |ŝ( f )| ,
cos α( f ) =
ℜŝ( f )
,
S( f )
sin α( f ) =
ℑŝ( f )
.
S( f )
(D.26)
Jinými slovy, reálná (imaginárnı́) složka signálu je „poskládána“ z kosinových
(sinových) vlnek s toutéž reálnou frekvenčně závislou váhovou funkcı́ (amplitudou) S( f ) a tı́mtéž frekvenčně závislým fázovým posunem α( f ).
194
Dodatek D. Fourierova transformace
Poznámka k záporným frekvencı́m: ve vzorcı́ch (D.23), (D.24) nebo (D.25)
možná zarážı́, že frekvence f v nich probı́há všechny reálné hodnoty, ačkoli
fyzikálnı́ význam majı́ pouze nezáporné frekvence f ≥ 0. Pomocı́ symetriı́
Fourierovy transformace1 se lze snadno přesvědčit, že pro reálný signál s(t) lze
vztah (D.24) přepsat do ekvivalentnı́ho tvaru ((D.25) dá nulu)
s(t) =
Z
∞
0
2S( f ) cos[2π f t − α( f )] d f ,
(D.27)
v němž frekvence procházı́ pouze nezáporné hodnoty, s nimiž bychom proto pro
reálné signály vystačili i v matematickém formalismu. Symetrický integračnı́
obor ve vzorcı́ch (D.23), (D.24) a (D.25) je v přı́padě reálných signálů čistě
formálnı́ a protože usnadňuje matematické manipulace, budeme se této konvence přidržovat a mı́t na paměti, že fyzikálně f ≥ 0 (to je využito např. na
obrázku D.4).
Fourierovým spektrem signálu s(t) nazýváme:
• Bud’ komplexnı́ funkci frekvence ŝ( f ) definovanou (D.23), f ∈ R;
• nebo jejı́ modul S( f ) ≡ |ŝ( f )| (amplitudové spektrum) a fázový posun α( f )
(fázové spektrum) definované (D.26), f ∈ R.
Obě tyto alternativy nesou úplnou informaci o signálu s(t). V některých
aplikacı́ch nás zajı́má hlavně modul S( f ) nebo jeho kvadrát
P( f ) ≡ S( f )2 ,
f ∈R
(D.28)
nazývaný oboustranná výkonová spektrálnı́ hustota (anglicky two-sided power
spectral density (PSD)). Častěji se použı́vá jednostranná výkonová spektrálnı́
hustota (anglicky one-sided power spectral density)
PSD( f ) ≡ S( f )2 + S(− f )2 ,
f ≥0.
(D.29)
Pokud nebude řečeno jinak, budeme použı́vat jednostrannou výkonovou spektrálnı́ hustotu PSD( f ).
Dı́ky symetriı́m Fourierovy transformace1 pro reálné signály lze ve všech
spektrech omezit na f ≥ 0, a platı́ PSD( f ) = 2S( f )2 . Výraz PSD( f ) d f
udává, „jak mnoho výkonu“ signálu je lokalizováno do frekvenčnı́ho intervalu
h f, f + d f i.
1 Budou
probrány v sekci D.3.2 na stránce 200.
195
D.3. Spojitá Fourierova transformace
D.3.1. Základní vlastnosti Fourierovy transformace
V následujı́cı́m textu budeme transformačnı́ pár mezi signálem v časové doméně
FT
s(t) a frekvenčnı́ doméně ŝ( f ) označovat s(t) ⇐⇒ ŝ( f ).
FT
FT
Linearita Je-li s1 (t) ⇐⇒ ŝ1 ( f ), s2 (t) ⇐⇒ ŝ2 ( f ), pak
FT
c1 s1 (t) + c2 s2 (t) ⇐⇒ c1 ŝ1 ( f ) + c2 ŝ2 ( f )
(D.30)
pro libovolné konstanty c1 , c2 ∈ C. Důkaz plyne ihned z linearity Fourierovy
transformace (D.23). Linearita je důležitou vlastnostı́ Fourierovy transformace.
Změna měřı́tka času (time scaling)
FT
s(at) ⇐⇒ |a|−1 ŝ( f /a) ,
a 6= 0 .
(D.31)
Důkaz provedeme snadno substitucı́ at = t ′ v definici (D.23). Formule (D.31)
řı́ká, že dojde-li ke „zhuštěnı́“ signálu (a > 1), jeho spektrum se roztáhne
koeficientem a −1 (všechny frekvence se vynásobı́ koeficientem a −1 < 1),
přičemž se stejným koeficientem snı́žı́, a obráceně (viz obrázek D.7).
Změna měřı́tka frekvence (frequency scaling)
FT
ŝ(a f ) ⇐⇒ |a|−1 s(t/a) ,
a 6= 0 .
(D.32)
Důkaz provedeme analogicky jako u (D.31). Interpretace formule (D.32) je
analogická jako formule (D.31) pro změnu měřı́tka času (viz obrázek D.7).
Posun v čase (time shifting)
FT
s(t − t0 ) ⇐⇒ ŝ( f )e2πi f t0
(D.33)
Důkaz provedeme substitucı́ t − t0 = t ′ v (D.23). Formule (D.33) řı́ká, že
při posunutı́ signálu o t0 doprava se spektrum vynásobı́ komplexnı́ jednotkou
e2πi f t0 , takže modul S( f ) = |ŝ( f )| zůstává nezměněn. Posun v čase ilustruje
obrázek D.10. Důsledkem (D.33) a linearity (D.30) je vztah
1
2 [s(t
FT
− t0 ) + s(t + t0 )] ⇐⇒ ŝ( f ) cos(2π f t0 )
použitý při konstrukci obrázku D.8.
(D.34)
196
Dodatek D. Fourierova transformace
2
1
0.8
1.5
⇐⇒
0.5
sˆ (f)
s(t)
0.6
FT
δ(t)
1
0.4
0.2
0
0
-0.2
0
0
t
f
2
1
0.8
1.5
⇐⇒
0.5
sˆ (f)
s(t)
0.6
FT
1
0.4
0.2
0
0
-0.2
-τ/2 0
t
-3/τ
τ/2
-2/τ
-1/τ
0
f
1/τ
2/τ
3/τ
2
1
0.8
1.5
⇐⇒
0.5
sˆ (f)
s(t)
0.6
FT
1
0.4
0.2
0
0
-0.2
-τ/2
0
t
-6/τ -5/τ -4/τ -3/τ -2/τ -1/τ 0 1/τ 2/τ 3/τ 4/τ 5/τ 6/τ
f
τ/2
2
1
0.8
1.5
⇐⇒
0.5
sˆ (f)
s(t)
0.6
FT
1
0.4
0.2
0
0
-0.2
-τ/2
0
t
-12/τ
τ/2
-8/τ -6/τ -4/τ -2/τ 0 2/τ 4/τ 6/τ 8/τ
12/τ
f
2
1
0.8
1.5
δ(t)
⇐⇒
0.5
sˆ (f)
s(t)
0.6
FT
1
0.4
0.2
0
0
-0.2
0
t
0
f
Obrázek D.7. Ilustrace změny měřı́tka času a frekvence. V levém sloupci je časový
průběh signálu (časová doména), v pravém sloupci jeho Fourierův obraz (frekvenčnı́
doména). Čtyři hornı́ páry obsahujı́ reálný sudý obdélnı́kový signál, jehož součin Aτ
amplitudy A a délky trvánı́ τ je konstantnı́. Fourierův obraz je podle tabulky D.1 také reálný a sudý a je roven ŝ( f ) = Aτ sinc(πτ f ) (definice sinc viz (D.46)) o maximu rovném
Aτ . Při „roztaženı́ “ v časové doméně se Fourierův obraz „stlačuje“ a naopak; v limitě,
kdy signál v časové doméně přejde na δ-funkci, bude jeho Fourierův obraz konstantnı́
funkcı́ (viz prvnı́ pár). Výjimkou je poslednı́ pár, kdy nenı́ zachována konstantnost Aτ ,
mı́sto toho A = 1 a τ → ∞. Fourierovým obrazem konstantnı́ho signálu je δ-funkce.
197
D.3. Spojitá Fourierova transformace
2
1
0.8
1.5
⇐⇒
0.5
sˆ (f)
s(t)
0.6
FT
δ(t)
1
0.4
0.2
0
0
-0.2
0
f
0
t
2
1
0.5
δ(t+t0)/2
1
FT
δ(t-t0)/2
⇐⇒
0.5
sˆ (f)
s(t)
1.5
0
-0.5
0
-1
-t0
0
t
-5/4t0
t0
-1/4t0
1/4t0
3/4t0
5/4t0
f
2
1
1.5
0.5
δ(t+t0)/2
1
FT
δ(t-t0)/2
⇐⇒
0.5
sˆ (f)
s(t)
-3/4t0
0
-0.5
0
-1
-t0
0
t
-11/4t0
t0
-7/4t0
-3/4t0
1/4t0
5/4t0
9/4t0
f
2
1
0.5
FT
δ(t-t0)/2
⇐⇒
0.5
ˆ
δ(t+t0)/2
1
s (f)
s(t)
1.5
-0.5
0
-1
-t0
-23/4t0 -15/4t0
t0
0
t
-7/4t0
1/4t0
9/4t0
17/4t0
25/4t0
1/τ
2/τ
3/τ
f
2
1
1.5
0.5
FT
1
⇐⇒
0.5
sˆ (f)
s(t)
0
0
-0.5
0
-1
-t0-τ/2
-t0+τ/2
t0-τ/2
t
t0+τ/2
-3/τ
-2/τ
-1/τ
0
f
Obrázek D.8. Ilustrace posunu v čase. V levém sloupci je časový průběh signálu
(časová doména), v pravém sloupci jeho Fourierův obraz (frekvenčnı́ doména). Čtyři
hornı́ páry ukazujı́ „rozštěpenı́ “ δ-funkce na sudý pár „polovičnı́ch“ δ-funkcı́ s postupně vzrůstajı́cı́ odlehlostı́ 2t0 , čemuž podle formule (D.34) odpovı́dá Fourierův obraz
ŝ( f ) cos(2π f t0 ) s postupně vzrůstajı́cı́ „frekvencı́ “ t0 . V poslednı́m řádku je obdélnı́kový
impuls z druhého řádku obrázku D.7 „rozštěpený“ na sudý pár „polovičnı́ch“ impulsů,
čemuž podle formule (D.34) odpovı́dá Fourierův obraz původnı́ho impulsu (obalová
křivka) násobený faktorem ŝ( f ) cos(2π f t0 ).
198
Dodatek D. Fourierova transformace
Posun ve frekvenci (modulačnı́ věta, frequency shifting)
FT
ŝ( f − f 0 ) ⇐⇒ s(t)e−2πi f0 t .
(D.35)
Důkaz provedeme substitucı́ f − f 0 = f ′ v (D.23). Při frekvenčnı́m posunu
Fourierova obrazu ŝ( f ) zůstává modul signálu |s(t)| nezměněn. Důsledkem (D.35) a linearity (D.30) je vztah
1
2 [ŝ( f
FT
− f 0 ) + ŝ( f + f 0 )] ⇐⇒ s(t) cos(2π f 0 t) .
(D.36)
Je-li tedy s(t) = 1, máme pro Fourierův obraz kosinu sudý pár „polovičnı́ch“
δ-funkcı́ (viz obrázek D.8).
Dualita Fourierovy transformace Aplikujeme-li na signál s(t) formálně Fourierovu transformaci (levá část D.23) dvakrát po sobě, dostaneme s(−t).
Důkaz plyne ihned z (D.23).
Limitnı́ vlastnosti Je-li signál s(t) absolutně integrovatelný na celé reálné ose
R, tj. platı́-li
Z
∞
−∞
|s(t)| dt < ∞ ,
(D.37)
potom
lim ŝ( f ) = 0 ,
f →±∞
resp.
lim S( f ) = 0 .
f →±∞
(D.38)
Tuto vlastnost budeme v dalšı́m předpokládat. Důkaz viz např. [75]. Triviálnı́
důsledek (D.37): musı́ také platit
lim s(t) = 0 .
t→±∞
(D.39)
Tato podmı́nka je zřejmě splněna signály s konečnou dobou trvánı́.
Signál, jehož spektrum splňuje ŝ( f ) = 0 (S( f ) = 0) pro všechny frekvence
s absolutnı́ hodnotou | f | > f max , se nazývá signál s omezenou šı́řkou pásma
(anglicky bandwidth limited, viz obrázek D.9). Takový signál zjevně splňuje
(D.38) a má zásadnı́ význam pro vzorkovánı́.
Derivace originálu
d
FT
s(t) ⇐⇒ −2πi f ŝ( f ) .
dt
(D.40)
199
D.3. Spojitá Fourierova transformace
Důkaz se provede integracı́ per partes s využitı́m důsledku absolutnı́ integrovatelnosti s(t) (D.37).
Derivace obrazu
FT
2πits(t) ⇐⇒
dŝ( f )
.
df
(D.41)
Důkaz se provede integracı́ per partes s využitı́m limitnı́ vlastnosti obrazu při
absolutnı́ integrovatelnosti s(t) (D.37).
Rt
Integrace originálu Je-li σ (t) primitivnı́ funkce k s(t), tj. σ (t) = −∞ s(t ′ ) dt ′,
pak platı́
FT
σ (t) ⇐⇒ −
1
ŝ( f ) .
2πi f
(D.42)
Důkaz plyne z derivace originálu (D.40), kde položı́me σ ′ = s.
Integrace obrazu Je-li 6( f ) primitivnı́ funkce k Fourierovu spektru ŝ( f ),
Rf
6( f ) = −∞ ŝ( f ′ ) d f ′ , pak platı́
1
FT
s(t) ⇐⇒ 6( f ) .
2πit
(D.43)
Důkaz plyne z derivace obrazu (D.41), kde položı́me 6 ′ = ŝ.
R∞
Parsevalův teorém řı́ká, že energii (anglicky total power) signálu −∞ |s(t)|2 dt
lze počı́tat analogicky i ve frekvenčnı́ doméně se stejným výsledkem:
Z ∞
Z ∞
2
|ŝ( f )|2 d f .
(D.44)
|s(t)| dt =
−∞
−∞
S( f )
− f max
f max f
Obrázek D.9. Přı́klad spektra signálu s omezenou šı́řkou pásma. Pro | f | > f max platı́
S( f ) = 0.
200
Dodatek D. Fourierova transformace
Tabulka D.1. Symetrie Fourierovy transformace.
Signál s(t)
Fourierovo sp. ŝ( f )
Ampl. sp. S( f )
Fázové sp. α( f )
PSD( f )
reálný: s(t)∗ = s(t)
imag.: s(t)∗ = −s(t)
ŝ(− f ) = ŝ( f )∗
sudý: s(−t) = s(t)
lichý: s(−t) = −s(t)
ŝ(− f ) = −ŝ( f )∗
sudé: ŝ(− f ) = ŝ( f )
lich.: ŝ(− f ) = −ŝ( f )
S(− f ) =
S(− f ) =
S(− f ) =
S(− f ) =
S( f )
S( f )
S( f )
S( f )
liché: α(− f ) = −α( f )
α(− f ) = π − α( f )
sudé: α(− f ) = α( f )
α(− f ) = π + α( f )
2S( f )2
2S( f )2
2S( f )2
2S( f )2
reálný a sudý
reálný a lichý
imagin. a sudý
imagin. a lichý
reálné a sudé
imagin. a liché
imagin. a sudé
reálné a liché
S(− f ) =
S(− f ) =
S(− f ) =
S(− f ) =
S( f )
S( f )
S( f )
S( f )
α(− f ) = α( f ) = 0, π
α( f ) = −α(− f ) = ±π/2
α(− f ) = α( f ) = ±π/2
α( f ) = 0, π
α(− f ) = π, 0
2S( f )2
2S( f )2
2S( f )2
2S( f )2
D.3.2. Symetrie Fourierovy transformace
Má-li signál s(t) určitou vlastnost symetrie, odrazı́ se to v symetrii jeho Fourierova obrazu ŝ( f ). Tabulka D.1 podává přehled základnı́ch symetriı́. Amplitudové
spektrum je ve všech těchto speciálnı́ch přı́padech sudé — přı́kladem budiž obrázek D.9. Pro názornou ilustraci se zvláště hodı́ signály z kurzı́vně zdůrazněných
řádků.
D.3.3. Elementární Fourierovy transformace
V této sekci až na výjimky s výhodou využijeme faktu, že Fourierova transformace reálného sudého signálu je rovněž reálná a sudá (viz tabulka D.1).
FT obdélnı́kového pulsu a jejı́ limitnı́ přı́pady Transformace reálného sudého obdélnı́kového pulsu je znázorněna třemi prostřednı́mi transformačnı́mi
páry na obrázku D.7. Sudý obdélnı́kový puls s(t) výšky A a šı́řky τ má
Fourierův obraz
ŝ( f ) = Aτ sinc(πτ f ) ,
(D.45)
kde
sinc x =
(
sin x/x
1
pro x 6 = 0 ,
pro x = 0 .
(D.46)
Je-li puls posunut o t0 6 = 0, pozbude signál sudosti a podle vztahu pro časový
posun (D.33) bude Fourierův obraz roven
ŝ( f ) = Aτ sinc(πτ f ) e2πi f t0 ,
(D.47)
201
D.3. Spojitá Fourierova transformace
2
1
0.5
1
FT
⇐⇒
0.5
Re ˆs (f)
s(t)
1.5
0
-0.5
0
-1
0
t
-τ/2+t0
t0
τ/2+t0
-6/τ -5/τ -4/τ -3/τ -2/τ -1/τ 0 1/τ 2/τ 3/τ 4/τ 5/τ 6/τ
f
1
Obrázek D.10. Posuneme-li obdélnı́kový puls z prostřednı́ho páru na obrázku D.7 o t0 doprava (tj. zaměnı́me-li
argument t za t − t0 , nahoře vlevo), vynásobı́ se jeho (reálný a sudý) Fourierův obraz komplexnı́m faktorem e2πi f t0 .
Vpravo nahoře je reálná část, dole imaginárnı́ část výsledku (D.47).
Im ˆs (f)
0.5
0
-0.5
-1
-6/τ -5/τ -4/τ -3/τ -2/τ -1/τ 0 1/τ 2/τ 3/τ 4/τ 5/τ 6/τ
f
přičemž modulus S( f ) zůstane nezměněn. Posun obdélnı́kového pulsu ilustruje obrázek D.10. Limitnı́ přı́pady, tj. zúženı́ do δ-funkce a roztaženı́ do
konstantnı́ funkce, jsou ilustrovány na obrázku D.7. Symetrickým „rozštěpenı́m“ obdélnı́kového pulsu dostaneme sudý Fourierův obraz, jak je znázorněno na dolnı́m páru obrázku D.8.
Transformačnı́ páry lze obrátit; napřı́klad sudý signál v časové doméně tvarovaný podle funkce sinc (D.46) má fourierovský obraz tvaru obdélnı́ka.
FT Gaussovy funkce Transformace reálné normalizované Gaussovy funkce2 se
střednı́ hodnotou 0 a směrodatnou odchylkou σ
2
1
− t
e 2σ 2 ,
s(t) = γ (t; σ ) ≡ √
2π σ
(D.48)
je znázorněna třemi transformačnı́mi páry na obrázku D.11. Jejı́ Fourierův
obraz je
ŝ( f ) =
√
2π σ̂ γ ( f ; σ̂ ) ,
kde
σ̂ =
1
.
2πσ
(D.49)
Je-li gaussovský puls posunut o t0 6 = 0, pozbude sudosti a podle vztahu pro
časový posun (D.33) se Fourierův obraz vynásobı́ komplexnı́ exponencielou
2 Normalizovaná Gaussova
funkce má
R∞
−∞ γ (t; σ ) dt
= 1.
202
Dodatek D. Fourierova transformace
1
1
0.8
0.8
⇐⇒
0.2
0
-0.2
-5σ
-σ 0 σ
t
-3σ
3σ
5σ
-1/σ
7σ
0
1/σ
f
1
1
0.8
0.8
FT
⇐⇒
0.4
0.2
sˆ (f)
0.6
0.6
s(t)
0.2
-0.2
-7σ
0.4
0.2
0
0
-0.2
-0.2
-3σ
-2σ
-σ
0
t
σ
2σ
-2/σ
3σ
-1/σ
0
1/σ
2/σ
2/σ
4/σ
f
1
1
0.8
0.8
0.6
0.6
s(t)
0.4
0
FT
⇐⇒
0.4
0.2
sˆ (f)
s(t)
FT
0.4
sˆ (f)
0.6
0.6
0.4
0.2
0
0
-0.2
-0.2
-1.5σ
-σ
0
σ
1.5σ
t
-4/σ
-2/σ
0
f
Obrázek D.11. Ilustrace Fourierovy transformace Gaussovy funkce. V levém sloupci
je časový průběh signálu (časová doména), v pravém sloupci jeho Fourierův obraz
(frekvenčnı́ doména). Všechny tři signály v časové doméně obsahujı́ reálnou sudou
normalizovanou Gaussovu funkci (D.48). Fourierův obraz (D.49) je podle tabulky D.1
také reálný a sudý. Při „roztaženı́“ v časové doméně se Fourierův obraz „stlačuje“
a naopak. Limitnı́ přı́pady vypadajı́ analogicky jako na obrázku D.11 a nejsou proto
zobrazeny. Za povšimnutı́ stojı́ absence oscilačnı́ch laloků funkce sinc (D.46). Gaussova
funkce se velice rychle blı́žı́ k nule a pro čtyřnásobek směrodatné odchylky je již prakticky
nulová, což má dalekosáhlé praktické upotřebenı́.
e2πi f t0 , přičemž modulus S( f ) zůstane nezměněn. Časový posun gaussovského pulsu ilustruje obrázek D.12.
D.3.4. Konvoluce a korelace
Konvoluce s ∗ r signálů v časové doméně s(t) a r (t) je definována jako
(s ∗ r )(t) ≡
Z
∞
−∞
s(τ )r (t − τ ) dτ .
(D.50)
203
D.3. Spojitá Fourierova transformace
2
1
0.5
1
FT
⇐⇒
0.5
Re ˆs (f)
s(t)
1.5
0
-0.5
0
-1
0
-σ+t0 t0 σ+t0
-1/σ
-1/2σ
0
1/2σ
1/σ
1/2σ
1/σ
f
t
1
Obrázek D.12. Posuneme-li gaussovský puls o t0 doprava (tj. zaměnı́me-li
argument t za t − t0 , nahoře vlevo), vynásobı́ se jeho (reálný a sudý) Fourierův obraz komplexnı́m faktorem e2πi f t0 .
Vpravo nahoře je reálná část, dole imaginárnı́ část výsledku (D.47).
Im ˆs (f)
0.5
0
-0.5
-1
-1/σ
-1/2σ
0
f
Konvoluce je zřejmě komutativnı́, s ∗ r = r ∗ s, takže lze psát
(s ∗ r )(t) ≡
Z
∞
−∞
s(t − τ )r (τ ) dτ .
(D.51)
FT
FT
Konvolučnı́ teorém řı́ká, že je-li s(t) ⇐⇒ ŝ( f ) a r (t) ⇐⇒ r̂ ( f ), pak
FT
(s ∗ r )(t) ⇐⇒ ŝ( f )r̂ ( f ) .
(D.52)
Jinými slovy, Fourierův obraz konvoluce dvou signálů je roven součinu Fourierových obrazů obou signálů. Ačkoli funkce r a s jsou z matematického hlediska
v (D.50) rovnoprávné, v aplikacı́ch obvykle jedna z nich hraje roli signálu s a
druhá roli odezvy (anglicky response function) popisujı́cı́ deformaci signálu po
průchodu přı́strojem (podrobněji viz např. [13], názorná demonstrace konvoluce
je na obrázku D.13).
Z vlastnostı́ Diracovy δ-funkce plyne, že konvoluce libovolného signálu
s Diracovou δ-funkcı́ (D.12) dá přesnou kopii signálu; konvoluce s Diracovou
δ-funkcı́ posunutou o t0 , δ(t −t0 ), dá kopii signálu posunutou o t0 . Naopak, signál
majı́cı́ tvar δ-funkce bude po konvoluci s libovolnou odezvovou funkcı́ roven
této odezvové funkci. Konvoluce je tak vhodným nástrojem pro popis (časově
invariantnı́ch) vlastnostı́ přı́strojů pro zpracovánı́ signálu.
204
Dodatek D. Fourierova transformace
s(t)
r (t)
t
t
r* s(t)
t
Obrázek D.13. Přı́klad konvoluce dvou funkcı́. Signál s(t) je konvolvován s odezvovou funkcı́ r(t). Jelikož odezvová funkce je širšı́ než některé detaily v původnı́m signálu,
budou tyto detaily konvolucı́ „vymyty“. Nenı́-li přı́tomen šum, proces konvoluce lze
invertovat ve formě dekonvoluce. Obrázek je převzat z [13].
Užitečné je obrácenı́ konvolučnı́ho teorému
FT
s(t) r (t) ⇐⇒ (ŝ ∗ r̂ )( f ) ,
(D.53)
které řı́ká, že Fourierovým obrazem součinu dvou signálů v časové doméně je
konvoluce jejich Fourierových obrazů ve frekvenčnı́ doméně
(ŝ ∗ r̂)( f ) ≡
Z
∞
−∞
ŝ(ϕ)r̂ ( f − ϕ) dϕ .
(D.54)
Užitečnost obrácenı́ konvolučnı́ho teorému tkvı́ v následujı́cı́ aplikaci: vyřı́zneme-li z dlouhotrvajı́cı́ho stacionárnı́ho signálu s(t) se spektrem ŝ( f ) časové
okno délky T , je tato operace ekvivalentnı́ násobenı́ signálu s(t) odezvovou
funkcı́ r (t) rovnou jedné v intervalu okna a rovnou nule jinde; spektrum takového okna odpovı́dá (až na násobenı́ komplexnı́ exponencielou z (D.33))
funkci (D.45). Podle (D.53) je Fourierův obraz tohoto součinu roven konvoluci spektra původnı́ho signálu a funkce (D.45). Je-li např. původnı́ spektrum
tvořeno úzkými pı́ky podobně jako spektrum na obrázku D.4(a), budou — jak
plyne z vlastnosti (D.14) Diracovy δ-funkce — úzké pı́ky původnı́ho spektra
nahrazeny funkcemi (D.45), a to tı́m širšı́mi, čı́m užšı́ bude vyřı́znuté okno.
Tuto skutečnost ilustrujı́ grafy (b)–(f) na obrázku D.4. Nahradı́me-li obdélnı́kové
D.3. Spojitá Fourierova transformace
205
okno jiným, např. gaussovským (D.48), odpadnou oscilačnı́ laloky (D.45), avšak
rozšı́řenı́ původně úzkých pı́ků zůstane zachováno.
Určı́me-li spektrum pro celý, dostatečně dlouho trvajı́cı́ signál, dostaneme
maximum informace o obsažených frekvencı́ch, ale nebudeme mı́t žádnou informaci o tom, kdy se tyto frekvence vyskytly. Aplikujeme-li okénkovou Fourierovu
transformaci,3 jejı́ž princip byl popsán v předchozı́m odstavci, budeme mı́t k dispozici informaci o lokalizaci, ale ztratı́me přesnost informace o frekvenci. To je
opět projev principu neurčitosti (D.10).
Uvedené skutečnosti majı́ dalekosáhlé důsledky pro analýzu signálu. Fourierova spektrálnı́ analýza je vhodná pro stacionárnı́ signály, jejichž charakter
je časově invariantnı́. Máme-li co do činěnı́ s nestacionárnı́mi signály a časově
lokalizovanými přechodnými jevy, je vhodné použı́t metod waveletové analýzy,
jejı́ž základnı́ ideje popisuje Dodatek E.
Korelace dvou signálů s1 (t) a s2 (t) je definována jako
Corr(s1 , s2 )(t) =
Z
∞
−∞
s1 (τ + t)s2 (τ ) dτ .
(D.55)
Korelace je funkcı́ prodlevy (anglicky lag) t. Korelačnı́ teorém řı́ká, že je-li
FT
FT
s1 (t) ⇐⇒ ŝ1 ( f ) a s2 (t) ⇐⇒ ŝ2 ( f ), pak
FT
Corr(s1 , s2 )(t) ⇐⇒ ŝ1 ( f )ŝ2 (− f ) ,
(D.56)
resp. pro reálné signály (viz tabulka D.1)
FT
Corr(s1 , s2 )(t) ⇐⇒ ŝ1 ( f )ŝ2 ( f )∗ .
(D.57)
Jinými slovy, Fourierův obraz korelace dvou reálných signálů je roven součinu
jejich Fourierových obrazů, přičemž druhý bereme komplexně sdružený. Korelace signálu se sebou samotným se nazývá autokorelace a platı́ pro ni (je-li signál
reálný) Wienerův–Khinchinův teorém
FT
Corr(s, s)(t) ⇐⇒ |ŝ( f )|2 .
3 Také
nazývanou short-time Fourier transform.
(D.58)
206
Dodatek D. Fourierova transformace
D.3.5. Fourierova transformace ve dvou a více dimenzích
Fourierův obraz dvourozměrného signálu s(x, y) (typicky se jedná o spojitou
formu obrazových dat) můžeme definovat přı́močaře na základě (D.23) jako
ZZ
ŝ( f x , f y ) =
ZZ
s(x, y) =
∞
s(x, y) e2πi( f x x+ f y y) dxdy
−∞
∞
FT
⇐⇒
ŝ( f x , f y ) e−2πi( f x x+ f y y) d f x d f y .
(D.59)
−∞
Analogicky Fourierův obraz trojrozměrného signálu s(x, y, z) je
ZZZ
ŝ( f x , f y , f z ) =
ZZZ
s(x, y, z) =
∞
∞
s(x, y, z) e2πi( f x x+ f y y+ f z z) dxdydz
−∞
FT
⇐⇒
ŝ( f x , f y , f z ) e−2πi( f x x+ f y y+ f z z) d f x d f y d f z .
(D.60)
−∞
Všechny vlastnosti shrnuté v sekcı́ch D.3.1, D.3.2 a D.3.4 se snadno dajı́ zobecnit
na dvourozměrnou a trojrozměrnou Fourierovou transformaci (D.59) a (D.60) .
Tato zobecněnı́ majı́ pouze technický charakter a nebudeme se jimi zde zabývat.
Podobně bychom mohli definovat vı́cerozměrnou Fourierovu transformaci.
To je opět přı́močará technická záležitost a rovněž ji zde vynecháme.
D.4. Diskrétní a rychlá Fourierova transformace
D.4.1. Diskretizace časová a amplitudová
V praktických aplikacı́ch je nutné elektrický analogový signál digitalizovat, což
znamená
• jednak provést časovou diskretizaci neboli vzorkovánı́ (anglicky sampling),
tj. určit hodnoty signálu s(t) v diskrétnı́ch, obvykle ekvidistantnı́ch, časových
intervalech [13],
sn = s(n1) ,
n = . . . − 3, −2, −1, 0, 1, 2, 3, . . . ,
(D.61)
jak je znázorněno na obrázku D.14,
• jednak provést diskretizaci hodnot sn , tj. reprezentovat je vhodným datovým
typem, např. desetinnými čı́sly s plovoucı́ tečkou v jednoduché přesnosti,
dvoubajtovými neznaménkovými celými čı́sly apod. Této diskretizaci se řı́ká
kvantizace nebo amplitudová diskretizace a dále se jı́ nebudeme zabývat.
207
D.4. Diskrétnı́ a rychlá Fourierova transformace
s(t)
s0
s(t)
s2
s1
s8
s3
s7
s4
s5
s6
∆
s10
s2
s14
s12
s11
s9
s0
s13
t
Obrázek D.14. Ilustrace vzorkovánı́ analogového signálu s(t). Je-li Nyquistova
kritická frekvence signálu (D.62) většı́ než
maximálnı́ frekvence f max obsažená ve
spektru (obrázek D.9), lze z hodnot sn
signál zrekonstruovat.
s1
∆
t
Obrázek D.15. Ilustrace vzniku aliasu
na stejném signálu jako na obrázku D.14.
Vzhledem k podvzorkovánı́ (nesplněnı́
Shannonovy podmı́nky (D.63)) je signál
rekonstruovaný ze vzorků zcela odlišný od
originálnı́ho signálu.
Časová odlehlost sousednı́ch vzorků 1 se nazývá vzorkovacı́ interval, jejı́ převrácená hodnota f samp ≡ 1/1 se nazývá vzorkovacı́ frekvence (anglicky sampling
rate). U vı́cerozměrného signálu budeme mı́t odpovı́dajı́cı́ počet vzorkovacı́ch
intervalů a vzorkovacı́ch frekvencı́, pro každou nezávisle proměnnou jednu.
D.4.2. Shannonův vzorkovací teorém a alias
Diskretizujeme-li signál vzorkovacı́m intervalem 1, hraje klı́čovou roli Nyquistova kritická frekvence
fc =
1
1
= f samp .
21
2
(D.62)
Má-li spojitý signál s(t) vzorkovaný frekvencı́ f samp omezenou šı́řku pásma
s maximálnı́ frekvencı́ f max (viz obrázek D.9) a platı́-li Shannonova podmı́nka4
f max < f c ,
(D.63)
nebo ekvivalentně
f samp > 2 f max ,
(D.64)
(tj. je-li vzorkovacı́ frekvence většı́ než dvojnásobek maximálnı́ frekvence obsažené v signálu), pak signál s(t) je úplně určen svými vzorky sn (podrobnosti viz
např. [13]). Nemá-li spojitý signál s(t) omezenou šı́řku pásma nebo f max ≥ f c
(tj., nenı́-li vzorkovacı́ frekvence vı́ce než dvojnásobkem maximálnı́ frekvence
4V
literatuře uváděná také jako Shannonova–Kotělnikovova podmı́nka.
208
Dodatek D. Fourierova transformace
obsažené v signálu), nastává jev zvaný alias, kdy část spektra ležı́cı́ vně intervalu h− f c , f c i je mapována dovnitř tohoto intervalu. Alias — což je v podstatě
důsledek podvzorkovánı́ — je všeobecně známý jev; stačı́ připomenout zdánlivě
„stojı́cı́ “ nebo „pomalu a v opačném směru se otáčejı́cı́ “ kola auta pozorovaná
při výbojkovém pouličnı́m osvětlenı́, letecká vrtule ve filmu či televizi apod., viz
obrázek D.15.
D.4.3. Diskrétní Fourierova transformace
Uvažujme konečný signál s N vzorky. Diskrétnı́ Fourierova transformace (DFT)
dá na výstupu zřejmě právě N nezávislých hodnot. Mı́sto spojitého Fourierova
obrazu ŝ( f ) na intervalu h− f c , f c i proto hledáme diskrétnı́ hodnoty
fn ≡
n
,
N1
n=−
N
N
, . . . , 0, . . . ,
.
2
2
(D.65)
Ve vztahu (D.65) máme celkem N + 1 hodnot; ukazuje se, že hodnoty v extrémnı́ch frekvencı́ch f −N/2 a f N/2 jsou stejné, takže ve skutečnosti dostáváme jen
N nezávislých hodnot pro n = −N /2 + 1, . . . , 0, . . . , N /2.
Aproximujeme-li prvnı́ integrál (D.23) diskrétnı́ sumou v diskrétnı́ch frekvencı́ch (D.65), obdržı́me diskrétnı́ Fourierovu transformaci N vzorků sk [13]
ŝ( f n ) ≈ 1ŝn ,
kde ŝn ≡
N−1
X
sk e2πikn/N .
(D.66)
k=0
V sumě (D.66) můžeme mı́sto n = −N /2 + 1, . . . , 0, . . . , N /2 sčı́tat přes
n = 0, . . . , N − 1, protože (D.66) je periodický s periodou N . Nulová frekvence
odpovı́dá n = 0, kladné frekvence 0 < f < f c odpovı́dajı́ hodnotám 1 ≤ n ≤
N /2 − 1, záporné frekvence − f c < f < 0 odpovı́dajı́ hodnotám N /2 + 1 ≤
n ≤ N − 1. Hodnota n = N /2 pak odpovı́dá jak f = f c , tak f = − f c .
Diskrétnı́ Fourierova transformace (D.66) má tytéž vlastnosti symetrie jako
spojitá; stačı́ v tabulce D.1 nahradit s(t) → sk , ŝ( f ) → ŝn , ŝ(− f ) → ŝ N−n ,
a pojmy „sudý“ resp. „lichý“ odkazujı́ na stejné resp. opačné znaménko ve
vzorcı́ch s indexy k a N − k.
Inverznı́ diskrétnı́ Fourierova transformace má tvar (povšimněme si normalizačnı́ho koeficientu 1/N )
N−1
1 X
ŝn e−2πikn/N .
sk =
N
n=0
(D.67)
209
D.4. Diskrétnı́ a rychlá Fourierova transformace
D.4.4. Rychlý algoritmus Fourierovy transformace (FFT)
Z přepisu formule (D.66) do maticového tvaru







ŝ0
ŝ1
ŝ2
..
.

1
 1
 
 1
=
 .
  ..
ŝ N−1
| {z }
výstup

1
W1
W2
..
.
1
W2
W4
..
.
...
...
...
..
.
1
W N−1
W 2(N−1)
..
.







s0
s1
s2
..
.




,


1 W N−1 W 2(N−1) . . . W (N−1)(N−1)
s N−1
{z
} | {z }
|
W
vstup
(D.68)
kde W ≡ e2πi/N , je vidět, že sloupcový vektor sk je násoben maticı́ W elementů
W nk . Toto maticové násobenı́, které vytvářı́ sloupcový vektor ŝn , zahrnuje O(N 2 )
násobenı́ v plovoucı́ desetinné tečce.
Ačkoli existuje vı́ce optimalizovaných schémat, jak výpočet (D.66) urychlit
(viz [13]), uvedeme jedno z nich, tzv. Danielsonův–Lanczosův algoritmus pocházejı́cı́ z r. 1942. Počet vzorků N v Danielsonově–Lanczosově algoritmu je
sice omezen na celočı́selné mocniny 2, ale princip metody je velmi jednoduchý
a univerzálnı́. Aniž bychom zacházeli do technických podrobnostı́ (viz [13]),
naznačı́me podstatu algoritmu. Diskrétnı́ Fourierova transformace posloupnosti
vzorků o délce N může být rozepsána jako suma dvou DFT o délkách N /2, jedné
zformované ze sudých vzorků, druhé z lichých vzorků. Tento postup aplikujeme
rekurzivně, tj. postupujeme k DFT o délkách N /4, N /8, . . . Nynı́ je jasné, proč
algoritmus funguje jen pro N = 2 M , pak totiž po určitém počtu „rozpůlenı́ “ (rovnému binárnı́mu logaritmu N ) dospějeme k DFT o délce 1, což je identita! Stačı́
tedy najı́t (vzájemně jednoznačnou) korespondenci mezi těmito „DFT délky 1“
a původnı́mi vzorky sk . Ukazuje se, že přepermutujeme-li původnı́ pořadı́ sk
v bitově reverznı́m pořadı́5 , dostaneme potřebnou korespondenci.
Nynı́ můžeme celý postup obrátit: nejprve provést „zpřeházenı́“ původnı́ho
pořadı́ sk v bitově reverznı́m pořadı́ (lze provést velmi rychle), čı́mž dostaneme N
triviálnı́ch DFT o délkách 1, a z nich poté konstruujeme DFT délky 2, 4, 8, . . .,
až dospějeme k celkové DFT signálu délky N . Protože v každém z log2 N
„půlenı́“ provádı́me O(N ) násobenı́, obsahuje celý proces O(N log2 N ) násobenı́
v plovoucı́ desetinné tečce. Tento algoritmus se nazývá rychlou Fourierovou
transformacı́ (anglicky Fast Fourier Transform, FFT).
To je oproti „maticové“ aritmetice (D.68) urychlenı́ faktorem O(N / log2 N ).
Máme-li např. N = 106 (okolo 20 s hudby), je faktor urychlenı́ řádu 104 . Kdyby
5 Index
vyjádřı́me ve dvojkové soustavě a převrátı́me pořadı́ bitů.
210
Dodatek D. Fourierova transformace
DFT počı́taná FFT algoritmem trvala zhruba několik sekund, zabral by výpočet
pomocı́ původnı́ maticové podoby (D.68) zhruba jeden den!
D.4.5. Diskrétní konvoluce a korelace
Diskrétnı́ verze vztahu (D.51) pro odezvovou funkci nenulovou pouze v rozmezı́
vzorků −M/2 < k ≤ M/2, kde M je dostatečně velké sudé celé čı́slo,6 je
(s ∗ r ) j =
M/2
X
k=−M/2+1
s j −k rk .
(D.69)
Způsob ošetřenı́ části odezvové funkce pro záporný čas objasňuje obrázek D.16.
Diskrétnı́ konvolučnı́ teorém pak řı́ká: je-li vzorkovaný signál s j periodický
s periodou N , takže je úplně popsán N vzorky s0 , s1 , . . . , s N−1 , pak DFT jeho
6 Pro takovou odezvovou funkci se použı́vá označenı́ FIR (finite impulse response). V praktic-
kých aplikacı́ch vystačı́me s odezvovými funkcemi typu FIR, bud’ proto, že máme do do činěnı́
s funkcı́ tohoto typu, nebo jimi skutečnou odezvovou funkci aproximujeme.
sj
rk
(r* s)j
0
N−1
0
N−1
0
N−1
Obrázek D.16. Přı́klad konvoluce dvou diskrétně vzorkovaných funkcı́. Signál s j je
konvolvován s odezvovou funkcı́ r j . Pro záporný čas je odezvová funkce cyklicky
přetočena na pravý konec pole r j . Obrázek je převzat z [13].
211
D.4. Diskrétnı́ a rychlá Fourierova transformace
diskrétnı́ konvoluce s odezvovou funkcı́ r j o délce N je rovna součinu DFT
signálu ŝn a odezvové funkce r̂n , neboli
N/2
X
k=−N/2+1
FT
s j −k rk ⇐⇒ ŝn r̂n .
(D.70)
Hodnoty rk pro k = 0, . . . , N − 1 jsou tytéž jako pro k = −N /2 + 1, . . . , N /2,
ale v cyklicky přetočeném pořadı́, jak je popsáno v odstavci za vztahem (D.66).
Problém diskrepance mezı́ sum v (D.69) a v (D.70) se vyřešı́ snadno —
téměř vždy máme odezvovou funkci mnohem kratšı́ než vlastnı́ signál, takže ji
M můžeme dodefinovat na plnou délku N nulami. Obtı́žnějšı́ je problém splněnı́
periodicity signálu skutečnými daty. Podrobný rozbor (viz např. [13]) ukazuje,
že stačı́ doplnit na jeden konec dat „nulovou vycpávku“ o délce rovné většı́mu
z čı́sel vyjadřujı́cı́ch trvánı́ odezvové funkce v kladném či záporném čase. Pro
symetrickou odezvovou funkci prostě na konec signálu přidáme M/2 nul.
Diskrétnı́ forma korelace (D.55) má pro vzorkované signály s j , v j , periodické
s periodou N , tvar
Corr(s, v) j =
N−1
X
k=0
s j +k vk .
(D.71)
FT
FT
Diskrétnı́ korelačnı́ teorém pro reálné signály řı́ká, že jsou-li s j ⇐⇒ ŝk a v j ⇐⇒
v̂k transformačnı́ páry, pak
FT
Corr(s, v) j ⇐⇒ ŝk v̂k∗ .
(D.72)
Ošetřenı́ koncových efektů ukazuje, že pro prodlevu (lag) mezi signály definovanou za rovnicı́ (D.55) zahrnujı́cı́ ±K vzorků je třeba na konec obou signálů
alespoň K nul.
Jak konvoluce, tak korelace, počı́tané podle levých stran vztahů (D.70) a
(D.72), potřebujı́ O(N 2 ) násobenı́ v plovoucı́ desetinné tečce, zatı́mco jejich
pravé strany jich potřebujı́ pouze O(N ). Fourierova transformace mezi oběma
doménami vyžaduje O(N log2 N ), takže výpočet konvoluce nebo korelace nepřı́mo přes násobenı́ Fourierových obrazů je výpočetně efektivnějšı́ řádově stejným faktorem, jako rychlá Fourierova transformace vůči maticové formě DFT
(viz konec sekce D.4.4).
212
Dodatek D. Fourierova transformace
D.4.6. FFT ve dvou a více dimenzích
Podobně jako v přı́padě spojité dvou nebo vı́cerozměrné Fourierovy transformace
(sekce D.3.5), také DFT může být přı́močaře zobecněna na dvě a tři dimenze (vı́ce
dimenzemi se nebudeme zabývat). Máme-li komplexnı́ signál sk1,k2 definovaný
na dvourozměrné mřı́žce 0 ≤ k1 ≤ N1 − 1, 0 ≤ k2 ≤ N2 − 1, definujeme
dvourozměrnou DFT jako
ŝn 1,n 2 =
NX
1 −1
2 −1 N
X
sk1 ,k2 e2πik1 n 1 /N1 e2πik2 n 2 /N2 ,
(D.73)
k2 =0 k1 =0
máme-li komplexnı́ signál sk1 ,k2 ,k3 definovaný na trojrozměrné mřı́žce 0 ≤ k1 ≤
N1 − 1, 0 ≤ k2 ≤ N2 − 1, 0 ≤ k3 ≤ N3 − 1, definujeme trojrozměrnou DFT jako
ŝn 1,n 2 ,n 3 =
NX
3 −1 N
1 −1
2 −1 N
X
X
k3 =0 k2 =0 k1 =0
2πi
sk1,k2 ,k3 e
k1 n 1 k2 n 2 k3 n 3
N1 + N2 + N3
.
(D.74)
Pro výpočet dvou- a trojdimenzionálnı́ diskrétnı́ Fourierovy transformace (D.73)
a (D.74) lze zobecnit rychlý Danielsonův–Lanczosův algoritmus popsaný v předešlé sekci (D.4.4). Inverznı́ transformaci dostaneme záměnou s za ŝ, změnou
znamének v exponencielách a násobenı́m normalizačnı́m faktorem 1/N1 N2 resp.
1/N1 N2 N3 analogicky jako v (D.67).
Existujı́ knihovny numerických rutin pro výpočet jednodimenzionálnı́ a vı́cedimenzionálnı́ diskrétnı́ Fourierovy transformace [13, 65], včetně jejı́ch variant,
jako např. sinová transformace, kosinová transformace apod. (viz [13]).
D.5. Filtrování ve frekvenční doméně
Na závěr ilustrujme použitı́ fourierovské spektrálnı́ metody na jednoduchém přı́kladě filtrovánı́ signálu za účelem odstraněnı́ kontaminace v něm obsažené. Pro
tento záměr byly sestrojeny dva testovacı́ signály; jeden nespojitý a druhý hladký
(viz obrázek D.17). Tyto testovacı́ signály byly podrobeny umělé kontaminaci
dvojı́ho druhu — v prvnı́m přı́padě se jedná o úzkopásmovou kontaminaci, tj.
kontaminaci, jejı́ž spektrum zasahuje jen úzký rozsah frekvencı́, ve druhém přı́padě se jedná o širokopásmovou kontaminaci, jejı́ž spektrum zasahuje podstatnou
část spektra původnı́ho signálu. Konkrétně byl v roli úzkopásmové kontaminace
použit sinusový signál o frekvenci 100 Hz, v roli širokopásmové kontaminace byl
použit bı́lý šum, tj. šum, jehož spektrum je (přibližně) je frekvenci nezávislé, a
213
D.5. Filtrovánı́ ve frekvenčnı́ doméně
512
samples
1024
0
512
samples
1024
0
0.5
time [s]
1
0
0.5
time [s]
1
-2
-0.4
0
0
2
0.4
-2
-0.4
0
0
2
0.4
-2
-0.4
0
0
2
0.4
0
101
10-4
102
10-2
103
PSD
PSD
102
105
106
104
Obrázek D.17. Testovacı́ signály a jejich kontaminace. Ve všech přı́padech majı́ délku
trvánı́ 1 s a jsou vzorkovány na N = 1024 vzorků. V levém sloupci je nespojitý „obdélnı́kový“ signál, v pravém sloupci spojitý hladký signál. Nahoře jsou signály zobrazeny
v čisté podobě, v prostřednı́ řadě jsou kontaminovány úzkopásmovým signálem (sinusovým o kmitočtu 100 Hz), v dolnı́ řadě jsou kontaminovány bı́lým šumem. Odstup
sumárnı́ho signálu od kontaminace je v obou přı́padech SNR = 15 dB (tj. signálový
výkon je 1015/10 = 31.6 × většı́ než kontaminačnı́ výkon).
0
100
200
300
frequency [Hz] 500
0
100
200
300
frequency [Hz] 500
Obrázek D.18. Odhad výkonové spektrálnı́ hustoty nespojitého (vlevo) a hladkého
signálu (vpravo). Šı́řka Welchova okna [13] s 50% překryvem je 128 vzorků. Nepřerušovanou čarou je vyznačena PSD původnı́ho, nekontaminovaného signálu (hornı́ dvojice
na obrázku D.17). Tečkovaně je vyznačena PSD signálu kontaminovaného úzkopásmovým rušenı́m (prostřednı́ dvojice na obrázku D.17), jež se od PSD nekontaminovaného
signálu lišı́ pı́kem v okolı́ kmitočtu 100 Hz. Čerchovaně je vyznačena PSD signálu
kontaminovaného širokopásmovým rušenı́m (dolnı́ dvojice na obrázku D.17), jež se od
PSD nekontaminovaného signálu lišı́ téměř v celém frekvenčnı́m rozsahu.
214
Dodatek D. Fourierova transformace
jsou v něm rovnoměrně zastoupeny všechny frekvence až do poloviny vzorkovacı́
frekvence.7
Pro oba signály a jejich kontaminované verze byly sestrojeny tzv. odhady
výkonové spektrálnı́ hustoty (PSD estimates, viz obrázek D.18). O PSD, přesněji
řečeno o jejı́ jednostranné variantě (D.29), byla řeč v sekci D.3. Odhad PSD se
určuje tak, že se provede Fourierova transformace vždy jen kousku signálu (tzv.
okna), at’už obdélnı́kového nebo vytvarovaného do přı́hodnějšı́ho tvaru (obvykle
blı́zkého Gaussově křivce8 ), a PSD ze všech těchto oken, pokrývajı́cı́ch celý
signál (okna se mohou či nemusejı́ vzájemně překrývat) se sečte. Čı́m je okno
užšı́, tı́m je křivka odhadu PSD hladšı́, ale za cenu menšı́ho rozlišenı́, a naopak.
Podrobně o odhadu PSD viz např. [13].
Z odhadů PSD na obrázku D.18 je zřejmé, že potlačenı́ úzkopásmové kontaminace pomocı́ filtrace ve frekvenčnı́ doméně nenı́ obtı́žné. Postup zahrnuje tři
kroky:
1. Spočteme Fourierovu transformaci ŝ( f ) kontaminovaného signálu s(t).
2. Vynásobı́me ji (vzorek po vzorku) filtračnı́ funkcı́ Φ( f ) sestrojenou na základě odhadu PSD kontaminovaného signálu. V tomto konkrétnı́m přı́padě
bude mı́t filtračnı́ funkce tvar tzv. zářezového filtru, tj. bude rovna jedné pro
všechny frekvence až na úzké frekvenčnı́ pásmo, v němž se vyskytuje kontaminace. Filtračnı́ funkci je vhodné volit dostatečně hladkou, opět z důvodů,
jenž byly ozřejmeny v sekci D.3.4. Filtračnı́ funkce použitá pro odstraněnı́
úzkopásmové kontaminace našeho přı́kladu je zobrazena na obrázku D.19
vpravo.
3. Na přefiltrované spektrum ŝclean ( f ) ≡ Φ( f )ŝ( f ) aplikujeme inverznı́ Fourierovu transformaci, čı́mž dostaneme signál sclean (t) v časové doméně zbavený kontaminace, ale bohužel také části odpovı́dajı́cı́ frekvenčnı́mu spektru
ležı́cı́mu ve frekvenčnı́m pásmu kontaminace. Právě v přı́padě, kdy je toto
pásmo úzké, se tı́mto způsobem dá dosáhnout velmi dobrých výsledků.
Pro filtraci byl vytvořen zářezový filtr znázorněný na obrázku D.19 vpravo. Tento
filtr odstranı́ ze spektra kontaminovaného signálu úzké pásmo, v němž se projevuje úzkopásmová kontaminace. Výsledek filtrace znázorněný v prostřednı́ řadě
obrázku D.20 ukazuje, že úzkopásmová dekontaminace je velmi uspokojivá pro
hladký signál, méně již pro nespojitý signál. Proč je tomu tak objasnı́ pohled na
spektra na obrázku D.18. U hladkého signálu jsou dominantnı́ frekvence zhruba
do ∼ 20 Hz, v oblasti kontaminace okolo 100 Hz jsou přı́spěvky do energie
7 Pro
umělou kontaminaci byl použit program noisify z kolekce [68], jenž pro kontaminaci
bı́lým šumem využı́vá generátoru náhodných čı́sel.
8 Tvar
blı́zký Gaussově křivce je výhodný z důvodů naznačených v sekci D.3.4.
215
1
0.5
0
0
0.5
1
D.5. Filtrovánı́ ve frekvenčnı́ doméně
100
200
300
frequency [Hz] 500
0
100
200
300
frequency [Hz] 500
0
100
200
300
frequency [Hz] 500
0
Obrázek D.19. Filtry použité pro dekontaminaci signálů. Vpravo je zářezový filtr
centrovaný na 100 Hz, jı́mž byla odstraněna úzkopásmová kontaminace harmonickým signálem. Nahoře vlevo (vpravo)
je Wienerův optimálnı́ filtr použitý k odstraněnı́ širokopásmové kontaminace nespojitého (spojitého) signálu.
0.5
1
0
512
samples
1024
0
512
samples
1024
0
0.5
time [s]
1
0
0.5
time [s]
1
-2
-0.4
0
0
2
0.4
-2
-0.4
0
0
2
0.4
-2
-0.4
0
0
2
0.4
0
Obrázek D.20. V hornı́ řadě jsou pro srovnánı́ zopakovány původnı́, nekontaminované
signály z hornı́ řady obrázku D.17. Prostřednı́ a dolnı́ řada odpovı́dajı́ prostřednı́ a
dolnı́ řadě na obrázku D.17 s tı́m rozdı́lem, že kontaminované signály byly filtrovány.
Úzkopásmová kontaminace (prostřednı́ řada) byla odstraněna pomocı́ zářezového filtru
z obrázku D.19 vpravo. Širokopásmová kontaminace (dolnı́ řada) byla filtrována pomocı́
Wienerovy optimálnı́ filtrace (viz obrázek D.19 nahoře a [13]).
216
Dodatek D. Fourierova transformace
signálu 104 × až 105 × menšı́. Proto jejich potlačenı́ zářezovým filtrem z obrázku D.19 vpravo ovlivnı́ tvar původnı́ho signálu jen velmi málo a výsledkem je
téměř dokonale restaurovaný signál. Nespojitý signál má však dı́ky svým ostrým
hranám mnohem vyrovnanějšı́, ploššı́ spektrum, a aplikacı́ zářezového filtru se
zbavı́me i důležité části spektra původnı́ho signálu. To se projevı́ oscilacemi
v „rozı́ch“ signálu.
Situace u širokopásmové kontaminace je složitějšı́. Použitı́ filtru je delikátnějšı́, nebot’musı́me citlivě odstranit část spektra považovanou za šum. Obvykle
to bývá vysokofrekvenčnı́ „chvost“, takže jsou vhodné filtry typu dolnı́ propust. V našem přı́padě jsme použili tzv. Wienerovy (optimálnı́) filtrace [13].
Jejı́ praktické užitı́ spočı́vá v tom, že vysokofrekvenčnı́ šumový „chvost“ (na
obrázku D.18 konstantnı́ funkce N 2 ≈ 100 pro nespojitý signál a N 2 ≈ 1 pro
spojitý signál) se extrapoluje doleva na zbytek odhadu spektra, přičemž filtračnı́
funkce Φ( f ) se určı́ jako
N2
Φ( f ) = 1 − 2 ,
C
(D.75)
kde C 2 je skutečný odhad spektra.
Výsledek optimálnı́ filtrace pomocı́ filtrů z obrázku D.19 nahoře je znázorněn
v dolnı́ řadě obrázku D.20. Širokopásmová dekontaminace je vcelku uspokojivá
pro hladký signál, avšak výsledky pro nespojitý signál jsou špatné. Důvod je
opět v tom, že nespojitý signál má mnohem ploššı́ spektrum než hladký, spojitý
signál — stačı́ pohled na obrázek D.18 a srovnánı́ odstupu PSD širokopásmově
kontaminovaného od PSD původnı́ho čistého signálu v obou přı́padech.
Pro všechny filtrace popsané a zobrazené v této sekci byl použit jednoúčelový
program foufires z kolekce [68].
Jiné metody odstraňovánı́ širokopásmové kontaminace založené na waveletové transformaci jsou naznačeny v Dodatku E.
Dodatek E
Waveletová transformace
Fourierova transformace a rychlá diskrétnı́ implementace Fourierovy transformace (FFT), jejichž základy jsou probrány v Dodatku D, patřı́ k základnı́m
matematickým nástrojům pro analýzu a zpracovánı́ repetičnı́ch, časově invariantnı́ch nebo stacionárnı́ch signálů (viz sekce 1.2.1 kapitoly 1). Pro přechodné,
nestacionárnı́ nebo v čase proměnné signály je Fourierova transformace vhodná
méně, což je podmı́něno přı́mo jejı́ podstatou — bázové funkce e−2πi f t , z nichž
Fourierova transformace (D.23) pomocı́ váhových koeficientů ŝ( f ) d f „sestavuje“ signál s(t), jsou nenulové na celé reálné ose. Je-li v signálu přı́tomen
přechodový jev omezený na krátký časový úsek, odpovı́dajı́cı́ fourierovský obraz
ŝ( f ) definovaný (D.23) konverguje pomalu a je rozprostřen přes široký rozsah
frekvencı́. Přetlumočeno v řeči principu neurčitosti (D.10): čı́m je přechodný jev
v signálu časově omezenějšı́, tı́m je jeho fourierovské spektrum širšı́. Nelze mı́t
signál lokalizovaný jak v časové, tak ve frekvenčnı́ doméně.
Přirozeně se proto nabı́zı́ nahradit bázové funkce e±2πi f t jinými funkcemi, jež
by byly nenulové pouze na omezeném časovém intervalu (tzv. funkcemi s omezeným nosičem), nebo jež by alespoň dostatečně rychle konvergovaly k nule
mimo určitý omezený interval. Takové bázové funkce by byly, na rozdı́l od
sinů a kosinů obsažených v komplexnı́ exponenciele e±2πi f t , lokalizovány jak
v čase, tak ve frekvenci, nebo přesněji řečeno, v charakteristické škále. Dalšı́
odlišnost od Fourierovy transformace využı́vajı́cı́ jednoznačně definovanou bázi
spočı́vá v tom, že waveletová transformace má k dispozici nekonečně mnoho
bázı́. Zhruba se dá řı́ci, že různé waveletové báze poskytujı́ různý kompromis
mezi kompaktnostı́ časové lokalizace a hladkostı́ bázových funkcı́. Zatı́mco ve
Fourierově analýze jsou bázové funkce předem dány a terpve poté se zkoumajı́ vlastnosti transformace, ve waveletové analýze na základě požadovaných
vlastnostı́ konstruujeme bázové funkce.
Waveletová analýza, jejı́ž základ (Haarův rozklad) historicky vznikl již v roce
1910 [61], se v 80. letech 20. stoletı́ dočkala prudkého rozvoje a přiřadila se
k důležitým nástrojům v oblasti zpracovánı́ a analýzy signálu, numerické ana217
218
Dodatek E. Waveletová transformace
lýzy, matematického modelovánı́, statistiky i v dalšı́ch vědeckých a technických
aplikacı́ch. Od těch dob jı́ bylo věnováno mnoho monografiı́ a nespočet časopiseckých článků a bylo vyvinuta řada aplikacı́ ve všech výše zmı́něných oblastech.
V tomto dodatku se v zájmu kompaktnosti inspirujeme přı́stupem použitým
v sekci 13.10 knihy [13], jenž je jasný, přı́močarý a jevı́ se optimálnı́m pro rychlé
pochopenı́ a aplikaci. Pro dalšı́ studium doporučujeme knihu [80], hlubšı́ vhled
poskytnou např. knihy [61, 73].
E.1. Waveletové koeficiety typu Daub4
Podobně jako rychlá Fourierova transformace (FFT) je diskrétnı́ waveletová
transformace (v dalšı́m ji budeme označovat jako DTWT)1 lineárnı́ operacı́ na
reálném vzorkovaném vstupnı́m signálu s1 , s2 , . . . , s N o délce (počtu vzorků)
N ≥ 2 rovné celočı́selné mocnině dvou, jež převádı́ na numericky odlišný
výstupnı́ signál ŝ1 , ŝ2 , . . . , ŝ N téže délky. V dalšı́m ukážeme, že počet operacı́
násobenı́ je podobně jako u rychlé Fourierovy transformace O(N log2 N ). Dále
budeme požadovat, aby DTWT byla ortogonálnı́ a tı́m také invertibilnı́ — jinými
slovy, vyjádřı́me-li DTWT v maticovém tvaru2
 
w11
ŝ1
 ŝ2   w21
  
 ..  =  ..
.  .

ŝ N
| {z }
výstup
w N,1
|
 
. . . w1,N
s1


. . . w2,N   s2 

..   ..  ,
..


.
.
.
w N,2 . . . w N,N
sN
{z
} | {z }
w12
w22
..
.
W
(E.1)
vstup
budeme požadovat, aby matice W reprezentujı́cı́ transformaci byla regulárnı́ a
matice k nı́ inverznı́ byla rovna matici transponované,
W −1 = W T .
(E.2)
Existuje mnoho transformacı́ typu (E.1), waveletová transformace se zabývá
takovými typy, jimž odpovı́dajı́cı́ báze jsou — na rozdı́l od sinů a kosinů ve
1 Termı́n wavelet se do češtiny překládá jako vlnka ve smyslu zdrobněnily slova vlna. Vyjadřuje
skutečnost, že bázové funkce jsou „malé“ (majı́ omezený nosič, jsou tedy lokalizovány v čase),
a jejich střednı́ hodnota je nulová, majı́ tedy „vlnový“ charakter. Zkratka DTWT znamená
discrete-time wavelet transform a zdůrazňuje skutečnost, že se jedná o transformaci časově
diskretizovaného (vzorkovaného) signálu podobně jako diskrétnı́ Fourierova transformace (D.66)
a (D.67).
2 Skutečně použı́vaný algoritmus, jehož podstata bude vysvětlena dále v sekci E.2, se však lišı́
od prostého maticového násobenı́ s počtem operacı́ násobenı́ O(N 2 ).
219
E.1. Waveletové koeficiety typu Daub4
fourierovské bázi e±2πi f t — lokalizovány v čase, jak bylo naznačeno v úvodu.
Pro DTWT to znamená, že matice W bude řı́dká (v každém řádku a sloupci
obsahovat jen „několik málo“ nenulových komponent), na rozdı́l od diskrétnı́
fourierovské matice (D.68), jejı́ž prvky jsou obecně nenulové všechny.
Zavedeme nynı́ z praktického hlediska důležitou třı́du waveletových transformacı́ definovaných pomocı́ tzv. filtračnı́ch koeficientů, poprvé popsanou belgickou matematičkou INGRID DAUBECHIES, konkrétně typ Daub4 (čı́slo 4 udává
počet filtračnı́ch koeficientů, jež budou zavedeny v následujı́cı́ch odstavcı́ch).
Uvažujme čtyři reálná čı́sla c0 , c1 , c2 , c3 a matici zkonstruovanou z nich
následujı́cı́m způsobem (nulové komponenty matice nejsou explicitně vypsány
a jsou nahrazeny prázdnými pozicemi):



c0 c1

 
c0

 

 

 

 

 

 . .

 =  .. ..

 

 
ŝ N−3  

 
ŝ N−2  c3

 
ŝ N−1  c2 c3
c1 c2
ŝ N
ŝ1
ŝ2
ŝ3
ŝ4
..
.


s1
c2 c3
  s2 
c1 c2 c3


 s 
c0 c1 c2 c3
 3 


c0 c1 c2 c3
  s4 
 . 
..
.. .. .. ..
  ..  .
.
.
.
.
.




c0 c1 c2 c3  s N−3 


c0 c1 c2  s N−2 


c0 c1  s N−1 
sN
c3
c0
(E.3)
Kdybychom položili c0 = c1 = c2 = c3 = 14 , dostali bychom výstupnı́ signál
v sloupečku na levé straně rovný vstupnı́mu signálu ze sloupečku na pravé straně
vyhlazenému přes čtyři sousednı́ vzorky.3 Matice ve vztahu (E.3) reprezentuje
vyhlazujı́cı́ filtr konvolučnı́ho typu (D.69), který ze signálu odstranı́ detaily kratšı́
než čtyři vzorky a jehož výstupem je vyhlazený signál na levé straně. Kdybychom
naopak vzali mı́sto filtru definovaného koeficienty c0 , c1 , c2 , c3 filtr definovaný
koeficienty c3 , −c2 , c1 , −c0 (pořadı́ koeficientů je obráceno a každý sudý má
opačné znaménko), bude jeho účinek opačný: pro konstantnı́ signál dostaneme
zřejmě nulový výstup, pro měnı́cı́ se signál naopak obecně nenulový výstup.
Takový filtr bude ze signálu extrahovat detaily ve smyslu doplňkových informacı́
k výstupu vyhlazenému filtrem c0 , c1 , c2 , c3 , budeme je proto v dalšı́m nazývat
detailnı́m filtrem.4 Kdybychom v matici (E.3) nahradili vyhlazujı́cı́ filtr detailnı́m
3 Poslednı́
čtyři řádky matice jsou cyklicky „přetočeny“ na začátek, což znamená, že vstupnı́
signál by měl mı́t periodické počátečnı́ podmı́nky; to se dá vždy zajistit dodefinovánı́m dostatečného počtu vzorků na začátku a konci signálu nulami.
4 V kontextu teorie zpracovánı́ signálu se
oba filtry nazývajı́ kvadraturnı́mi zrcadlovými filtry.
220
Dodatek E. Waveletová transformace
filtrem, dostali bychom ve sloupečku na levé straně detaily signálu ze sloupečku
na pravé straně.
Nynı́ oba popsané filtry, vyhlazujı́cı́ a detailnı́, zkombinujeme do jediné matice za cenu přeškálovánı́ vyhlazeného i detailnı́ho signálu na polovičnı́ délku.
V matici (E.3) a v odpovı́dajı́cı́ch pozicı́ch výstupnı́ho signálu ve sloupečku na
levé straně (E.3) škrtneme všechny sudé řádky (tato operace se nazývá decimace),
a uprázdněné řádky v matici nahradı́me detailnı́m filtrem c3, −c2 , c1 , −c0 působı́cı́m na stejné vzorky signálu jako předcházejı́cı́ vyhlazujı́cı́ filtr, tj. všechny čtyři
koeficienty detailnı́ho filtru budou ležet přesně pod koeficienty předcházejı́cı́ho
vyhlazujı́cı́ho filtru. Výsledek bude vypadat takto:

ŝ1
ŝ2
ŝ3
ŝ4
..
.


c0 c1

 c3 −c2

 

 

 

 

 

 .
..

 =  ..
.

 

 
ŝ N−3  

 
ŝ N−2  

 
ŝ N−1  c2 c3
ŝ N
c1 −c0
|


s1
c2 c3
  s2 
c1 −c0


 s 
c0 c1 c2 c3
 3 


c3 −c2 c1 −c0
  s4 
 . 
..
..
..
..
..
  ..  .
.
.
.
.
.




c0
c1 c2 c3  s N−3 


c3 −c2 c1 −c0  s N−2 


c0 c1  s N−1 
sN
c3 −c2
{z
}
FN
(E.4)
Výstupem na levé straně (E.4) je vyhlazený signál decimovaný na polovičnı́ délku
na lichých pozicı́ch (ŝ1 , ŝ3 , . . . , ŝ N−3 , ŝ N−1 ) a doplňujı́cı́ detailnı́ signál obsažený
rovněž v polovičnı́m počtu vzorků na sudých pozicı́ch (ŝ2 , ŝ4 , . . . , ŝ N−2 , ŝ N ).
Matice F N v (E.4) musı́ splňovat podmı́nku ortogonality (E.2); snadno se
ověřı́, že to nastane právě tehdy, když filtračnı́ koeficienty budou splňovat dvě
rovnice
c02 + c12 + c22 + c32 = 1 ,
c0 c2 + c1 c3 = 0 .
(E.5)
Mı́sto toho, abychom explicitně specifikovali hodnoty koeficientů vyhlazujı́cı́ho
filtru, jak jsme zkusmo učinili bezprostředně za rovnicı́ (E.3), využijeme zbylé
dva stupně volnosti naopak k určenı́ nejprve detailnı́ho filtru, a teprve na jeho
základě filtru vyhlazujı́cı́ho. Konkrétně budeme požadovat, aby detailnı́ filtr
c3 , −c2 , c1 , −c0 měl určité tzv. nulové momenty. Má-li filtr nulových prvnı́ch
E.2. Diskrétnı́ waveletová transformace Daub4
221
p momentů, znamená to, že akce filtru na signál tvořený polynomy nultého,
prvnı́ho, . . . , ( p − 1)-ho stupně dá nulu. Proto budeme požadovat prvnı́ dva
momenty detailnı́ho filtru nulové ( p = 2), čı́mž dostaneme zbývajı́cı́ dvě rovnice:
c3 − c2 + c1 − c0 = 0 ,
0c3 − 1c2 + 2c1 − 3c0 = 0 .
(E.6)
Tyto podmı́nky znamenajı́, že pokud je signál konstantnı́ nebo lineárně se měnı́cı́,
je detailnı́ signál extrahovaný z něj detailnı́m filtrem roven nule.
Soustava čtyř rovnic pro čtyři neznámé (E.5) a (E.6) má jednoznačné (až na
pravolevou reverzi) řešenı́
c0 =
c1 =
c2 =
c3 =
√
1+ 3
√
4 2
√
3+ 3
√
4 2
√
3− 3
√
4 2
√
1− 3
√
4 2
.
= +0.48296291314453416 ,
.
= +0.83651630373780794 ,
(E.7)
.
= +0.22414386804201339 ,
.
= −0.12940952255126037 .
Řešenı́ (E.7) definuje filtr nazývaný Daub4. Počet nulových momentů p, a tı́m
i počet filtračnı́ch koeficientů rovný 2 p lze měnit. Pro p = 1 bychom dostali
dvoukoeficientový filtr typu Daub2 (totožný s tzv. Haarovým–Welchovým filtrem),5 hodnoty koeficientů pro p až do hodnoty 10, tj. typu Daub6, Daub8, . . . ,
Daub20, lze najı́t např. v [61].
E.2. Diskrétní waveletová transformace Daub4
Waveletová transformace typu Daub4 je definována hierarchickou aplikacı́ matice (E.4) s filtračnı́mi koeficienty (E.7) na vstupnı́ signál. Konkrétnı́ algoritmus
vypadá následovně:
1. Sloupeček s N vzorky vstupnı́ho signálu s1 , s2 , . . . , s N násobı́me zleva ortogonálnı́ maticı́ F N o rozměru N × N z (E.4).
5 Podmı́nky
ortogonality (E.5) se v přı́padě Daub2 redukujı́ na jedinou rovnici c02 + c12 = 1,
podmı́nky vymizenı́ momentů (E.6) se redukujı́ na jedinou podmı́nku c1 − c0 = 0 zajišt’ujı́cı́
vymizenı́ jediného (nultého) momentu, tj. vymizenı́ akce filtru pouze pro konstantnı́
polynom.
√
Řešenı́ této soustavy je triviálnı́ a dá (až na pravolevou reverzi) c0 = −c1 = 2/2.
222
Dodatek E. Waveletová transformace
2. N /2 koeficientů jedenkrát vyhlazeného (a decimovaného) signálu přeskupı́me z lichých pozic na prvnı́ch N /2 pozic, N /2 koeficientů detailnı́ho
signálu přeskupı́me ze sudých pozic na zbývajı́cı́ch N /2 pozic.
3. Na prvnı́ch N /2 pozic obsahujı́cı́ch jedenkrát vyhlazený signál aplikujeme
ortogonálnı́ matici F N/2 z (E.4), avšak polovičnı́ho rozměru N /2 × N /2;
zbylých N /2 koeficientů detailnı́ho signálu z bodu 2 podržı́me beze změny.
4. N /4 dvakrát vyhlazených koeficientů přeskupı́me na prvnı́ch N /4 pozic, na
dalšı́ch N /4 pozic dáme „detaily z jednou vyhlazeného“ signálu, zbývajı́cı́ch
N /2 (detailů původnı́ho signálu) zůstává nezměněných z bodu 2.
5. Na prvnı́ch N /4 pozic dvakrát vyhlazeného (a decimovaného) signálu aplikujeme ortogonálnı́ matici F N/4 z (E.4), avšak čtvrtinového rozměru N /4×N /4.
6. N /8 třikrát vyhlazených (a decimovaných) koeficientů přeskupı́me na prvnı́ch N /8 pozic, na dalšı́ch N /8 pozic dáme „detaily z dvakrát vyhlazeného“
signálu, zbývajı́cı́ch N /4 pozic (detailů jednou vyhlazeného signálu) a N /2
pozic (detailů původnı́ho signálu) zůstává nezměněných z bodů 2 a 4.
7. Tuto proceduru opakujeme dokud nedostaneme triviálnı́ počet (obvykle 2
nebo 1) koeficientů „vyhlazeného z vyhlazeného . . . z vyhlazeného“ signálu.
Popsaná procedura se nazývá pyramidálnı́ algoritmus [13]. Nynı́ je zřejmé, proč
je nutné, aby vstupnı́ signál byl vzorkován na počet vzorků N = 2 M , kde
M ∈ N. Zároveň je jasný počet operacı́ O(N log2 N ): v každém stupni pyramidálnı́ho algoritmu provedeme O(N ) násobenı́, přičemž počet stupňů pyramidy
je O(log2 N ). Pyramidálnı́ algoritmus je pro délku signálu N = 16 názorně
demonstrován diagramem znázorněným na obrázku E.1 na následujı́cı́ stránce.
Ortogonálnı́ matice F N/2 , F N/4 , F N/8 , . . . , F4 postupně redukované na polovinu a vystupujı́cı́ v pyramidálnı́m algoritmu lze chápat jako submatice umı́stěné
v levém hornı́m rohu plné matice F N a doplněné na plnou velikost N × N jedničkami na diagonále a nulami na ostatnı́ch pozicı́ch, např. matice F8 doplněná
na N × N je



F̃8 = 

|
F8
nuly
1
..
nuly
.
1
{z
N×N



 .

(E.8)
}
Ortogonalita takto doplněných matic F̃ N ≡ F N , F̃ N/2 , F̃ N/4 , F̃ N/8 , . . . , F̃4 je
zřejmá. Operaci přeskupovánı́ vyhlazených a detailnı́ch koeficientů lze rovněž
popsat pomocı́ ortogonálnı́ch matic P N , P N/2 , P N/4 , . . . , P4 , jež lze doplnit na
223
E.2. Diskrétnı́ waveletová transformace Daub4
 
 
 
 
 

 
S1
s1
S1
S1
S1
s1
s1
 S2  F4 · D1  přesk.  S2 
 D1 
 s2 
d1 
 s2 
  −→   −→  
 
 
 
 
D
 S2 
 S3 
 S2 
 s3 
 s2 
 s3 
S
 1
 
 
 
 
 
 
D2 
D2 
 s4  F8 ·  D2  přesk.  S4 
d2 
 s4 
 
 
  −→   −→  
 
 
 
 
D
 S3 
 s5 
 s3 
 s5 
S
 
 
 1
 
 
 
 
 
 
 D2 
 D3 
 s6 
d3 
 s6 
 
 
 
 
 
 
 
 
 
 D3 
 S4 
 s7 
 s4 
 s7 
 
 
 
 
 
 
 
 
 
 D4 
 D4 
 s8  F16 · d4  přesk.  s8 
 
 
 
 
  −→   −→  
 
 
 
 
 dS1
 s5 
 s9 
 
 
 
 
 
 
 
 
 
 
 
 d2 
d5 
s10 
 
 
 
 
 
 
 
 
 
 
 
 d3 
 s6 
s11 
 
 
 
 
 
 
 
 
 
 
 
 d4 
d6 
s12 
 
 
 
 
 
 
 
 
 
 
 
 d5 
 s7 
s13 
 
 
 
 
 
 
 
 
 
 
 
 d6 
d7 
s14 
 
 
 
 
 
 
 
 
 
 
 
 d7 
 s8 
s15 
d8
s16
d8

4  
- S1
 S2 
 
3 D

-  S1 
D2 
 
D
S
 1
2  D2 
- 
 D3 
 
 D4 
 
 dS1 
 
 d2 
 
 d3 
 
1  d4 
- 
 d5 
 
 d6 
 
 d7 
d8
Obrázek E.1. Diagramatický popis pyramidálnı́ho algoritmu waveletové transformace
pro N = 16. Komponenty výsledné waveletové transformace jsou vyznačeny tučným
řezem. Po prvnı́ aplikaci (E.4) a přeskupenı́ zı́skáme osm detailnı́ch koeficientů d1 , . . . , d8
tvořı́cı́ch druhou polovinu waveletové transformace (šipka 1), po druhé aplikaci (E.4) na
hornı́ polovinu a přeskupenı́ zı́skáme čtyři detaily z vyhlazenı́ D1 , . . . , D4 tvořı́cı́ druhou
čtvrtinu waveletové transformace (šipka 2), po třetı́ aplikaci (E.4) na hornı́ čtvrtinu a
přeskupenı́ zı́skáme dva detaily z vyhlazených vyhlazenı́ D1 , D2 tvořı́cı́ druhou osminu
waveletové transformace (šipka 3) a dva koeficienty škálovacı́ funkce S1 , S2 tvořı́cı́
prvnı́ osminu waveletové transformace (šipka 4). Ve sloupečku zcela vpravo je vypsána
výsledná waveletová transformace sestávajı́cı́ shora dolů ze dvou koeficientů škálovacı́
funkce S1 , S2 reprezentujı́cı́ třikrát vyhlazenou hodnotu vstupnı́ho signálu a ze třı́ úrovnı́
detailů (od nejhrubšı́ch po nejjemnějšı́) D1 , D2 , D1 , . . . , D4 , d1 , . . . , d8 .
ortogonálnı́ matice P̃ N ≡ P N , P̃ N/2 , P̃ N/4 , . . . , P˜4 plné velikosti N × N analogicky jako v (E.8). Např. ortogonálnı́ přeskupovacı́ matice P8 a jejı́ doplněnı́ na
P̃8 majı́ tvar

1

0

0

0
P8 = 
0

0


0
0
0
0
0
0
1
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
1
0
0
0
0

0

0

0

0
,
0

0


0
1



P̃8 = 

|
P8
nuly
1
..
nuly
{z
N×N
.
1



 .

}
(E.9)
224
Dodatek E. Waveletová transformace
Celý pyramidálnı́ algoritmus pak můžeme popsat jako násobenı́ sloupečku se
vzorky vstupnı́ho signálu zleva posloupnostı́ ortogonálnı́ch matic


s1
 s2 
 
P̃4 F̃4 · · · P̃ N/4 F̃ N/4 P̃ N/2 F̃ N/2 P̃ N F̃ N  .  .
|
{z
}  .. 
W
(E.10)
sN
Výsledná waveletová matice W daná součinem ortogonálnı́ch matic je pak sama
také ortogonálnı́, jak jsme požadovali v úvodu. Je však nutné upozornit, že
maticový přı́stup, jehož počet operacı́ je O(N 2 ), byl použit pouze k důkazu ortogonality a pro skutečnou implementaci je tedy přı́liš pomalý; vtip pyramidálnı́ho
algoritmu je, jak jsme ukázali dřı́ve, v rychlosti algoritmu dané počtem operacı́
O(N log2 N ).6
Detailnı́ch koeficienty všech úrovnı́ (tj. všechny koeficienty až na prvnı́ dva;
na obrázku E.1 jsou označeny jako různými variantami pı́smene „d“) se nazývajı́ waveletové koeficienty, zatı́mco poslednı́ dva koeficienty7 označené na
obrázku E.1 jako S1 a S2 se nazývajı́ koeficienty škálovacı́ funkce.8 Popsaný
přı́stup je v literatuře znám pod názvem multiresolution analysis [80].
K inverzi popsané DTWT stačı́ obrátit pyramidálnı́ algoritmus: začne se
na nejmenšı́ škále a diagram znázorněný na obrázku E.1 se projde zprava doleva. Waveletová transformace se dá, podobně jako Fourierova transformace
v sekci D.3.5 Dodatku D, zobecnit na dvourozměrný nebo vı́cerozměrný přı́pad [13, 80]. Dvourozměrné wavelety se použı́vajı́ ve zpracovánı́ digitálnı́ho
obrazu a hrajı́ tak důležitou roli mj. v medicı́nské diagnostice.
E.3. Jak vypadají wavelety a škálovací funkce?
Nynı́ bychom rádi viděli, jak vlastně vypadajı́ bázové funkce — wavelety a
škálovacı́ funkce — jakožto analogie sinusovek a kosinusovek komplexnı́ exponenciely e±2πi f t .
6 Faktor
urychlenı́ definovaný jako poměr počtu operacı́ obou přı́stupů je O(N/ log2 N). Pro
N ≈ 106 , což odpovı́dá ∼ 20 s hudby v CD kvalitě, je faktor urychlenı́ ∼ 5 × 104. Výpočetnı́mu
času ∼ 1 s pomocı́ pyramidálnı́ho algoritmu by odpovı́dalo mnoho hodin maticového násobenı́!
7 Přı́padně jediný poslednı́ koeficient; záležı́ na tom, zda pyramidálnı́ algoritmus prodloužı́me
ještě o dalšı́ stupeň.
8 Často
se termı́n waveletové koeficienty volně užı́vá pro označenı́ všech koeficientů přetransformovaného signálu, typu „d“ i S.
225
E.3. Jak vypadajı́ wavelety a škálovacı́ funkce?
Libovolný signál o délce N můžeme vyjádřit v triviálnı́ ortogonálnı́ bázi
tvořené N jednotkovými vektory o délce N
 
1
0
 
 
e1 =  ...  ,
 
0
0
 
0
1
 
 
e2 =  ...  ,
 
0
...,
e N−1
 
0
0
 
 
=  ...  ,
 
1
0
0
 
0
 0
 
 
e N =  ... 
 
 0
(E.11)
1
takto:


 
s1
s1
 s2  
s2 
 
 
1
2
N
 ..  = e , e , . . . , e  ..  .
. |
{z
} . 
sN
jednot. matice N × N
(E.12)
sN
Tentýž signálový vektor lze vyjádřit v jiné (netriviálnı́) bázi w 1 , w1 , . . . , w N
odpovı́dajı́cı́ hodnotám ŝ j transformovaným waveletovou transformacı́ (E.1), tj.

 

s1
ŝ1
 s2   ŝ2 
 
 
 ..  = w1 , w2 , . . . , w N  ..  .
.
.
sN
(E.13)
ŝ N
Porovnánı́m (E.12), (E.13) a s využitı́m vztahu (E.1) dostáváme ihned
e1 , e2 , . . . , e N
1
2
N
= w ,w ,...,w W ,
(E.14)
a s využitı́m (E.2) pak
w 1 , w2 , . . . , w N = e1 , e2 , . . . , e N W T .
{z
}
|
(E.15)
jednotková matice
Uvědomı́me-li si, že triviálnı́ bázové vektory sestavené do řádku tvořı́ jednotkovou matici, vidı́me, že můžeme rovnou psát
w 1 , w2 , . . . , w N ≡ W T .
(E.16)
226
Daub2 w1
Daub4 w1
Daub10 w1
Daub20 w1
Daub2 w2
Daub4 w2
Daub10 w2
Daub20 w2
Daub2 w4
Daub4 w4
Daub10 w4
Daub20 w4
Daub2 w5
Daub4 w5
Daub10 w5
Daub20 w5
Daub2 w10
Daub4 w10
Daub10 w10
Daub20 w10
Daub2 w22
Daub4 w22
Daub10 w22
Daub20 w22
0
0.2 -0.2
0
0.2 -0.2
0
0.2 -0.2
0
0.2 -0.2
0
0.2 -0.2
0
0.2 -0.2
0
0.2
Dodatek E. Waveletová transformace
-0.2
Daub2 w54
0
200
400
600
800
10000
Daub4 w54
200
400
600
800
10000
Daub10 w54
200
400
600
800
10000
Daub20 w54
200
400
600
800
1000
Obrázek E.2. Ukázka diskrétnı́ch waveletů a škálovacı́ch funkcı́ o délce N = 1024
pro typy (zleva doprava) Daub2 (Haar–Welch), Daub4, Daub10 a Daub20. Dvě
hornı́ řady obsahujı́ škálovacı́ funkce w1 , w 2 , ostatnı́ řady pak vybrané wavelety
(w4 , w5 , w10 , w 22 , w54 ). Také ostatnı́ wavelety majı́ stejný tvar (bráno shora dolů), lišı́
se různou pozicı́ na horizontálnı́ ose a škálou (rozlišenı́m). Střednı́ hodnota škálovacı́ch
funkcı́ je nenulová, zatı́mco střednı́ hodnota waveletů je nulová (pro verifikaci je v grafech
čárkovaně vyznačena nulová hodnota). Při srovnávánı́ sloupců zleva doprava je patrná
vzrůstajı́cı́ hladkost. Dvoukoeficientové wavelety Daub2 v levém sloupci jsou nespojité
a odpovı́dajı́ p = 1, tj. nechávajı́ vymizet detaily pouze při konstantnı́m signálu. Hodı́ se
pro transformaci nespojitých signálů à la Houston Skyline [61]. Čtyřkoeficientové wavelety Daub4 v druhém sloupci zleva, jež jsme využili k zavedenı́ waveletové transformace,
jsou spojité, odpovı́dajı́ p = 2, tj. dávajı́ nulové detaily při lineárně se měnı́cı́m signálu, a
majı́ bizarnı́ tvary a zajı́mavé matematické vlastnosti. Mohou napřı́klad reprezentovat po
částech lineárnı́ funkci libovolných směrnic — ve správné kombinaci se všechny hroty
patrné na waveletech vyrušı́. Desetikoeficientové wavelety Daub10 ve třetı́m sloupci
zleva odpovı́dajı́ p = 5 (vymizı́ nultý až čtvrtý moment, tj. dávajı́ nulové detaily při
nejvýše kvarticky se měnı́cı́m signálu). Konečně dvacetikoeficientové wavelety Daub20
v pravém sloupci odpovı́dajı́ p = 10 (vymizı́ nultý až devátý moment, tj. dávajı́ nulové
detaily při signálu měnı́cı́m se podle polynomu až devátého stupně). Čı́m je vstupnı́ signál
hladšı́, tı́m je vhodnějšı́ pro reprezentaci vı́cekoeficientovou waveletovou transformacı́.
Neznamená to ale, že čı́m vı́ce koeficientů, tı́m lépe; např. Daub4 je efektivnějšı́ při
reprezentaci po částech lineárnı́ch signálů než DaubN pro N ≥ 6.
E.4. Nástin aplikace waveletové transformace ve zpracovánı́ signálu
227
Bázové vektory w j jsou tvořeny sloupci transponované transformačnı́ matice
W T , neboli řádky transformačnı́ matice W . Odtud také plyne postup výpočtu vektorů nové báze w 1 , w 2 , . . . , w N : jednoduše pomocı́ inverznı́ DTWT zobrazı́me
signálový vektor odpovı́dajı́cı́ postupně vektorům triviálnı́ báze (E.11). Tento
postup byl uplatněn při konstrukci grafů na obrázku E.2 znázorňujı́cı́m přı́klady
waveletů a škálovacı́ch funkcı́ pro typ Daub2, Daub4, Daub10 a Daub20, jenž
byly připraveny s pomocı́ programu powersp [68] implementujı́cı́ho waveletové
rutiny z kolekce [13].
V praxi se použı́vajı́ dalšı́ druhy waveletové transformace, např. typu Coiflet,
Lemarie, B-spline a jiné, jejichž popis ležı́ za možnostmi tohoto stručného úvodu.
Bližšı́ poučenı́ lze najı́t v [61, 73].
E.4. Nástin aplikace waveletové transformace ve
zpracování signálu
Waveletová transformace se v praktickém zpracovánı́ signálu použı́vá hlavně ke
dvěma úzce souvisejı́cı́m postupům — kompresi dat a odstraňovánı́ šumu [80].
Jelikož se zde nelze pouštět do systematického výkladu, budeme pouze demonstrovat podstatu waveletového odstraňovánı́ šumu ze signálu na přı́kladu, včetně
srovnánı́ s metodou založenou na FFT.
Nejprve ukážeme, že ortogonálnı́ waveletová transformace (E.1) zachovává
energii signálu definovanou pro diskrétnı́ reálný signál9


s1
N
 s2 
X
 
sk2 = s1 , s2 , . . . , s N  .  = s T s ,
E=
 .. 
(E.17)
k=1
sN
kde s T ≡ (s1 , s2 , . . . , s N ) je řádek transponovaný ke sloupečku s. Toto tvrzenı́ je
přı́mým důsledkem ortogonality transformačnı́ matice (E.2), jelikož pro energii
transformovaného signálu můžeme psát
T
T
Ê = ŝ T ŝ = s T W
| {zW} s = s s = E .
(E.18)
I
9 Ve fyzice je energie či intenzita obvykle úměrná kvadrátu odpovı́dajı́cı́ dynamické proměnné,
např. intenzita ultrazvuku je dána výrazem (3.5). Vhodnou volbou jednotek energie vždy můžeme
dosáhnout rovnosti kvadrátu dynamické proměnné.
228
Dodatek E. Waveletová transformace
Dále definujme energetickou mapu vyjadřujı́cı́ rozdělenı́ energie ve vzorcı́ch
signálu. Energetickou mapu dostaneme tak, že kvadráty jednotlivých vzorků sk2
uspořádáme sestupně podle velikosti a z takto definované uspořádané posloupnosti ε1 , ε2 , . . . , ε N vytvořı́me relativnı́ částečné součty
Ej ≡
Pj
k=1 εk
E
,
j = 1, 2, . . . , N .
(E.19)
Energetická mapa nenulového signálu (jenž má alespoň jeden vzorek nenulový)
je neklesajı́cı́ posloupnostı́ čı́sel mezi 0 a 1,
0 < E1 ≤ E2 ≤ · · · ≤ E N = 1 ,
(E.20)
a podle rychlosti, jakou se přibližuje k jedničce, lze usuzovat na lokalizaci energie
ve vzorcı́ch. Posloupnost E j nejprve prudce stoupá (započı́tává největšı́ energie),
posléze se jejı́ směrnice zmenšuje a zezdola konverguje k jedničce. Čı́m má
energetická mapa zpočátku strmějšı́ průběh, tı́m vı́ce je energie lokalizována
(kompaktifikována) v menšı́m počtu vzorků.
Diskrétnı́ waveletová transformace typu Daub má schopnost zvyšovat kompaktifikaci energie. Znamená to, že jestliže v původnı́m signálu dosáhne hladina
energie E L např. 99 % z celkové energie E pro nějaké 1 ≤ L ≤ N , pak po
waveletové transformaci dosáhne hladina stejné úrovně pro 1 ≤ L̂ < L, jinými
slovy, 99 % energie signálu je po waveletové transformaci signálu „zahuštěno“
v méně ( L̂) vzorcı́ch, než je tomu u původnı́ho signálu (v L vzorcı́ch). Tuto
důležitou vlastnost demonstruje obrázek E.3. Mı́ra kompaktifikace závisı́ na
několika faktorech, mj. např. na výběru typu waveletové transformace. Obecně
platı́ (viz obrázek E.2), že pro reprezentaci nespojitých signálů (jako náš testovacı́ obdélnı́kový signál) dávajı́ lepšı́ výsledky wavelety Daub s menšı́m počtem
koeficientů (zde konkrétně „krabicovité“ Daub2), a pro reprezentaci hladkých
signálů dávajı́ lepšı́ výsledky hladké wavelety Daub s většı́m počtem koeficientů
(zde konkrétně Daub20). To je ilustrace waveletového přı́stupu, kdy podle typu
signálu (např. jeho hladkosti) vybı́ráme vhodnou waveletovou bázi, v nı́ž bude
signál optimálně reprezentován.
Vrat’me se k záměru odstraněnı́ šumu z testovacı́ch signálů na obrázku D.17.
Idea je velmi jednoduchá — nejprve se pomocı́ waveletové transformace kompaktifikuje energie signálu do relativně malého počtu vzorků. Poté se provede tzv.
prahovánı́ (thresholding), kdy se z transformovaného signálu odstranı́ vzorky,
jejichž absolutnı́ hodnota je menšı́ než práh (threshold) T > 0, a jejichž počet
je roven čı́slu L̂ odpovı́dajı́cı́mu podle energetické mapy zadanému procentu
229
E.4. Nástin aplikace waveletové transformace ve zpracovánı́ signálu
512
samples
1024
0
512
samples
1024
0
512
samples
1024
0
512
samples
1024
0
0
1 0
1 0
1 0
1 0
1
1
0
Obrázek E.3. Energetické mapy testovacı́ch signálů z obrázku D.17. Řady i sloupce
odpovı́dajı́ obrázku D.17, tj. v levém sloupci jsou energetické mapy pro nespojitý
„obdélnı́kový“ signál, v pravém sloupci pro spojitý hladký signál; řady shora dolů
odpovı́dajı́ původnı́mu čistému signálu, úzkopásmové kontaminaci sinusovkou 100 Hz
a širokopásmové kontaminaci bı́lým šumem. Čárkovaně jsou vyznačeny průběhy E j
pro netransformovaný signál, plně pro signál transformovaný. (Nespojitý signál byl
transformován pomocı́ Daub2, jež se lépe hodı́ pro tento druh signálu, zatı́mco hladký
spojitý signál byl transformován pomocı́ Daub20 — viz diskuse v popisu obrázku E.2).
Transformované signály majı́ mnohem většı́ kompaktifikaci energie než původnı́ signály.
230
Dodatek E. Waveletová transformace
512
samples
1024
0
512
samples
1024
0
0.5
time [s]
1
0
0.5
time [s]
1
-2
-0.4
0
0
2
0.4
-2
-0.4
0
0
2
0.4
-2
-0.4
0
0
2
0.4
0
Obrázek E.4. Výsledek odstraňovánı́ šumu waveletovým prahovánı́m. V hornı́ řadě
jsou pro srovnánı́ zopakovány původnı́, nekontaminované signály z hornı́ řady obrázku D.17. Prostřednı́ a dolnı́ řada odpovı́dajı́ prostřednı́ a dolnı́ řadě na obrázku D.17
po aplikaci waveletového prahovánı́. Výsledky pro hladký signál jsou srovnatelné nebo
mı́rně lepšı́, u nespojitého signálu je výsledek zřetelně lepšı́.
energie.10 Jelikož energie šumu, jehož amplituda je menšı́ než charakteristická
amplituda signálu, je koncentrována do malých (podprahových) vzorků, a naopak, jelikož energie signálu je kompaktifikována do malého počtu relativně
velkých vzorků, dojde k potlačenı́ šumové kontaminace. Prahovánı́ lze provést
selektivně pro každou úroveň pyramidálnı́ho algoritmu počı́naje koeficienty škálovacı́ funkce přes postupně se zjemňujı́cı́ detaily (viz obrázek E.1). Tento přı́stup
implementuje program foufires z kolekce [68].
Po prahovánı́ se obnovı́ signál pomocı́ inverznı́ waveletové transformace.
Obnovený signál bude „chudšı́“ o malé procento energie převážně šumových
složek. Výsledek aplikace prahovánı́ na testovacı́ signály z obrázku D.17 je
demonstrován na obrázku E.4.
10 Popsaný
algoritmus je tzv. tvrdé prahovánı́ (hard thresholding). Existuje několik druhů
měkkého prahovánı́ (soft thresholding), při němž se podprahové vzorky potlačı́ méně nespojitým
způsobem. Podrobně viz [61, 80].
Dodatek F
Výpis zdrojového textu
Na následujı́cı́ch třech stranách je uveden výpis zdrojového textu programu
starch použitého v praktické části, kapitole 5 pro statistické výpočty. K tomuto
zdrojovému textu náležı́ ještě zdrojový text s obecně použitelnými funkcemi pro
statistiku stadd.c a hlavičkový soubor stadd.h, dále množstvı́ rutin z kapitol 14
a 15 knihy [13]. Výpisy těchto souborů nejsou pro úsporu mı́sta uvedeny.
Spustitelný soubor staticky zkompilovaný pro GNU/Linux a pro Windows
je k dispozici na přiloženém disku (viz Dodatek G). V této podobě je program
schopen provádět tyto výpočty:
• Střednı́ hodnota, medián, rozptyl, směrodatná odchylka, šikmost a špičatost
zadaného statistického vzorku.
• F-test na signifikantně odlišné rozptyly.
• Studentův t-test na signifikantně odlišné střednı́ hodnoty v přı́padě stejných
rozptylů statistických vzorků.
• Studentův t-test na signifikantně odlišné střednı́ hodnoty v přı́padě rozdı́lných
rozptylů statistických vzorků.
• Studentův t-test na signifikantně odlišné střednı́ hodnoty pro párované statistické vzorky.
• χ 2 -test pro naměřený a teoretický statistický vzorek.
• χ 2 -test pro dva naměřené statistické vzorky.
• Kolmogorovův–Smirnovův test pro dva naměřené statistické vzorky.
• Kolmogorovův–Smirnovův test pro naměřený statistický vzorek a Gaussovo
rozdělenı́.
• Lineárnı́ parametrická korelace (Pearsonovo r ).
• Lineárnı́ neparametrická korelace (Spearmanova korelace).
• Lineárnı́ neparametrická korelace (Kendallovo τ ).
• Lineárnı́ fit pro dva statistické vzorky.
• Lineárnı́ fit pro dva statistické vzorky se započtenı́m y-chyb.
• Lineárnı́ fit pro dva statistické vzorky se započtenı́m x-chyb a y-chyb.
231
#include
#include
#include
#include
#include
<stdio.h>
<stdlib.h>
<string.h>
<math.h>
"stadd.h"
float theave, thesdev; /* global variables to feed cumdist_* */
int main(int argc, char *argv[])
{
char *sgnfstr=NULL,*gdnsstr=NULL;
int clopt=0,runmode=0,k=1,n1=0,n2=0,knstr=KNSTRN,
ishdr=TRUE,isprc=FALSE,isyerr=FALSE,isxerr=FALSE;
float a[9],prc=1.0,*samp1=NULL,*samp2=NULL,*sigy=NULL,*sigx=NULL;
FILE *fp1=NULL,*fp2=NULL;
break;
case ’T’: /* nonparametric (rank) corr. (Kendall’s tau) */
runmode=32;
break;
case ’0’: /* number of constraints=0 */
knstr=0;
break;
case ’1’: /* number of constraints=1, default */
knstr=1;
break;
case ’2’: /* number of constraints=2 */
knstr=2;
break;
case ’3’: /* number of constraints=3 */
knstr=3;
break;
case ’4’: /* number of constraints=4 */
knstr=4;
break;
case ’q’: /* bare output: do not print output header */
ishdr=FALSE;
break;
case ’%’: /* significance levels in % */
isprc=TRUE;
prc=100.0;
break;
case ’h’:
print_help(STARCH_PUIO1,clopt);
print_help(STARCH_PUIO2,clopt);
print_help(STARCH_PUIO3,clopt);
print_help(STARCH_PUIO4,clopt);
print_help(STARCH_PUIO5,clopt);
print_help(STARCH_PUIO6,clopt);
print_help(STARCH_PUIO7,clopt);
print_help(STARCH_PUIO8,clopt);
print_help(STARCH_PUIO9,clopt);
print_help(STARCH_PUIO10,clopt);
print_help(STARCH_PUIO11,clopt);
print_help(STARCH_O1,clopt);
print_help(STARCH_O2,clopt);
print_help(STARCH_O3,clopt);
print_help(STARCH_O4,clopt);
print_help(STARCH_O5,clopt);
print_help(STARCH_O6,clopt);
print_help(STARCH_O7,clopt);
print_help(STARCH_O8,clopt);
print_help(STARCH_O9,clopt);
print_help(STARCH_O10,clopt);
print_help(STARCH_O11,clopt);
print_help(STARCH_O12,clopt);
print_help(STARCH_O13,clopt);
print_help(STARCH_O14,clopt);
print_help(STARCH_O15,clopt);
print_help(STARCH_O16,clopt);
print_help(STARCH_O17,clopt);
print_help(STARCH_O18,clopt);
print_help(STARCH_O19,clopt);
print_help(STARCH_O20,clopt);
print_help(STARCH_O21,clopt);
print_help(STARCH_O22,clopt);
print_help(STARCH_O23,clopt);
print_help(STARCH_E1,clopt);
print_help(STARCH_E2,clopt);
print_help(STARCH_S,clopt);
return 0;
break;
default:
print_help("",clopt);
break;
}
/* here: argc = #_of_arguments, argv[0] = the 1st one (excl. options) */
/*
fprintf(stderr,"argc = %d\nargv[0] = %s\n",argc,argv[0]); */
/* in the following, the term ‘SDS mode’ refers to the mode in which
only a Single Data Sample is required; it is signaled by runmode<=0;
currently it is the default mode for which runmode==0 and K-S
comparison to a given cumulative distribution for which runmode==-24;
on the other hand; the term ‘TDS mode’ refers to any other mode that
requires two data samples, for which runmode>0 */
/*************************************************************************/
/* open input file(s) */
if (argc == 0) /* argc==0: no argument given, display message and die */
nrerror("At least one input file required. Try ‘starch -h\’");
/* here argc > 0: at least data1 file given, ... */
if ((fp1 = fopen(argv[0],"r")) == NULL) { /* ... then open it */
fprintf(stderr,"You specified input file:\n ‘%s\’\n",
argv[0]);
nrerror("Cannot open such file");
}
#if DEVEL
fprintf(stderr,"%s%s%s\n","Input file 1 : ‘",argv[0],"\’");
#endif
if (argc > 1) { /* argc==2 or more: both data1, data2 files given, ... */
if (runmode > 0) { /* ... so in TDS mode open data2 ... */
if ((fp2 = fopen(argv[1],"r")) == NULL) {
fprintf(stderr,"You specified input file:\n ‘%s\’\n",
argv[1]);
nrerror("Cannot open such file");
}
#if DEVEL
fprintf(stderr,"%s%s%s\n","Input file 2 : ‘",argv[1],"\’");
#endif
}
else { /* ... but ignore data2 in SDS mode (runmode<=0) */
#if VERBOSE
fprintf(stderr,"%s%s%s\n",
"Input file 2 : ‘",argv[1],"\’ (ignored)");
#endif
}
}
/*************************************************************************/
/* load sample(s) to memory */
if (runmode <= 0 || argc > 1) { /* SDS mode OR both data1,data2 files*/
gobble(fp1); /* eat comments at top of data1 and count sgnf. lines.. */
if (isxerr==TRUE) /* ... if data1 contains x-errors ... */
while(fscanf(fp1,"%f %f",a,a) != EOF) {
n1++;
gobble(fp1);
}
else /* ... or it does not */
while(fscanf(fp1,"%f",a) != EOF) {
n1++;
gobble(fp1);
}
samp1 = vector(1,n1); /* allocate memory for sample 1 ... */
if (isxerr==TRUE) /* ... and for x-errors if required */
sigx=vector(1,n1);
rewind(fp1); /* go back to the beginning of file data1, ... */
gobble(fp1); /* ... re-eat comments at top, ... */
k=1; /* ... and save sample 1 ... */
if (isxerr==TRUE) /* ... and x-errors to samp1, sigx if x-errs given */
while(fscanf(fp1,"%f %f",samp1+k,sigx+k) != EOF) {
k++;
gobble(fp1);
Dodatek F. Výpis zdrojového textu
/*************************************************************************/
/* command line processing and help */
while (--argc > 0 && (*++argv)[0] == ’-’ && (clopt != ’-’))
while ((clopt = *++argv[0]) && (clopt != ’-’))
switch (clopt) {
case ’m’: /* moments, median and higher moments (default) */
runmode=0;
break;
case ’F’: /* F-test for significantly different variances */
runmode=10;
break;
case ’s’: /* Student’s t-test for sgn. diff. means, same var.*/
runmode=11;
break;
case ’S’: /* Student’s t-test for sgn.diff. means, uneq. var.*/
runmode=12;
break;
case ’p’: /* Student’s t-test for sgn. diff. means, paired */
runmode=13;
break;
case ’c’: /* chi^2 between binned obs and exp, constraints=1 */
runmode=20;
break;
case ’C’: /* chi^2 between two binned obs., constraints=1 */
runmode=21;
break;
case ’K’: /* K-S test between two unbinned */
runmode=22;
break;
case ’U’: /* Kuiper variant of K-S test between two unbinned */
runmode=23; /* NOT IMPLEMENTED YET */
break;
case ’G’: /* K-S test between unbinned and Gaussian c.d.f. */
runmode=-24; /* ‘-’ sign to signals a single sample */
break;
case ’x’: /* like ‘y’ below but with both yx-errors */
isxerr=TRUE; /* x implies y (no x-errors w/o y-errors) */
case ’y’: /* like ‘r’ below but with y-errors only */
isyerr=TRUE;
case ’r’: /* lin. correl. (Pearson’s r and lin. fit, no err) */
runmode=30;
break;
case ’R’: /* nonparametric (rank) corr. (Spearman’s corr.c.) */
runmode=31;
232
/*
* ========================================================================
* $Id: starch.c,v 0.36 2007/08/06 09:13:07 sta Exp $
* Revision log is at the end of file.
* -----------------------------------------------------------------------* Program to perform simple statistical research.
* ========================================================================
*/
if (isxerr==TRUE) /* ... and for x-errors if required */
sigx=vector(1,n1);
samp2 = vector(1,n2); /* allocate memory for sample 2 ... */
if (isyerr==TRUE) /* ... and for y-errors if required */
sigy=vector(1,n2);
rewind(fp1); /* go back to the beginning of file data1, ... */
gobble(fp1); /* ... re-eat comments at top, ... */
k=1; /* ... and save sample 1 and sample 2 ... */
if (isyerr==TRUE)
if (isxerr==TRUE) /*..and x-errs, y-errs to samp1,samp2,sigx,sigy*/
while(fscanf(fp1,"%f %f %f %f",
samp1+k,sigx+k,samp2+k,sigy+k)!=EOF) {
k++;
gobble(fp1);
}
else /*...and y-errors to samp1, samp2, sigy if only y-errs given*/
while(fscanf(fp1,"%f %f %f",
samp1+k,samp2+k,sigy+k)!=EOF) {
k++;
gobble(fp1);
}
else /* ... to samp1, samp2 if neither y-errors nor x-errors given */
while(fscanf(fp1,"%f %f",samp1+k,samp2+k) != EOF) {
k++;
gobble(fp1);
}
#if DEVEL
fprintf(stderr,"DEVEL TEST:\nn1 = %d, n2 = %d\n",n1,n2);
if (isyerr==TRUE)
if (isxerr==TRUE)
for (k=1;k<=n1;k++)
fprintf(stderr,"%2d
%.2f %.2f %.2f %.2f\n",
k,samp1[k],sigx[k],samp2[k],sigy[k]);
else
for (k=1;k<=n1;k++)
fprintf(stderr,"%2d
%.2f %.2f %.2f\n",
k,samp1[k],samp2[k],sigy[k]);
else
for (k=1;k<=n1;k++)
fprintf(stderr,"%2d
%.2f %.2f\n",k,samp1[k],samp2[k]);
#endif
}
/* do not need input file(s), close them */
if (runmode > 0 && argc > 1) /* for TDS AND both data1, data2 */
if (fclose(fp2) == EOF) nrerror("Cannot close input data file");
if (fclose(fp1) == EOF) nrerror("Cannot close input data file");
/* some safety checks */
if (runmode==13 || /* for: paired Student’s t-test, ... */
runmode==20 || /* ... chi^2 between binned observed and expected, ...*/
runmode==21 || /* ... chi^2 between two binned, ... */
runmode==30 || /* ... linear correlation and fit (opt. yx-errs), ... */
runmode==31 || /* ... rank correlation between two samples ... */
runmode==32)
/* ... Kendall’s tau between two samples ... */
if (n1 != n2) /* ... samples number of points must be equal */
nrerror("Different lengths of data samples. Try ‘starch -h\’");
if (n2==0) n2=n1; /* if n2 not set yet, set it equal to n1 */
if (n1 < 2 || n2 < 2) /* doing statistic from a single point is nonsense */
nrerror("Insufficient data sample(s) length. Try ‘starch -h\’");
/* different header for plain and % */
if (runmode > 0 || runmode==-24) {
sgnfstr=(char *)malloc(8);
gdnsstr=(char *)malloc(8);
if (isprc==TRUE)
strcpy(sgnfstr,SGNFPRC);
else
strcpy(sgnfstr,SGNFPLN);
if (isprc==TRUE)
strcpy(gdnsstr,GDNSPRC);
else
strcpy(gdnsstr,GDNSPLN);
}
/*************************************************************************/
/* compute desired statistic and print output */
switch (runmode) {
case 0: /* calculate moments, median and higher moments (default) */
moment(samp1,n1,a,a+6,a+3,a+2,a+4,a+5);
medadev(samp1,n1,a+1,a+7);
if (ishdr==TRUE) {
printf("%s%s%s%d\n",CCHRS,DATANUM," n = ",n1);
printf("%s%22s%47s%18s\n",CCHRS,"[- central measure -]",
"[-------- higher moments and related --------]",
"[- mean abs dv -]");
printf("%s%5s%12s%22s%29s%19s\n",CCHRS,"mean","median",
"variance std_dev","std_err skewness kurtosis",
"madv_ave madv_med");
}
printf("%+.4e %+.4e %.2e %.2e %.2e %+.2e %+.2e %.2e %.2e\n",
a[0],a[1],a[2],a[3],a[3]/sqrt((double)n1),a[4],a[5],a[6],a[7]);
if (ishdr==TRUE) {
a[0]=((float)n1-1.0)/(float)n1;
a[1]=sqrt(a[0]);
printf("%s%23s%.2e %.2e %.2e%20s\n",CCHRS,"divisor ‘n\’ -> ",
a[0]*a[2],a[1]*a[3],(a[1]*a[3])/sqrt((double)n1),
"/skw_stdv /kts_stdv");
printf("%s%50s%+.2e %+.2e%s\n",CCHRS,"for true mean -> ",
a[4]*sqrt((double)n1/15.0),a[5]*sqrt((double)n1/96.0),
" <- std_dev");
printf("%s%50s%+.2e %+.2e%s\n",CCHRS,"for samp mean -> ",
a[4]*sqrt((double)n1/6.0),a[5]*sqrt((double)n1/24.0),
" <- std_dev");
}
break;
case 10: /* F-test for significantly different variances */
ftest(samp1,n1,samp2,n2,a,a+1);
if (ishdr==TRUE) {
printf("%s%s%s%d%s%d\n",
CCHRS,DATSNUM,"s n1 = ",n1,", n2 = ",n2);
printf("%s%8s%7s\n",CCHRS,"F_ratio",sgnfstr);
}
printf((isprc)?"%9.2e %6.2f\n":"%9.2e %6.4f\n",a[0],prc*a[1]);
break;
case 11: /* Student’s t-test for signif. diff. means, same variances */
ttest(samp1,n1,samp2,n2,a,a+1);
if (ishdr==TRUE) {
printf("%s%s%s%d%s%d\n",
CCHRS,DATSNUM,"s n1 = ",n1,", n2 = ",n2);
printf("%s%8s%7s%26s\n",CCHRS,"Stdnt_t",sgnfstr,
"(for same true variances)");
}
printf((isprc)?"%+8.2e %6.2f\n":"%+8.2e %6.4f\n",a[0],prc*a[1]);
break;
case 12: /* Student’s t-test for signif. diff. means, unequal varian.*/
tutest(samp1,n1,samp2,n2,a,a+1);
if (ishdr==TRUE) {
printf("%s%s%s%d%s%d\n",
CCHRS,DATSNUM,"s n1 = ",n1,", n2 = ",n2);
printf("%s%8s%7s%24s\n",CCHRS,"Stdnt_t",sgnfstr,
"(for unequal variances)");
}
printf((isprc)?"%+8.2e %6.2f\n":"%+8.2e %6.4f\n",a[0],prc*a[1]);
break;
case 13: /* Student’s t-test for signif. diff. means, paired samples */
tptest(samp1,samp2,n1,a,a+1);
if (ishdr==TRUE) {
printf("%s%s%s%d\n",CCHRS,DATSNUM," n = ",n1);
233
}
else /* ... to samp1 unless x-errors given */
while(fscanf(fp1,"%f",samp1+(k++)) != EOF) gobble(fp1);
#if DEVEL
fprintf(stderr,"DEVEL TEST:\nn1 = %d\n",n1);
if (isxerr==TRUE)
for (k=1;k<=n1;k++)
fprintf(stderr,"%2d
%.2f %.2f\n",k,samp1[k],sigx[k]);
else
for (k=1;k<=n1;k++)
fprintf(stderr,"%2d
%.2f\n",k,samp1[k]);
#endif
if (runmode > 0 && argc > 1) { /* for TDS AND both data1,2 ... */
gobble(fp2); /* ... repeat the same as above for samp2 and sigy*/
if (isyerr==TRUE)
while(fscanf(fp2,"%f %f",a,a) != EOF) {
n2++;
gobble(fp2);
}
else
while(fscanf(fp2,"%f",a) != EOF) {
n2++;
gobble(fp2);
}
samp2 = vector(1,n2);
if (isyerr==TRUE)
sigy=vector(1,n2);
rewind(fp2);
gobble(fp2);
k=1;
if (isyerr==TRUE)
while(fscanf(fp2,"%f %f",samp2+k,sigy+k) != EOF) {
k++;
gobble(fp2);
}
else
while(fscanf(fp2,"%f",samp2+(k++)) != EOF) gobble(fp2);
#if DEVEL
fprintf(stderr,"DEVEL TEST:\nn2 = %d\n",n2);
if (isyerr==TRUE)
for (k=1;k<=n2;k++)
fprintf(stderr,"%2d
%.2f %.2f\n",k,samp2[k],sigy[k]);
else
for (k=1;k<=n2;k++)
fprintf(stderr,"%2d
%.2f\n",k,samp2[k]);
#endif
}
}
else { /* TDS mode AND file data1 only */
gobble(fp1); /* eat comments at top of data1 and count sgnf. lines.. */
if (isyerr==TRUE) /* ... if it contains y-errors ... */
if (isxerr==TRUE) /* ... as well as x-errors ... */
while(fscanf(fp1,"%f %f %f %f",a,a,a,a) != EOF) {
n1++;
gobble(fp1);
}
else /* ... if it contains y-errors only ... */
while(fscanf(fp1,"%f %f %f",a,a,a) != EOF) {
n1++;
gobble(fp1);
}
else /* ... or if neither y-errors nor x-errors are contained */
while(fscanf(fp1,"%f %f",a,a) != EOF) {
n1++;
gobble(fp1);
}
n2=n1; /* just for notation consistent with separate files */
samp1 = vector(1,n1); /* allocate memory for sample 1 ... */
printf("%s%s%s%d\n",CCHRS,DATSNUM," n = ",n1);
printf("%s%7s%7s%7s%9s%13s\n",
CCHRS,"rank_cor",sgnfstr,
"D_stat",sgnfstr,"(D-D0)/Dsdev");
}
printf((isprc)?\
"%+8.2e %6.2f %8.2e %6.2f %+6.2e\n":\
"%+8.2e %6.4f %8.2e %6.4f %+6.2e\n",
a[3],prc*a[4],a[0],prc*a[2],a[1]);
break;
case 32: /* nonparametric (rank) corr. (Kendall’s tau) */
kendl1(samp1,samp2,n1,a,a+1,a+2);
if (ishdr==TRUE) {
printf("%s%s%s%d\n",CCHRS,DATSNUM," n = ",n1);
printf("%s%7s%7s%13s\n",
CCHRS,"Kndl_tau",sgnfstr,"tau/tau_sdev");
}
printf((isprc)?\
"%+8.2e %6.2f %+6.2e\n":\
"%+8.2e %6.4f %+6.2e\n",
a[0],prc*a[2],a[1]);
break;
default:
break;
}
/*************************************************************************/
/* dealocate and exit silently */
if (runmode > 0) {
free((void *)gdnsstr);
free((void *)sgnfstr);
if (isyerr==TRUE) { /* if y-errors are given */
free_vector(sigy,1,n2);
sigy=NULL;
}
free_vector(samp2,1,n2);
samp2=NULL;
if (isxerr==TRUE) { /* if x-errors are given */
free_vector(sigx,1,n1);
sigx=NULL;
}
}
free_vector(samp1,1,n1);
samp1=NULL;
return 0;
}
Dodatek F. Výpis zdrojového textu
thesdev=sqrt(a[1]);
ksone(samp1,n1,cumdist_normal,a+2,a+3);
if (ishdr==TRUE) {
printf("%s%s%s%d\n",CCHRS,DATANUM," n = ",n1);
printf("%s%6s%9s%47s\n",CCHRS,"K-S_D",sgnfstr,
"(unbinned data sample vs. normal distribution)");
}
printf((isprc)?"%+8.2e %6.2f":"%+8.2e %6.4f",a[2],prc*a[3]);
if (ishdr==TRUE)
printf("%29s%.2e%s\n",
"<- divisor ‘n-1\’ (std_dev = ",thesdev,")");
else
putchar(’\n’);
thesdev *= sqrt(((float)n1-1.0)/(float)n1); /* for popul. sdev */
ksone(samp1,n1,cumdist_normal,a+2,a+3);
printf((isprc)?"%+8.2e %6.2f":"%+8.2e %6.4f",a[2],prc*a[3]);
if (ishdr==TRUE) {
printf("%29s%.2e%s\n",
"<- divisor ‘n\’
(std_dev = ",thesdev,")");
printf("%s%31s%+.4e%s\n",CCHRS,"(common mean = ",theave,")");
}
else
putchar(’\n’);
break;
case 30: /* linear correlation (Pearson’s r and Fisher’s z, fit) */
pearsn(samp1,samp2,n1,a,a+1,a+2);
if (isyerr==TRUE) /* if y-errors are given */
if (isxerr==TRUE) /* if both yx-errors are given */
fitexy(samp1,samp2,n1,sigx,sigy,a+4,a+3,a+6,a+5,a+7,a+8);
else /* if y-errors but not x-errors are given */
fit(samp1,samp2,n1,sigy,1,a+4,a+3,a+6,a+5,a+7,a+8);
else /* if neither y-errors nor x-errors are given */
fit(samp1,samp2,n1,sigy,0,a+4,a+3,a+6,a+5,a+7,a+8);
if (ishdr==TRUE) {
printf("%s%s%s%d\n",CCHRS,DATSNUM," n = ",n1);
printf("%s%7s%8s%11s%6s%15s%6s%15s%6s%11s\n",
CCHRS,"correl",sgnfstr,"Fisher\’s_z",
"slope","slop_unc","shift","shft_unc","chi^2",gdnsstr);
}
printf((isprc)?\
"%+8.2e %6.2f %+10.3e %+11.4e %8.2e %+11.4e %8.2e %+9.2e %6.2f\n":\
"%+8.2e %6.4f %+10.3e %+11.4e %8.2e %+11.4e %8.2e %+9.2e %6.4f\n",
a[0],prc*a[1],a[2],a[3],a[5],a[4],a[6],a[7],prc*a[8]);
if (ishdr==TRUE)
printf("%s%35s\n",CCHRS,"correl = covar(lag=0) by ‘correft\’");
break;
case 31: /* nonparametric (rank) corr. (Spearman’s corr.c.) */
spear(samp1,samp2,n1,a,a+1,a+2,a+3,a+4);
if (ishdr==TRUE) {
234
printf("%s%8s%7s%38s\n",CCHRS,"Stdnt_t",sgnfstr,
"(for paired data samples, uneq. vars)");
}
printf((isprc)?"%+8.2e %6.2f\n":"%+8.2e %6.4f\n",a[0],prc*a[1]);
break;
case 20: /* chi-square between binned observed and expected */
chsone(samp1,samp2,n1,knstr,a+2,a,a+1);
if (ishdr==TRUE) {
printf("%s%s%s%d\n",CCHRS,DATSNUM," n = ",n1);
printf("%s%6s%9s%7s%35s\n",CCHRS,"chi^2",sgnfstr,"dg_fdm",
"(for binned observed vs. expected)");
}
printf((isprc)?"%+8.2e %6.2f %6.0f\n":"%+8.2e %6.4f %6.0f\n",
a[0],prc*a[1],a[2]);
break;
case 21: /* chi-square between two binned observed */
chstwo(samp1,samp2,n1,knstr,a+2,a,a+1);
if (ishdr==TRUE) {
printf("%s%s%s%d\n",CCHRS,DATSNUM," n = ",n1);
printf("%s%6s%9s%7s%30s\n",CCHRS,"chi^2",sgnfstr,"dg_fdm",
"(for two binned data samples)");
}
printf((isprc)?"%+8.2e %6.2f %6.0f\n":"%+8.2e %6.4f %6.0f\n",
a[0],prc*a[1],a[2]);
break;
case 22: /* Kolmogorov-Smirnov test between two unbinned */
kstwo(samp1,n1,samp2,n2,a,a+1);
if (ishdr==TRUE) {
printf("%s%s%s%d%s%d\n",
CCHRS,DATSNUM,"s n1 = ",n1,", n2 = ",n2);
printf("%s%6s%9s%32s\n",CCHRS,"K-S_D",sgnfstr,
"(for two unbinned data samples)");
}
printf((isprc)?"%+8.2e %6.2f\n":"%+8.2e %6.4f\n",a[0],prc*a[1]);
break;
case 23: /* Kuiper variant of K-S test between two unbinned */
kstwo(samp1,n1,samp2,n2,a,a+1);
/*
kptwo(samp1,n1,samp2,n2,a,a+1); */
if (ishdr==TRUE) {
printf("%s%s%s%d%s%d\n",
CCHRS,DATSNUM,"s n1 = ",n1,", n2 = ",n2);
printf("%s%6s%9s%32s\n",CCHRS,"Kpr_D",sgnfstr,
"(for two unbinned data samples)");
}
printf((isprc)?"%+8.2e %6.2f\n":"%+8.2e %6.4f\n",a[0],prc*a[1]);
break;
case -24: /* K-S test between unbinned and cumulative prob. distrib. */
avevar(samp1,n1,a,a+1);
theave=a[0]; /* pass mean,sdev to cumdist_normal via global vars */
Dodatek G
Disk
K práci je přiložen CD se zdrojovými texty, elektronickou formou práce a dalšı́mi
soubory. Struktura disku a soubory, jenž se na něm nalézajı́, je následujı́cı́:
Adresář sources obsahuje kompletnı́ zdrojové texty v publikačnı́m systému
LATEX, včetně separátnı́ch obrázků, zdrojových kódů nepřevzatých obrázků
(vytvořených grafickými programy gnuplot [58] a Ipe [63]) a výpočty praktické části. To vše jednak v rozbalené formě (strom ibbc/*), jednak v archivu
ibbc.tar.gz.
Adresář texmf obsahuje nestandardnı́ součásti LATEXové instalace nutné ke
kompilaci. Jedná se o všechny součásti dokumentnı́ třı́dy physuth a fonty
MathTime Plus. Vše je umı́stěno na standardnı́ mı́sta ve stromu texmf/*.
Adresář media/audio obsahuje *.wav soubory s poslechovými testy k ukázkám
dekontaminace jednorozměrných signálů v Dodatcı́ch D a E. Aby se ukázkové signály posunuly do slyšitelného frekvenčnı́ho pásma, byly replikovány
64× a vzorkovacı́ frekvence byla změněna na 22050 Hz:
• asmooth.wav: hladký signál z obrázku D.17 vpravo nahoře.
• asmooth+sinus.wav: signál z obrázku D.17 vpravo uprostřed vzniklý
úzkopásmovou kontaminacı́ hladkého signálu asmooth.wav.
• asmooth+sinus_clean.wav: signál z obrázku D.20 vpravo uprostřed
vzniklý dekontaminacı́ signálu asmooth+sinus.wav ve frekvenčnı́ doméně pomocı́ zářezového filtru.
• asmooth+sinus_dcln.wav: signál z obr. E.4 vpravo uprostřed vzniklý
dekontaminacı́ signálu asmooth+sinus.wav waveletovým prahovánı́m.
• asmooth+noise.wav: signál z obrázku D.17 vpravo dole vzniklý širokopásmovou kontaminacı́ hladkého signálu asmooth.wav.
• asmooth+noise_clean.wav: signál z obrázku D.20 vpravo dole vzniklý
dekontaminacı́ signálu asmooth+noise.wav ve frekvenčnı́ doméně pomocı́ Wienerova optimálnı́ho filtru.
• asmooth+noise_dcln.wav: signál z obrázku E.4 vpravo dole vzniklý
dekontaminacı́ signálu asmooth+noise.wav waveletovým prahovánı́m.
235
236
Dodatek G. Disk
• aunsmth.wav: nespojitý signál z obrázku D.17 vlevo nahoře.
• aunsmth+sinus.wav: signál z obrázku D.17 vlevo uprostřed vzniklý
úzkopásmovou kontaminacı́ nespojitého signálu aunsmth.wav.
• aunsmth+sinus_clean.wav signál z obrázku D.20 vlevo uprostřed
vzniklý dekontaminacı́ signálu aunsmth+sinus.wav: ve frekvenčnı́ doméně pomocı́ zářezového filtru.
• aunsmth+sinus_dcln.wav signál z obrázku E.4 vlevo uprostřed vzniklý
dekontaminacı́ signálu aunsmth+sinus.wav waveletovým prahovánı́m.
• aunsmth+noise.wav: signál z obrázku D.17 vlevo dole vzniklý širokopásmovou kontaminacı́ nespojitého signálu aunsmth.wav.
• aunsmth+noise_clean.wav: signál z obrázku D.20 vlevo dole vzniklý
dekontaminacı́ signálu aunsmth+noise.wav ve frekvenčnı́ doméně pomocı́ Wienerova optimálnı́ho filtru.
• aunsmth+noise_dcln.wav: signál z obrázku E.4 vlevo dole vzniklý
dekontaminacı́ signálu aunsmth+noise.wav waveletovým prahovánı́m.
Adresář media/image obsahuje link na adresář se všemi obrázky použitými
v práci sources/ibbc/ibbc/images.
Adresář media/video obsahuje soubory averteb1.avi a averteb2.avi s virtuálnı́m průletem Arteria vertebralis (vytvořeno a poskytnuto laskavostı́
Mgr. Kovala a Mgr. Korhelı́ka z Fakultnı́ nemocnice s poliklinikou v Ostravě [36, 37]).
Adresář program obsahuje statistický program použitý pro výpočty v praktické
části (kapitola 5, výpis hlavnı́ funkce programu je v Dodatku F). Jelikož
program využı́vá komerčnı́ch rutin z kolekce [13], bez nichž by kompletnı́
zdrojové texty nešly zkompilovat, nemá smysl je zde přikládat. Mı́sto toho
jsou obsaženy staticky zkompilované spustitelné soubory pro GNU/Linux
(starch.x) a pro Windows (starch.exe). Pokyny pro použitı́ programu se
dostanou přı́kazem starch -h.
Adresář web obsahuje download webových stránek [9] a [38] (s laskavým svolenı́m autorů). Stránka [9] obsahuje velmi ilustrativnı́ animace k sekci 3.4
o jaderné magnetické rezonanci, stránka [38] všeobecný stručný přehled
medicı́nských zobrazovacı́ch metod.
Soubor ibbc print.pdf obsahuje kompletnı́ bakalářskou práci určenou pro
tisk ve formátu PDF.
Soubor ibbc print.ps.gz je obsahem totožný se souborem ibbc_print.pdf;
lišı́ se formátem (gzipped PostScript).
Soubor ibbc screen.pdf obsahuje kompletnı́ bakalářskou práci určenou ke
konzumaci na monitoru (pro funkčnost všech rysů je nutné použı́t prohlı́žeč
Adobe Reader).

Podobné dokumenty

SOUBOR Č. 1 INSTRUCTION MANUAL © 1992

SOUBOR Č. 1 INSTRUCTION MANUAL © 1992 ihned se provede uložení nastavení sady 4ařoNT> snuc S 7 0 3 . j < - > ? 8 na p ^ a to pod vždy stejným jmínem R B C D E F C H I J K font. (Uložení na disk se provádí přes m , n u BSBBBEflfldk L M ...

Více

Zpracování dat v ekologii společenstev

Zpracování dat v ekologii společenstev * ekologická data jsou často zešikmená pozitivně (doprava), protože jsou omezená nulou na začátku

Více