VYSOKÁ ŠKOLA POLYTECHNICKÁ JIHLAVA Katedra elektrotechniky a informatiky Obor Aplikovaná informatika
Výpočetní model sluchové dráhy bakalářská práce
Autor: Jiří Marušák Vedoucí práce: Ing. Zbyněk Bureš, Ph.D. Jihlava 2012
Vysoká škola polytechnická Jihlava Tolstého 16, 586 01 Jihlava
ZADÁNÍ BAKALÁŘSKÉ PRÁCE
Autor práce:
Jiří Marušák
Studijní program:
Elektrotechnika a informatika
Obor:
Aplikovaná informatika
Název práce:
Výpočetní model sluchové dráhy
Cíl práce:
Existující komplexní model sluchové dráhy (Bureš, Z.: Modelování Praha: ČVUT
lidské FEL
sluchové Praha,
práce.), implementovaný
v
dráhy 2007. prostředí
a
vnímání
215
s.
Matlab,
zvuku.
Disertační převeďte
do programovacího jazyka C a doplňte uživatelským rozhraním. Ověřte funkčnost pro co nejširší rozmezí kmitočtů a intenzit vstupního zvuku.
Ing. Zbyněk Bureš, Ph.D.
Ing. Bc. Michal Vopálenský, Ph.D.
vedoucí bakalářské práce
vedoucí katedry Katedra elektrotechniky a informatiky
Anotace Bakalářská práce se zabývá převodem a implementací již existujícího komplexního modelu sluchové dráhy (v prostředí Matlab od Ing. Zbyňka Bureše, Ph.D.) do programovacího jazyka C. Aplikace má grafické uživatelské rozhraní, které umožňuje její snadné ovládání, nastavení parametrů výpočetního modelu a kontrolu nad všemi výstupy. Následné testování ověřuje funkčnost programu pro co nejširší rozmezí kmitočtů a intenzit vstupního zvuku. Aplikace je vytvořena v programovacím jazyce C. Uživatelské rozhraní pak využívá služeb sady knihoven GTK+.
Klíčová slova výpočetní model, sluchová dráha, C, GTK+
Abstract This bachelor thesis deals with the transfer and implementation of an existing complex model of the auditory pathway (in Matlab from Ing. Zbynek Bures, Ph.D.) to the programming language C. The application has a graphical user interface that enables its easy control, parameter setting and control of all outputs. Subsequent testing verifies the functionality of the program for a wide range of frequencies and intensities of the input sound. Application is developed in programming language C. The user interface uses the service set of GTK + libraries.
Prohlašuji, že předložená bakalářská práce je původní a zpracoval jsem ji samostatně. Prohlašuji, že citace použitých pramenů je úplná, že jsem v práci neporušil autorská práva (ve smyslu zákona č. 121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů, v platném znění, dále též „AZ“). Souhlasím s umístěním bakalářské práce v knihovně VŠPJ a s jejím užitím k výuce nebo k vlastní vnitřní potřebě VŠPJ. Byl jsem seznámen s tím, že na mou bakalářskou práci se plně vztahuje AZ, zejména § 60 (školní dílo). Beru na vědomí, že VŠPJ má právo na uzavření licenční smlouvy o užití mé bakalářské práce a prohlašuji, že s o u h l a s í m s případným užitím mé bakalářské práce (prodej, zapůjčení apod.). Jsem si vědom toho, že užít své bakalářské práce či poskytnout licenci k jejímu využití mohu jen se souhlasem VŠPJ, která má právo ode mne požadovat přiměřený příspěvek na úhradu nákladů, vynaložených vysokou školou na vytvoření díla (až do jejich skutečné výše), z výdělku dosaženého v souvislosti s užitím díla či poskytnutí licence. V Jihlavě dne 2. 1. 2012
Poděkování Tímto bych velice rád poděkoval vedoucímu mé bakalářské práce panu Ing. Zbyňku Burešovi, Ph.D. za jeho odborné vedení, pod kterým jsem tuto práci zrealizoval. Dále pak za jeho velmi cenné rady, ochotu a především za čas, který mi věnoval při konzultacích. V neposlední řadě bych také chtěl poděkovat profesorům a docentům Vysoké školy polytechnické v Jihlavě za předání velmi cenných znalostí a zkušeností, které jsem při psaní této bakalářské práce využil.
Seznamy ................................................................................................................. 52 10.1 Seznam použité literatury ................................................................................. 52 10.2 Seznam použitých zkratek................................................................................ 53 10.3 Seznam obrázků ............................................................................................... 54 10.4 Seznam tabulek ................................................................................................ 55 10.5 Seznam rovnic .................................................................................................. 55 Přílohy .................................................................................................................... 56
11
Typy datových souborů .................................................................................... 56
A A.1
Soubory typu ‘.raw‘ a ‘.ome‘..................................................................... 56
A.2
Soubory typu ‘.exc‘ a ‘.ihc‘ ....................................................................... 56
A.3
Soubor typu ‘.an‘ ....................................................................................... 56
B
Seznam dostupných parametrů modelu ........................................................... 56
C
Obsah přiloženého CD ..................................................................................... 56
1 Úvod Jako téma mé bakalářské práce jsem si zvolil zadání od Ing. Zbyňka Bureše, Ph.D. pod názvem „Výpočetní model sluchové dráhy“. Tato volba měla hned několik důvodů. Převážná většina ostatních zadání bakalářských prací se totiž zabývala vývojem webových aplikací a portálů, což mě nijak výrazně nezaujalo. Velkou roli při mém rozhodování sehrála též střední škola, na které jsem se s programováním v podstatě seznámil a posléze si ho velice oblíbil. Ve stejném duchu jsem pokračoval i na Vysoké škole polytechnické v Jihlavě, jen jsem vyměnil programovací jazyk Pascal za jazyk C. Ten má velmi širokou oblast použití a jeho syntaxi přebírá mnoho dalších moderních programovacích jazyků, například Java, Perl nebo PHP (1). Tuto skutečnost považuji za jeho velkou přednost a výhodu. Jelikož bych se chtěl i nadále věnovat programování v jazyce C, moje volba zadání byla jasná. Zkušenosti, které touto bakalářskou prací získám, budou pro mě určitě velkým přínosem i v budoucnu a posunou mé dosavadní znalosti zas o kousek dál. Výsledkem práce má být aplikace, která modeluje sluchovou dráhu na základě již existujícího komplexního modelu implementovaného v prostředí Matlab. Aplikace bude implementována v programovacím jazyce C a její nedílnou součástí bude grafické uživatelské rozhraní založené na knihovně GTK+. Při tvorbě aplikace bude použito vývojové prostředí NetBeans IDE 7.0.1.1 pro psaní zdrojového kódu a grafické prostředí Glade-32 pro navržení a tvorbu grafického uživatelského rozhraní v GTK+ pod GNOME.
1 2
Produkt, který je vyvíjen pod open source licencí. Free software, který je šířen pod licencí GNU GPL.
9
2 Popis řešeného problému 2.1 Sluchová dráha 2.1.1 Popis struktury sluchové dráhy Informace sluchového nervu, jejichž původcem je hlemýžď (kochlea), směřují do kochleárního jádra. To se skládá ze tří částí:
dorsální kochleární jádro (DCN),
posteroventrální kochleární jádro (PVCN),
anteroventrální kochleární jádro (AVCN).
Z tohoto složeného kochleárního jádra směřují informace dále do colliculu inferior (IC) a do komplexu horní olivy, jejíž součástí jsou mediální superior oliva (MSO) a laterální superior oliva (LSO). V komplexu horní olivy dochází k vyhodnocení binaurálních interakcí. Informace pak dále pokračuje do jádra corpus geniculatum mediale (MGB) a z něho přímo do sluchové kůry (2).
Obrázek 1: Struktura sluchové dráhy (2). AVCN: anteroventrální kochleární jádro, PVCN: posteroventrální kochleární jádro, DCN: dorsální kochleární jádro, MSO: mediální superior oliva, LSO: laterální superior oliva, MTB: nucleus medialis corporis trapezoidei, NLL: nucleus lemnisci lateralis, IC: colliculus inferior, MGB: corpus geniculatum mediale.
10
Do hlemýždě vstupuje zvuková informace v podobě mechanických kmitů. Na tyto kmity hlemýžď následně aplikuje spektrální analýzu, která zajistí jejich přeměnu do formy vzruchů, které postupují dále sluchovým nervem. Kochleární jádro obsahuje několik typů buněk, které reagují na signál různě. Vlastnosti těchto buněk umožňují vyčlenit různé parametry signálu (2). Sluchová dráha, počínaje hlemýžděm, je rozdělena na jednotlivé části, které reagují na určitá frekvenční pásma, v nichž jsou pak informace zpracovávány paralelně (2).
2.1.2 Popis vlastního modelu sluchové dráhy Model je rozdělen do jednotlivých částí, které kopírují sluchovou dráhu. Každá z částí pak odpovídá jednotlivým stupňům v procesu zpracování zvuku sluchovým ústrojím. Na vstupu modelu je zvuková vlna v digitální podobě. Výstupem modelu jsou posloupnosti akčních potenciálů ve sluchovém nervu a na výstupu buněk obou oliv MSO a LSO. Obrázek 2 znázorňuje blokové schéma modelu sluchové dráhy, v jehož horní části je naznačen charakter informace v dané úrovni modelu (2).
Obrázek 2: Blokové schéma modelu sluchové dráhy (2).
Vnější a střední ucho převádí tlakové změny ve vzduchu na mechanické kmity a následně efektivně vybudí postupnou vlnu v kapalině hlemýždě. Tato část modelu je založena na lineárních filtrech, které mají konečnou impulsní odezvu. Vstupem tohoto bloku je zvuková vlna. Výstupem pak je zvuková vlna, která je filtrovaná (2). Kochleární mechanika realizuje základní spektrální analýzu podnětu. Kochleární filtrace je proces, který je silně nelineární a aktivně zesilovaný. Tato část modelu využívá elektromechanických analogií. Pracuje s rezonančními obvody, zpětnovazebními zesilovači a nelineárními členy. Vstupem tohoto bloku je výstup předchozí části
11
modelu, tedy filtrovaná zvuková vlna. Výstupem pak je množina paralelních datových toků, které popisují rychlost kmitů v jednotlivých úsecích basilární membrány (2). Blok cilií, RP a IHC je pro účely modelu rozdělen na několik jednotlivých částí: převod kmitů basilární membrány na výchylku cilií, generování receptorového potenciálu a emisi mediátoru do synapse. Mechanická výchylka basilární membrány, která je převedena na výchylku cilií, je následně přeměněna na změny elektrického potenciálu. Důsledkem těchto změn je různě intenzivní vyplavování neurotransmiteru do synaptické štěrbiny. Vstupem bloku cilií, RP a IHC je výstup modelu kochleární mechaniky. Výstupem pak je časový průběh množství vyplaveného mediátoru pro každou modelovanou vláskovou buňku (2). Synapse a sluchový nerv je modelován dosti abstraktně. Vstupem tohoto bloku je množství mediátoru, který je vyplaven do synaptické štěrbiny každé modelované vláskové buňky. Výstupem pak je časová posloupnost akčních potenciálů v každém modelovaném nervovém vlákně (2). Mediální a laterální superior oliva vyhodnocuje časové a intenzitní rozdíly mezi signály v obou uších. Vstupem tohoto bloku jsou posloupnosti AP z přilehlých vláken sluchového nervu. Výstupem pak je časová posloupnost AP, která je generovaná každou modelovanou buňkou (2). Tato část modelu není součástí aplikace.
2.2 Vymezení cílů bakalářské práce Cílem bakalářské práce je převod a implementace již existujícího komplexního modelu sluchové dráhy v prostředí Matlab do programovacího jazyka C a vytvoření grafického uživatelského rozhraní. Původní implementace výpočetního modelu v prostředí Matlab využívá s velkou výhodou některé dostupné funkce tohoto prostředí, ovšem na úkor rychlosti zpracování dat. Grafické uživatelské rozhraní má uživateli usnadnit práci s tímto výpočetním modelem, bez nutnosti zásahu do zdrojového kódu samotného modelu při změně hodnot parametrů, což bylo v původní implementaci nezbytné. Výstupem této bakalářské práce je snadno přenositelná a ovladatelná aplikace, která je spustitelná na novějších verzích operačního systému Windows, bez nutnosti instalování dalších podpůrných částí (například vývojových prostředí).
12
2.3 Požadavky na aplikaci Aplikace musí být spustitelná pod rodinou operačních systémů Windows. K tomu je nutné, aby byla přeložena do souboru typu ‘.exe‘. To umožní používat tuto aplikaci bez instalování dalších programů do operačního systému. Aplikace musí obsahovat grafické uživatelské rozhraní, které bude přehledné a pro uživatele velmi jednoduché. Snahou tedy je, aby se i běžný uživatel v této aplikaci snadno a rychle orientoval, aniž by měl převratné znalosti z oblasti sluchové dráhy nebo používání Matlabu, jak tomu bylo u původního modelu. Tím se částečně odstraní nedostatky původního modelu, který je implementován v prostředí Matlab. V původním modelu byl nezbytný zásah přímo do zdrojového kódu, pokud chtěl uživatel změnit nebo upravit některé parametry modelu sluchové dráhy. Uživatelské rozhraní aplikace musí obsahovat vybrané základní parametry modelu, které bude moci uživatel podle vlastní potřeby snadno a libovolně měnit (uživatel je omezen pouze konkrétním rozsahem jednotlivých parametrů). Všechny důležité parametry modelu, včetně těch základních, musí být uloženy v textovém souboru, který může zkušenější uživatel využít pro změnu hodnot těchto parametrů. Uživatelské rozhraní musí umožňovat, aby si uživatel mohl vybrat jen tu část modelu sluchové dráhy, se kterou chce opravdu pracovat a provádět výpočty.
13
3 Popis struktury aplikace Aplikace se bude skládat ze dvou částí:
část výpočetní (výpočetní model sluchové dráhy),
část uživatelská (grafické uživatelské rozhraní).
3.1 Výpočetní část Jedná se o hlavní část aplikace, která bude zapouzdřovat funkce podílející se na veškerých výpočtech a především na samotném běhu celého modelu sluchové dráhy. Úkolem výpočetní části bude:
načíst vstupní data ze vstupního datového souboru,
aplikovat jednotlivé postupy a metody na vstupní data,
uložit výsledná data do výstupních datových souborů.
Výpočetní část aplikace bude rozdělena na tři samostatné celky, které budou na sobě navzájem nezávislé a budou odpovídat jednotlivým úrovním výpočetního modelu:
vnější a střední ucho, kochleární mechanika,
vnitřní vláskové buňky, receptorový potenciál,
synapse vnitřní vláskové buňky a sluchového nervu.
3.1.1 Vnější a střední ucho, kochleární mechanika Do výstupního souboru bude zapsána hodnota vzorkovací frekvence (primárně je hodnota vzorkovací frekvence nastavena na 100 kHz). Bude-li zapnuta funkce OME filtru, provede se filtrace dat vstupního souboru. Filtrace bude složena ze tří částí:
filtr vnějšího ucha,
filtr středního ucha,
dodatečný HP filtr, který bude vyrovnávat nedostatky dvou předchozích filtrů.
Takto přefiltrovaná data vstupního souboru se uloží do zvláštního souboru typu ‘.ome‘, který bude mít stejnou strukturu jako vstupní soubor. Zvláštní soubor s přefiltrovanými vstupními daty bude dále použit jako vstupní soubor v této části modelu.
14
Následně proběhne načtení dat ze vstupního souboru do bufferu. Velikost bufferu je dána proměnnou BUF_AUDIO_SIZE (jejíž hodnota je primárně nastavena na 1024). Data v bufferu budou přetypována z datového typu int na datový typ float. Následovat bude smyčka, která postupně zpracuje jednotlivé hodnoty, které byly načteny do bufferu. Smyčka bude na jednotlivé hodnoty aplikovat WDF algoritmus, který vypočítá excitaci IHC. Bude-li se jednat o n-tou vstupní hodnotu (n je dáno proměnnou DOWNSAMPLE), bude na tuto hodnotu aplikována transformace WDF kvantity na elektrické veličiny. Posléze se provede uložení desetiny hodnoty, která odpovídá napětí v HW modelu. Až budou tímto způsobem zpracovány všechny hodnoty, které byly načteny do bufferu, načítání vstupních dat ze vstupního souboru se bude opakovat. Tento cyklus poběží tak dlouho, dokud nebudou ze vstupního souboru načtena a zpracována všechna data.
3.1.2 Vnitřní vláskové buňky, receptorový potenciál Hodnota vzorkovací frekvence se načte ze vstupního datového souboru a bude proveden její zápis do výstupního souboru. Následně se ze vstupního souboru zjistí počet vzorků. Následovat bude smyčka, která poběží od dolní hranice sekce až k horní hranici sekce. Tato smyčka v podstatě zajišťuje, aby byly zpracovávány pouze ty vstupní vzorky, jejichž frekvence se nachází v rozsahu sekcí, který je dán dolní a horní hranicí. Ve smyčce bude provedeno načtení vzorků ze vstupního souboru, které odpovídají aktuálnímu číslu sekce. Hodnota vzorků se následně zvýší o násobek hodnoty parametru COEF. Poté bude na vzorky aplikováno frekvenčně závislé usměrnění a filtr, který modeluje integrační chování RP a generaci AP. Vzorky budou pak ještě dorovnány konstantou na stejnou hodnotu jako při obálkové metodě a následně se provede jejich uložení do výstupního souboru. Po uložení vzorků do výstupního souboru se bude smyčka znova opakovat, ale už s jinými vzorky, které budou odpovídat dalšímu číslu sekce.
3.1.3 Synapse vnitřní vláskové buňky a sluchového nervu Poslední část modelu sluchové dráhy umožňuje ze statistických důvodů její několikanásobné opakování. Výsledky dílčích opakování se ukládají do jednotlivých výstupních souborů, které budou odlišeny číselným indexem za názvem souboru. Počet opakování bude dán proměnnou RUNS. Nejprve se do výstupního souboru uloží
15
hodnota vzorkovací frekvence, která byla načtena ze vstupního souboru. Následně bude zjištěn počet vzorků ve vstupním souboru. Počet vzorků se vydělí osmi a výsledek se uloží do výstupního souboru. Dále bude zjištěn počet vláken v jedné sekci a tato hodnota se také zapíše do výstupního souboru. Nakonec se do výstupního souboru zapíše hodnota udávající počet zapsaných sekcí. Čísla, která byla takto zapsána do výstupního souboru, představují hlavičku výstupního souboru. V další části se provede generování posloupnosti AP, které bude implementováno smyčkou. Smyčka poběží od dolní hranice sekce až k horní hranici sekce. Tato smyčka v podstatě zajišťuje, aby byly zpracovávány pouze ty vstupní vzorky, jejichž frekvence se nachází v rozsahu sekcí, který je dán dolní a horní hranicí sekce. Ve smyčce bude provedeno načtení vzorků ze vstupního souboru, jež odpovídají aktuálnímu číslu sekce. Hodnoty vzorků jsou následně škálovány a provede se posunu nuly k –50 mV (hodnota vzorků bude snížena o hodnotu 50 mV). Další část má totožný průběh, jenž ale bude pokaždé aplikován na jiný vstup. Těmito vstupy budou tři datová pole, která reprezentují:
vlákna s vysokou spontánní aktivitou,
vlákna se střední spontánní aktivitou,
vlákna s nízkou spontánní aktivitou.
Po průchodu sluchovým nervem, bude pro každý vstup proveden výpočet akčního potenciálu. Následně se posloupnosti akčních potenciálů v jednotlivých vláknech uloží do výstupního souboru v jednobitovém formátu (logická jednička odpovídá akčnímu potenciálu, logická nula odpovídá absenci aktivity).
3.2 Uživatelská část Představuje grafické uživatelské prostředí a bude zapouzdřovat funkce, které zajišťují jeho plynulý běh. Uživatelská část bude mít na starost všechny widgety uživatelského prostředí a správu signálů, které budou vysílány těmito widgety směrem k aplikaci, kde tyto signály budou následně zpracovány. Uživatelská část bude na základě přijatých signálů volat funkce, jež se postarají o vyřešení požadavku, který přišel od grafického uživatelského rozhraní. Dílčí části uživatelského rozhraní budou blíže popsány v kapitole 6.5.
16
4 Rešeršní zpracování existujících implementací 4.1 Model sluchové dráhy implementovaný v prostředí Matlab Jedná se o komplexní model, na jehož základě byl vytvořen model implementovaný v programovacím
jazyce
C.
Autorem
komplexního
modelu
sluchové
dráhy
implementovaného v prostředí Matlab je Ing. Zbyněk Bureš, Ph.D. Jak je zřejmé, komplexní model pro svůj běh nezbytně potřebuje interaktivní programové prostředí Matlab. Toto programové prostředí má licenci proprietární3. Uživatel, který tedy chce s tímto komplexním modelem pracovat a využívat jeho funkcí, musí mít ve svém operačním systému toto programové prostředí nainstalované. Uživatel by měl také mít alespoň základní znalosti v oblasti používání Matlabu. Komplexní model využívá s velkou výhodou některé dostupné funkce, které Matlab nabízí. Výhodou je také skutečnost, že Matlab provádí výpočty s velkou přesností. Model je rozdělen do tří částí (EAR, IHC a AN), které jsou na sobě navzájem nezávislé a zároveň nejsou propojeny. Pokud chce uživatel změnit hodnotu některého z parametrů výpočetního modelu sluchové dráhy, musí provést zásah přímo do zdrojového kódu, kde danou hodnotu změní. Tento aktivní přístup, který komplexní model vyžaduje, umožňuje uživateli měnit výpočetní model sluchové dráhy podle svých aktuálních potřeb. Uživatel tak může výpočetní model upravovat a dále rozšiřovat o nové prvky, což je z hlediska maximální využitelnosti velmi pozitivní. Úpravy modelu vyžadují znalosti skriptovacího programovacího jazyka Matlab čtvrté generace. Komplexní model také disponuje funkcemi, které dokáží veškeré výstupy z výpočetního modelu sluchové dráhy graficky zobrazit. Existující komplexní model sluchové dráhy implementovaný v prostředí Matlab je určen spíše pro zkušeného uživatele, který disponuje interaktivním programovým prostředím Matlab a ovládá skriptovací programovací jazyk Matlab čtvrté generace. To umožňuje zkušenému uživateli využívat výpočetní model sluchové dráhy v jeho plném rozsahu s možností dalších úprav a rozšiřování.
3 3
Proprietární software je takový software, kde jeho autor upravuje licencí či jiným způsobem možnosti jeho používání. Software obvykle spadá do kategorie komerčního softwaru, který jeho autor prodává.
17
5 Analýza a návrh implementace 5.1 Vývojové prostředí 5.1.1 NetBeans IDE Jelikož celá aplikace bude implementována v programovacím jazyce C, který je kompilovaný, bude tedy nezbytné mít k dispozici kompilátor tohoto jazyka. Vývojové prostředí NetBeans IDE verze 7.0.1, které bude použito pro psaní veškerého zdrojového kódu, obsahuje editor zdrojového kódu, interpret, debugger a mnoho dalších velmi užitečných funkcí, mezi které patří například refaktoring, inteligentní doplňování kódu a v neposlední řadě historie souborů, která uchovává veškeré změny provedené v kódu s možností vrácení provedených změn (3). NetBeans ale kompilátor postrádá. Náhradním řešením za chybějící kompilátor se stal MinGW4, který obsahuje GCC.
Obrázek 3: Vývojové prostředí NetBeans IDE 7.0.1.
4
Produkt, který je vyvíjen pod open source licencí.
18
5.1.2 Glade Grafická podoba výsledné aplikace bude navržena v grafickém prostředí Glade-3, které slouží k tvorbě grafického uživatelského rozhraní v GTK+ pod GNOME. Takto navržené uživatelské rozhraní včetně všech jeho widgetů, je uloženo ve formátu XML (4). Glade umožňuje vytvořit uživatelské rozhraní s widgety, které jsou známé z běžně používaných aplikací. Obsahuje tedy nepřeberné množství widgetů GUI – od různých dialogů, přes kontejnery a kontrolní prvky, až po jednoduché grafy. Vytvořené uživatelské rozhraní je nutné oživit za pomoci programovacího jazyka. V tomto případě se jedná o programovací jazyk C.
Obrázek 4: Grafické prostředí Glade-3.
19
5.2 Programovací jazyk C 5.2.1 Co je programovací jazyk C Programovací jazyk C byl vyvinut počátkem 70. let 20. století v Bellových laboratořích AT&T. Původně byl určen pro potřeby operačního systému Unix. Jeho autory jsou Ken Thompson a Dennis Ritchie (1). Programovací jazyk C je nízko-úrovňový, kompilovaný a snáze přenositelný na jiné architektury. Jeho zdrojový kód je mnohem čitelnější než kód jiných programovacích jazyků, které jsou na stejné úrovni systémového programování (programování ovladačů a jader operačních systémů). Proto je ve velké míře často používán pro psaní systémového softwaru ale i aplikací (1). V současnosti patří mezi nejpopulárnější programovací jazyky. Má totiž širokou oblast použití a jeho syntaxi přebírají další moderní programovací jazyky, například Java, Perl a PHP (1).
5.3 GTK+ 5.3.1 Co je GTK+ V informatice se jedná o pojem spojený s grafickým uživatelským rozhraním. Jde v podstatě o sadu knihoven, kterou vytvořili členové skupiny eXperimental Computing Facility Kalifornské university v Berkeley. GTK+ původně vzniklo pro účely grafického rastrového editoru GIMP. Knihovny byly následně použity pro prostředí pracovní plochy GNOME v unixových operačních systémech (5). GTK+ obsahuje tyto hlavní knihovny (6):
GLib (lglib–2.0)
– pomocné funkce a datové struktury,
GDK (lgdk-x11–2.0)
– wrapper funkcí Xlib,
GObject (lgobject–2.0)
– generický typový a objektový systém, signály,
GTK+ (lgtk-x11–2.0)
– jádro toolkitu GTK+ a definice widgetů,
Pango (lpango–1.0)
– zobrazování textu,
ATK (latk–1.0)
– zpřístupnění aplikací pro tělesně postižené.
20
V dnešní době patří GTK+ mezi dvě nejpopulárnější knihovny, využívané pro tyto účely. Je naprogramované v programovacím jazyce C, jeho design ovšem používá objektový systém GObject. Za pomoci GtkBuilderu lze pak tyto objekty načítat dynamicky za běhu programu podle aktuální potřeby (vhodné například pro změnu jazyka uživatelského prostředí aplikace). GTK+ je šířeno pod open source licencí LGPL jako součást projektu GNU a podporuje nespočet dalších programovacích jazyků. GTK+ má i velmi široký rozsah, co se týče podporovaných platforem (5). Obrázek 5 představuje vrstvovou strukturu knihoven, která je mezi aplikací s GUI pod GTK+ a grafickým systémem operačního systému. Aplikace GTK Theme Engine GDK Grafický systém Obrázek 5: Znázornění vztahů mezi základními knihovnami (6).
Nejnižší vrstvou je základní knihovna grafického systému. Nad ní pak leží vrstva GDK, která obaluje volání knihovny grafického systému. Vrstva GDK má dvě základní funkce: 1. zjednodušuje komplikované API Xlib, 2. usnadňuje přenositelnost na jiné grafické systémy. Vrstva GTK se skládá z implementace objektového systému, podpory zpracování událostí, signálů a tříd pro jednotlivé widgety. Aplikace tedy volá funkce z GTK. Pokud aplikace potřebuje kreslit vlastní grafiku, definovat nové třídy widgetů nebo provádět nestandardní operace s okny, volá přímo GDK. Vrstva Engine pak definuje vzhled standardních wigdetů. Pokud GKT používá widgety z Engine, tak nevolá funkce z GDK, které jsou určeny pro kreslení základních grafických prvků, ale využívá funkcí z Theme, které kreslí složitější objekty (například celé tlačítko). Theme Engine pak tyto
21
složité objekty překládá do série základních kreslících prvků, které následně realizuje GDK. Celkový vzhled uživatelského rozhraní tedy závisí na vrstvě Theme Engine a jejich knihovnách (6).
5.3.2 Hierarchie objektového systému GObject Jak již bylo řečeno v předchozí části, GTK+ používá objektový systém GObject, jehož struktura je naznačena na Obrázek 6. Hlavní kostra systému je odlišena od ostatních šedou výplní. V jednotlivých úrovních struktury jsou uvedeny jen ty části (třídy objektů), které byly použity v aplikaci nebo jsou známější. GObject
Gnome App Gtk Dialog Obrázek 6: Hierarchie objektů GTK+ (7).
22
5.4 Návrh uživatelského rozhraní Grafické uživatelské rozhraní pod knihovnou GTK+ lze vytvořit dvěma způsoby: 1. elegantní způsob (návrhový) – využitím grafického prostředí, například Glade, ve kterém je celé GIU vizuálně navrženo v editoru včetně různých dialogů. Glade také umožňuje nastavit různé parametry jednotlivých widgetů. Výsledný XML soubor s popisem GUI je pak načten aplikací, která s jeho objekty dále pracuje. Velkou výhodou tohoto způsobu je okamžitá vizuální kontrola navrhovaného GUI přímo při jeho vytváření. Z tohoto důvodu byl zvolen právě tento způsob návrhu GUI. Tento způsob je možno vidět v kapitole 6.4.1. Část XML souboru, který obsahuje GUI, je pak k vidění v kapitole 6.4.3. 2. klasický způsob (kódový) – uživatelské rozhraní je navrženo jen na základě zdrojového kódu, který realizuje jednotlivé widgety. Správnost navrhovaného GUI lze ověřovat jen kompilací výsledné aplikace. Tento způsob návrhu GUI je z časového hlediska náročnější a vyžaduje dosti značné znalosti – jak knihovny GTK+ tak i jednotlivých widgetů a jejich vlastností. Tento způsob tvorby widgetů je možno vidět v kapitole 6.4.2. Samotné GUI komunikuje s aplikací za pomoci tzv. signálů (manipulátorů), které vznikají při různých událostech widgetů. Signály jsou vysílány tehdy, nastane-li událost, která je vyvolá a to bez ohledu na to, jestli je definována obslužná funkce této události. Nastane-li událost a má-li aplikace pro tento signál definovanou funkci, aplikace tuto funkci zavolá. Grafické prostředí Glade umožňuje implicitně přiřazovat widgetům konkrétní události. Signály těchto událostí pak následně v aplikaci zavolají příslušnou funkci, jejíž název je shodný s názvem události v Gladu. Tato funkce je pak reakcí na vyvolanou událost. Aplikace se tedy nestará o zachytávání signálů, ale pouze o funkce, jež jsou reakcí na vyvolanou událost. Výše popsaný způsob komunikace se realizovat nepodařilo. Při vzniku události totiž signál nedokázal najít v programu stejnojmennou funkci, která byla implicitně přiřazena této události v Gladu.
23
Řešením tohoto dosti podstatného problému byla manuální obsluha zachytávání signálů. Jinými slovy … bylo nutné se k neustále přicházejícím signálům z GUI připojovat manuálně – tedy definovat objekt (widget) a typ události, která signál vyvolala, a následně přiřadit funkci, jež má být vyvolána, pokud tento druh signálu s tímto typem události od tohoto konkrétního objektu aplikace zachytí. Glade (návrh GUI) GUI je navrženo pomocí grafického prostředí Glade-3 a je uloženo jako ‘.glade‘ formátu XML. Soubor ‘.glade‘ formátu XML je převeden do formátu GtkBuilder XML pomocí gkt-builder-convert skriptu.
Aplikace zpracovává požadavky uživatele skrz manipulátory (signály) funkcí.
GtkBuilder (implementace navrženého GUI) Aplikace říká GtkBuilderu, jak analyzovat soubor formátu GtkBuilder XML popisující GUI.
GtkBuilder vytváří všechny GTK+ widgety i s jejich vlastnostmi, které jsou popsány v XML souboru a stanoví vztahy (rodič–potomek) všech widgetů.
Objekt GtkBuilder je smazán (tím se uvolní paměť používaná XML souborem).
Aplikace si žádá o některé odkazy (proměnné) widgetů, které potřebuje z GtkBuilderu.
Obrázek 7: Blokové schéma implementace GUI pod GTK+ s využitím Glade (8).
5.4.1 Uživatelský přístup k aplikaci (z hlediska parametrů modelu) Uživatel bude ovládat výpočetní model sluchové dráhy prostřednictvím grafického uživatelského rozhraní, které bude nadstavbou výpočetního modelu sluchové dráhy. Při startu aplikace budou do výpočetních parametrů modelu načteny defaultní hodnoty z textového souboru „all_parametrs.txt“. Textový soubor bude moci uživatel měnit dvěma způsoby – přímo z GUI aplikace prostřednictvím integrovaného textového editoru nebo prostřednictvím vlastních programů, které dokáží tento textový soubor otevřít k jeho editaci. Bude-li uživatel chtít obnovit prvotní nastavení defaultních hodnot parametrů v textovém souboru, bude obsah textového souboru obnoven
24
z primárních hodnot parametrů, které budou odděleně uloženy ve výpočetním modelu sluchové dráhy. Uživatelské parametry, k nimž bude mít uživatel přímý přístup z GUI, budou pouze výběrem těch základních výpočetních parametrů modelu. Uživatelské a výpočetní parametry modelu budou tedy navzájem propojeny (jejich hodnoty budou stejné). Bude-li uživatel chtít uložit hodnoty uživatelských parametrů jako defaultní hodnoty, uloží se ve skutečnosti hodnoty výpočetních parametrů.
uživatel
editace externími programy
GUI aplikace
integrovaný textový editor
uživatelské parametry modelu EAR
IHC
AN
editace
načítání a ukládání hodnot parametrů
propojení
textový soubor „all_parametrs.txt“ s defaultními hodnotami všech parametrů modelu
výpočetní parametry modelu EAR
IHC
AN
Výpočetní model sluchové dráhy
primární hodnoty všech parametrů modelu
obnovení
Obrázek 8: Diagram uživatelského přístupu k aplikaci (z hlediska parametrů).
25
5.4.2 Okno aplikace Okno aplikace bude rozděleno na tři části: nástrojovou lištu, hlavní část pro ovládání modelu sluchové dráhy a status bar. Hlavní část bude poté ještě rozdělena na čtyři záložky (Main page, page EAR, page IHC a page AN). 5.4.2.1 Main page První a zároveň hlavní záložka, která bude uživateli umožňovat výběr jednotlivých částí modelu, jež se mají účastnit výpočtu. V main page si bude uživatel moci vybrat vstupní soubor a také si bude moci zadat název výstupního souboru. Nezbytnou součástí main page bude tlačítko, kterým se spustí výpočetní model sluchové dráhy. 5.4.2.2 Page EAR, IHC a AN Skupina tří vedlejších záložek, které budou uživateli umožňovat přístup k hodnotám uživatelských parametrů jednotlivých částí výpočetního modelu sluchové dráhy. Hodnoty těchto parametrů budou načítány z textového souboru, ve kterém jsou uloženy hodnoty důležitých parametrů modelu. Každá ze záložek bude odpovídat jedné části modelu. V dolní části záložek bude panel, který bude obsahovat dvě tlačítka. První tlačítko bude sloužit pro obnovení hodnot parametrů na defaultní hodnoty, které jsou uloženy v textovém souboru. Druhé pak bude sloužit pro opačnou činnost, tady k uložení nově nastavených hodnot v uživatelském rozhraní do textového souboru.
5.4.3 Integrovaný textový editor Do aplikace bude integrován velmi primitivní textový editor. Ten bude sloužit jako rychlý prostředek, umožňující snadný přístup k textovému souboru s defaultním nastavením hodnot parametrů modelu. Při otevření textového editoru bude do něj automaticky tento textový soubor načten a bude rovnou připraven k úpravám. Uživatel tedy nebude muset textový soubor dohledávat, jelikož ho bude mít rovnou k dispozici v tomto textovém editoru. Okno textového editoru bude modálního typu (pokud je modální okno zobrazeno, není možné používat ostatní okna aplikace).
26
5.5 Parametry modelu sluchové dráhy Výpočetní model bude mít čtyři úrovně parametrů:
uživatelské,
výpočetní,
defaultní,
primární.
Uživatelské parametry jsou hlavní součástí uživatelského rozhraní (Page EAR, IHC a AN), k nimž bude mít uživatel přímý přístup z aplikace. Tyto parametry jsou jen výběrem těch nejzákladnějších parametrů modelu sluchové dráhy. Uživatelské parametry budou v podstatě jen zobrazením parametrů výpočetních. Bude-li hodnota uživatelského parametru změněna, dojde ve skutečnosti ke změně hodnoty parametru výpočetního. Uživatel tedy nemusí provedené změny hodnot parametrů ukládat, neboť výpočet bude proveden s parametry výpočetními. Pokud si uživatel chce uchovat nastavení hodnot parametrů výpočetního modelu, může si provedené změny uložit. Tyto změny se uloží do textového souboru, který obsahuje defaultní hodnoty parametrů. Uživatelské parametry budou samozřejmě ošetřeny proti nesprávným hodnotám. Výpočetní parametry tvoří skupinu důležitých parametrů, které model sluchové dráhy potřebuje pro své výpočty, a kterými lze zásadně ovlivnit výpočty modelu. Hodnoty těchto parametrů mohou být uživatelem měněny skrze parametry uživatelské nebo prostřednictvím textového souboru s defaultními hodnotami parametrů. Při spuštění aplikace dojde k načtení hodnot výpočetních parametrů z textového souboru. Defaultní hodnoty parametrů, které bude aplikace při svém spuštění načítat do parametrů výpočetních, jsou uloženy v textovém souboru. Tento textový soubor může uživatel editovat prostřednictvím textového editoru, integrovaného do aplikace výpočetního modelu. Editaci textového souboru může uživatel také provést prostřednictvím jiných programů, které dokáží zpracovávat a editovat textové soubory. Za defaultní hodnoty parametrů se považují takové hodnoty parametrů, které jsou uvedeny v textovém souboru. Za změny, provedené v textovém souboru, zodpovídá uživatel. Tento vstup totiž není možné jakýmkoliv způsobem ošetřit, lze ho pouze kontrolovat při načítání hodnot do výpočetních parametrů modelu. Pokud bude
27
při načítání textového souboru zaznamenána chyba, bude obsah textového souboru obnoven z hodnot primárních parametrů. Primární hodnoty parametrů budou odděleně uloženy v aplikaci. Tyto parametry slouží k obnovení defaultních hodnot parametrů nebo k vytvoření nového textového souboru, bude-li soubor poškozený nebo dokonce smazaný. Primární hodnoty parametrů modelu jsou uvedeny v příloze B. Tabulka 1: Uživatelské parametry - EAR.
Název
Primární hodnota
Popis
Coupling
1
vazby mezi sekcemi
Feedback
1
pasivní (0) nebo aktivní (1) model
Nonlin
1
bez komprese (0) nebo nelineární komprese (1) zpětné vazby OHC
Filter OME
1
filtrování vstupního signálu filtrem vnějšího a středního ucha
Tabulka 2: Uživatelské parametry - IHC.
Název
Primární hodnota
Popis
Sections
1–251
frekvenční rozsah, v němž bude proveden výpočet (zadáno intervalem sekcí)
28
Tabulka 3: Uživatelské parametry - AN.
Název
Primární hodnota
Popis
Sections
1–251
frekvenční rozsah, v němž bude proveden výpočet (zadáno intervalem sekcí)
Runs
50
počet opakování výpočtu části AN
Refractoriness
0
uvažování refrakternosti
Refractory Period
0,00075
absolutní refrakterní fáze [s]
Recovery Tau
0,0006
doba zotavení (relativní refrakterní fáze) [s]
P
1,0
pravděpodobnost, že když dorazí mediátor, může vůbec vniknout spike
nHSRC
6
počet vláken s vysoko spontánní aktivitou
nMSRC
0
počet vláken se středně spontánní aktivitou
nLSRC
6
počet vláken s nízkou spontánní aktivitou
nFPC
10
počet vláken na jednu buňku
HSR mFPM
70,0
HSR Rand
0,002
MSR mFPM
45,0
MSR Rand
0,002
LSR mFPM
90,0
LSR Rand
0,002
náhodnost vlákna s vysoce spontánní aktivitou
náhodnost vlákna se středně spontánní aktivitou
náhodnost vlákna s nízkou spontánní aktivitou
29
6 Popis implementace 6.1 Výpočetní část 6.1.1 Vnější a střední ucho a kochleární mechanika Tato část výpočetního modelu sluchové dráhy byla převzata z implementace modelu v jazyce C od FB Frank Baumgarte, Uni Hannover. Převzatý model bylo nezbytné upravit a doplnit o chybějící prvky. Úprava se týkala především změny hodnot parametrů modelu a přepracování vstupního audio bufferu, který byl původně navržen pro 16bitové vstupní hodnoty (implementace modelu v prostředí Matlab používá 32bitové vstupní hodnoty). Model byl doplněn o chybějící části jako například OME filtr, který využívá vlastností 1-D digitálního filtru. Tento digitální filtr byl implementován na základě dokumentace v prostředí Matlab, viz kapitola 6.3.1.
6.1.2 Vnitřní vláskové buňky, receptorový potenciál Druhá část výpočetního modelu sluchové dráhy byla implementována na základě zdrojového kódu původního modelu v prostředí Matlab. Změna oproti původnímu modelu nastala v prezentaci datové části, neboť Matlab pracuje za každé situace s maticemi. Pro větší přehlednost a snadnou orientaci ve zdrojovém kódu byla zachována stejná struktura, kterou měla předchozí část, jež byla převzata od FB Frank Baumgarte.
6.1.3 Synapse IHC a sluchového nervu Tato poslední část výpočetního modelu sluchové dráhy byla implementována obdobně jako část předchozí. Doplnit se muselo několik funkcí, například funkce pro náhodné geometrické rozdělení.
6.2 Uživatelská část Grafická nadstavba nad výpočetním modelem sluchové dráhy byla implementována na základě požadavků na aplikaci. Samozřejmostí bylo ošetření nekorektních vstupů. Hlavní částí jsou funkce, které zajišťují komunikaci prostřednictvím signálů.
30
6.3 Popis vybraných funkcí jazyka C 6.3.1 1-D digitální filtr F_TYPE *filter(F_TYPE *B, int b, F_TYPE *A, int a, F_TYPE *X, int x){ F_TYPE sum_a, sum_b, *Y; int i, j; Y = (F_TYPE *) malloc (x * sizeof(F_TYPE)); for(i=0 ; i<x ; i++){ sum_a = 0; sum_b = 0; for(j=0 ; (j<=i)&&(j
Realizace stejnojmenné funkce, která je implementovaná v programovém prostředí Matlab. Původní funkce filtruje sekvenci dat za pomoci digitálního filtru, který pracuje s reálnými i komplexními vstupy. Funkce filter má v programovém prostředí Matlab syntaxi y = filter (b, a, X). Vstupní data filtru jsou dána vektorem X. Vektor b představuje koeficienty čitatele, vektor a pak koeficienty jmenovatele. Pokud koeficient jmenovatele obsahuje pouze jednu hodnotu (vektor má pouze jeden prvek), která není rovna jedné, pak filtr aplikuje tuto hodnotu jako dělitele vstupních dat. Pokud je ale hodnota rovna nule, filtr vrátí chybu, neboť by docházelo k dělení nulou (9). Výstupem funkce je vektor, který vznikl aplikací filtru na vstupní data.
31
Obrázek 9: Schéma algoritmu implementovaného filtru v prostředí Matlab (9).
( )
( )
( )
( )
(
)
(
)
(
)
( )
(
)
(
)
(
)
Rovnice 1: Rovnice algoritmu implementovaného filtru v prostředí Matlab (9).
Realizovaná funkce filter má totožné parametry jako funkce původní, která je implementovaná v prostředí Matlab. Pracuje pouze s reálnými vstupy a obsahuje navíc parametry,
které
udávají
velikosti
datových
polí
(Funkce
pracuje
pouze
s jednorozměrnými poli). Hlavní část funkce je tvořena for-cyklem. Ten postupně prochází celé vstupní datové pole a jeho tělo je rozděleno do tří částí: 1. Výpočet součetu kladné části Rovnice 1 do úrovně, která je dána řídící proměnnou hlavního for-cyklu. Koeficienty pro násobení hodnot vstupních dat jsou dány polem b. 2. Vyhodnocení a následné řešení situace na základě podmínek, které jsou uvedeny v předchozím odstavci pro vektor koeficientů jmenovatele. Pokud ale pole a obsahuje více než jeden prvek, provede obdobný výpočet součtu záporné části Rovnice 1 jako v první části. Koeficienty pro násobení hodnot vstupních dat jsou dány polem a. 3. Vypočítá rozdíl mezi součtem kladné a záporné složky rovnice. Výsledek pak uloží do výstupního pole na příslušnou pozici, která je dána řídící proměnnou hlavního for-cyklu. Funkce vrací výstupní pole, které vzniklo aplikací filtru na vstupní data. K dealokaci paměti pole Y dochází mimo funkci filtru.
Nejprve je vytvořen ukazatel na GtkBuilder a na widgety, ke kterým se bude přistupovat. Následně je provedena definice GtkBuilder a widgetů, které jsou načteny z XML souboru. V další části je ošetřeno manuální zachytávání signálů. Funkce textového editoru je vyvolána na základě zachycení signálu od položky Edit v submenu Parametrs hlavní nabídky. Jedná se v podstatě o reakci na událost activate, vyvolanou kliknutím na položku Edit v submenu Parametrs hlavní nabídky. Podprogram textového editoru obsahuje GtkBuilder, neboť jeho celá vizuální podoba je načítána z XML souboru, kde je uložen. Jde tedy o klasický (kódový) způsob vytváření widgetů, který je zmíněn v kapitole 5.4.
Nejprve je vytvořen ukazatel dialog typu widget. Dialog je následně definován a jsou nastaveny jeho parametry (typ dialogu, typ tlačítek, text dialogu a titulek dialogu). Poté je dialog zobrazen. Dialog je samozřejmě modální. Komunikace s dialogem probíhá prostřednictvím proměnné out, do které se ukládá číslo akce, kterou uživatel v dialogu provedl. Sekvence podmínek pak tyto jednotlivé akce vyhodnocuje. První podmínka je reakcí na stisknuté tlačítko NO, kdy se provede zničení jak dialogu, tak i celého
34
textového editoru. Druhá podmínka je reakcí na stisknuté tlačítko YES. Provede se uložení obsahu textového editoru a ostatní je stejné jako u tlačítka NO. Poslední podmínka je reakcí na stisknutí tlačítka křížku v pravém horním rohu dialogu. Zde se provede jen zničení dialogu a uživatel může dále pracovat v textovém editoru. Funkce
dotazovacího
dialogu
je
vyvolána
na
základě
zachycení
signálu
od integrovaného textového editoru. Dotazovací dialog je v podstatě reakcí na událost clicked vyvolanou kliknutím na tlačítko Close. Tato funkce neobsahuje žádný GtkBuilder, není ho totiž potřeba. Jednoduché widgety, které mají pouze jeden účel v dané situaci (například dotazovací dialogy), je velmi snadné nastavit a realizovat za pomoci zdrojového kódu, nežli je modelovat v grafickém editoru. Jde tedy o klasický (kódový) způsob vytváření widgetů, který je zmíněn v kapitole 5.4.
6.4.3 Ukázka XML souboru s GUI v GTK+ GUI je uloženo do XML souboru „gui.glade“, který je pak aplikací načten. Prostřednictvím GtkBuilderu jsou do aplikace načteny jednotlivé widgety z tohoto souboru. Ukázka části zmíněného XML souboru popisuje tyto objekty:
hlavní okno (main_window),
hlavní nabídku (menu),
první položku hlavní nabídky – submenu (menu_program),