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
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 ...
Zpracování dat v ekologii společenstev
* ekologická data jsou často zešikmená pozitivně (doprava), protože jsou omezená
nulou na začátku