´ UNIVERZITA V LIBERCI TECHNICKA Fakulta mechatroniky, informatiky a mezioborov´ ych studi´ı
´R ˇ SKA ´ PRA ´ CE BAKALA
Liberec 2009
Viktor Bubla
´ UNIVERZITA V LIBERCI TECHNICKA Fakulta mechatroniky, informatiky a mezioborov´ ych studi´ı
Studijn´ı program: B2612 Elektrotechnika a informatika Studijn´ı obor: Elektronick´e informaˇcn´ı a ˇr´ıdic´ı syst´emy
Virtua´ln´ı mˇeˇr´ıc´ı a monitorovac´ı pˇr´ıstroj v prostˇred´ı GNU/Linux Virtual measuring and monitoring device under GNU/Linux
Bakala´ˇrska´ pra´ce
Autor: Vedouc´ı pr´ace: Konzultant:
V Liberci 24.5.2009
Viktor Bubla Ing. Tom´aˇs Tobiˇska Ing. Jan Kraus
Origin´al zad´an´ı
Prohlášení Byl jsem sezn´amen s t´ım, ˇze na mou bakal´aˇrskou pr´aci se plnˇe vztahuje z´akon ˇc. 121/2000 o pr´avu autorsk´em, zejm´ena § 60 (ˇskoln´ı d´ılo). Beru na vˇedom´ı, ˇze TUL m´a pr´avo na uzavˇren´ı licenˇcn´ı smlouvy o uˇzit´ı m´e BP a prohlaˇsuji, ˇze s o u h l a s ´ı m s pˇr´ıpadn´ ym uˇzit´ım m´e bakal´aˇrsk´e pr´ace (prodej, zap˚ ujˇcen´ı apod.). Jsem si vˇedom toho, ˇze uˇz´ıt sv´e bakal´aˇrsk´e pr´ace ˇci poskytnout licenci k jej´ımu vyuˇzit´ı mohu jen se souhlasem TUL, kter´a m´a pr´avo ode mne poˇzadovat pˇrimˇeˇren´ y pˇr´ıspˇevek na u ´hradu n´aklad˚ u, vynaloˇzen´ ych univerzitou na vytvoˇren´ı d´ıla (aˇz do jejich skuteˇcn´e v´ yˇse). Bakal´aˇrskou pr´aci jsem vypracoval samostatnˇe s pouˇzit´ım uveden´e literatury a na z´akladˇe konzultac´ı s vedouc´ım bakal´aˇrsk´e pr´ace a konzultantem.
Datum
Podpis
3
Podˇ ekování Pˇrednˇe bych r´ad podˇekoval cel´e komunitˇe lid´ı, kter´a vyv´ıj´ı a star´a se o software s otevˇren´ ym zdrojov´ ym k´odem a zejm´ena o operaˇcn´ı syst´em GNU/Linux1 . D´ıky n´ı jsem mohl j´a, stejnˇe jako kdokoli na svˇetˇe, pouˇz´ıvat leg´alnˇe a zdarma vˇsechen software, kter´ y jsem kdy ke sv´e pr´aci potˇreboval i v dobˇe, kdy jsem byl jako student bez finanˇcn´ıch prostˇredk˚ u. Pr´avˇe d´ıky sv´emu zaujet´ı pro Linux jsem se jiˇz v prvn´ım roˇcn´ıku pˇres pana Ing. Jana Koprnick´eho, Ph.D., dozvˇedˇel o panu Ing. Janu Krausovi. Ten mˇe okamˇzitˇe nasmˇeroval spr´avn´ ym smˇerem a hned v dalˇs´ım semestru jsem pˇreˇsel z jazyka Pascal na mnohem uˇziteˇcnˇejˇs´ı jazyk C. Za to jsem mu velice vdˇeˇcn´ y, protoˇze nepamatuji, ˇze bych se nˇekdy znovu v´ yraznˇeji setkal s Pascalem jak v souvislosti s Linuxem, tak v dalˇs´ıch oblastech. Za zm´ınku jistˇe stoj´ı i konzultace, pˇri kter´ ych jsem sice vˇetˇsinou zjistil, ˇze velk´a ˇc´ast pˇredchoz´ıho programov´an´ı byla zbyteˇcn´a nebo nepouˇziteln´a, na druhou stranu jsem vˇsak pokaˇzd´e dostal nov´e n´apady, rady, informace a nasmˇerov´an´ı, kam se d´ale ub´ırat. Na posledn´ım m´ıstˇe i kdyˇz v neposledn´ı ˇradˇe nemohu nezm´ınit pohotov´e a vstˇr´ıcn´e rady a updaty zdrojov´ ych soubor˚ u panem Ing. Tom´aˇsem Tobiˇskou. Jeho pˇrehled a orientace ve vˇsech souvislostech mezi des´ıtkami zdrojov´ ych soubor˚ u, stovkami struktur a tis´ıci promˇenn´ ych na mˇe pokaˇzd´e udˇelal dojem. . .
1
http://www.linux.cz/
4
Abstrakt Hlavn´ım c´ılem pr´ace je vytvoˇren´ı experiment´aln´ıho virtu´aln´ıho mˇeˇr´ıc´ıho pˇr´ıstroje, kter´ y je d´ıky platformˇe GNU/Linux snadno duplikovateln´ y a umoˇzn ˇuje prov´adˇen´ı test˚ u, jenˇz by byly na fyzick´ ych pˇr´ıstroj´ıch obt´ıˇznˇe nebo v˚ ubec provediteln´e. Autor se snaˇz´ı chov´an´ı VMP maxim´alnˇe pˇribl´ıˇzit fyzick´emu pˇr´ıstroji. Dalˇs´ım krokem je prov´adˇen´ı konkr´etn´ıch experiment˚ u na VMP, jejichˇz v´ ysledky jsou diskutov´any a na jejichˇz z´akladˇe jsou optimalizov´any vybran´e parametry. C´ıle pr´ace smˇeˇruj´ı k hled´an´ı zp˚ usob˚ u vylepˇsen´ı vlastnost´ı st´avaj´ıc´ıch re´aln´ ych PMD. Velk´a ˇca´st pr´ace se zab´ yv´a optimalizac´ı ukl´ad´an´ı archivn´ıch dat. Kl´ıˇcov´a slova: kvalita, virtu´aln´ı pˇr´ıstroj, Linux, komprese, simulace
5
Abstract Main goal of this thesis is developing experimental virtual measuring device, which should be easily duplicateable thanks to GNU/Linux platform. It makes it possible to run tests, that are problematicly or even impossibly executable on real devices. Author mostly tries to make behavior of VMD2 similar to physical ones. In next step, exact experiments on VMD are performed. Results are discused and on their basis, chosen parameters are optimized. Findings aim to find out ways to improve properties of present real PMDs. Majority of work is attended to optimalization of archive data storing. Key words: quality, virtual device, Linux, compression, simulation
2
VMD Virtual Measuring Device ≈ VMP Virtu´aln´ı Mˇeˇric´ı Pˇr´ıstroj
6
Obsah Prohlášení
3
Podˇ ekování
4
Abstrakt
5
1 Úvod
10
2 Teoretický úvod 2.1 Optim´aln´ı metody ukl´ad´an´ı dat v PMD . . . . . . . . . . . . . . . 2.1.1 Obecnˇe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.2 Prov´adˇen´e simulace . . . . . . . . . . . . . . . . . . . . . . . 2.1.3 Testovan´e algoritmy . . . . . . . . . . . . . . . . . . . . . . 2.2 Bezztr´atov´a k´odov´an´ı a kompresn´ı algoritmy aplikovan´e na data kvality elektrick´e energie . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.1 Obecnˇe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.2 Experiment´aln´ı gener´ator mˇeˇren´ ych dat . . . . . . . . . . . . 2.2.3 Testovan´e algoritmy . . . . . . . . . . . . . . . . . . . . . .
. . . .
12 12 12 12 13
. . . .
14 15 15 16
. . . . . . . . . . . . . . . . . . .
17 17 17 18 20 20 23 24 24 24 24 24 25 26 26 27 29 29 30 31
3 Implementace 3.1 Gener´ator archiv˚ u. . . . . . . . . . . . . 3.1.1 Nastaven´ı, spouˇstˇen´ı a v´ ystup . . 3.1.2 Funkce . . . . . . . . . . . . . . . 3.2 Gener´ator vzork˚ u sign´al˚ u. . . . . . . . . 3.2.1 Funkce . . . . . . . . . . . . . . . 3.2.2 Konfiguraˇcn´ı a v´ ystupn´ı soubory 3.3 V´ ypoˇcetn´ı blok . . . . . . . . . . . . . . 3.3.1 Funkce . . . . . . . . . . . . . . . 3.3.2 Soubory nastaven´ı . . . . . . . . 3.3.3 Modifikace portu pro Linux . . . 3.4 Modul komprese . . . . . . . . . . . . . . 3.4.1 Funkce . . . . . . . . . . . . . . . 3.4.2 Mˇeˇren´ı ˇcasu . . . . . . . . . . . . 3.5 Virtu´aln´ı mˇeˇr´ıc´ı pˇr´ıstroj . . . . . . . . . 3.5.1 Souˇcinnost vˇsech modul˚ u. . . . . 3.5.2 Archivy . . . . . . . . . . . . . . 3.5.3 Linuxov´e varianty funkc´ı . . . . . 3.5.4 Makefile . . . . . . . . . . . . . . 3.6 Pomocn´e utility . . . . . . . . . . . . . .
7
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
4 Praktické výsledky 4.1 Optim´aln´ı metody ukl´ad´an´ı dat v PMD . . . . . . . . . . . . . . . . ´ cinnost komprese . . . . . . . . . . . . . . . . . . . . . . . 4.1.1 Uˇ 4.1.2 Rychlost komprese . . . . . . . . . . . . . . . . . . . . . . . 4.1.3 Shrnut´ı Optim´aln´ıch metod ukl´ad´an´ı dat v PMD . . . . . . 4.2 Bezztr´atov´a k´odov´an´ı a kompresn´ı algoritmy aplikovan´e na data kvality elektrick´e energie . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.1 Srovn´an´ı generovan´ ych a re´aln´ ych dat . . . . . . . . . . . . . 4.2.2 Stabilita komprese . . . . . . . . . . . . . . . . . . . . . . . 4.2.3 Vliv k´odov´an´ı . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.4 Vliv velikosti souboru . . . . . . . . . . . . . . . . . . . . . . 4.2.5 Rychlost komprese . . . . . . . . . . . . . . . . . . . . . . . 4.2.6 Shrnut´ı bezztr´atov´eho k´odov´an´ı a kompresn´ıch algoritm˚ u aplikovan´ ych na data kvality elektrick´e energie . . . . . . . . . 4.3 D´ılˇc´ı poznatky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . .
33 33 33 34 35
. . . . . .
36 36 36 37 37 38
. 39 . 39
Závˇ ery a doporuˇ cení
41
Použitá literatura a prameny
43
Nomenklatura
44
Rejstˇrík
45
8
Seznam obrázku˚ 1 2 3 4 5 6 7 8
Blokov´e schema experiment´aln´ıho syst´emu . . . . . . . . . . . . ´ cinnost komprese pro r˚ Uˇ uzn´e velikosti souboru dat . . . . . . . ´ cinnost komprese pro r˚ Uˇ uzn´e hodnoty rozptylov´ ych limit˚ u . . . Vliv mnoˇzstv´ı z´aznam˚ u v archivu na rychlost komprese . . . . . Re´aln´e a generovan´e vzorky napˇet´ı a proudu . . . . . . . . . . . ´ cinnost komprese pˇri norm´aln´ım a delta k´odov´an´ı . . . . . . . Uˇ Ilustrace vlivu velikosti vstupn´ıho souboru na u ´ˇcinnost komprese Srovn´an´ı rychlosti komprese vˇcetnˇe Gzip a Bzip2 . . . . . . . .
9
. . . . . . . .
. . . . . . . .
. . . . . . . .
15 33 34 35 36 37 38 38
1 Úvod PMD neboli Power Monitoring Device je elektronick´e obvykle vestavn´e zaˇr´ızen´ı, slouˇz´ıc´ı k monitorov´an´ı kvality dod´avek elektrick´e energie rozvodn´e s´ıtˇe v m´ıstˇe instalace. Zaˇr´ızen´ı prov´adˇej´ı v´ ypoˇcty, zpracov´avaj´ı a archivuj´ı data, umoˇzn ˇuj´ı vzd´alen´e monitorov´an´ı prostˇrednictv´ım s´ıt’ov´e komunikace a obvykle na displeji zobrazuj´ı ˇz´adan´e veliˇciny. V´ yvoj firmware a testov´an´ı s fyzick´ ym pˇr´ıstrojem je moˇzn´e a bˇeˇznˇe pouˇz´ıvan´e. Je vˇsak nutn´e m´ıt speci´aln´ı jak softwarov´e, tak hardwarov´e vybaven´ı, nemluvˇe o fyzick´em pˇr´ıstroji. Nab´ız´ı se ot´azka: Proˇc nevytvoˇrit nez´avisl´ y, pˇrenositeln´ y model cel´eho mˇeˇric´ıho a monitorovac´ıho ˇretˇezce uvnitˇr naprosto bˇeˇzn´eho ˇ sen´ı t´eto ot´azky se vˇenuje pˇrev´aˇzn´a ˇc´ast pr´ace. Dalˇs´ı ˇc´ast osobn´ıho poˇc´ıtaˇce? Reˇ zmiˇ nuje dosavadn´ı proveden´e praktick´e experimenty na virtu´aln´ım ˇretˇezci. Operaˇcn´ı syst´em GNU/Linux se st´av´a st´ale obl´ıbenˇejˇs´ım nejen na pracovn´ıch stanic´ıch, ale zejm´ena i v nejr˚ uznˇejˇs´ıch embedded zaˇr´ızen´ıch. Pouˇzit´ı OS m´ısto jedno´ uˇcelov´eho kompletn´ıho firmware m´a samozˇrejmˇe svoje v´ yhody. Kromˇe vyˇsˇs´ı spolehlivosti a univerz´alnosti je jimi jistˇe i snazˇs´ı v´ yvoj samotn´ ych aplikac´ı, lepˇs´ı pˇrenositelnost zdrojov´ ych k´od˚ u a ˇsirok´a podpora hardware. Tato skuteˇcnost je v delˇs´ım ˇcasov´em horizontu d˚ uvodem vzniku pr´ace, pˇriˇcemˇz v budoucnu by mohly b´ yt modifikovan´ y v´ ypoˇcetn´ı blok a dalˇs´ı funkce pˇr´ımo pouˇziteln´e v PMD zaloˇzen´ ych na OS Linux. Pr´ace se zab´ yv´a myˇslenkou vytvoˇren´ı virtu´aln´ıho mˇeˇric´ıho pˇr´ıstroje tak, aby bez jak´ ychkoli periferi´ı mohl simulovat bˇeh a chov´an´ı skuteˇcn´eho pˇr´ıstroje. S t´ım souvis´ı potˇreba vytvoˇren´ı programu, kter´ y dok´aˇze generovat vzorky virtu´alnˇe mˇeˇren´eho sign´alu a tak´e programu, kter´ y zpracuje a ukl´ad´a namˇeˇren´e veliˇciny. Kromˇe toho je nutn´e modifikovat hardwarovˇe z´avisl´e funkce v´ ypoˇcetn´ıho bloku, aby byl pˇrenositeln´ y a vyuˇz´ıval funkc´ı OS Linux, pˇr´ıpadnˇe dalˇs´ıch svobodn´ ych knihoven s otevˇren´ ym zdrojov´ ym k´odem. Vˇsechny komponenty je potˇreba vytvoˇrit tak, aby mˇely co nejl´epe nastaviteln´e parametry pro pozdˇejˇs´ı testov´an´ı. Jsou pouˇz´ıv´any bud’ pˇr´ımo konfiguraˇcn´ı soubory ˇcten´e pˇri bˇehu programu, nebo alespoˇ n pˇrep´ınaˇce parametr˚ u ve zdrojov´ ych souborech. Vzhledem k tomu, ˇze s embedded zaˇr´ızen´ımi souvis´ı omezen´e zdroje v´ ykonu, kapacity pamˇeti a pˇrenosov´ ych kan´al˚ u, d˚ uleˇzit´ ym modulem, kter´emu je vˇenov´ana velk´a pozornost, je kompresn´ı blok. Jeho pomoc´ı jsou testov´any r˚ uzn´e bezztr´atov´e kompresn´ı algoritmy pro dosaˇzen´ı optim´alnˇejˇs´ıho vyuˇzit´ı pamˇeti urˇcen´e archivn´ım dat˚ um, jejich n´aroky na v´ ykon procesoru a operaˇcn´ı pamˇet’. Provˇeˇruje se domnˇenka o velk´e redundanci archivn´ıch dat a zjiˇst’uje se vliv nejr˚ uznˇejˇs´ıch struktur vstupn´ıch soubor˚ u a jejich k´odov´an´ı na u ´ˇcinnost komprese. V souvislosti s vytv´aˇren´ım modul˚ u komprese a dvou variant gener´atoru archiv˚ u
10
ˇci vzork˚ u sign´alu vznikly ˇcl´anky na konference EPE3 [8] a CIRED4 [9]. Vysvˇetlen´ı probl´em˚ u, poznatky a v´ ysledky pˇreloˇzen´e do ˇceˇstiny jsou souˇca´st´ı pr´ace. Jsou zde ilustrov´any u ´ˇcinky r˚ uzn´ ych typ˚ u datov´ ych sad na u ´ˇcinnost komprese a mnoho dalˇs´ıch vliv˚ u. V souvislosti s prov´adˇen´ım benchmark˚ u kompresn´ıch metod bylo nutn´e zvolit zp˚ usob mˇeˇren´ı ˇcasu. Je uveden zp˚ usob pouˇzit´ı pˇresn´ ych procesorov´ ych ˇcasovaˇc˚ u s extr´emn´ım rozliˇsen´ım. Veˇsker´ y v´ yvoj prob´ıhal na platformˇe GNU/Linux s v´ yhradn´ım pouˇzit´ım voln´ ych n´astroj˚ u, knihoven, v´ yvojov´eho prostˇred´ı, kompil´atoru jazyka C a dokonce i WYSI5 WYM DTP editoru LYX6 . Nepouˇz´ıv´an´ı placen´eho software je neofici´aln´ım c´ılem cel´e pr´ace a jej´ı obsah a forma snad bude reprezentativn´ım pˇr´ıkladem toho, ˇze nˇeco takov´eho je moˇzn´e.
Electric Power Engineering 2008 http://www.epe-conference.eu/epe2008/files/ partitions2_cz.html 4 International Conference on Electricity Distribution 2009 http://www.cired2009.org/ 5 WYSIWYM — What You See Is What You Mean 6 Rychle se vyv´ıjej´ıc´ı kvalitn´ı DTP software, kter´ y je GUI frontendem LATEXu http://www. lyx.org/
3
11
2 Teoretický úvod 2.1 Optimální metody ukládání dat v PMD Tato ˇca´st pr´ace souvis´ı s tvorbou podklad˚ u a vlastn´ımi poznatky pˇri vytv´aˇren´ı ˇcl´anku na konferenci Electric Power Engineering 2008 (EPE) [8]. 2.1.1 Obecnˇ e Dneˇsn´ı stav evoluce v oblasti standard˚ u elektromagnetick´e kompatibility [2, 5] v m´ıstˇe mˇeˇren´ı definuje kvalitu a jej´ı vlastnosti. Bˇehem mˇeˇren´ı jsou zaznamen´av´any a vyhodnocov´any ukazatele, podle kter´ ych se zjiˇst’uje, zda jsou standardy dodrˇzov´any. Obvykle se jedn´a o dlouhodob´a mˇeˇren´ı, jejichˇz v´ ystupem jsou obrovsk´a mnoˇzstv´ı dat. Jsou specifikov´any r˚ uzn´e intervaly z´aznamu dat [4, 3]. Nejkratˇs´ı interval pro archivaci zde definovan´ y je 150 period. Pokud to uˇzivatel poˇzaduje, je vˇsak moˇzn´e zaznamen´avat i v tak kr´atk´em intervalu, jako 10 cykl˚ u, coˇz odpov´ıd´a 200 ms. Pokud se archivuj´ı i jen z´akladn´ı hodnoty, nen´ı probl´em, aby bˇehem dne archiv dos´ahl velikosti stovek MB. Vzhledem k mezin´arodn´ım standard˚ um a k obecn´ ym vlastnostem energetick´e s´ıtˇe se d´a oˇcek´avat, ˇze mezi mˇeˇren´ ymi parametry budou pouze mal´e fluktuace a ˇze v archivech bude vysok´ y stupeˇ n redundance. Pro kompaktn´ı mˇeˇric´ı pˇr´ıstroj se slabou konektivitou to znamen´a mnoho dat, kter´a mus´ı b´ yt neust´ale zpracov´av´ana a ukl´ad´ana. M´edi´ı existuje cel´a ˇrada, ale v pˇr´ıpadˇe PMD jsou data obvykle ukl´ad´ana do vnitˇrn´ı pamˇeti v surov´e bin´arn´ı podobˇe pomoc´ı suboptim´aln´ıch k´odov´an´ı pro kaˇzdou veliˇcinu. S rostouc´ım objemem mˇeˇren´ ych veliˇcin a se zkracov´an´ım interval˚ u archivace se poˇzadavky na vnitˇrn´ı pamˇet’ a propustnost pˇripojen´ı obrovsky zvyˇsuj´ı. Jednoduch´ ym ˇreˇsen´ım je zv´ yˇsen´ı u ´loˇzn´e kapacity. Je pravda, ˇze vzhledem k neust´al´emu sniˇzov´an´ı cen flash disk˚ u to nen´ı probl´em, avˇsak existuj´ı i nev´ yhody, jako tˇreba pomal´e stahov´an´ı dat nebo dlouh´a doba odezvy pˇr´ıstroje a oper´atorsk´eho PC pˇri vz´ajemn´e komunikaci, protoˇze se pˇren´aˇs´ı v´ıce byt˚ u, neˇz je nutn´e. Redundantn´ı data mohou b´ yt tak´e ukl´ad´ana a odes´ıl´ana v komprimovan´e podobˇe pomoc´ı bezztr´atov´e nebo dokonce i ztr´atov´e komprese. R˚ uzn´e komprimaˇcn´ı algoritmy v kombinaci s optim´aln´ım k´odov´an´ım veliˇcin sniˇzuj´ı n´aroky na velikost pamˇeti a zrychluj´ı proces z´ısk´av´an´ı dat k dalˇs´ımu zpracov´an´ı nebo vzd´alen´emu monitoringu. Kromˇe jin´eho m´a vliv i r˚ uzn´ y zp˚ usob ukl´ad´an´ı dat ve smyslu jejich v´ yhodnˇejˇs´ıho uspoˇra´d´an´ı. 2.1.2 Provádˇ ené simulace Surov´a data sledovan´ ych veliˇcin typicky nemaj´ı velk´ y rozptyl, coˇz znamen´a, ˇze obsahuj´ı vysoce redundantn´ı blok symbol˚ u a hodnot optim´aln´ıch pro kompresi. Vˇenu-
12
jeme se efekt˚ um nˇekter´ ych zmˇen ve struktuˇre zmiˇ novan´eho bloku dat vzhledem ku ´ˇcinnosti z´akladn´ıch veˇrejnˇe dostupn´ ych kompresn´ıch algoritm˚ u. Pro experimenty a srovn´an´ı u ´ˇcinnosti komprese jsme vyvinuli n´astroj, kter´ y umoˇzn ˇuje mˇenit nˇekter´e kl´ıˇcov´e faktory v archivu komprimovan´ ych dat. Testuje se vliv typu k´odov´an´ı a nastaven´ı archivu, seˇrazen´ı dat, kvality a intervalu archivace. Variace bloku veliˇcin jsou prov´adˇeny na z´akladˇe re´aln´eho PMD. Jsou obsaˇzeny vˇsechny bˇeˇznˇe monitorovan´e hodnoty jako napˇet´ı, proudy, v´ ykony a energie, harmonick´e sloˇzky a nˇekolik dalˇs´ıch v tomto pˇr´ıpadˇe nepodstatn´ ych z´aznam˚ u dle funkc´ı re´aln´eho pˇr´ıstroje. Kaˇzd´a veliˇcina je generov´ana v nastaviteln´em k´odov´an´ı a s parametrizovateln´ ymi rozptyly. 2.1.3 Testované algoritmy Pro experiment´aln´ı mˇeˇren´ı pouˇz´ıv´ame bˇeˇznˇe dostupn´e entropick´e a slovn´ıkov´e algoritmy, jejichˇz zdrojov´ y k´od v ANSI C m˚ uˇze b´ yt lehce z´ısk´an, je ovˇeˇren´ y a m˚ uˇze b´ yt znovupouˇzit d´ıky veˇrejn´e licenci. D˚ uleˇzit´ ym faktorem pˇri v´ ybˇeru byla skuteˇcnost budouc´ıho pouˇzit´ı v embedded zaˇr´ızen´ı na b´azi mikrokontrol´eru ARM s velmi limitovan´ ymi zdroji. Tato skuteˇcnost diskvalifikovala nˇekter´e pokroˇcilejˇs´ı ale pamˇet’ovˇe a v´ ypoˇcetnˇe n´aroˇcnˇejˇs´ı varianty LZ jako gzip nebo bzip2. Run Length Encoding — RLE RLE je jedn´ım z nejjednoduˇsˇs´ıch algoritm˚ u, jehoˇz princip spoˇc´ıv´a v nahrazen´ı opakuj´ıc´ı se sekvence byt˚ u v souboru vyhrazen´ ym znakem a ˇc´ıslem ud´avaj´ıc´ım poˇcet opakov´an´ı. Tento princip pˇres svou jednoduchost dosahuje zaj´ımav´ ych v´ ysledk˚ u u dat s mnoˇzstv´ım opakuj´ıc´ıch se byt˚ u (je obsaˇzen v mnoha grafick´ ych form´atech). jednoduch´ a a extr´emnˇe rychl´a komprese s minim´aln´ımi n´aroky na pamˇet’ t´emˇeˇr zbyteˇcn´e v netrivi´ aln´ıch situac´ıch
Shannon-Fano encoding — SF, Huffman Encoding — HUF Tyto algoritmy jsou pˇredstaviteli kategorie entropick´ ych kod´er˚ u. Princip obou metod [7] spoˇc´ıv´a v enk´odov´an´ı byt˚ u do bitov´ ych stream˚ u. Na z´akladˇe mnoˇzstv´ı v´ yskyt˚ u kaˇzd´eho znaku je uˇsetˇrena pamˇet’ zak´odov´an´ım znak˚ u s nejvyˇsˇs´ım zastoupen´ım pomoc´ı nejkratˇs´ıho bitov´eho k´odu. Oba k´ody pouˇz´ıvaj´ı takzvan´ y histogram pravdˇepodobnosti, nebo tak´e bitov´ y strom, kter´ y je nutn´e uloˇzit na zaˇc´atek zkomprimovan´eho souboru. Existuj´ı optimalizace snaˇz´ıc´ı se zjednoduˇsit kompresi a odstranit potˇrebu v´ıce pr˚ uchod˚ u, kdy se bin´arn´ı strom rekonstruuje za bˇehu. SF a HUF nedok´aˇz´ı rozliˇsovat sekvence stejn´ ych symbol˚ u. Z´akladn´ı pouˇzit´e verze algoritm˚ u se liˇs´ı ve zp˚ usobu stavby k´odovac´ı tabulky/stromu. Zat´ımco SF rekurzivnˇe dˇel´ı soubor znak˚ u, HUF buduje strom opaˇcnˇe — spojuje
13
vˇetve s nejniˇzˇs´ım v´ yskytem. Oba algoritmy jsou sice podobnˇe sloˇzit´e, HUF m´a vˇsak obvykle lepˇs´ı v´ ysledky, protoˇze jeho bin´arn´ı k´odov´an´ı je optim´aln´ı. rychl´e, optim´ aln´ı komprese jednotliv´ ych znak˚ u u ´ˇcinn´e i u zaˇsumˇen´ ych dat mal´e pamˇet’ov´e n´ aroky, jednoduch´a, jasn´a implementace nepˇr´ıliˇs u ´ˇcinn´e pro mal´e mnoˇzstv´ı dat
Lempel-Ziv — LZ77 LZ77 je reprezentantem kategorie slovn´ıkov´ ych algoritm˚ u, kter´ y posouv´a d´ale ideu RLE a HUF pomoc´ı komprese opakuj´ıc´ıch se sekvenc´ı (r˚ uzn´ ych) symbol˚ u. Pokud naraz´ı na sekvenci, kter´a se jiˇz dˇr´ıve vyskytla, zanech´a na m´ıstˇe pouze odkaz na minul´ y v´ yskyt a d´elku identick´e sekvence. Mnoho existuj´ıc´ıch variant se liˇs´ı zp˚ usobem v´ ystavby slovn´ıku, pˇriˇcemˇz cel´a ˇrada vylepˇsen´ ych a upraven´ ych verz´ı je chr´anˇena patenty. LZ algoritmus je univerz´ aln´ı (dobr´a u ´ˇcinnost na jak´ ychkoli datech) optim´ aln´ı pro kompresi textu umoˇzn ˇuje snadnou a velice rychlou dekompresi vyˇsˇs´ı n´aroky na pamˇet’, pomal´e
Lempel-Ziv-Oberhumer — LZO, MiniLZO LZO je vysoce optimalizovan´a varianta LZ algoritmu [10], kter´a dosahuje mnohem vyˇsˇs´ıch rychlost´ı komprese za cenu m´ırn´eho sn´ıˇzen´ı u ´ˇcinnosti. Testovan´a varianta MiniLZO je bin´arnˇe kompatibiln´ı algoritmus, avˇsak bere v u ´vahu omezen´e v´ ykonov´e a pamˇet’ov´e zdroje embedded zaˇr´ızen´ı. velice dobr´ y kompresn´ı pomˇer u vysoce redundantn´ıch dat rychlejˇs´ı komprese i dekomprese v porovn´ an´ı s LZ stˇredn´ı pamˇet’ov´e n´aroky, voliteln´e mnoˇzstv´ı pˇridˇelen´e pamˇeti
2.2 Bezztrátová kódování a kompresní algoritmy aplikované na data kvality elektrické energie N´asleduj´ıc´ı sekce vznikala v souvislosti s prezentac´ı ˇcl´anku na International Conference on Electricity Distribution 2009 v Praze (CIRED) [9].
14
Visualization Generator gen.conf
Data processing
Archive generation
Compression
Compressed outputs Statistical data
ArcConfig.xml
Obr´azek 1: Blokov´e schema experiment´aln´ıho syst´emu 2.2.1 Obecnˇ e V dalˇs´ı ˇca´sti pr´ace jsme zmˇenili pˇr´ıstup k prov´adˇen´ı experiment˚ u, avˇsak d˚ uvody a c´ıle se neliˇs´ı od tˇech popisovan´ ych v sekci 2.1.1. Opˇet jsme prov´adˇeli testy s c´ılem provˇeˇrit chov´an´ı r˚ uzn´ ych kompresn´ıch algoritm˚ u pˇri kompresi r˚ uzn´ ych typ˚ u dat s r˚ uzn´ ym sloˇzen´ım a r˚ uzn´ ymi vlastnostmi. Pro tento u ´ˇcel jsme nejdˇr´ıve z´ıskali re´aln´ y archiv mˇeˇren´ı. Kromˇe toho jsme vytvoˇrili modul´arn´ı syst´em v prostˇred´ı GNU/Linux umoˇzn ˇuj´ıc´ı generovat virtu´aln´ı sadu napˇet´ı a proud˚ u s velice jemn´ ymi moˇznostmi nastaven´ı tak, abychom se mohli maxim´alnˇe pˇribl´ıˇzit re´aln´emu mˇeˇren´ı. Gener´ator byl pouˇzit pro pˇr´ıpravu dat urˇcen´ ych k vytv´aˇren´ı archiv˚ u, na nichˇz m˚ uˇzeme d˚ ukladnˇeji studovat efektivitu a stabilitu kompresn´ıch algoritm˚ u. 2.2.2 Experimentální generátor mˇ eˇrených dat Pro u ´ˇcel vytv´aˇren´ı dat kvality elektrick´e energie jsme vyvinuli vlastn´ı modul´arn´ı syst´em viz obr. (1), kter´ y simuluje funkci PMD v re´aln´em svˇetˇe. Pˇredstaven´ y syst´em se skl´ad´a z gener´atoru vzork˚ u, virtu´aln´ıho bloku v´ ypoˇctu kvality, archivace dat a kompresn´ı jednotky. Kaˇzd´ y z modul˚ u m˚ uˇze b´ yt nahrazen jinou implementac´ı tak, aby nab´ızel data s jin´ ymi veliˇcinami a parametry. Pro generov´an´ı sign´al˚ u jsme pouˇzili synt´ezu ze sloˇzek, u nichˇz je moˇzn´e jednotlivˇe nastavit napˇet´ı, f´azi, frekvenci a odchylku, kter´a ovlivˇ nuje jejich n´ahodn´e kol´ıs´an´ı. Generovan´ y sign´al je kromˇe toho i promˇenn´ y v ˇcase. Skl´ad´a se z interval˚ u se stejn´ ymi statistick´ ymi vlastnostmi s dan´ ym poˇctem opakov´an´ı. Parametry kaˇzd´eho intervalu vzork˚ u mohou b´ yt modifikov´any jednoduˇse nastaven´ım v odpov´ıdaj´ıc´ı ˇca´sti konfiguraˇcn´ıho souboru (v´ ychoz´ı je gen.conf ). Kaˇzd´ y kan´al (f´aze) m˚ uˇze b´ yt generov´ana naprosto nez´avisle na ostatn´ıch se svoj´ı sadou parametr˚ u. Celkov´a vzorkovac´ı frekvence, interval generov´an´ı, datov´ y typ vzork˚ u a mnoˇzstv´ı generovan´ ych dat je opˇet nastaviteln´e pˇri kaˇzd´em generov´an´ı. Vygenerovan´a bin´arn´ı data namˇeˇren´ ych“ vzork˚ u jsou d´ale zpracov´ana pomoc´ı ” v´ ypoˇcetn´ıho bloku, kter´ y simuluje re´aln´ y PMD, zpracov´av´a v´ ysledky a jeho v´ ystupem jsou data veliˇcin v r˚ uzn´em k´odov´an´ı a r˚ uzn´ ych datov´ ych typech. Implementace umoˇzn ˇuje prov´est simulaci mˇeˇren´ı kvality elektrick´e energie ze stejn´ ych dat a z´ıskat
15
r˚ uzn´e v´ ysledky ve v´ıce form´atech. Data z´ıskan´a v tomto kroku jsou v´ ychoz´ım bodem pro prov´adˇen´ı test˚ u s bezztr´atov´ ymi kompresn´ımi algoritmy. Posledn´ı blok je urˇcen ke kompresi vygenerovan´ ych archiv˚ u pomoc´ı voln´ ych, bez jak´ehokoli poplatku dostupn´ ych, kompresn´ıch metod — RLE, variant LZ, nˇekolika entropick´ ych algoritm˚ u, aritmetick´eho k´odov´an´ı a blokovˇe tˇr´ıd´ıc´ıch gzip a bzip2. V´ ysledky experiment˚ u jsou porovn´av´any ve smyslu vyuˇzit´ı pamˇeti, d´elky v´ ypoˇctu, sloˇzitosti implementace a zejm´ena dle dosaˇzen´eho kompresn´ıho pomˇeru. 2.2.3 Testované algoritmy Opˇet jsme pouˇzili skupinu volnˇe a zdarma dostupn´ ych algoritm˚ u, popisovan´ ych v (2.1.3). Doˇslo vˇsak k rozˇs´ıˇren´ı t´eto skupiny o nˇekolik dalˇs´ıch, pro n´as zaj´ımav´ ych, kompresn´ıch metod. Jako dalˇs´ı alternativa existuje mnoˇzstv´ı ztr´atov´ ych metod, kter´e se tak´e prakticky implementuj´ı, jako napˇr´ıklad PQZIP, jenˇz je v patentov´em ˇr´ızen´ı. V naˇsich experimentech tyto nepouˇz´ıv´ame, protoˇze u nich vˇzdy doch´az´ı k urˇcit´e deformaci dat a ztr´atˇe informace. Porovn´av´an´ı v´ ysledk˚ u by tedy bylo daleko obt´ıˇznˇejˇs´ı, kdyˇz by se pokaˇzd´e mohla v´ ysledn´a data liˇsit. Aritmetická komprese — AC Aritmetick´a komprese patˇr´ı do skupiny entropick´ ych metod, kter´a produkuje t´emˇeˇr optim´aln´ı v´ ystup (lepˇs´ı, neˇz HUF) na dan´e skupinˇe symbol˚ u. AR je efektivn´ı pˇri kompresi dat, kde mal´e mnoˇzstv´ı symbol˚ u mnoˇzstv´ım v´ yskytu pˇrevaˇzuje nad zbytkem. nejoptim´alnˇejˇs´ı testovan´ y entropick´ y algoritmus niˇzˇs´ı rychlost oproti SF, HUF, podobn´a pamˇet’ov´a n´aroˇcnost
Blokovˇ e orientované algoritmy — bzip2, gzip Bzip2 i gzip jsou relativnˇe modern´ı a velice efektivn´ı algoritmy. Bzip2 vyuˇz´ıv´a kromˇe jin´eho blokov´e tˇr´ıdˇen´ı zn´am´e jako Burrows-Wheeler transformace. Gzip je pro zmˇenu postaven na DEFLATE algoritmu, pouˇz´ıvan´em v jin´e podobˇe v mnoha patentovan´ ych algoritmech. Gzip patˇr´ı pˇr´ımo do projektu GNU. Nejedn´a se o jednoduch´e algoritmy, ale o nˇekolikavrstv´e pomˇernˇe sloˇzit´e techniky vyuˇz´ıvaj´ıc´ı RLE, BWT7 , MTF8 , HUF, delta k´odov´an´ı ˇci LZ779 . vysoce univerz´ aln´ı a u ´ˇcinn´e vysoce n´aroˇcn´e na pamˇet’ i v´ ypoˇcetn´ı v´ ykon Burrows-Wheeler transformace Move to front 9 Abraham Lempel a Jacob Ziv v roce 1977 7 8
16
3 Implementace Pro v´ yvoj vˇsech modul˚ u i jedno´ uˇcelov´ ych program˚ u byl pouˇzit svobodn´ y, nekomerˇcn´ı software. Pouˇz´ıvan´ y operaˇcn´ı syst´em je linuxov´a distribuce Ubuntu, kter´a vych´az´ı z jedn´e z nejstarˇs´ıch a nejrozˇs´ıˇrenˇejˇs´ıch distribuˇcn´ıch vˇetv´ı v˚ ubec — Debianu. Zdrojov´e soubory jsou vˇsak pˇreloˇziteln´e na jak´emkoli GNU/Linux syst´emu. Bin´arn´ı soubory jsou vytv´aˇreny kompil´atorem GCC10 spouˇstˇen´ ym prostˇrednictv´ım programu 11 make dle z´avislost´ı popsan´ ych v souborech Makefile, kter´e jsou vytvoˇreny pro jednotliv´e projekty. Jako v´ yvojov´e prostˇred´ı bylo zvoleno opensource IDE NetBeans, kter´e p˚ uvodnˇe vzniklo jako v´ yvojov´e prostˇred´ı pro jazyk Java, pozdˇeji vˇsak zaˇcaly pˇrib´ yvat dalˇs´ı podporovan´e jazyky (vˇcetnˇe C/C++). Kromˇe pˇrekl´adan´ ych 12 soubor˚ u jsou vyuˇz´ıv´any i skripty v jazyce BASH , kter´e se pouˇz´ıvaj´ı k automatizaci spouˇstˇen´ı specifick´ ych sad test˚ u. Pouze v jednom pˇr´ıpadˇe je pouˇzit vlastn´ı form´at konfiguraˇcn´ıho souboru, pro nˇejˇz je souˇc´ast´ı programu jednoduch´ y parser. Mezi ne u ´plnˇe bˇeˇzn´e knihovny, kter´e jsou nutn´e pro pˇreloˇzen´ı nˇekter´ ych zdro13 jov´ ych soubor˚ u, patˇr´ı knihovna pro v´ ypoˇcet DFT libfftw3 a knihovna pro pr´aci s XML libxml214 .
3.1 Generátor archivu˚ Gener´ator archiv˚ u je prvn´ım programem vytv´aˇren´ ym za u ´ˇcelem generov´an´ı dat urˇcen´ ych k benchmarku kompresn´ıch algoritm˚ u. Jedn´a se o jedno´ uˇcelov´ y program, vytv´aˇrej´ıc´ı pomoc´ı generov´an´ı pseudon´ahodn´ ych ˇc´ısel s dan´ ymi rozptyly a parametry archivy dat se strukturou odpov´ıdaj´ıc´ı archiv˚ um vytv´aˇren´ ym re´aln´ ymi PMD. 3.1.1 Nastavení, spouštˇ ení a výstup Pˇr´ımo ve zdrojov´em k´odu je d´ana struktura generovan´ ych archiv˚ u a pˇreddefinovan´e ˇ odchylky jednotliv´ ych veliˇcin, pˇri jejichˇz urˇcov´an´ı jsme vych´azeli z normy CSN EN 50160 [1]. Volbou parametr˚ u v shellu pˇri spouˇstˇen´ı programu ./DataProKompresi m˚ uˇzeme vˇsak volit, zda se maj´ı generovat integer hodnoty, float hodnoty a harmonick´e, zda se veliˇciny maj´ı ukl´adat prokl´adanˇe nebo s´eriovˇe a zda poˇzadujeme delta k´odov´an´ı. D´ale je moˇzn´e zadat glob´aln´ı rozptyly vˇsech veliˇcin a glob´aln´ı pravdˇepodobnosti vˇsech veliˇcin. V takov´em pˇr´ıpadˇe se pevnˇe dan´e hodnoty z programu nahrad´ı zadan´ ymi parametry. Posledn´ı volbou je moˇznost po vygenerov´an´ı archivu okamˇzitˇe spustit kompresi, coˇz je v´ yhodn´e pro d´avkov´e spouˇstˇen´ı des´ıtek test˚ u. Jednotliv´e GNU C Compiler, pozdˇeji GNU Compiler Collection http://gcc.gnu.org/ GNU Make http://www.gnu.org/software/make/ 12 Bourne Again SHell - BASH http://www.gnu.org/software/bash/ 13 http://www.fftw.org/ 14 http://xmlsoft.org/ 10
11
17
V´ ypis 1 Nutn´e parametry vypsan´e gener´atorem archiv˚ u v@r:~/src/komprese$ ./DataProKompresi Nutne ciselne argumenty oddelene mezerou: Pocet celych opakovani Pocet vnitrnich opakovani Generovat float hodnoty (1/0) Generovat integer hodnoty (1/0) Generovat harmonicke (1/0) Generovat s delta kodovanim (1/0) Ihned komprimovat (1/0) Spolecna odchylka (>10000 -> neuplatni se) Spolecna pravdepodobnost (>10000 -> neuplatni se) v@r:~/src/komprese$
V´ ypis 2 Pˇr´ıklad spuˇstˇen´ı gener´atoru archiv˚ u v@r:~/src/komprese$ ./DataProKompresi 1 300 1 1 1 1 1 500 9500 Generuji data do souboru data-1-300-1-1-1-1-500-9500.bin. . Hotovo. Bez chyb. ./komprese data-1-300-1-1-1-1-500-9500.bin log-1-300-1-1-1-1-500-9500.txt BezLZSlow RLE t 0.000903 s in 101.180 kB out 95.822 kB ratio 94.7 % speed 112047.610 kB/s v@r:~/src/komprese$
volby tak, jak je vyp´ıˇse gener´ator pˇri nespr´avn´em zad´an´ı, jsou shrnuty ve v´ ypisu (1). V´ ystupem gener´atoru je bin´arn´ı soubor pojmenovan´ y data s n´asledn´ ym v´ ypisem vˇsech parametr˚ u oddˇelen´ ych pomlˇckou. Pˇr´ıpona souboru je .bin. Jako pˇr´ıklad m˚ uˇzeme uv´est vygenerov´an´ı pˇribliˇznˇe 100 kB souboru se s´eriov´ ym ˇrazen´ım veliˇcin, ukl´ad´an´ım pomoc´ı delta k´odov´an´ı a obsaˇzen´ ymi integer i float hodnotami vˇcetnˇe harmonick´ ych. V´ ystup se bude ihned komprimovat. Vˇsechna generovan´a data maj´ı spoleˇcnou dovolenou odchylku 5 % v 95-ti procentech hodnot. Z v´ ypisu (2) je zˇrejm´e, ˇze rozptyl a pravdˇepodobnost je zad´ana v setin´ach procenta. D˚ uvodem je zjednoduˇsen´ı v´ ypoˇct˚ u pˇri pouˇzit´ı celoˇc´ıseln´e hodnoty a zjemnˇen´ı moˇzn´e volby. Ve v´ ypisu je zahrnuta i ˇc´ast v´ ystupu navazuj´ıc´ı komprese. Ve skuteˇcnosti pokraˇcuj´ı informace o bˇehu dalˇs´ıch algoritm˚ u. 3.1.2 Funkce Pˇri spuˇstˇen´ı programu jsou naˇcteny parametry do vnitˇrn´ıch promˇenn´ ych, aby n´aslednˇe mohly ovlivnit poˇcty bˇeh˚ u vnitˇrn´ıch a celkov´ ych cykl˚ u. Poˇcet cel´ych opakov´an´ı jednoduˇse vygeneruje za sebe ˇza´dan´ y poˇcet archiv˚ u. Naopak poˇcet vnitˇrn´ıch opakov´an´ı ovlivˇ nuje poˇcet zapsan´ ych hodnot stejn´e veliˇciny s´eriovˇe za sebou. Hodnota parametr˚ u Generovat float hodnoty, Generovat integer hodnoty a Generovat harmonick´e jednoduˇse povoluj´ı nebo zakazuj´ı z´apis veliˇcin s vybran´ ym datov´ ym typem, respektive pˇrid´avaj´ı ˇci zakazuj´ı harmonick´e. Pokud nastav´ıme parametr Generovat
18
s delta k´odov´an´ım na 1, pˇri prvn´ım z´apisu je kaˇzd´a veliˇcina uloˇzena nativnˇe a jej´ı aktu´aln´ı hodnota se zachov´av´a v pamˇeti, v dalˇs´ım bˇehu je uloˇzen rozd´ıl aktu´aln´ı od pˇredchoz´ı hodnoty a pˇredchoz´ı hodnota je aktualizov´ana. Pokud povol´ıme Ihned komprimovat, vygenerovan´ y soubor je okamˇzitˇe pˇred´an pro kompresi i se spr´avnˇe zadan´ ymi parametry vstupn´ıho a logovac´ıho souboru, kter´e logicky koresponduj´ı s n´azvem generovan´eho souboru, tedy i se zadan´ ymi parametry. Srdcem gener´atoru je funkce vytv´aˇrej´ıc´ı pseudon´ahodnou hodnotu dle pˇredan´ ych parametr˚ u viz v´ ypis (3). Jsou ji celoˇc´ıselnˇe pˇred´any parametry ide´aln´ı hodnota, odchylka, pravdˇepodobnost a n´asobek. Ide´aln´ı hodnota zhruba odpov´ıd´a hodnotˇe konkr´etn´ı veliˇciny mˇeˇren´e v s´ıti re´aln´ ym PMD. Protoˇze vˇsak napˇr´ıklad proudy ˇci napˇet´ı v z´akladn´ıch jednotk´ach nejsou vhodn´e pro pouˇzit´e datov´e typy, v PMD se ukl´adaj´ı vyn´asoben´e dan´ ymi konstantami, d´ıky ˇcemuˇz je kromˇe optim´alnˇejˇs´ıho vyuˇzit´ı datov´eho typu moˇzn´e vyhnout se v´ ypoˇcetnˇe n´aroˇcn´emu pouˇz´ıv´an´ı datov´ ych typ˚ u s plovouc´ı ˇra´dovou ˇca´rkou. Posledn´ı parametr nasobek pˇreb´ır´a zm´ınˇenou pˇrevodn´ı konstantu. Hned za deklarac´ı lok´aln´ıch promˇenn´ ych je s n´ı vyn´asobena ide´aln´ı hodnota tak, aby odpov´ıdala form´atu uloˇzen´ı v archivu. Druh´ y a tˇret´ı parametr ovlivˇ nuje statistick´e rozloˇzen´ı pseudon´ahodn´ ych ˇc´ısel. Glob´aln´ı nastaven´ı odchylky a pravdˇepodobnosti m´a pˇrednost pˇred hodnotami dan´ ymi normou. Pokud jsou glob´aln´ı parametry nastaveny (menˇs´ı neˇz 1000 ≈ 100 %), jsou jimi pˇreps´any pevnˇe dan´e hodnoty a d´ale se poˇc´ıt´a pouze s nimi. N´asleduj´ıc´ı ˇca´st do doˇcasn´e promˇenn´e uloˇz´ı bud’ ide´aln´ı hodnotu v pˇr´ıpadˇe, ˇze je zad´ana nulov´a odchylka, pseudon´ahodn´e ˇc´ıslo v mez´ıch dan´ ych odchylkou nebo u ´plnˇe n´ahodn´e ˇc´ıslo, kter´e m˚ uˇze nab´ yvat jak´ekoli hodnoty v rozsahu typu unsigned short. Nakonec je promˇenn´a nahoda typovˇe konvertov´ana a vr´acena jako n´avratov´a hodnota funkce. Pseudon´ahodn´e ˇc´ıslo v dan´ ych mez´ıch je v pouˇzit´e implementaci z´ısk´ano jako nahoda = ideal · 1 +
x 10000
,
(1)
kde pro n´ahodn´e x plat´ı − odchylka < x < odchylka
(2)
a odchylka je parametr v rozsahu 0 < odchylka < 10000 .
19
(3)
V´ ypis 3 Funkce generov´an´ı pseudon´ahodn´eho cel´eho ˇc´ısla unsigned short RandomInt(int ideal, int odchylka, int pravd, int nasobek) { float nahoda; unsigned short hodnota; ideal *= nasobek; if (OdchylkaGlob <= 10000) odchylka = OdchylkaGlob; if (PravdGlob <= 10000) pravd = PravdGlob; if (odchylka == 0) nahoda = ideal; else if ((rand() % 100) < pravd) nahoda = ideal + (rand() % (2 * ideal * odchylka) - ideal * odchylka) / 10000; else nahoda = rand() / nasobek; hodnota = (unsigned short) nahoda; return hodnota; }
3.2 Generátor vzorku˚ signálu˚ Gener´ator vzork˚ u sign´al˚ u je prvn´ım a z´akladn´ım modulem VMP. Vˇse ostatn´ı uˇz v nˇejak´e podobˇe existovalo a pro naˇse pouˇzit´ı bylo tˇreba pouze upravit, pˇr´ıpadnˇe doplnit ˇci vymˇenit nˇekter´e funkce. S kvalitou a vˇerohodnost´ı generovan´ ych sign´al˚ u stoj´ı a pad´a v´ yznam a funkˇcnost cel´eho VMP. Z toho vypl´ yv´a, ˇze modul gener´atoru sign´al˚ u je kl´ıˇcovou ˇca´st´ı cel´e pr´ace. Nejvˇetˇs´ı d˚ uraz byl kladen na univerz´alnost a konfigurovatelnost jeho chov´an´ı. Pr´avˇe proto byla zvolena cesta vytvoˇren´ı speci´aln´ıho konfiguraˇcn´ıho souboru, jehoˇz moˇznosti budou d´ale vysvˇetleny. P˚ uvodn´ı myˇslenkou bylo vytv´aˇren´ı sign´al˚ u ze zadan´ ych harmonick´ ych (ale moˇzno i neharmonick´ ych) sloˇzek, ˇc´ımˇz je moˇzn´e vytvoˇrit teoreticky libovoln´ y sign´al. Pozdˇeji bylo nutn´e rozˇs´ıˇrit sign´aly o n´ahodn´e sloˇzky, kter´e jsou takt´eˇz zad´av´any v konfiguraˇcn´ım souboru. Poˇcet promˇenn´ ych mus´ı b´ yt voliteln´ y, sign´al mus´ı m´ıt moˇznost b´ yt v ˇcase promˇenn´ y, mus´ı b´ yt moˇzn´e nastavit mnoˇzstv´ı generovan´ ych dat po cel´ ych intervalech, mus´ı b´ yt moˇzn´e nastavit vzorkovac´ı frekvenci, mus´ı b´ yt moˇzn´e nastavit datov´ y typ generovan´ ych vzork˚ u, mus´ı b´ yt moˇzn´e prohl´ednout si ˇcasov´ y pr˚ ubˇeh sign´alu — to vˇse bylo tˇreba splnit v z´ajmu zachov´an´ı univerzality. 3.2.1 Funkce Program se spouˇst´ı s jedn´ım parametrem, kter´ ym je cesta ke konfiguraˇcn´ımu souboru. Funkce main() obsahuje pouze vol´an´ı nˇekolika funkc´ı: y konfiguraˇcn´ı soubor a nastav´ı promˇenn´e max in nejdˇr´ıve test conf() projde cel´ tervalu, max prom, max harm, datatype, delka inter, opakovani, fv, blok, verbose a octave, jejichˇz n´azev je vˇetˇsinou samovysvˇetluj´ıc´ı. fv obsahuje naˇctenou vzorkovac´ı frekvenci, blok je poˇcet period v jednom bloku dat (jednom souboru), verbose nastavuje mnoˇzstv´ı v´ ypis˚ u a informac´ı a octave je pˇrep´ınaˇc pro vyps´an´ı prvn´ıch nˇekolika vzork˚ u do souboru vhodn´eho ke zpracov´a-
20
n´ı pomoc´ı Octave15 . Pˇri parsov´an´ı souboru jsou detekov´any z´akladn´ı chyby v syntaxi. Pˇri jejich objeven´ı program skonˇc´ı, vyp´ıˇse neoˇcek´avan´ y znak a jeho pozici. Pokud verbose > 0, vypis info() vyp´ıˇse do termin´ alu promˇenn´e naˇcten´e pˇred-
choz´ı funkc´ı. Nyn´ı se pomoc´ı knihovn´ı funkce malloc() alokuje pamˇet’ pro pole seznam
a parametry. seznam je pole struktur INTERVAL a parametry je pole struktur HARMONICKA. Detailn´ı popis pozdˇeji. y konfiguraˇcn´ı soubor. load param() projde podobnˇe jako test conf() znovu cel´ Tentokr´at ale mnohem podrobnˇeji, protoˇze postupnˇe naˇc´ıt´a nastaven´e parametry a pln´ı jimi pole seznam a parametry. Pokud verbose > 0, vypis param() vyp´ıˇse do termin´alu vˇsechny naˇcten´e parame-
try. To m´a smysl pouze pˇri ladˇen´ı, protoˇze re´aln´ y konfiguraˇcn´ı soubor obsahuje stovky aˇz tis´ıce harmonick´ ych. generuj() je nejsloˇzitˇejˇs´ı ze vˇsech funkc´ı v gener´ atoru. Podrobnˇejˇs´ı popis d´ale. Nakonec se pouze korektnˇe uvoln´ı alokovan´e m´ısto a pokud nedoˇslo k ˇza´dn´e
chybˇe, program skonˇc´ı s klasickou n´avratovou hodnotou 0. Struktury INTERVAL a HARMONICKA jsou pouˇzity pro naˇcten´ı vˇsech parametr˚ u sloˇzek sign´al˚ u z konfiguraˇcn´ıho souboru. Jejich definice je uvedena ve v´ ypisu (4). INTERVAL obsahuje informaci o poˇctu opakov´an´ı sign´alu popsan´eho v konfiguraˇcn´ım souboru jedn´ım blokem parametr˚ u, pointer na prvn´ı odpov´ıdaj´ıc´ı strukturu HARMONICKA v poli parametry, poˇcet promˇenn´ ych neboli sign´al˚ u a nejvˇetˇs´ı poˇcet sloˇzek jednoho sign´alu. Struktura HARMONICKA potom obsahuje amplitudu, frekvenci, f´azi a maxim´aln´ı odchylku od zadan´e amplitudy pro kaˇzdou sloˇzku kaˇzd´eho sign´alu v kaˇzd´em intervalu. Posledn´ı poloˇzka platnost obsahuje informaci o tom, zda je konkr´etn´ı sloˇzka v konfiguraˇcn´ım souboru definov´ana. Pokud ne, pˇri v´ ypoˇctu vzorku se sloˇzka nebere v u ´vahu. Funkce generuj() kromˇe pol´ı seznam a parametry, vˇsech promˇenn´ ych doposud naˇcten´ ych z konfiguraˇcn´ıho souboru a nˇekolika iteraˇcn´ıch lok´aln´ıch promˇenn´ ych, obsahuje i dvourozmˇern´e pole typu double, kter´e je pouˇz´ıv´ano pro ukl´ad´an´ı odchylkov´ ych koeficient˚ u, kter´e se musej´ı v z´ajmu podobnosti s realitou mˇenit po n´ahodn´em poˇctu vzork˚ u na n´ahodnou velikost. Kaˇzd´a sloˇzka sign´alu je tedy pˇren´asobena sv´ ym odchylkov´ ym koeficientem a aˇz potom je sloˇzena spolu s dalˇs´ımi sloˇzkami ve v´ ysledn´ y vzorek odpov´ıdaj´ıc´ıho sign´alu. V tomto m´ıstˇe doch´az´ı k drobn´emu 15
http://www.gnu.org/software/octave/
21
V´ ypis 4 Struktury uchov´avaj´ıc´ı naˇcten´e parametry sign´al˚ u typedef struct { double amp; double frekv; double faze; double odch; int platnost; } HARMONICKA; typedef struct { int opak; HARMONICKA *p_harm; int poc_prom; int poc_harm; } INTERVAL;
V´ ypis 5 Naznaˇcen´ı funkce generov´an´ı vzork˚ u smyˇ cka dle poˇ ctu opakování smyˇ cka dle poˇ ctu interval˚ u smyˇ cka s inkrementací ˇ casu když vzorek % (10 * fv) == 10 aktualizace odchylkových koeficient˚ u smyˇ cka podle poˇ ctu promˇ enných smyˇ cka podle poˇ ctu složek vzorek += odchylka * amplituda * sin(2 * pi * f * t + fi) konec smyˇ cky zápis vzorku do souboru konec smyˇ cky konec smyˇ cky konec smyˇ cky konec smyˇ cky
omezen´ı univerzality gener´atoru, protoˇze je pevnˇe dan´e r˚ uzn´e chov´an´ı pˇri vytv´aˇren´ı odchylkov´ ych koeficient˚ u sign´al˚ u napˇet´ı a proud˚ u (lich´e respektive sud´e sign´aly v konfiguraˇcn´ım souboru). D˚ uvodem je fakt, ˇze u ´pravy v souvislosti s vytv´aˇren´ım odchylek byly prov´adˇeny aˇz po kompletn´ı realizaci gener´atoru a s aktu´aln´ım principem nebylo zpoˇca´tku poˇc´ıt´ano. Druh´ ym d˚ uvodem, proˇc nedoˇslo k celkov´e zmˇenˇe je fakt, ˇze konfiguraˇcn´ı soubor by musel obsahovat dalˇs´ı mnoˇzstv´ı parametr˚ u a pˇriˇsel by o posledn´ı ˇspetku pˇrehlednosti. Ve v´ ypisu (5) je zhruba pops´ana ˇcinnost funkce generuj(). Posledn´ı nezm´ınˇenou funkc´ı je zapis(). M´a na starost zapsat vygenerovan´ y vzorek sign´alu do souboru ve spr´avn´em datov´em typu a pˇr´ıpadnˇe upozornit na pˇrekroˇcen´ı jeho rozsahu. D˚ uleˇzitou ˇcinnost´ı funkce je tak´e kontrola velikosti velk´eho“ v´ ystup” n´ıho souboru — pˇri pˇribl´ıˇzen´ı k limitu 2 GB obdrˇz´ıme vysvˇetlen´ı probl´emu a gener´ator se ukonˇc´ı. Pˇri nastaven´em parametru octave dojde k z´apisu nejen do bin´arn´ıho souboru, ale i do textov´eho souboru, kter´ y je pak moˇzn´e zpracovat v OO Calc16 , Octave nebo si ho prohl´ednout bˇeˇzn´ ym textov´ ym editorem.
16
Skvˇel´ a n´ ahrada MS Excel, samozˇrejmˇe zdarma http://www.openoffice.cz/
22
V´ ypis 6 Popis definice jednoho intervalu sign´al˚ u # Zpusob zapisu: # @ pocet_opakovani { # [(amplituda,frekvence,faze,odchylka)(amplituda,frekvence,faze,odchylka)...] # [(amplituda,frekvence,faze,odchylka)(amplituda,frekvence,faze,odchylka)...] # [(amplituda,frekvence,faze,odchylka)(amplituda,frekvence,faze,odchylka)...] # }
3.2.2 Konfiguraˇ cní a výstupní soubory Jak jiˇz bylo zm´ınˇeno, konfiguraˇcn´ı soubor, obvykle gen.conf, obsahuje parametry sloˇzek sign´al˚ u, kter´ ymi se n´aslednˇe ˇr´ıd´ı samotn´ y gener´ator. Mezi spoleˇcn´e parametry patˇr´ı: verbose, kter´ y nastavuje mnoˇzstv´ı vypisovan´ ych informac´ı. Nastaven´ı na 0 zna-
men´a tich´ y“ reˇzim, kdy nen´ı vypisov´ano t´emˇeˇr nic. Naopak 2 znamen´a maxi” m´aln´ı mnoˇzstv´ı informac´ı z pr˚ ubˇehu vˇsech funkc´ı programu. interval m´ a parametr float hodnotu, kter´a se pouˇz´ıv´a jako n´asobitel opakov´an´ı
interval˚ u. fv urˇcuje vzorkovac´ı frekvenci. Zad´av´a se v poˇctu sampl˚ u na periodu 0,02 s
(50 Hz). Parametr blok je moˇzn´e pouˇz´ıt pro urˇcen´ı poˇctu sad vzork˚ u ukl´adan´ ych do
ˇc´ıslovan´ ych soubor˚ u. datatype urˇcuje datov´ y typ generovan´ ych vzork˚ u. M˚ uˇze b´ yt jedn´ım z int16,
int32, float a double. Pokud je uvedeno octave (bez parametru), prvn´ıch nˇekolik period vˇsech sign´al˚ u
se z´aroveˇ n uloˇz´ı v textov´em form´atu do souboru, kter´ y skript graf.m m˚ uˇze pouˇz´ıt jako vstupn´ı data pro zobrazen´ı pr˚ ubˇeh˚ u. opakovani s celoˇc´ıseln´ ym parametrem nastavuje poˇcet opakov´an´ı vˇsech d´ale
definovan´ ych interval˚ u. Pˇri nastaven´ı na nulu se gener´ator zacykl´ı dokud ho zvenˇc´ı“ nezastav´ıme. ” N´asleduj´ı definice tzv. interval˚ u. Kaˇzd´ y interval zaˇc´ın´a zavin´aˇcem n´asledovan´ ym lok´aln´ım poˇctem opakov´an´ı. Sloˇzen´a z´avorka otev´ır´a a uzav´ır´a definice sign´al˚ u v dan´em intervalu. Hranat´a z´avorka ohraniˇcuje jeden sign´al. Kulat´a z´avorka obsahuje jiˇz parametry jednotliv´ ych (ne)harmonick´ ych sloˇzek. Parametry jsou amplituda, frekvence, f´aze v radi´anech a odchylka. Pro pˇrehlednost je moˇzn´e doplnit libovoln´e mnoˇzstv´ı b´ıl´ ych znak˚ u. Je moˇzn´e pouˇz´ıvat i koment´aˇre, kter´e musej´ı b´ yt na kaˇzd´em ˇr´adku uvozeny kˇr´ıˇzkem. Ve v´ ypisu (6) je pops´ana struktura definice intervalu.
23
V´ ystupn´ım souborem je obvykle soubor gen.bin. Jeho n´azev se vˇsak zmˇen´ı, pokud gener´atoru pˇred´ame parametrem jin´ y neˇz v´ ychoz´ı n´azev konfiguraˇcn´ıho souboru. Kromˇe velk´eho“ bin´arn´ıho souboru jsou z´aroveˇ n data dˇelena do soubor˚ u se stejn´ ym ” n´azvem, avˇsak s pˇridan´ ym poˇradov´ ym ˇc´ıslem pˇred pˇr´ıponou .bin. Mnoˇzstv´ı vzork˚ u na jeden ˇc´ıslovan´ y soubor ovlivˇ nuje parametr blok v konfiguraˇcn´ım souboru. Posledn´ım v´ ystupn´ım souborem je gen.m (ve v´ ychoz´ım pˇr´ıpadˇe), kter´ y v pˇr´ıpadˇe uveden´ı parametru octave obsahuje nˇekolik period generovan´ ych sign´al˚ u pro snadnou kontrolu a vytvoˇren´ı graf˚ u pr˚ ubˇeh˚ u.
3.3 Výpoˇ cetní blok V´ ypoˇcetn´ı blok vych´az´ı z firmware re´aln´eho PMD. 3.3.1 Funkce Velice ve zkratce, protoˇze jeho n´avrh nebyl pˇredmˇetem t´eto pr´ace, v´ ypoˇcetn´ı blok m´a na starosti z namˇeˇren´ ych vzork˚ u f´azov´ ych napˇet´ı a proud˚ u vypoˇc´ıtat vˇsechny ˇz´adan´e PQ17 veliˇciny, uloˇzit je do struktur a generovat archivn´ı data. 3.3.2 Soubory nastavení Zm´ın´ım se pouze o konfiguraˇcn´ım souboru SmpArcConfig.xml, kter´ ym nastavujeme chov´an´ı generov´an´ı a ukl´ad´an´ı archiv˚ u (protoˇze s archivy se d´ale pracuje). Zde je moˇzn´e nastavit kter´e promˇenn´e a s jakou frekvenc´ı budou ukl´ad´any. To je z´asadnˇe d˚ uleˇzit´e pˇri porovn´av´an´ı u ´ˇcinnost´ı komprese r˚ uzn´ ych sad dat. 3.3.3 Modifikace portu pro Linux Na ˇcem naopak vˇetˇsina pr´ace spoˇc´ıvala, byla modifikace firmwaru tak, aby byl pouˇziteln´ y v bˇeˇzn´em operaˇcn´ım syst´emu GNU/Linux. Ve vˇsech zdrojov´ ych souborech, kde se vyskytovaly hardwarovˇe specifick´e funkce, byly pˇrid´any pˇrep´ınaˇce preprocesoru, kter´e pˇri kompilaci s pˇrep´ınaˇcem -D Linux zmˇenily chov´an´ı programu tak, aby na hardware nebyl z´avisl´ y. Nˇekter´e kl´ıˇcov´e funkce byly vytvoˇreny speci´alnˇe znovu v souboru Linux.c. Jedn´a se napˇr´ıklad o funkce z´apisu archiv˚ u do soubor˚ u, pr´ace s ˇcasem apod. D˚ uleˇzit´a je linuxov´a verze DFT s vyuˇzit´ım knihovny fftw3.
3.4 Modul komprese Kompresn´ı blok umoˇznil realizaci experiment˚ u zab´ yvaj´ıc´ıch se vlivem typu a k´odov´an´ı archivn´ıch dat na u ´ˇcinnost komprese. Program je vˇsak pouˇziteln´ y pro benchmark implementovan´ ych kompresn´ıch algoritm˚ u na jak´emkoli vstupn´ım souboru. Je 17
Power Quality
24
tedy moˇzn´e jeho pomoc´ı odhadnout ide´aln´ı typ komprese pro libovoln´ y datov´ y soubor. V souˇcasn´e podobˇe jsou vstupn´ı data komprimov´ana integrovan´ ymi algoritmy RLE, Huffman, LZ, SH a MiniLZO, kter´e doplˇ nuj´ı extern´ı programy s metodami AC, Gzip a Bzip2. 3.4.1 Funkce Funkce programu je velice prost´a. Soubor vstupuj´ıc´ı do komprese, pˇredan´ y jako prvn´ı parametr pˇri spuˇstˇen´ı, je otevˇren a je zjiˇstˇena jeho velikost. Po alokaci potˇrebn´eho mnoˇzstv´ı pamˇeti je soubor naˇcten do bufferu data a je alokov´an dalˇs´ı buffer compressed, kter´ y d´ale slouˇz´ı pro ukl´ad´an´ı v´ ystup˚ u jednotliv´ ych kompresn´ıch algoritm˚ u. Jeho velikost je vypoˇctena z velikosti vstupn´ıho souboru tak, aby v ˇz´adn´em pˇr´ıpadˇe nemohlo doj´ıt k jeho pˇreplnˇen´ı v extr´emn´ıch pˇr´ıpadech, kdy komprese zvˇetˇs´ı velikost souboru. Kaˇzd´ y algoritmus m´a jin´e poˇzadavky, proto je pouˇzit v´ ypoˇcet, kter´ y spln´ı vˇsechny. in len + 384 (4) in len + 16 Podle posledn´ı verze dokumentace BCL by dokonce mˇelo staˇcit menˇs´ı mnoˇzstv´ı pamˇeti. (in size · 104 + 50) + 384 (5) 100 Vzhledem k okolnostem a minim´aln´ımu rozd´ılu by vˇsak byla u ´prava nepodstatn´a. Kromˇe zjiˇstˇen´ı velikosti souboru a alokace pamˇeti jsou otevˇreny i soubory log˚ u, do nichˇz jsou pozdˇeji ukl´ad´any namˇeˇren´e informace. Jedn´ım z nich je soubor log.txt, kter´ y se otev´ır´a v reˇzimu pˇrid´av´an´ı na konec (a), druh´ ym je soubor v reˇzimu os” tr´eho“ z´apisu (w ) s n´azvem pˇredan´ ym jako druh´ y parametr pˇri spouˇstˇen´ı. V´ yznam je zˇrejm´ y. Soubor log.txt slouˇz´ı pro ukl´ad´an´ı v´ ysledk˚ u velk´eho mnoˇzstv´ı mˇeˇren´ı, zat´ımco druh´ y soubor obsahuje vˇzdy jen data o jednom pr˚ ubˇehu komprese, ˇc´ımˇz se zjednoduˇs´ı a zpˇrehledn´ı dohled´av´an´ı jednoho konkr´etn´ıho v´ ysledku. O z´apis namˇeˇren´ ych hodnot a informac´ı o pr˚ ubˇehu komprese se star´a funkce vypis(). Jako parametry pˇreb´ır´a dvˇe struktury, kter´e se v Linuxu pouˇz´ıvaj´ı pro uloˇzen´ı pˇresn´e ˇcasov´e informace (podrobnˇeji d´ale), velikost vstupu a v´ ystupu komprese, n´azev kompresn´ıho algoritmu, soubor pro z´apis a pˇrep´ınaˇc v´ ypisu do termin´alu. Z parametr˚ u je vypoˇctena doba v´ ypoˇctu, kompresn´ı pomˇer a rychlost v´ ypoˇctu. Vˇse je zaps´ano do souboru, pˇriˇcemˇz je pomoc´ı define moˇzn´e nastavit, zda se maj´ı ukl´adat i velikosti vstupn´ıho a v´ ystupn´ıho souboru. Dle parametru tisk mohou b´ yt vˇsechny informace takt´eˇz vyps´any do termin´alu. Po spuˇstˇen´ı jsou do logovac´ıch soubor˚ u vyps´any z´ahlav´ı sloupc˚ u zaznamen´avan´ ych veliˇcin. Data ze vstupn´ıho souboru jsou naˇctena do pamˇeti a pˇrich´az´ı na ˇradu samotn´a komprese. Pˇred a po zavol´an´ı funkce kompresn´ıho algoritmu nebo spuˇstˇen´ı
25
pˇr´ıkazu je zmˇeˇren ˇcas. N´asleduj´ı funkce vypis(). V´ ysledn´a data jsou uloˇzena do soubor˚ u pojmenovan´ ych compressed***.dat, kde hvˇezdiˇcky nahrazuje zkratka n´azvu metody. ˇ asu 3.4.2 Mˇ eˇrení c Urˇcen´ı velikosti souboru je hraˇckou, ale nalezen´ı vhodn´eho zp˚ usobu mˇeˇren´ı ˇcasu tak, aby v´ ysledky byly stabiln´ı, tˇeˇzko ovlivniteln´e bˇehem jin´ ych program˚ u a nav´ıc s dostateˇcn´ ym rozliˇsen´ım, si vyˇz´adalo detailnˇejˇs´ı zorientov´an´ı se v knihovn´ıch funkc´ıch libc18 , konkr´etnˇe v time.h 19 . Popsan´ y pˇr´ıstup se dobˇre osvˇedˇcil. Pro ukl´ad´an´ı ˇcasov´ ych u ´daj˚ u jsou vyuˇzity struktury timespec, kter´e obsahuj´ı dvˇe celoˇc´ıseln´e hodnoty tv sec pro uloˇzen´ı sekund a tv nsec pro uloˇzen´ı nanosekund. Pokud potˇrebujeme zjistit rozd´ıl dvou ˇcasov´ ych u ´daj˚ u ve struktur´ach timespec jako ˇc´ıslo s plovouc´ı ˇr´adovou ˇc´arkou, provedeme v´ ypoˇcet rozdil = ts2.tv sec − ts1.tv sec +
(ts2.tv nsec − ts1.tv nsec) [s] . 109
(6)
Ot´azkou z˚ ust´av´a, jak struktury naplnit. K tomu slouˇz´ı funkce clock gettime(). M´a pouze dva parametry. Prvn´ım je makro urˇcuj´ıc´ı typ pouˇzit´eho ˇcasovaˇce a druh´ ym je adresa popisovan´e struktury. Existuj´ı 4 druhy hodin. V naˇsem pˇr´ıpadˇe m´a v´ yzym rozlinam CLOCK PROCESS CPUTIME ID, coˇz je ˇcasovaˇc procesoru s vysok´ ˇsen´ım, speci´aln´ı pro kaˇzd´ y proces a CLOCK REALTIME, j´ımˇz jsou hodiny re´aln´eho ˇcasu spoleˇcn´e pro cel´ y syst´em (avˇsak opˇet s vysok´ ym rozliˇsen´ım). Prvn´ı zmiˇ novan´ y pouˇz´ıv´ame pro mˇeˇren´ı ˇcasu v´ ypoˇctu integrovan´ ych kompresn´ıch algoritm˚ u, protoˇze bˇeˇz´ı ve stejn´em vl´aknˇe. Druh´ y pouˇz´ıv´ame u externˇe volan´ ych program˚ u (AC, bzip2, gzip), protoˇze jsou spouˇstˇeny pomoc´ı funkce system(), jej´ıˇz pˇr´ıkaz pˇredan´ y jako parametr probˇehne ve zvl´aˇstn´ım vl´aknˇe a v pˇr´ıpadˇe pouˇzit´ı CLOCK PROCESSCPUTIME ID tedy logicky dost´av´ame nesmysln´e ˇcasy.
3.5 Virtuální mˇ eˇrící pˇrístroj VMP je spojen´ım vytvoˇren´ ych modul˚ u a snaˇz´ı se svou funkc´ı pˇribl´ıˇzit re´aln´emu PMD. V souˇcasn´e podobˇe neobsahuje ˇza´dn´e grafick´e rozhran´ı, takˇze je uˇzivatelsky nezaj´ımav´ y. Budouc´ı rozˇs´ıˇren´ı o jak´ekoli dalˇs´ı moduly, napˇr´ıklad vizualizaˇcn´ı, by ale nemˇelo ˇcinit pot´ıˇze. Funkˇcn´ım c´ılem souˇcasn´eho stavu bylo dosaˇzen´ı spolupr´ace vˇsech modul˚ u s moˇznost´ı nastavovat generovan´e sign´aly pomoc´ı konfiguraˇcn´ıho souboru gener´atoru, ovlivˇ novat ˇcinnost v´ ypoˇcetn´ıho bloku, respektive ukl´ad´an´ı archiv˚ u pomoc´ı konfiguraˇcn´ıch XML soubor˚ u a umoˇznit spouˇstˇen´ı kom18 19
GNU C Library http://www.gnu.org/software/libc/ Hlaviˇckov´ y soubor funkc´ı t´ ykaj´ıc´ıch se pr´ace s ˇcasem
26
presn´ıch test˚ u na soubory vznikaj´ıc´ıch archiv˚ u. Nepˇr´ıliˇs dokonale implementovan´a (rozumˇejte neuniverz´alnˇe, bez moˇznosti nastaven´ı), nicm´enˇe funkˇcn´ı, je schopnost vr´acen´ı aktu´aln´ıch dat v souboru XML pˇres TCP/IP na poˇzadavek vzd´alen´eho — nyn´ı jedno´ uˇcelov´eho — klienta. Tato vlastnost byla doplnˇena pouze pro jednor´azovou potˇrebu ovˇeˇren´ı funkˇcnosti pr´ace s XML soubory. Doplnˇen´ım jednoduch´eho pˇrep´ınaˇce sleduj´ıc´ıho parametr pˇr´ıchoz´ıho spojen´ı by bylo moˇzn´e snadno funkˇcnost rozˇs´ıˇrit a vracet v podstatˇe libovoln´a data. 3.5.1 Souˇ cinnost všech modulu˚ Funkce main(), volaj´ıc´ı vˇsechny dalˇs´ı funkce a spouˇstˇej´ıc´ı gener´ator, je um´ıstˇena v souboru main.c, patˇr´ıc´ıho mezi soubory, kter´e byly vytvoˇreny od nuly“. Nejedn´a se ” o modifikovanou funkci main() z origin´aln´ıho firmware. Hned po definici vkl´adan´ ych hlaviˇckov´ ych soubor˚ u je nˇekolik pˇrep´ınaˇc˚ u preprocesoru, kter´e ovlivˇ nuj´ı zp˚ usob bˇehu programu. #define VYPISOVAT VSE asi nen´ı nutn´e dlouze vysvˇetlovat. Pouˇzit´ı obvykle
pˇri ladˇen´ı, kdy m˚ uˇze b´ yt uˇziteˇcn´e vyps´an´ı hodnot prvn´ıho sta vzork˚ u sign´alu, vˇsech vypoˇcten´ ych aktu´aln´ıch hodnot, doby v´ ypoˇctu, data a ˇcasu pouˇz´ıvan´eho v´ ypoˇcetn´ım blokem. #define GENEROVAT spust´ı pˇred spuˇstˇen´ım v´ ypoˇct˚ u gener´ator, kter´ y vytvoˇr´ı
(nebo pˇrep´ıˇse) bin´arn´ı soubory virtu´aln´ıch vzork˚ u sign´al˚ u. #define ZACYKLIT zajist´ı spuˇstˇen´ı dalˇs´ıho bˇehu smyˇcky programu po zpra-
cov´an´ı vˇsech vstupn´ıch dat. Pokud je z´aroveˇ n povoleno generov´an´ı, pˇred dalˇs´ımi v´ ypoˇcty dojde opˇet ke spuˇstˇen´ı gener´atoru tak, aby se poˇc´ıtalo z nov´ ych dat“. ” Volba #define REALNA SIMULACE m´ a velice prostou funkci — pozdrˇz´ı bˇeh
programu o necel´ ych 200 ms mezi bˇehy v´ ypoˇct˚ u tak, aby program bˇeˇzel pˇribliˇznˇe v re´aln´em ˇcase. Bez t´eto volby n´aˇs VMP bˇeˇz´ıc´ı na rychl´em PC zanalyzuje aˇz nˇekolik minut vzork˚ u sign´alu za sekundu, coˇz je skvˇel´e, pokud generujeme data pro testov´an´ı kompresn´ıch algoritm˚ u, ale m´a hodnˇe daleko k pr´aci re´aln´eho PMD co se ˇcasov´e reality t´ yk´a. Nepˇr´ıjemn´e je i zatuhnut´ı poˇc´ıtaˇce pˇri bˇehu plnou rychlost´ı, pokud m´a pouze jedno j´adro (100 % vyuˇzit´ı CPU). Volba re´aln´e simulace je jednou z vˇec´ı, kter´e by bylo moˇzn´e a vhodn´e v budoucnu vylepˇsit. M´ısto jednoduch´eho ˇcek´an´ı pomoc´ı usleep() by bylo vhodn´e pouˇz´ıt smyˇcku, kter´a by kontrolovala ˇcas a dalˇs´ı v´ ypoˇcet by spustila aˇz pˇri dosaˇzen´ı dalˇs´ıho n´asobku 200 ms re´aln´eho ˇcasu. T´ım by se z´aroveˇ n odstranily moˇzn´e rozd´ıly v rychlosti bˇehu na r˚ uznˇe v´ ykonn´em hardware. Druh´ ym vylepˇsen´ım by mohlo b´ yt spuˇstˇen´ı gener´atoru
27
bud’ v ˇcasech ˇcek´an´ı, nebo v jin´em vl´aknˇe. V souˇcasn´e podobˇe totiˇz mˇeˇren´ı zastav´ı aˇz do chv´ıle, kdy jsou vygenerov´ana vˇsechna data (je-li povoleno). Funkce termination handler() slouˇz´ı ke korektn´ımu dokonˇcen´ı pr´avˇe prob´ıhaj´ıc´ıch v´ ypoˇct˚ u v pˇr´ıpadˇe, ˇze bˇeh VMP n´asilnˇe“ zastav´ıme (napˇr´ıklad pˇr´ıkazem Ctrl+C). ” Pˇri prvn´ım pokusu o ukonˇcen´ı je vyps´ana hl´aˇska o akceptov´an´ı poˇzadavku ukonˇcen´ı. Pˇri opakov´an´ı poˇzadavku je program ukonˇcen okamˇzitˇe. N´asleduje funkce sig io(). Jej´ı asynchronn´ı spuˇstˇen´ı zapˇr´ıˇcin´ı pˇr´ıchoz´ı poˇzadavek vzd´alen´eho klienta o soubor s aktu´aln´ımi daty. Soubor je tedy vytvoˇren a jako odpovˇed’ odesl´an zpˇet klientovi. Pouˇz´ıv´a se server s neblokuj´ıc´ım TCP socketem, kter´ y je otevˇren a nastaven hned po spuˇstˇen´ı VMP. Byl zvolen port 4343, protoˇze je pro autora snadno zapamatovateln´ y. . . Hlavn´ı smyˇcka cel´eho syst´emu bˇeˇz´ı ve funkci main(). Po spuˇstˇen´ı jsou deklarov´any potˇrebn´e promˇenn´e, nastaveny reakce na sign´aly (pˇreruˇsen´ı programu a pˇr´ıchod komunikace po socketu), inicializov´any struktury RTC TIME a RTC DATE dle re´aln´eho ˇcasu, ze souboru SmpArcConfig.xml je naˇctena konfigurace archivu do odpov´ıdaj´ıc´ı struktury, jsou spuˇstˇeny funkce inicializace v´ ypoˇcetn´ıho bloku, je nastavena struktura SmpPQSettings urˇcuj´ıc´ı sledovan´e limity PQ, je spuˇstˇen gener´ator dat a vlastn´ı v´ ypoˇcetn´ı smyˇcka. Zde jsou ˇcteny bloky dat z bin´arn´ıho souboru vzork˚ u sign´al˚ u a zpracov´avaj´ı se v´ ypoˇcetn´ım blokem tak dlouho, dokud je s ˇc´ım poˇc´ıtat. Dalˇs´ı ˇcinnost z´avis´ı na dˇr´ıve zm´ınˇen´em nastaven´ı pomoc´ı definic preprocesoru. V pˇr´ıpadˇe volby ZACYKLIT nedojde k ukonˇcen´ı programu, ale ke skoku na m´ısto spouˇstˇen´ı gener´atoru, kter´ y se bud’ spust´ı, nebo pˇreskoˇc´ı podle GENEROVAT. yt neust´ale vypisov´any informace V z´avislosti na definici VYPISOVAT VSE mohou b´ o pr˚ ubˇehu programu, hodnot´ach veliˇcin, d´elce trv´an´ı v´ ypoˇct˚ u atd. Doba v´ ypoˇctu na poli z´aznam˚ u odpov´ıdaj´ıc´ıch intervalu 200 ms je mˇeˇrena zp˚ usobem pracuj´ıc´ım na stejn´em principu, jako mˇeˇren´ı rychlosti komprese v kompresn´ım bloku. Pokud je definov´ana REALNA SIMULACE, je po kaˇzd´em vypoˇcten´em intervalu vloˇzeno ˇcek´an´ı usleep(t) s parametrem vypoˇcten´ ym dle t [µs] = 2 · 105 − (t2.tv sec − t1.tv sec) · 106 −
t2.tv nsec − t1.tv nsec 103
,
(7)
kde t1 je struktura typu timespec naplnˇen´a pˇred spuˇstˇen´ım v´ ypoˇct˚ u a t2 je stejn´a struktura naplnˇen´a tˇesnˇe po ukonˇcen´ı v´ ypoˇct˚ u. T´ımto zp˚ usobem je alespoˇ n ˇca´steˇcnˇe eliminov´ana r˚ uzn´a odchylka od doby bˇehu intervalu na r˚ uzn´ ych PC ˇci pˇri r˚ uzn´em zat´ıˇzen´ı. Z˚ ust´av´a zde vliv instrukc´ı mimo v´ ypoˇcty, ty jsou vˇsak provedeny alespoˇ n ˇra´dovˇe rychleji, neˇz je doba v´ ypoˇctu na intervalu vzork˚ u sign´alu.
28
V´ ypis 7 Z´akladn´ı pouˇzit´ı one-dimensional DFT of size N“ dle dokumentace libfftw3 ” #include
... { fftw_complex *in, *out; fftw_plan p; ... in = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N); out = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N); p = fftw_plan_dft_1d(N, in, out, FFTW_FORWARD, FFTW_ESTIMATE); ... fftw_execute(p); /* repeat as needed */ ... fftw_destroy_plan(p); fftw_free(in); fftw_free(out); }
3.5.2 Archivy V´ ystupem v´ ypoˇcetn´ıho bloku je mnoˇzstv´ı archivn´ıch dat, kter´a jsou ukl´ad´ana do nˇekolika soubor˚ u. Jsou jimi hlavn´ı archiv PQ dat, archiv PQ ud´alost´ı, elektromˇer, profil, log a pro naˇse dosavadn´ı experimenty nejd˚ uleˇzitˇejˇs´ı — hlavn´ı archiv. V souboru Linux.c jsou um´ıstˇeny funkce, kter´e se staraj´ı o z´apis dat do odpov´ıdaj´ıc´ıch soubor˚ u ve chv´ıli, kdy o to v´ ypoˇcetn´ı blok poˇza´d´a (ovlivnˇeno nastaven´ım, generovan´ ymi sign´aly a konfiguraˇcn´ımi soubory). Zaj´ımavou funkc´ı je Write Record(), kter´a zapisuje hlavn´ı archiv VMP do souboru archiv.bin. Obsahuje totiˇz pˇrep´ınaˇc, umoˇzn ˇuj´ıc´ı ukl´ad´an´ı dat s delta k´odov´an´ım. Pˇri definov´an´ı makra DELTA KODOVANI je vytvoˇrena glob´aln´ı promˇenn´a typu ArchivniData s n´azvem MinuleHodnoty, kam se pˇri kaˇzd´em z´apisu uloˇz´ı aktu´aln´ı hodnoty vˇsech archivovan´ ych veliˇcin, aby se s jejich pomoc´ı mohl v dalˇs´ım bˇehu vypoˇc´ıtat rozd´ıl od aktu´aln´ıch hodnot, kter´ y je teprve ukl´ad´an. Pˇri prvn´ım bˇehu je uloˇzen cel´ y z´aznam v nativn´ım k´odov´an´ı. Funkce obsahuje i moˇznost povolit v´ ypis vybran´ ych hodnot pro u ´ˇcel kontroly spr´avn´e funkce v´ ypoˇct˚ u. 3.5.3 Linuxové varianty funkcí Krom z´apisov´ ych funkc´ı Linux.c obsahuje i specificky ˇreˇsen´e funkce vyuˇz´ıvaj´ıc´ı standardn´ıch knihoven OS Linux. Patˇr´ı mezi nˇe RTC GetTime() a RTC GetDate(), kter´e pomoc´ı funkce clock gettime() a struktur typu time t, tm a timespec z knihovny time.h napln´ı glob´aln´ı instance struktur typu Time a Date, kter´e jsou jiˇz definov´any ´ ve zdrojov´ ych souborech v´ ypoˇcetn´ıho bloku. Uspornˇ e, s vyuˇzit´ım kr´atk´ ych celoˇc´ıseln´ ych typ˚ u, udrˇzuj´ı aktu´aln´ı re´aln´ y ˇcas potˇrebn´ y pˇri pr´aci s archivy, elektromˇerem atp. Dalˇs´ı naprosto z´asadn´ı funkc´ı je DFT, ˇreˇsen´a pomoc´ı knihovny libfftw3 . Vych´az´ı z pˇr´ıkladu, kter´ y je uveden v dokumentaci [6] pˇriloˇzen´e k bal´ıku zdrojov´ ych soubor˚ u knihovny. Jedn´a se o pouˇzit´ı jednorozmˇern´e DFT. Ve v´ ypisu (7) je pˇr´ıklad citov´an.
29
Struktury fftw complex slouˇz´ı v naˇsem pˇr´ıpadˇe pro uloˇzen´ı vstupn´ıch dat, kter´ ymi jsou pole N vzork˚ u jednotliv´ ych sign´al˚ u, a v´ ystupn´ıch dat, coˇz jsou komplexn´ı v´ ystupy z DFT. Z nich jsou d´ale vypoˇcteny amplitudy a f´aze jednotliv´ ych sloˇzek, jsou vyn´asobeny r˚ uzn´ ymi koeficienty podle toho, zda se jedn´a o sign´al proudu ˇci napˇet´ı a jsou tak´e vypoˇcteny harmonick´e a meziharmonick´e sloˇzky. V´ ysledky jsou ukl´ad´any do struktury AktualniHodnoty typu CSMPData. y obsahuje vˇsechna Funkce fftw plan dft 1d() vytvoˇr´ı tzv. pl´an, coˇz je objekt, kter´ data potˇrebn´a pro v´ ypoˇcet DFT. Knihovna um´ı poˇc´ıtat i dvou, tˇr´ı a v´ıcerozmˇern´e transformace, jejichˇz pl´an pˇripravuj´ı funkce fftw plan dft 2d, fftw plan dft 3d a fftwplan dft. Posledn´ı zm´ınˇen´a pˇreb´ır´a nav´ıc jeden parametr urˇcuj´ıc´ı dimenzi. Spoleˇcn´ ymi parametry jsou poˇcet vzork˚ u, vstupn´ı a v´ ystupn´ı pole komplexn´ıch ˇc´ısel in a out, parametr FFTW FORWARD urˇcuj´ıc´ı smˇer transformace (pˇri inverzn´ı FFTW BACKWARD) a posledn´ı flag parametr, kter´ y rozhoduje o zp˚ usobu vytvoychkoli mˇeˇren´ı, ˇren´ı pl´anu. FFTW ESTIMATE vytvoˇr´ı suboptim´aln´ı pl´an bez jak´ na rozd´ıl od FFTW MEASURE, jehoˇz volbou bychom povolili proveden´ı rychlostn´ıch test˚ u nˇekolika moˇznost´ı v´ ypoˇct˚ u, na jejichˇz z´akladˇe by knihovna vytvoˇrila pl´an s nejrychlejˇs´ım z nich. Mˇeˇren´ı dle dokumentace m˚ uˇze trvat nˇekolik sekund a jeho pouˇzit´ı je vhodn´e v situac´ıch, kdy s jedn´ım pl´anem budeme prov´adˇet velk´e mnoˇzstv´ı n´aroˇcn´ ych transformac´ı. Zde by bylo pravdˇepodobnˇe nejlepˇs´ı zaˇc´ıt v pˇr´ıpadˇe rychlostn´ıch optimalizac´ı VMP, protoˇze v´ ypoˇcet DFT je jednou z ˇcasovˇe nejn´aroˇcnˇejˇs´ıch ˇc´ast´ı v´ ypoˇct˚ u. ypoˇcet. Jedin´ ym parametrem je Funkce fftw execute() uˇz pouze spust´ı vlastn´ı v´ pˇredem vytvoˇren´ y pl´an, na jehoˇz z´akladˇe se vyb´ır´a metoda v´ ypoˇctu a v nˇemˇz jsou obsaˇzena vˇsechna vstupn´ı data i pˇripraven´ y v´ ystupn´ı buffer. Po dokonˇcen´ı v´ ypoˇctu DFT a zpracov´an´ı v´ ystupn´ıho pole dat je moˇzn´e zniˇcit“ pl´an funkc´ı fftw destroy” plan() a pˇr´ıpadnˇe i uvolnit alokovan´e buffery. V naˇsem pˇr´ıpadˇe jsme pouˇzili pole jako lok´aln´ı promˇenn´e funkce, fftw free() jsme tedy nepouˇzili. 3.5.4 Makefile Program make je utilita urˇcen´a k automatizaci pˇrekladu zdrojov´ ych k´od˚ u do bin´arn´ıch soubor˚ u. Na z´akladˇe definic v souboru Makefile dok´aˇze ˇreˇsit jejich z´avislosti, zpˇrehledˇ nuje pˇreklad a zejm´ena ˇsetˇr´ı ˇcas. Povaˇzuji za vhodn´e uv´est zde alespoˇ n v´ yznam spoleˇcn´ ych flag˚ u pouˇzit´ ych pˇri pˇrekladu. -lrt je pˇrep´ınaˇc, bez jehoˇz pouˇzit´ı bychom nemohli pˇresnˇe mˇeˇrit ˇcas -lfftw3 umoˇzn ˇuje pouˇzit´ı libfftw3 -lm pˇrilinkuje matematick´e knihovny -lxml2 je d˚ uleˇzit´e kv˚ uli pr´aci s XML
30
-lz pˇrilinkuje knihovnu libz -g je pˇrep´ınaˇc ladˇen´ı -D Linux, -D SMPQ a -D TALEMA maj´ı stejnou funkci jako #define ve
zdrojov´em k´odu, ale zde je moˇzn´e je definovat hromadnˇe zb´ yv´a nˇekolik parametr˚ u uveden´ ych za -I, urˇcuj´ıc´ıch adres´aˇre, kde se maj´ı
vyhled´avat hlaviˇckov´e soubory
3.6 Pomocné utility Zde jsou zaˇrazeny struˇcn´e koment´aˇre nˇekter´ ych program˚ u, kter´e vznikaly v souvislosti s testov´an´ım, pouˇz´ıv´an´ım nebo jako vedlejˇs´ı efekt nˇekter´ ych experiment˚ u. StahniActData Klientsk´a aplikace, kter´a z bˇeˇz´ıc´ıho VMP na zadan´e IP adrese a portu st´ahne XML soubor obsahuj´ıc´ı aktu´aln´ı hodnoty vˇsech veliˇcin. csv2conf Pom˚ ucka, kter´a vznikla pˇri vytv´aˇren´ı konfiguraˇcn´ıch soubor˚ u gener´atoru dat. V tabulkov´em editoru (OO Calc) byly zaps´any hodnoty sloˇzek dle vypoˇcten´ ych re´aln´ ych graf˚ u, exportov´any v textov´em form´atu .csv a n´aslednˇe pomoc´ı csv2conf pˇrevedeny do syntaxe konfiguraˇcn´ıho souboru. Parametrem byly pˇred´av´any spoleˇcn´e odchylky a f´aze. graf.m Skript programu Octave, kter´ y naˇcte soubor gen.m vytvoˇren´ y pˇri generov´an´ı sign´al˚ u a zobraz´ı prvn´ıch nˇekolik period vˇsech proud˚ u a napˇet´ı v grafu z´avislosti hodnoty promˇenn´e na ˇcase. dekomprese Program pouˇz´ıvan´ y pro ovˇeˇren´ı korektn´ı funkce kompresn´ıch algoritm˚ u a bezztr´atovosti. Postupnˇe dekomprimuje vˇsechny soubory Compressed***.dat v pracovn´ı sloˇzce do Decompressed***.dat, kde hvˇezdiˇcky opˇet nahrazuj´ı zkratky kompresn´ıch algoritm˚ u.
31
V´ ypis 8 N´apovˇeda vypsan´a pˇri chybn´em spuˇstˇen´ı rozdelData v@r:~/src/komprese$ ./rozdelData Spusteni programu: ./rozdelData RADA KONSTANTA BLOK MAXIMUM SOUBOR KOMPRESE RADA ...1 = aritmeticka, 0 = geometricka KONSTANTA ...celociselna konstanta rady BLOK ...celociselna velikost bloku dat v bytech MAXIMUM ...velikost nejvetsiho generovaneho souboru KOMPRESE ...1 = komprimovat, 0 = nekomprimovat SOUBOR ...cesta k souboru dat v@r:~/src/komprese$
rozdelData Program pouˇz´ıvan´ y pˇri pˇr´ıpravˇe dat pro experimenty (4.1.1). Funkci nejl´epe osvˇetl´ı v´ ypis (8). Ze vstupn´ıho bin´arn´ıho souboru jsou vytvoˇreny ˇc´asti s velikost´ı zvyˇsuj´ıc´ı se podle aritmetick´e nebo geometrick´e ˇrady. dot2comma Jednoduch´ y progr´amek, kter´ y z textov´eho souboru zadan´eho jako prvn´ı parametr vytvoˇr´ı soubor se jm´enem dle druh´eho parametru tak, ˇze vˇsechny teˇcky nahrad´ı ˇc´arkami. Tato zmˇena je z´asadnˇe d˚ uleˇzit´a pˇri importu dat do tabulkov´eho editoru, kter´ y obvykle v ˇcesk´em syst´emu pouˇz´ıv´a desetinn´e ˇc´arky m´ısto teˇcek. Pokud provedeme nahrazen´ı teˇcek ˇc´arkami aˇz v editoru, obvykle se mnoho hodnot nesmyslnˇe nahrad´ı kalend´aˇrn´ımi daty a dohled´an´ı d˚ uvodu proˇc ten graf vypad´a tak straˇsnˇe“ ” neb´ yv´a jednoduch´e. Nakonec pozn´amka pro kaˇzd´eho, kdo s Linuxem nˇekdy pracoval: Ano, stejnou pr´aci vykon´a i obyˇcejn´ y sed 20 . . .
20
Stream EDitor — sed http://www.gnu.org/software/sed/
32
4 Praktické výsledky 4.1 Optimální metody ukládání dat v PMD 4.1.1 Úˇ cinnost komprese Pˇri praktick´em testov´an´ı byly nejdˇr´ıve zm´ınˇen´ ym gener´atorem (2.1.2) vytvoˇreny obrovsk´e spousty archiv˚ u s r˚ uznˇe nastavovan´ ymi parametry. Ve vˇsech pˇr´ıpadech obsahuj´ı vygenerovan´e soubory sdruˇzen´a a f´azov´a napˇet´ı, proudy, 25 harmonick´ ych a zanedbateln´e mnoˇzstv´ı dalˇs´ıch veliˇcin. Jeden blok vˇsech hodnot m´a velikost 256 B a ve vygenerovan´ ych souborech se opakuje N-kr´at. Vˇsechny bin´arn´ı datov´e soubory byly n´aslednˇe komprimov´any pomoc´ı dalˇs´ıho testovac´ıho programu, kter´ y kromˇe komprese pomoc´ı vˇsech pouˇzit´ ych algoritm˚ u z´aroveˇ n ukl´ad´a do logu rychlosti a u ´ˇcinnosti komprese na jednotliv´ ych souborech. V prvn´ı s´erii experiment˚ u byly mˇeˇreny kompresn´ı pomˇery jednotliv´ ych algoritm˚ u u dat se surov´ ym bin´arn´ım a delta k´odov´an´ım. Dalˇs´ım parametrem byla moˇznost ukl´adat data s´eriovˇe (serial) nebo prokl´adanˇe (shuffled). Chov´an´ı jednotliv´ ych algoritm˚ u je zachyceno na obr. (2), odkud m˚ uˇzeme jasnˇe vyˇc´ıst r˚ uzn´e chov´an´ı dvou rozd´ıln´ ych skupin. Algoritmy zaloˇzen´e na entropii (HUF, SF) plat´ı daˇ n za potˇrebu um´ıstˇen´ı sv´eho bin´arn´ıho stromu do v´ ystupn´ıho souboru, coˇz pro mal´e vstupn´ı soubory znamen´a relativn´ı velikost daleko pˇres 100 %. Pˇri vˇetˇs´ım mnoˇzstv´ı dat se jiˇz tento efekt vytr´ac´ı a okolo z´aznamu 64 blok˚ u dosahuje sv´eho optima, jenˇz je d´ale stabiln´ı pro jeˇstˇe vˇetˇs´ı soubory. Zat´ımco rozd´ıl mezi SF a HUF je minim´aln´ı a dle oˇcek´av´an´ı, pomˇernˇe z´asadnˇe u ´ˇcinnost komprese ovlivˇ nuje zp˚ usob k´odov´an´ı dat. Delta k´odov´an´ı evi-
´ cinnost komprese pro r˚ Obr´azek 2: Uˇ uzn´e velikosti souboru dat
33
´ cinnost komprese pro r˚ Obr´azek 3: Uˇ uzn´e hodnoty rozptylov´ ych limit˚ u dentnˇe a razantnˇe zvyˇsuje u ´ˇcinnost komprese. U entropick´ ych algoritm˚ u v grafu nenalezneme s´eriov´e ˇrazen´ı, coˇz vypl´ yv´a z jejich funkce — nepoznali bychom rozd´ıl. . . Skupina slovn´ıkov´ ych algoritm˚ u netrp´ı neduhem nafouknut´ı“ mal´ ych soubor˚ u. ” Kompresn´ı u ´ˇcinnost se ust´al´ı obdobnˇe jako u minul´e skupiny, nedosahuje vˇsak tak dobr´ ych v´ ysledk˚ u. I zde je zˇrejm´a v´ yhoda pouˇzit´ı delta k´odov´an´ı veliˇcin. V dalˇs´ım kroku dokumentovan´em na obr. (3) jsme testovali z´avislost zmˇeny u ´ˇcinnosti komprese na rozptylu veliˇcin v generovan´ ych datech, jenˇz byl nastavovan´ ym parametrem. Mˇeˇren´ı ukazuje jak se chovaj´ı kompresn´ı algoritmy pˇri n´ızk´e a vysok´e entropii. V re´aln´em svˇetˇe jsou si namˇeˇren´e hodnoty vzhledem k intervalu z´aznamu v pomˇernˇe dlouh´em ˇcasov´em u ´seku velice bl´ızk´e a doch´az´ı pouze k mal´ ym odchylk´am, ˇcehoˇz d˚ usledkem je u ´ˇcinnˇejˇs´ı komprese. Entropick´e algoritmy opˇet dosahuj´ı lepˇs´ıch v´ ysledk˚ u. Vodorovn´e ˇc´ary, v legendˇe oznaˇcen´e jako PQ, zobrazuj´ı kompresn´ı pomˇer dosaˇzen´ y pˇri rozptylu odpov´ıdaj´ıc´ım limit˚ um EN 50160. Tento pˇr´ıpad popisuje situaci, kterou bychom mohli oˇcek´avat v s´ıti n´ızk´eho napˇet´ı. Mˇeˇren´ı f´azov´eho napˇet´ı v intervalu jedn´e minuty bˇehem cel´eho t´ ydne pomoc´ı re´aln´eho mˇeˇr´ıc´ıho pˇr´ıstroje vˇsak ukazuje maxim´aln´ı odchylku m´enˇe neˇz 1,2 V. To znamen´a, ˇze pˇri nomin´aln´ım napˇet´ı s´ıtˇe 230 V doch´az´ı k nejvˇetˇs´ı odchylce 0,22 % okolo klouzaj´ıc´ı stˇredn´ı hodnoty po relativnˇe dlouhou dobu. 4.1.2 Rychlost komprese V dalˇs´ım experimentu jsme provedli opakovan´a mˇeˇren´ı rychlosti jednotliv´ ych kompresn´ıch knihoven na stejn´em datov´em souboru. Obr. (4) ukazuje, jak se rychlosti liˇs´ı. Pro minimalizaci chyb mˇeˇren´ı jsme kaˇzd´ y test spouˇstˇeli opakovanˇe a pouˇzili
34
Obr´azek 4: Vliv mnoˇzstv´ı z´aznam˚ u v archivu na rychlost komprese pr˚ umˇern´e hodnoty. V´ ysledky se vˇsak liˇsily minim´alnˇe vzhledem k pouˇzit´ı ˇcasovaˇce mˇeˇr´ıc´ıho ˇcas bˇehu programu s rozliˇsen´ım 1 ns. Je potˇreba zm´ınit, ˇze jsme pro testy pouˇzili veˇrejnˇe dostupn´e knihovny s r˚ uznou u ´rovn´ı optimalizace, coˇz znamen´a, ˇze v´ ysledky je velice tˇeˇzk´e pˇresnˇe porovn´avat. Pro hrub´ y odhad v´ ypoˇcetn´ı n´aroˇcnosti jednotliv´ ych algoritm˚ u vˇsak graf postaˇcuje. Je zˇrejm´e, ˇze rychlost komprese se liˇs´ı velice z´asadnˇe — i o nˇekolik ˇr´ad˚ u. Pouˇzit´a implementace LZ77 byla extr´emnˇe pomal´a, protoˇze nevyuˇz´ıvala ˇza´dnou optimalizaci, zato vˇsak byla optim´aln´ı ve sv´e podstatˇe v˚ uˇci kompresn´ımu pomˇeru. HUF i LZ maj´ı opˇet dle oˇcek´av´an´ı velice podobnou, dostateˇcnou rychlost i pro pouˇzit´ı v embedded zaˇr´ızen´ı. Rychlostnˇe optimalizovan´e MiniLZO je evidentnˇe a nepopiratelnˇe nejrychlejˇs´ı v cel´em testu. 4.1.3 Shrnutí Optimálních metod ukládání dat v PMD Vysvˇetlili a pˇredvedli jsme v´ yhody a nev´ yhody r˚ uzn´ ych kompresn´ıch algoritm˚ u pouˇzit´ ych na mˇeˇren´a data virtu´aln´ıho PMD. Pro smyslupln´e velikosti datov´ ych soubor˚ u s vhodnˇe zvolen´ ym zp˚ usobem ukl´ad´an´ı a k´odov´an´ı jsme dos´ahli znaˇcn´eho sn´ıˇzen´ı velikost´ı v´ ystupu. Typicky bylo pomoc´ı nemodifikovan´ ych v´ıce´ uˇcelov´ ych kompresn´ıch algoritm˚ u dosaˇzeno 80-ti aˇz 50-ti procentn´ı relativn´ı velikosti v´ ystupn´ıho souboru. Nejlepˇs´ımi se jev´ı ve vybran´ ych oblastech delta k´odovan´ y stream komprimovan´ y MiniLZO a Huffman. MiniLZO bylo jednoznaˇcnˇe nejrychlejˇs´ı kompresn´ı knihovnou, zat´ımco Huffman pod´aval nejlepˇs´ı v´ ysledky v u ´ˇcinnosti komprese. Pouˇzili jsme BCL implementaci HUF kompresn´ıho algoritmu, kter´ y podle jeho autora nen´ı optimalizov´an na rychlost. Vˇeˇr´ım, ˇze dalˇs´ımi optimalizacemi by bylo moˇzn´e rychlost jeˇstˇe zv´ yˇsit.
35
Obr´azek 5: Re´aln´e a generovan´e vzorky napˇet´ı a proudu D´ale jsme uk´azali, ˇze v´ ybˇerem spr´avn´eho pˇredzpracov´an´ı vstupn´ıch dat m˚ uˇzeme dos´ahnout zaj´ımav´e redukce velikosti v´ ystupu. S´eriov´e ˇrazen´ı a delta k´odovan´ı u nejrychlejˇs´ıho MiniLZO a delta k´odov´an´ı u HUF zv´ yˇsilo u ´ˇcinnost komprese o dalˇs´ıch 20 % oproti surov´ ym dat˚ um. V budoucnu pl´anujeme implementaci vybran´ ych kompresn´ıch technik do vyv´ıjen´eho re´aln´eho mˇeˇr´ıc´ıho zaˇr´ızen´ı na platformˇe ARM.
4.2 Bezztrátová kódování a kompresní algoritmy aplikované na data kvality elektrické energie 4.2.1 Srovnání generovaných a reálných dat V prvn´ım experimentu jsme testovali parametry generovan´ ych dat ve srovn´an´ı s hodnotami re´alnˇe namˇeˇren´ ymi. Na obr. (5) je pˇr´ıklad, kter´ y ukazuje nˇekolik vygeneroˇ van´ ych pr˚ ubˇeh˚ u (slabˇe) a jeden pr˚ ubˇeh namˇeˇren´ y re´aln´ ym PMD (silnˇe). Cerven´ a siln´a ˇca´ra je v praxi namˇeˇren´e napˇet´ı, modr´a proud. Na z´akladˇe tˇechto experiment˚ u jsme vylepˇsili moˇznosti nastaven´ı a vyladili gener´ator tak, aby virtu´alnˇe generovan´e pr˚ ubˇehy napˇet´ı a proud˚ u mˇely stejn´e statistick´e parametry, jako re´aln´a data. Toto je z´asadn´ı vylepˇsen´ı oproti sekci (2.1) v naˇs´ı minul´e pr´aci, kde pouze n´ahodnˇe generovan´e archivy zapˇriˇcinily z´asadnˇe horˇs´ı v´ ykonnost komprese ve srovn´an´ı s re´aln´ ymi mˇeˇren´ımi. 4.2.2 Stabilita komprese S v´ıce n´ahodnˇe generovan´ ymi virtu´alnˇe namˇeˇren´ ymi daty jsme pˇri stejn´em experimentu mohli testovat celkovou stabilitu u ´ˇcinnosti komprese. Pro rozumnˇe velik´e
36
´ cinnost komprese pˇri norm´aln´ım a delta k´odov´an´ı Obr´azek 6: Uˇ bloky archivn´ıch dat algoritmy pod´avaly pˇrekvapivˇe stabiln´ı v´ ykon a rozptyl kompresn´ıch pomˇer˚ u byl obvykle pod 3 %. 4.2.3 Vliv kódování Dalˇs´ım v´ yznamn´ ym faktorem, ovlivˇ nuj´ıc´ım u ´ˇcinnost komprese, je zp˚ usob ukl´ad´an´ı veliˇcin pˇri tvorbˇe archivu. V n´asleduj´ıc´ım experimentu jsme pouˇzili bˇeˇzn´e a delta k´odov´an´ı pˇri tˇrech r˚ uzn´ ych velikostech archivn´ıho souboru. Jak je zˇrejm´e z obr. (6), vˇetˇsinou delta k´odov´an´ı zv´ yˇsilo u ´ˇcinnost komprese. V nˇekter´ ych pˇr´ıpadech pomˇernˇe z´asadnˇe — o v´ıce neˇz 10 %. Z grafu m˚ uˇzeme tak´e vyˇc´ıst, ˇze mnohem citlivˇejˇs´ı na zp˚ usob ukl´ad´an´ı jsou entropick´e metody. 4.2.4 Vliv velikosti souboru Na obr. (7) je prezentov´an vliv velikosti archivu na dosaˇzen´e kompresn´ı pomˇery testovan´ ych algoritm˚ u. Byly pouˇzity tˇri r˚ uzn´e varianty nastaven´ı obsahu archivn´ıch z´aznam˚ u — pouze napˇet´ı, napˇet´ı, proudy a harmonick´e a nakonec pln´e z´aznamy vˇsech veliˇcin, kter´e PMD monitoruje vˇcetnˇe vˇsech typ˚ u v´ ykon˚ u apod. Jak je vidˇet, nejlepˇs´ıch v´ ysledk˚ u dosahuje blokov´ y algoritmus bzip2, u nˇehoˇz kompresn´ı pomˇer kles´a aˇz na 20 % p˚ uvodn´ı velikosti. AC a HUF metody s pomˇery okolo 30ti % mohou b´ yt st´ale zaj´ımav´e v situac´ıch, kde je potˇreba jednoduch´ y a pˇritom v´ ykonn´ y algoritmus. Nakonec varianty LZ kompresn´ıch algoritm˚ u reprezentovan´e MiniLZO st´ale nab´ızej´ı smyslupln´e kompresn´ı pomˇery, ale zd´a se, ˇze jsou nejm´enˇe vhodn´e v aplikac´ıch pro kompresi datab´az´ı kvality elektrick´e energie. D´ale m˚ uˇzeme vyˇc´ıst i z´avislost mezi efektivitou a velikost´ı archivu — v´ ykon vˇetˇsiny algoritm˚ u se v naˇsem pˇr´ıpadˇe ust´al´ı okolo 500 z´aznam˚ u v archivu.
37
Obr´azek 7: Ilustrace vlivu velikosti vstupn´ıho souboru na u ´ˇcinnost komprese
Obr´azek 8: Srovn´an´ı rychlosti komprese vˇcetnˇe Gzip a Bzip2 4.2.5 Rychlost komprese Posledn´ım experimentem bylo mˇeˇren´ı pr˚ umˇern´e rychlosti komprese. Je tˇreba zm´ınit, ˇze mˇeˇren´ı prob´ıhalo na bˇeˇzn´em desktopu, avˇsak z v´ ysledk˚ u m˚ uˇzeme usuzovat na relativn´ı rychlosti v embedded zaˇr´ızen´ıch. V´ ysledek je na obr. (8). V re´aln´em zaˇr´ızen´ı se m˚ uˇze v´ ysledek liˇsit na z´akladˇe pouˇzit´e architektury (ARM, Intel Atom, x86 apod.) a mnoˇzstv´ı operaˇcn´ı pamˇeti. Dalˇs´ım pro srovn´an´ı nepˇr´ızniv´ ym faktem je r˚ uzn´a u ´roveˇ n optimalizace jednotliv´ ych kompresn´ıch knihoven a program˚ u, takˇze je velmi obt´ıˇzn´e srovn´avat jednotliv´e v´ ykony. Co je vˇsak zˇrejm´e, i nejpomalejˇs´ı algoritmus bzip2, pouˇzit´ y v naˇsem testu, je st´ale dostateˇcnˇe rychl´ y v porovn´an´ı s mnoˇzstv´ım dat typicky generovan´ ych PMD za cel´ y den.
38
4.2.6 Shrnutí bezztrátového kódování a kompresních algoritmu˚ aplikovaných na data kvality elektrické energie S ohledem na naˇse pˇredchoz´ı experimenty s daty kvality elektrick´e energie m˚ uˇzeme ˇr´ıci, ˇze pouˇzit´ım bˇeˇzn´ ych kompresn´ıch algoritm˚ u dos´ahneme z´asadn´ıho zlepˇsen´ı vyuˇzit´ı u ´loˇziˇstˇe dat v modern´ım PMD. Vytvoˇrili jsme modul´arn´ı syst´em schopn´ y generovat pseudon´ahodn´a data pro automatizovan´e a detailnˇejˇs´ı zkoum´an´ı chov´an´ı tˇechto algoritm˚ u. Pro ovˇeˇren´ı spr´avnosti jsme provedli nˇekolik simulac´ı s pouˇzit´ım gener´atoru a porovnali v´ ysledky s re´aln´ ymi daty z´ıskan´ ymi pˇr´ımo z mˇeˇr´ıc´ıho pˇr´ıstroje. Jak pro PMD, tak pro v´ ypoˇcetn´ı modul gener´atoru jsme pouˇzili stejn´ y ANSI C zdrojov´ y k´od, takˇze jsme schopni generovat bin´arn´ı pole naprosto stejn´e struktury. Nav´ıc byl blok gener´atoru doplnˇen o zvl´aˇstn´ı blok umoˇzn ˇuj´ıc´ı zmˇenu k´odov´an´ı a vytv´aˇren´ı r˚ uzn´ ych podmnoˇzin v´ ystupn´ıch dat. S pomoc´ı gener´atoru jsme experiment´alnˇe ovˇeˇrili, ˇze pouˇzit´ı univerz´aln´ıch kompresn´ıch algoritm˚ u m˚ uˇze v´ yznamnˇe zlepˇsit vyuˇzit´ı pamˇeti v embedded PMD. Vliv vstupn´ıho k´odov´an´ı a stabilita dosaˇzen´ ych v´ ysledk˚ u byly ilustrov´any na r˚ uzn´ ych typech dat. Nejv´ ykonnˇejˇs´ım algoritmem v naˇsich testech je bzip2 ze skupiny blokov´ ych kompresn´ıch metod. S delta k´odov´an´ım byl algoritmus schopen sn´ıˇzit velikost souboru na pouh´ ych 20 % jeho p˚ uvodn´ı velikosti. Naˇse budouc´ı pr´ace by se mohla zamˇeˇrit na dalˇs´ı vylepˇsov´an´ı implementovan´eho gener´atoru, pˇr´ıpadnˇe doplnˇen´ı dalˇs´ıch parametr˚ u tak, aby se sign´aly generovan´ ych napˇet´ı a proud˚ u jeˇstˇe tˇesnˇeji pˇribl´ıˇzily modelovan´e realitˇe. Kromˇe toho chceme pouˇz´ıt existuj´ıc´ı j´adro VMP pro vytvoˇren´ı skuteˇcn´eho mˇeˇr´ıc´ıho pˇr´ıstroje, kter´ y by nativnˇe podporoval kompresi a mˇel by doplnˇeny komunikaˇcn´ı a vizualizaˇcn´ı moduly. S takov´ ym zaˇr´ızen´ım by bylo moˇzn´e jeˇstˇe preciznˇeji analyzovat poˇzadavky re´aln´eho syst´emu.
4.3 Dílˇ cí poznatky ˇ asu Mˇ eˇrení c Ze zkuˇsenost´ı s mˇeˇren´ım ˇcasu pomoc´ı funkc´ı z time.h vypl´ yv´a, ˇze funkce mohou m´ıt r˚ uzn´e nejmenˇs´ı rozliˇsen´ı v r˚ uzn´ ych operaˇcn´ıch syst´emech v r´amci jednoho hardwaru. Jedn´a se tedy o rozd´ıl v implementaci. Je vˇsak tˇreba ˇr´ıci, ˇze nejniˇzˇs´ı ˇr´ady prvku u d˚ uleˇzit´e, protoˇze i re´aln´e roztv nsec ve struktuˇre timespec nejsou ve vˇetˇsinˇe pˇr´ıpad˚ liˇsen´ı ve stovk´ach ˇci tis´ıc´ıch nanosekund pˇresahuje potˇreby pˇresnosti mˇeˇren´ı (pokud mˇeˇr´ıme ˇcasy v ˇr´adu milisekund aˇz jednotek sekund). Nab´ız´ı se tak´e ot´azka, zda nejsou diskriminov´any“ algoritmy, jejichˇz ˇcas v´ ypoˇctu ” je mˇeˇren pomoc´ı re´aln´eho ˇcasu a ne ˇcasu vl´akna procesu — d˚ uvod viz (3.4.2). Ano,
39
jsou znev´ yhodnˇeny, protoˇze spouˇstˇen´ı pˇr´ıkazu v shellu a start dalˇs´ıho programu m´a jistˇe nezanedbatelnou reˇzii. Z´aleˇz´ı vˇsak na okolnostech. Je jasn´e, ˇze pˇri testech rychlosti komprese jsme nemˇeˇrili s mal´ ym mnoˇzstv´ım dat tak, aby se tento handicap mohl uplatnit. V pˇr´ıpadˇe velmi mal´ ych komprimovan´ ych soubor˚ u je vˇsak zan´aˇsena znaˇcn´a chyba. K jej´ımu pˇresn´emu urˇcen´ı bychom museli porovnat ˇcasy v´ ypoˇctu pˇri vol´an´ı jako extern´ı program s integrovan´ ym ˇreˇsen´ım. Využití GOTO Tento odstavec m˚ uˇze docela jistˇe na mnoho program´ator˚ u vyˇsˇs´ıch jazyk˚ u p˚ usobit jako provokace, ale poprv´e v ˇzivotˇe (respektive ve svoj´ı kr´atk´e praxi s jazykem C) jsem narazil na situaci, kdy je pouˇzit´ı goto ide´aln´ım ˇreˇsen´ım probl´emu. Do funguj´ıc´ıho main.c VMP jsem se rozhodl doplnit pˇrep´ınaˇc ZACYKLIT viz (3.5.1). Pouˇzit´ım standardn´ıch postup˚ u, tedy nˇejak´eho flagu a funkce while, for nebo do– while, by se k´od nejen znepˇrehlednil, ale i dosti zkomplikoval. Pomoc´ı #ifdef ZACYKLIT jsem jednoduˇse vloˇzil znaˇcku ZNOVU: na m´ısto ˇz´adan´eho skoku a goto ZNOVU; spolu s podm´ınkou ukonˇcen´ı programu na m´ısto, odkud se m´a sk´akat. ˇ sen´ı funguje a z´asah do k´odu je minim´aln´ı. Reˇ
40
Závˇ ery a doporuˇ cení S vyuˇzit´ım zdrojov´ ych k´od˚ u skuteˇcn´eho pˇr´ıstroje jsme implementovali modul´arn´ı VMP. K jeho vzniku vedla pomˇernˇe spletit´a cesta, vedouc´ı pˇres experimenty s kompres´ı, zp˚ usoby generov´an´ı archiv˚ u a vzork˚ u sign´al˚ u. Na pˇr´ıstroji jsme provedli ˇradu experiment˚ u, jejichˇz v´ ysledk˚ u v budoucnu vyuˇzijeme pˇri volbˇe algoritmu optimalizuj´ıc´ıho vyuˇzit´ı pamˇeti v PMD. D´ılˇc´ı v´ ysledky jsme u ´spˇeˇsnˇe prezentovali na dvou mezin´arodn´ıch konferenc´ıch EPE [8] a CIRED [9]. Ze studia re´aln´ ych dat jsme zjistili, ˇze kol´ıs´an´ı napˇet´ı v s´ıti je obvykle daleko pod limitem dan´ ym normou a naˇse mˇeˇren´ı v souvislosti s ˇc´ast´ı (2.1) byla tedy pro hodnocen´ı u ´ˇcinnosti komprese zbyteˇcnˇe n´aroˇcn´a. Mnohem pokroˇcilejˇs´ı pˇr´ıprava“ dat ” pro komprimaci pomoc´ı speci´aln´ıho gener´atoru vzork˚ u sign´alu v souˇcinnosti s j´adrem re´aln´eho PMD (2.2) pˇrinesla svoje ovoce a po peˇcliv´em nastaven´ı algoritmu generov´an´ı a vyladˇen´ı konfiguraˇcn´ıho souboru jsme z´ıskali data, jejichˇz velikost dok´azaly kompresn´ı algoritmy aˇz pˇetin´asobnˇe zmenˇsit. Co je vˇsak d˚ uleˇzitˇejˇs´ı, takto z´ıskan´e archivy mnohem v´ıce koresponduj´ı s tˇemi z re´aln´eho svˇeta a budouc´ı vyuˇzit´ı komprese ve skuteˇcn´em embedded zaˇr´ızen´ı je naˇs´ım c´ılem. Ze vˇsech proveden´ ych test˚ u vystupuj´ı jako v´ıtˇezov´e blokov´e kompresn´ı algoritmy bzip2 a gzip, pˇriˇcemˇz v tˇesn´em z´avˇesu sekunduj´ı entropick´e algoritmy SF a Huffman, ale zaj´ımav´e v´ ysledky pod´avaly pˇri vhodn´em k´odov´an´ı i slovn´ıkov´e algoritmy LZ77 a rychlostnˇe optimalizovan´e MiniLZO. V u ´ˇcinnosti komprese dle oˇcek´av´an´ı naprosto nedostateˇcn´ y algoritmus RLE d´ıky sv´e extr´emn´ı jednoduchosti naopak vˇsechny por´aˇz´ı svou rychlost´ı. Jeho u ´ˇcinnost je vˇsak natolik zanedbateln´a, ˇze by se jeho implementace v ˇz´adn´em pˇr´ıpadˇe nevyplatila. Zaj´ımavˇejˇs´ı situace je v pˇr´ıpadˇe MiniLZO, kter´ y je druh´ ym nejrychlejˇs´ım algoritmem v testech a pˇritom pod´av´a smyslupln´e v´ ysledky. Pokud by nebyly z´asadn´ı poˇzadavky na rychlost komprese, mohli bychom uvaˇzovat o pouˇzit´ı LZ77, Huffman, SF nebo AC, kter´e pod´avaly velice dobr´e v´ ysledky kompresn´ı u ´ˇcinnosti. V ide´aln´ım pˇr´ıpadˇe, pˇri pˇrebytku v´ ykonu i pamˇeti, bychom jistˇe vyb´ırali mezi komplexn´ımi algoritmy bzip2 a gzip. Nezaj´ımali jsme se pouze o r˚ uzn´e kompresn´ı algoritmy, ale sledovali jsme i vliv r˚ uzn´ ych k´odov´an´ı a ˇrazen´ı dat v archivech. Pouˇzit´ı s´eriov´eho ˇrazen´ı nebo delta k´odov´an´ı bylo na z´akladˇe jejich funkce u jednotliv´ ych algoritm˚ u a v korespondenci s pˇredpoklady v´ıce ˇci m´enˇe vhodn´e. Je logick´e, ˇze s´eriov´e ˇrazen´ı entropick´ y algoritmus vlastnˇe ani nepozn´a, zat´ımco slovn´ıkov´ y algoritmus nebo dokonce RLE bude vykazovat z´asadn´ı zlepˇsen´ı kompresn´ı u ´ˇcinnosti. T´emˇeˇr univerz´aln´ıho zlepˇsen´ı dosahujeme pouˇzit´ım delta k´odov´an´ı, kter´e z´asadnˇe sn´ıˇz´ı mnoˇzstv´ı r˚ uzn´ ych znak˚ u ve vˇsech z´aznamech v archivu (kromˇe prvn´ıho). Uk´azalo se tak´e, ˇze blokovˇe tˇr´ıd´ıc´ı kombinovan´e algoritmy zastoupen´e bzip2 a gzip jsou na zmˇenu k´odov´an´ı nejm´enˇe citliv´e, protoˇze podobn´e transformace s daty samy internˇe prov´adˇej´ı. Pokud vˇsak dopˇredu
41
pˇresnˇe zn´ame strukturu dat a jiˇz pˇri ukl´ad´an´ı pouˇzijeme delta k´odov´an´ı, n´asledn´a komprese jednoduˇsˇs´ım algoritmem bude vykazovat srovnateln´e v´ ysledky a dokonce bude cel´ y proces rychlejˇs´ı, neˇz pˇri pouˇzit´ı sloˇzit´eho (= pomal´eho) algoritmu. Jednotliv´e bˇehy gener´ator˚ u d´avaly po kompresi velice bl´ızk´e v´ ysledky jak v kompresn´ım pomˇeru, tak v rychlosti. Dle tohoto zjiˇstˇen´ı jsme opˇet pozdˇeji usoudili, ˇze postupy mˇeˇren´ı pouˇz´ıvan´e pˇri prvn´ıch experimentech s gener´atorem archiv˚ u byly zbyteˇcnˇe precizn´ı a pro pouh´e srovn´an´ı algoritm˚ u pˇr´ımo megalomansk´e. Kaˇzd´e mˇeˇren´ı jsme opakovali se stejn´ ym nastaven´ım desetkr´at a prezentovali pr˚ umˇern´e hodnoty. Pokud nˇekdy doch´azelo ke zˇretelnˇejˇs´ım odchylk´am, bylo to v pˇr´ıpadˇe velice mal´ ych archiv˚ u, kter´e se vˇsak v praxi vyskytuj´ı minim´alnˇe a pokud ano, u tak mal´eho archivu komprese stejnˇe nem´a rozumn´ y smysl. Poznatky jsme se ˇr´ıdili pˇri experimentech s gener´atorem vzork˚ u sign´alu. Zde jsme jiˇz mˇeˇren´ı neopakovali vˇzdy, pouze jsme ovˇeˇrovali nam´atkou, zda nedoch´az´ı k popsan´e nestabilitˇe. V budoucnu je moˇzn´e vydat se mnoha smˇery. Jedn´ım z nich je dalˇs´ı vylepˇsov´an´ı gener´atoru vzork˚ u sign´al˚ u (gener´ator archiv˚ u je dnes uzavˇrenou z´aleˇzitost´ı). Na gener´atoru je bez nads´azky moˇzn´e pracovat donekoneˇcna, protoˇze je neust´ale moˇzn´e pˇrid´avat nov´e funkce, upravovat algoritmus nebo moˇznosti konfiguraˇcn´ıho souboru. Dalˇs´ım smˇerem je dotaˇzen´ı“ VMP do stavu, kdy by dok´azal nejen prov´adˇet uˇzi” vateli skryt´e v´ ypoˇcty, ale i vizualizovat mˇeˇren´a data a veliˇciny, zdokonalit a rozˇs´ıˇrit s´ıt’ovou komunikaci, doplnit moˇznost ovl´adat bˇeh nebo vytvoˇrit GUI atd. Posledn´ım moˇzn´ ym smˇerem je pˇr´ıprava a praktick´a implementace na skuteˇcn´ y hardware, respektive fyzick´e PMD s implementovanou schopnost´ı komprese dat. Jak bylo zm´ınˇeno v u ´vodu, cel´a pr´ace skuteˇcnˇe vznikla s vyuˇzit´ım pouze voln´eho software, knihoven a zdrojov´ ych k´od˚ u. I kdyˇz bylo tˇreba pˇrekonat mnoho pˇrek´aˇzek, nyn´ı mohu s klidn´ ym srdcem ˇr´ıci, ˇze vytvoˇren´ı jak´ekoli technick´e zpr´avy, v´ yvoj software i obecn´e pouˇz´ıv´an´ı linuxov´eho operaˇcn´ıho syst´emu je pruˇznˇejˇs´ı, pohodlnˇejˇs´ı, pˇr´ıjemnˇejˇs´ı, rychlejˇs´ı a pˇritom zdarma. Je ˇskoda, ˇze st´ale jeˇstˇe ˇzijeme uprostˇred spoleˇcnosti zarytˇe br´an´ıc´ı monopoly21 a odm´ıtaj´ıc´ı zmˇenu. . .
21
I am the Linux/UNIX user only!!! It is because of Linux/UNIX is like teepee. No Windows, no ” Gates, Apache inside!!!“ [podpis nadˇsen´eho uˇzivatele CIJOML na serveru www.abclinuxu.cz]
42
Použitá literatura a prameny ˇ [1] CSN EN 50160 Charakteristiky napˇet´ı elektrick´e energie dod´avan´e z veˇrejn´e distribuˇcn´ı s´ıtˇe. [2] Voltage Characteristics in Public Distribution Systems. 2000. [3] Testing and measurement techniques - General guide on harmonics and interharmonics measurements and instrumentation for power supply systems and equipment connected thereto. 2002. [4] Testing and measurement techniques – Power quality measurement methods. 2003. [5] Pravidla provozov´an´ı distribuˇcn´ıch soustav, Pˇr´ıloha 3: Kvalita elektˇriny v distribuˇcn´ı soustavˇe a zp˚ usoby jej´ıho zjiˇst’ov´an´ı. 2006. [6] FRIGO, M.; JOHNSON, S. G.: Fastest Fourier Transform in the West. 2009. URL http://www.fftw.org/ [7] GEELNARD, B.: Basic Compression Library Manual API version 1.2. 2006. URL http://bcl.comli.eu/ [8] KRAUS, J.; BUBLA, V.: Optimal Methods for Data Storage in Performance Measuring and Monitoring Devices. 2008. ˇ [9] KRAUS, J.; TOBISKA, T.; BUBLA, V.: Looseless Encodings and Compression Algorithms Applied on Power Quality Datasets. 2009. [10] OBERHUMER, M.: LZO Real-time data compression library, Version 2.02. 2005. URL http://www.oberhumer.com/
43
Nomenklatura ANSI C Verze jazyka C standardizovan´a v roce 1990. ´ ´ KOMPRESE Zmenˇsen´ı velikosti souboru bez ztr´aty informace. BEZZTRATOV A ´ ´I STROM Tabulka symbol˚ BINARN u uspoˇra´dan´ ych dle pravdˇepodobnosti v´ yskytu v datov´em souboru. ´ ´ ´I Ukl´ad´a se pouze rozd´ıl aktu´aln´ı a minul´e hodnoty veliˇciny. DELTA KODOV AN ˇ ´IZEN´I Zabudovan´ EMBEDDED ZAR y, jedno´ uˇcelov´ y, specializovan´ y pˇr´ıstroj. ENTROPIE M´ıra neuspoˇra´danosti symbol˚ u v souboru. FLUKTUACE N´ahodn´e kol´ıs´an´ı veliˇciny kolem stˇredn´ı hodnoty. GNU/LINUX J´adro operaˇcn´ıho syst´emu, knihovny a n´astroje z projektu GNU. ´ ´ ´I Transformace informace z jednoho syst´emu znak˚ KODOV AN u do jin´eho. MONITORING Sledov´an´ı, ovl´ad´an´ı a z´ısk´av´an´ı dat ze vzd´alen´eho pˇr´ıstroje. PMD Performance Measuring and Monitoring Device. ´ ´ UKLAD ´ AN ´ ´I Zapisuj´ı se cel´e bloky vˇsech veliˇcin — obvykl´e pˇri PROKLADAN E pr´aci v re´aln´em ˇcase. ´ ´ C ˇ ´ISLA Vytv´aˇrej´ı posloupnost, kter´a se zd´a b´ PSEUDONAHODN A yt n´ahodn´a. Jsou vˇsak vytv´aˇrena deterministick´ ym algoritmem. REDUNDANCE DAT Nadbyteˇcnost. V´ıce dat, neˇz je nutn´e. SHELL Interpret pro vytvoˇren´ı pˇr´ıkazov´eho ˇra´dku. SLOVN´IK V naˇsem pˇr´ıpadˇe tabulka opakuj´ıc´ıch se sekvenc´ı znak˚ u. ´ ´ UKLAD ´ AN ´ ´I Hodnoty kaˇzd´e veliˇciny jsou v archivu v souvisl´em bloku. SERIOV E VMP Autonomn´ı Virtu´aln´ı Mˇeˇr´ıc´ı Pˇr´ıstroj urˇcen´ y k simulac´ım.
44
Rejstˇrík embedded, 13, 38 embedded zaˇr´ızen´ı, 10, 41 entropie, 13, 34, 37 EPE, 11, 12, 41
AC, 16, 25, 37, 41 AktualniHodnoty, 30 ANSI C, 13, 39 archiv, 12 archiv.bin, 29 ArchivniData, 29 archivy, 29 ARM, 13, 36, 38
fftw3, 24 fftw complex, 30 fftw destroy plan(), 30 FFTW ESTIMATE, 30 fftw execute(), 30 FFTW FORWARD, 30 fftw plan dft 1d(), 30 firmware, 24 float, 23
BASH, 17 BCL, 25 benchmark, 24 bin´arn´ı strom, 33 Burrows-Wheeler, 16 bzip2, 13, 16, 25, 39, 41
GCC, 17 gen.bin, 24 gen.conf, 15, 23 gen.m, 24, 31 gener´ator dat, 28, 42 gener´ator vzork˚ u sign´al˚ u, 20, 42 GENEROVAT, 27, 28 generuj(), 21 glob´aln´ı pravdˇepodobnosti, 17 glob´aln´ı rozptyly, 17 GNU, 16 GNU/Linux, 4, 5, 15, 17, 24, 42 goto, 40 graf.m, 23, 31 GUI, 42 gzip, 13, 16, 25, 41
C/C++, 17 CIRED, 11, 14, 41 clock gettime(), 26, 29 CLOCK PROCESS CPUTIME ID, 26 CLOCK REALTIME, 26 Compressed***.dat, 26, 31 CSMPData, 30 csv2conf, 31 Ctrl+C, 28 DataProKompresi, 17 Date, 29 Debian, 17 Decompressed***.dat, 31 DEFLATE, 16 dekomprese, 31 delta k´odov´an´ı, 19, 29, 33, 36, 39, 41 DELTA KODOVANI, 29 DFT, 17, 24, 29 dot2comma, 32 double, 23
hardware, 10, 24, 27, 42 HARMONICKA, 21 HUF, 13, 33, 35, 37 Huffman, 25, 41 int16, 23
45
int32, 23 Intel Atom, 38 INTERVAL, 21
PMD, 10, 12, 15, 35, 37, 39, 41 port, 28 PQ, 28 PQZIP, 16 preprocesor, 28 pseudon´ahodn´a ˇc´ısla, 17
jazyk C, 4, 11, 17, 40 jazyk Pascal, 4 k´odov´an´ı, 12, 41 knihovny, 10, 17, 24, 29, 30, 35, 42 kompatibilita, 12 kompresn´ı blok, 10 konektivita, 12 Koprnick´ y, Jan, 4 Kraus, Jan, 4
re´aln´ y a procesorov´ y ˇcas, 26 REALNA SIMULACE, 27, 28 RLE, 13, 16, 25, 41 rozdelData, 32 rozptyl, 12, 34, 37 RTC DATE, 28 RTC GetDate(), 29 RTC GetTime(), 29 RTC TIME, 28
libc, 26 libfftw3, 17, 29 libxml2, 17 limit, 22, 28, 34, 41 Linux.c, 24, 29 log.txt, 25 LZ, 13, 16, 25, 37 LZ77, 14, 35, 41 LZO, 14
s´ıt’ov´a komunikace, 10, 42 s´eriov´e ˇrazen´ı, 33, 41 sed, 32 serial, 33, 34 SF, 13, 33, 41 SH, 25 shuffled, 33 sig io(), 28 SmpArcConfig.xml, 24, 28 SmpPQSettings, 28 socket, 28 StahniActData, 31 standardy, 12 svobodn´ y software, 4, 10, 42 synt´eza, 15
main(), 27 main.c, 27, 40 make, 17 Makefile, 17, 30 MiniLZO, 14, 25, 35, 37, 41 MinuleHodnoty, 29 modul komprese, 24 modul´arn´ı syst´em, 15, 41 monitoring, 12
TCP, 28 TCP/IP, 27 termination handler(), 28 Time, 29 time.h, 26, 29, 39 time t, 29 timespec, 26, 28, 29, 39
NetBeans, 17 Octave, 31 octave, 22, 24 odchylka, 34, 42 odchylka, 19 odchylkov´e koeficienty, 21
46
tm, 29 Tobiˇska, Tom´aˇs, 4 transformace, 16, 30, 41 Ubuntu, 17 usleep(), 28 v´ ypoˇcetn´ı blok, 10, 15, 24, 28, 39 v´ ypoˇcty, 10, 18, 21, 27, 28, 42 vizualizace, 39, 42 VMP, 5, 20, 26, 27, 29, 30, 39, 41, 42 vypis(), 25 VYPISOVAT VSE, 27, 28 vzorkovac´ı frekvence, 23 x86, 38 XML, 17, 26, 31 ZACYKLIT, 27, 28, 40 zdrojov´e k´ody, 4, 10, 17, 42 znaky, 13, 14, 21, 23, 41
47