pondelok 27. decembra 2021

Detekčná charakteristika - MATLAB

 Dnes si ukážeme výpočet a vizualizáciu detekčnej charakteristiky ultrazvukových senzorov v prostredí MATLAB. Vizualizácie boli využité v projekte Hladinomer pre lepšiu reprezentáciu detekčnej charakteristiky používateľovi webaplikácie pri výbere ultrazvukového senzora, ktorého charakteristika vyhovuje priemeru studne pre meranie bez odrazov.

Detekčná charakteristika vyjadruje schopnosť detekcie plochy na určitú vzdialenosť so známou šírkou lúča. Ultrazvukové senzory vzdialenosti fungujú na princípe vysielanie signálu Trigger s dĺžkou 10 mikrosekúnd, ktorý sa od detekovanej plochy odrazí a vráti sa do prijímača - Echo. Na základe času príchodu signálu vieme určiť vzdialenosť v metroch, resp. centimetroch. 

V prípade použitia senzora s nevhodnou detekčnou charakteristikou sa zvyšuje čas príchodu signálu, prípadne sa signál nevráti vôbec z dôvodu príliš veľkého počtu odrazov od stien studne. V projekte Hladinomer boli využité dva druhy ultrazvukových senzorov vzdialenosti. Ako komunikačné mikrokontroléry boli použité Arduino Uno, ESP8266, či ESP32. Prenosové technológie Ethernet / WiFi / IoT sieť Sigfox.

Prvým typom ultrazvukového senzora v projekte bol HC-SR04 (existujú aj kompatibilné senzory HC-SR05, HY-SRF05, HY-SRF06, DYP-ME007), ktorý má detekčnú charakteristiku 15°. Senzor je veľmi lacný a veľmi obľúbený. Nevýhodou je určite, že senzor nie je vodotesný a nehodí sa priamo do studne. Druhým senzorom bol JSN-SR04T, ktorý má 60° detekčnú charakteristiku. To znamená, že lúč v prípade JSN-SR04T je 4x širší v rovnakej vzdialenosti ako HC-SR04. Senzor je síce drahší, ako HC-SR04, je však vodotesný a hodí sa priamo aj do vlhkého prostredia studne bez rizika korózie. 

Pri výpočte detekčnej charakteristiky si musíme definovať určité hranice. Oba senzory sú schopné merať vzdialenosť maximálne do 450 cm. Na základe známych detekčných charakteristík môžeme v prostredí MATLAB vypočítať šírku lúča vo vzdialenosti 0 až 450 cm. Pri výpočte využijeme trigonometriu. pre vizualizáciu polomeru (resp. celkového priemeru) som v prostredí MATLAB využil grafickú reprezentáciu s využitím osi X, ktorá rozdeľuje priemer na polomer. Z toho dôvodu sa pri výpočte počíta detekčná charakteristika s rozdeleným uhlom na polovicu. Nakoľko nám to os X rozdeľuje, budeme počítať s uhlom 7,5° a -7,5° (pre HC-SR04). Pri výpočte je nutné previesť uhol na radiány t.j. (pre HC-SR04) 0.1316525 a -0.1316525. 



 

Vzorec pre výpočet šírky lúča v danom bode (polomer) je: vzdialenosť * tg(rad_studne).

Celkovo som vytvoril viacero matíc so vzdialenosťou po pol metri s využitím jemného stúpania, aby detekcia vo vizualizácii nebola skokovitá. Taktiež je každého pol metra vizualizované rozličkou farbou v grafickej reprezentácii. Pre 0 až 0,5 metra bola postupnosť po 0,01 m lineárne. Následne som už výsledky mohol vykresliť do grafu, kde som si prispôsobil jeho rozmery. Z výsledkov u oboch detekčných charakteristík je zrejmé, že šírka lúča pri HC-SR04 vo vzdialenosti 4,5 metra od senzora je 1,20 metra. V prípade JSN-SR04T je pri vzdialenosti hladiny 4,5 metra od senzora šírka lúča takmer 6 metrov.

Detekčná charakteristika - HC-SR04:

Detekčná charakteristika - JSN-SR04T:

Rovnaký princíp výpočtu je integrovaný aj do webaplikácie projektu Hladinomer, kde výpočet realizuje PHP script. Na základe známeho priemeru studne vypočíta script maximálnu merateľnú vzdialenosť pri meraní bez odrazov, aby si mohol používateľ vybrať vhodný senzor pre svoju studňu, kde chce merania vykonávať.

Webaplikáciu projektu Hladinomer môžete vyskúšať s vašim hardvérom ihneď online na: 
http://arduino.clanweb.eu/studna_s_prekladom/

MATLAB scripty, ktoré boli použité pre výpočet detekčných charakteristík môžete nájsť na Github projektu Hladinomer:
https://github.com/martinius96/hladinomer-studna-scripty/tree/master/docs/MATLAB

štvrtok 16. septembra 2021

Šum v 8-bitových obrázkoch

Šum je negatívny jav, ktorý vplýva na digitálne multimédiá, teda obrázky, zvukové, či obrazové záznamy. Cieľom tohto článku je poukázať na vplyv šumu, ktorý dokáže pozmeniť hodnoty jednotlivých bitov pixelov, čím sa výrazne zhorší jeho kvalita. Pixel v prípade 8-bitovej reprezentácii odtieňov sivej nadobúda hodnotu 0 až 255. Šum budeme vkladať do existujúcich obrázkov odtieňov sivej. Táto reprezentácia obrázkov aj práca s nimi je jednoduchšia ako s RGB obrázkami, nakoľko tie sú reprezentované v 3D matici s každou zložkou farby (celkovo 24 bitov, s 8 bitmi na farbu).

Vo výsledku to znamená, že úpravou najvýznamnejšieho bitu - tzv. MSB (Most Significant Bit) prídeme až 50% hodnoty svetlosti bitu, nakoľko nadobúda hodnotu 0, alebo 128. Šum sa prejavuje ako zložka, ktorá daný pixel stmaví. Každý pixel je tvorenými ôsmymi bitmi v prípade obrázku odtieňov sivej. Čím vyššia je hodnota bitu, tým svetlejší je bit. Osem bitov dokáže vo výsledku nadobudnúť hodnotu 0 - 255. Pre zrozumiteľnejšiu reprezentáciu poslúži aj tabuľka:

BIT - poradie bitu 1. (LSB)2.3.4.5.6.7.8. (MSB)
Hodnoty, ktoré nadobúda0/10/20/40/80/160/320/640/128

Implementácia v MATLAB-e reprezentuje fyzické obrázky načítaním do matíc, pričom každý obrázok má preddefinovaný rozmer 512x512px. Každý obrázok je tak reprezentovaný  262 144 pixelmi (512*512). Každý pixel je tvorený osmicou bitov, teda obrázok je v pamäti reprezentovaný prostredníctvom 2 097 152 binárnych hodnôt. Hodnoty sú hierarchicky usporiadané od LSB (Less Significant Bit) po MSB (zľava doprava).

Súčasťou implementácie je aj generovanie šumu, ktorý sa na načítaný obrázok aplikuje.  Šum je vygenerovaný cez "true random generator", ktorý je založený na čase, teda (ne)periodicky. Štandardne je funkcia pre generovanie periodická s predvolenými hodnotami, z ktorých sa číslo/reťazec generuje. Šum je aplikovaný na pôvodný obrázok po stĺpcoch, čo znamená, že sa šum aplikuje postupne na 1. bit (LSB), 2. bit, 3. bit, 4. bit, 5. bit, 6. bit, 7. bit, 8. bit (MSB) . Vďaka tomu je možné priebežné výsledky ukladať a vykresliť do okna pre reprezentáciu používateľovi. 

Aby bolo možné upravené obrázky vykresliť po úprave jednotlivých stĺpcov samostatne, sú jednoducho nanovo "zložené" prostredníctvom stĺpcov pôvodného (neupraveného) obrázku s upraveným stĺpcom. Takto vieme vykresliť jednotlivé obrázky s práve chceným upraveným stĺpcom, ktorý reprezentuje konkrétny bit v 8-bitovej reprezentácii. Výsledný obrázok so šumom pre všetky stĺpce je vyskladaný z upravených stĺpcov. Z výstupu je zrejmé, že najviac výsledok ovplyvnil šum pre 8.bit (MSB) a 7. bit. Pri 1. (LSB) bite nie je zmena bitu prostredníctvom šumu patrná, nakoľko má minimálnu váhu.

Práca s obrázkami v odtieňoch sivej je jednoduchšia, nakoľko tu existuje iba jedna farebná paleta. Pri RGB sú až 3 farebné palety, pričom je každý pixel reprezentovaný až 24 bitmi. Takáto implementácia by predstavovala 262 144 pixelov pre obrázok s 6 291 456 binárnymi hodnotami. Pri RGB reprezentácii by sa tak využívali 3-rozmerné matice s reprezentáciou pixelu zloženého z troch zložkových farieb modelu.

Implementácia využíva 3 obrázky s doplnením rovnakého šumu do všetkých troch obrázkov. Obrázky sú načítané na začiatku programu funkciou imread() s ich názvom. Priamy názov predstavuje ich umiestnenie v rovnakom priečinku ako použitie programu. Matematicky je v programe vyjadrený aj Špičkový výkon (pomer) "signálu" voči šumu (PSNR) a určuje aj strednú kvadratickú chybu (MSE).

Použité obrázky (ukladať ako 8-bit .bmp)!

lena512g.bmp

barbara512g.bmp

girlface512g.bmp

Programová implementácia dostupná u autora: martinius96@gmail.com

pondelok 19. júla 2021

Práca s obrázkami - MATLAB

V dnešnom článku si ukážeme základné operácie s obrázkami v prostredí MATLAB. Zameriame sa na načítanie obrázku, prevzatie jeho zložiek, pochopenie jeho reprezentácii maticou. V prvom rade musíme rozlišovať obrázky s ktorými pracujeme t.j. čiernobiele / farebné, nakoľko je na tom závislá aj reprezentácia v prostredí MATLAB. Uvažujme v tomto prípade o obrázku s rozmerom 512x512px.

Čiernobiele obrázky sú po načítaní reprezentované počtom pixelov v matici, pričom každý pixel nadobúda hodnotu 0 až 255. Hovoríme teda o 8-bitovom obrázku, pričom hodnota 0 reprezentuje čiernu farbu a 255 bielu, ostatné hodnoty šedé spektrum medzi nimi. Celková matica čiernobielého obrázku má tak rozmer 512x512.

V prípade farebných obrázkov rozlišujeme tri farby (RGB model), teda červenú, zelenú a modrú zložku. Farebný obrázok je tak v prostredí MATLAB načítaný do 3D matice, kedy každá z matíc reprezentuje pixel v danej farbe. Celková matica farebného obrázku má tak rozmer 512x512x3. Každý pixel obrázku je tak tvorený kombináciou pixelu pre všetky 3 farby.

Pre načítanie obrázku v prostredí MATLAB použijeme funkciu imread(), ktorej výstupom je matica v ktorej máme obrázok uložený na základe RGB / GRAYSCALE obrázku v príslušnej dimenzii. Na ukážku použijeme farebnú - RGB fotografiu tváre primáta - Mandrila pestrotvárého s rozmerom 512x512 px na ktorom vyniknú jednotlivé farby RGB spektra.

Operácie, ktoré si s pôvodným obrázkom ukážeme:

  • Prevod obrázku do grayscale - odtieňov šedej
    • vstavanou MATLAB funkciou
    • vlastnou funkciou
  • Zmenšenie / zväčenie obrázku mierkou
  • Otočenie obrázku transponovaním
  • Skosenie obrázku vlastnou funkciou s lineárnou charakteristikou

Prevod pôvodného obrázka do otieňov sivej - GRAYSCALE je veľmi jednoduchý s použitím vstavenej funkcie rgb2gray(). V prípade vlastnej funkcie je možné využiť rôznu škálu riešení. Ako som pri farebných obrázkoch opisoval vyššie, obrázok má reprezentovaný každý pixel samostatne v každej farbe a pri vykreslení je pixel kombináciou týchto farieb. Prevod do čiernobielej palety tak môžeme realizovať z dominantnej zložky pixelu - tj. určitej farby. Daná farba tak vo výslednom obrázku zvýrazní (reprezentované bielou) práve časti danej farby pôvodného obrázka.

Červená zložka pixelu prevedená do GRAYSCALE: 

Zelená zložka pixelu prevedená do GRAYSCALE:  

Modrá zložka pixelu prevedená do GRAYSCALE:  

V prípade, že chceme použiť férovejšiu metódu a použiť strednú hodnotu pixelu môžeme sčítať hodnoty jednotlivých zložiek pre každý pixel a vydeliť ju číslom 3, čím získame 8-bitovú hodnotu s maximálnou hodnotou 255. Výsledný obrázok bude zodpovedať priemeru jednotlivých hodnôt pre daný pixel. Nakoľko je fotografia relatívne "tmavá" (neobsahuje veľa bielej farby, t.j. maximálna hodnota každej zložky) a má väčšinou dominantné farby RGB spektra, výsledok je dosť tmavý so strednou hodnotou. Na obrázku vyniknú predovšetkým hlavné tvary - t.j, nozdry, linky tváre, oči...

Zmenšenie / Zväčenie obrázkov je možné realizovať cez MATLAB funkciu imresize(), ktorá používa parameter pre mierku - 1 aktuálna, < 1 = zmenšenie, > 1 = zväčenie. Obrázok nižšie poukazuje na zmenšenie obrázku o 50%, pričom obrázok bol vykreslený v rozlíšení 512x512, na pixelovej grafike je vidieť mierne znaky degradácie.

Otočenie obrázku transponovaním je možné realizovať cez dve populárne a rýchle funkcie. Jednou z nich je MATLAB funkcia rot90, ktorá zrealizuje v jednom kroku otočenie matice, čo otočí obrázok o 90° proti smeru hodinových ručičiek (otočenie vľavo). Ako ekvivalent je možné použiť aj MATLAB vstavanú funkciu permute s pretvorením matice - transpozíciou, t.j. vymenením stĺpcov. V tomto prípade z pôvodného 1 2 3 prešlo na výmenu 2 1 3, aby bolo možné dosiahnuť rovnaký výsledok (otočenie vľavo) ako v prípade použitia MATLAB funkcie rot90.

Skosenie obrázka nájde využitie pri potrebe výrezu určitej časti obrázka. Skosením sa rozumie nahradeie istej oblasti obrázka určitou farbou, najčastejšie čiernou, alebo bielou. Nakoľko má MATLAB graf (figure) štandardne s bielým pozadím, je efektívne v tomto prípade použiť nahradenie určitej časti obrázka bielou farbou, nakoľko to z hľadiska používateľa a výstupu bude pôsobiť ako vyrezaná - chýbajúca časť obrázka.

Nakoľko máme obrázok s identickým pomerom strán, môžeme využiť lineárnosť, ktorú obrázok ponúka. Jednoduchým prechodom cez maticu v diagonálnom smere môžeme nahradiť všetko pod diagonálou bielou farbou, čím získame orezanie polovice obrázka. "Orezanie" (nahradenie existujúcej hodnoty pixelov bielou farbou) prechádza diagonálou celej 3D matice, t.j. z bodu 1x1x1 po 512x512x3. Prechod cez diagonálu je možné vyriešiť jednoduchým while / for cyklom, ktorý prechádza hodnotami po diagonále pre XxYx1 po XxYx3

Výsledné reprezentácie je možné vypísať do grafu - figure, ktorý prispôsobí veľkosť obrázkov rozlíšeniu obrazovky používateľského zariadenia, pričom sú obrázky dynamicky vložené do riadkov s použitím subplotov s reprezentáciou obrázkov - počet riadkov, počet stĺpcov, poradie. 

utorok 29. júna 2021

Beamforming vizualizácia - MATLAB

Časť textu použitá z môjho VŠ zadania a referátu na tému mmWaves z predmetu Mobilné komunikácie- TUKE... Celý referát dostupný na: 
https://martinius96.github.io/martinius96/pdf/mmWaves%2C%20typy%20ant%C3%A9n%2C%20typy%20komunik%C3%A1cie.pdf

Beamforming je technológia využívaná v 5G sieťach a v jednoduchšej variante aj v LTE (4G) sieťach. Cieľom technológie je potlačiť šum a okolitú interferenciu spôsobenú inými signálmi a prostredím, ktorým sa signál šíri. Beamforming využíva metódu meraní času príchodu signálu - ToA - (Time of Arrival) a uhla prijímaného signálu - AoA - (Angle of Arrival) od mobilného terminálu. Meranie sa realizuje sieťou - vysielacou stanicou, čo šetrí výpočtový výkon a batériu mobilného terminálu. Táto metóda je tak efektívna aj v prípade 5G IoT zariadení, ktoré sú spravidla prevádzkované na 2x AA batériu niekoľko rokov. Výsledkom meraní dokáže vysielacia stanica určiť približnú vzdialenosť a smer, v ktorom sa mobilný terminál nachádza.

Na základe týchto informácii je možné optimalizovať vysielaciu stanicu, (pri 5G sieťach aj v kooperácii s technológiou Massive MIMO) vybrať antény z anténových polí pre komunikáciu, ktoré sú natočené k mobilnému terminálu a môžu efektívne komunikovať. Vysielacia stanica je štandardne OMNI t.j. všesmerová. Vysielacia stanica dokáže upraviť vyžarovací diagram antén a optimalizovať tak prenos k mobilnému terminálu.

Vyžarovací diagram je možné upraviť horizontálne i vertikálne pre čo najlepšie pokrytie mobilného terminálu. Vzniká lalok - optimalizovaný lúč, nazývaný aj Beam. Beam je optimalizovaný aj s ohľadom na iné mobilné terminály v dosahu vysielacej stanice (úprava šírky lúča, ktorá predchádza interferencii). Na obrázku nižšie anténové pole 8x8.

Dnes si ukážeme jednoduchú vizualizáciu Beamformingu v prostredí MATLAB, ktorá ukazuje rôzne charakteristiky vysielacích lúčov na základe vzdialenosti mobilného terminálu od vysielacej stanice. Implementácia využíva generátor náhodných čísel pre generovanie jedinečných súradníc mobilných terminálov v pravouhlom súradnicovom systéme, ktorý predstavuje plochu 1000x1000 metrov v ktorej sú náhodné rozmiestnené mobilné terminály, ktoré môžu i nemusia byť v dosahu OMNI (360°) vysielacej stanice.

Používateľ môže pred spustením programu modifikovať údaje v premenných pre  pozíciu vysielacej stanice a jej rádius, ktorá predstavuje jej dosah. Pre anténu sa používa model OMNI antény s 360° pokrytím pre rovnomerné pokrytie mobilných terminálov vo všetkých smeroch s jej umiestnením na stred pravouhlého súradnicového systému t.j. bod 500x500 v súradnicovom systéme 1000x1000 metrov. Vzorový dosah vysielacej stanice predstavuje 250 metrov vo všetkých smeroch, ako je patrné na vizualizácii v prostredí MATLAB v grafe nižšie.

Používateľ môže tiež modifikovať počet náhodne vygenerovaných mobilných terminálov v pravouhlom súradnicovom systéme. V rádiuse vysielacej stanice sa vždy objaví náhodný počet generovaných bodov pri každej iterácii (spustení) MATLAB scriptu.

Vysielacia stanica obsluhuje všetky body, ktoré sa nachádzajú v rádiuse jej pokrytia. Na základe vzdialenosti mobilných terminálov v rádiuse dokáže vysielacia stanica vytvoriť ukážkovo 3 rôzne úrovne lúčov - Beamov. Beam smeruje ku každému mobilnému terminálu, ktorý je v rádiuse vysielacej stanice. Lúč reprezentuje čiara medzi vysielacou stanicou a mobilným terminálom.

Úroveň lúča reprezentuje hrúbka čiary - so vzdialenosťou je tenšia - lúč sa optimalizuje a prispôsobuje sa väčšej vzdialenosti medzi mobilným terminálom a mobilnou stanicou, znižuje sa interferencia vplyvmi prekážok v ceste, ale aj voči iným komunikačným signálom.  Z pohľadu programu bolo jednoduché zistiť pokrytie jednotlivých bodov v pravohulom súradnicovom systéme, nakoľko stačilo vytvoriť iba absolútny rozdiel X a Y súradníc s následným pravidelom pre druhú odmocninu (Pytagorova veta), ktorá vracia vzdialenosť v metroch. Metóda Beamforming je efektívna pri veľkom počte mobilných terminálov.

V prípade LTE (4G) sietí sa využíva jednoduchší variant, kde sa vyberá sektor, ktorý je technológiou na spôsob Beamformingu pokrytý. Vyžarovaný lúč je širší, pokrýva celý sektor mobilných terminálov. Pri 5G sieťach nachádza využitie Beamforming aj s Massive MIMO, čo je technológia umožňujúca násobiť komunikačné zdroje pre všetky mobilné terminály. Vďaka tomu môže dosahovať vysoké prenosové rýchlosti - rádovo v Gbps.

Massive MIMO sa snaží o zlepšenie v týchto oblastiach:

  • Zvýšenie dátových rýchlostí - viac antén, viac nezávislých tokov dát
  • Konektivita používateľa - viac antén umožňuje väčšiu schopnosť redundancie spojenia
  • Energetická efektivita - vysielacia stanica môže smerovo obsluhovať mobilné terminály so znalosťou ich polohy
  • Zníženie interferencie - tvorba laloku k jednotlivým terminálom, bez vzájomného ovplyvňovania, rušenia

Mobilná stanica dokáže s použitím viacerých anténnych prvkov sústrediť Beam k danému užívateľovi - mobilnému terminálu. S využitím Massive MIMO technológie je možné zvýšiť prenosovú rýchlosť 3 až 5-násobne. Navýšená je aj kapacita 5G siete, nakoľko jedna MIMO anténa dokáže komunikovať s viacerými mobilnými terminálmi súčasne.

Mobilný terminál musí byť taktiež vybavený MIMO anténami, ktoré mu umožňujú zvýšiť prenosovú rýchlosť a komunikovať s viacerými anténami vysielacej stanice súčasne. Z toho dôvodu sa vyžaduje kompatibilný hardvér pre 5G siete. Súčasné mobilné telefóny s podporou LTE, 3G sú pre 5G nedostačujúce už len z pohľadu použitého hardvéru, ktorý je stavaný frekvencie 800 / 1800 MHz. Riešením je kúpa nového zariadenia podporujúceho 5G siete. Mobilné terminály pre 5G siete sú vybavené väčšinou 2x2, prípadne 4x4 MIMO anténami.

Alternatívne IDE
Projekt je možné spustiť aj v cloudovom IDE Octave-Online. Pri testovaní sa však pôvodný MATLAB script nevykonal celý, nakoľko funkcia round() v Octave-Online nepodporuje dva parametre vstupu. Jednoduchou úpravou a odstránením druhého parametra sa script vykonal a vizualizácia je porovnateľná s výsledkami dostiahnutými v prostredí MATLAB.


Programová implementácia v prostredí MATLAB u autora: martinius96@gmail.com

Kružnicová trilaterácia - MATLAB

Určenie polohy bodu (mobilného terminálu) v priestore je dôležité najmä v aplikáciách mobilných sietí. Nájde však využitie aj v navigačných systémoch, alebo aj polohy vo vnútri budov a miestností (tzv. indoor navigation). Samotný odhad polohy môže realizovať mobilný terminál, alebo môže byť odhad polohy mobilného terminálu realizovaný sieťou, čo šetrí batériu mobilného terminálu a určenie polohy je presnejšie, nakoľko sa využíva určitý druh laterácie.

Dnes si ukážeme jednoduchú implementáciu v prostredí MATLAB, ktorá poukazuje na odhad polohy mobilného terminálu v priestore s meraním na strane siete (viacerými BTS stanicami) s rôznou chybovosťou spôsobenou prechodom signálu cez prekážky, či inou interferenciou bez Line of Sight (priamej viditeľnosti).

Požiadavky na implementáciu:

  • 3x BTS stanice, ktoré tvoria ľubovoľný trojholník (vzájomná vzdialenosť medzi BTS minimálne 400 metrov a zároveň menej ako 800 metrov)
  • 1x bod (mobilný terminál) určený ťažnicami trojuholníka v jeho ťažisku (stred trojuholníka)

Priestor, kde sa budú BTS stanice a mobilný terminál budú nachádzať budeme reprezentovať pravouhlým systémom s veľkosťou 1000x1000 bodov (metrov). Pre 2D odhad bodu postačujú aj 2 BTS stanice. Avšak z dôvodu vyššej presnosti využijeme 3 BTS stanice, ktoré dokážu určiť polohu presnejšie, zároveň sú aj v ideálnom priestore, nakoľko platí podmienka pre ich vzájomnú polohu. V prvom kroku je nutné vygenerovať si v prostredí MATLAB súradnice BTS stanice č. 1. Pre vygenerovanie použijeme funkciu randi(), kde nastavíme výstupnú hodnotu funkcie z rozsahu 0 až 1000 pre súradnicu x a y, ktorou budeme reprezentovať polohu BTS v grafe súradnicového systému.

Pri generovaní 2. BTS stanice je nutné dbať na podmienku vzdialenosti medzi vzdialenosťou tejto stanice a už existujúcej BTS stanice s pervými súradnicami. Rozdiel vzdialenosti je jednoduché implementovať, nakoľko využívame fakt, že sú BTS stanice v pravouhlom súradnicovom systéme. Vzťahom pre Pytagorovu vetu (jej druhú odmocninu) je možné vypočítať rozdiely X a Y súradníc a vyjadriť tak vzdialenosť dvoch bodov (v metroch). Využil som jednoduchý cyklus, ktorý generuje súradnice 2. BTS stanice do momentu, kým je splnená podmienka vzdialenosti (viac ako 400 metrov a zároveň menej ako 800 metrov).

Generovanie súradníc 3. BTS stanice je totožné, vyžaduje však porovnanie s oboma existujúcimi BTS stanicami, ktoré už majú pevne svoje body vygenerované v súradnicovom systéme. Pre vyššiu mieru náhodnosti je možné využiť príkaz rng shuffle, ktorý má širšiu entropiu (viac faktorov náhodnosti). Pre určenie bodu, ktorý je v dosahu všetkých BTS staníc a má byť podľa inštrukcií v strede trojuholníka, využijeme ťažnice, ktoré nám spoľahlivo ťažisko nájdu, využívame tu aj vzťah o úsečke, ktorú vytvorí ťažnica, že sa delí v pomere 2:1. Všetky body môžeme vykresliť do grafu, ktorý si definujeme cez axis() s min a max hodnotou pre X a Y os. 

Pre vykreslenie bodov, ktoré sú tvorené znakmi (hviezdička pre bod (mobilný terminál), krížik pre BTS stanice) vykreslíme funkciou scatter(). Čiary na ilustráciu, ktoré reprezentujú absolútnu vzdialenosť medzi BTS stanicami a bodom v strede trojuholníka využijeme funkciu plot. Pre vizualizáciu hodnôt metrov, ktoré poukazujú na vzdialenosť, ktorú daná úsečka reprezentuje využijeme funkciu text(), kde môžeme výstup naformátovať (zátvorky, číslo, dátový typ...) a vpísať do grafu na určitú pozíciu.

Výsledný základný graf s označením a vizualizáciou BTS staníc a mobilného terminálu vyzerá následovne:

Reprezentácia v grafe sa zakaždým mení, nakoľko sú body stále generované pri spustení scriptu. Môžeme tak vidieť rôzne typy trojuholníkov, ktoré systém dokáže vygenerovať, najčastejšie majú najbližšie k rovnoramennému / pravouhlému. Dané vzdialenosti označené pri červených čiarkovaných úsečkách je však absolútna hodnota vypočítaná zo súradníc. Súradnice mobilného terminálu však nie sú BTS staniciam známe. 

Uvažujme však, že vieme súradnice mobilného terminálu z vygenerovaných súradníc tohto bodu, ku ktorým pridáme chybu, ktorá bude reprezentovať chybu merania sieťou, ktorá súvisí napríklad s meraním výkonu prijatého signálu z mobilného terminálu. Ten nemusí mať priamu viditeľnosť na BTS stanicu a chyba je spôsobená prechodom signálu a últmom pri prechode prostredím.

Pridaná chyba odhadu:

  • 5%
  • 10%
  • 20%

Ku známej vzdialenosti medzi BTS stanicou a mobilným terminálom (červená čiarkovaná úsečka z grafu vyššie) pridáme jednotlivé chyby a do grafu vykreslíme kružnicu inej farby pre lepšiu orientáciu. Tento postup opakujeme pre všetky ostatné BTS stanice. Vykreslené kružnice sa v určitom mieste pretínajú a oblasť prieniku nazývame aj kružnicovou (tri)lateráciou. Tam, kde sa kružnice pretli, tam je najpravedpodobnejšie miesto, kde sa nachádza mobilný terminál (bod). Čím je chyba merania vyššia, tým väčšia je aj oblasť, ktorú trilaterácia označuje.

Tento spôsob merania je rýchly a používa sa v rôznych aplikáciách pre určenie polohy bodu v priestore, základ pre čo najlepšie výsledky je však Line-Of-Sight (Priama viditeľnosť). Tento typ merania sa využíva v mobilných sieťach napríklad pre určenie sektoru, kde sa používateľ nachádza. Táto metóda sa používa predovšetkým v LTE sieťach (4G). Nakoľko nevieme presnú súradnicu, kde sa v tomto priestore môže bod nachádzať, odhadneme jeho polohu na stred ohraničenej oblasti (kružnicovou trilateráciou) pre čo najpresnejší (priemerný) výsledok v danej oblasti.

Rozdielom súradníc si vyjadríme aj chybu v metroch, ktorá reprezentuje polohu bodu reálnu (absolútnu) a odhadnutú (relatívnu). V tomto náhodnom výstupe umiestnenia BTS staníc a mobilného terminálu sme pre chybu merania 5% dosiahli chybu merania 138 metrov, pre 10% 150 metrov, pre 20% 173 metrov. 

Ružová hviezdička v grafickej reprezentácii v pravouhlom súradnicovom systéme predstavuje skutočnú polohu mobilného terminálu v dosahu všetkých BTS staníc. Červená, modrá a zelená hviezdička udáva odhadnutú polohu v strede sektora, ktorý bol ohraničený kružnicovou trilateráciou. Hviezdičky sú odhadnuté pre chybu merania 5, 10 a 20% pri šírení signálu prostredím (nepriama viditeľnosť).

Programová implementácia u autora: martinius96@gmail.com

Hash, porovnanie reťazcov - MATLAB

Hash, alebo hashovacia funkcia je jednocestná funkcia, ktorá vstupnému reťazcu vytvorí výstup s pevnou dĺžkou. Totožné vstupné reťazce majú rovnaký hash. Hash môže slúži ako kontrólna hodnota pri súbore, integrite dát (hashom vieme overiť, že reťazec nebol pozmenený). Pri dátovo objemných reťazcoch môžeme mať daný reťazec uložený iba v podobe hashu. 

Dnes budeme riešiť problém týkajúci sa hashovania a percentuálnej zhody hashov. Vytvoríme si tabuľku s vlastným profilom, ktorá bude reprezentovať údaje:

  • Meno - N0
  • Práca - N1
  • Adresa DOMA - N2
  • Adresa PRÁCA - N3
  • Obchod 1 - N7
  • Obchod 2 - N5
  • Číslo autobusovej linky - N6
  • ID zariadenia - N7

Vyplnený reťazec môže vyzerať v prostredí MATLAB napríklad takto
['DEADAWP','Programátor','SNP','Gorkeho','Obchodný dom Fórum','Obchodné centrum Rača','108','123 456 789']

Obdobne vytvoríme 5 tabuliek pre rovnaké entity pre ďalšie osoby. V každej tabuľke z príslušného stĺpca (reprezentovaná v poli) vyberieme hodnotu spoločke s indexom pri N a vytvoríme hash ľubovoľnou hashovacou funkciou. MATLAB má vstavané hashovacie funkcie, avšak dokáže importovaním balíka použiť aj hashovacie funkcie obsiahnuté v Jave, prípadne .NET.  Tabuľky vieme v prostredí MATLAB vypísať do konzolovej aplikácie cez table() - viz Reference.

Príklad vypísaných profilov do tabuliek (Referenčný / cudzí profil):


Pre ľahkú demonštráciu využijeme hashovaciu funkciu SHA1. V hexadecimálnej reprezentácii je hash ľubovoľného reťazca o dĺžke 20B. Reťazec hashu nadobúda hodnoty 0 až F. Textový reťazec (vstup) je však treba pretypovať na char, aby ho bolo možné použiť v hashovacej funkcii. V našej programovej implementácii tak máme 8 hashov pre 8 hodnôt z profilu Autora. Pokračujeme vytvorením hashov aj z ostatných profilov. 

Príklad reprezentácie profilov v poliach v prostredí MATLAB:


Hash reťazce z pôvodného profilu budeme používať ako referenčné. Ostatné hashe zo zostávajúcich 5-tich profilov sa budú využívať pre kontrolu overenia a zhody. Porovnávanie hashov je dosť komplikované, nakoľko čo i len rozdiel pôvodného reťazca v jednom znaku úplne pretvorí hash. Pre porovnanie som tak využil konzervatívnu metódu porovnávania hashov po bajtoch. Ako z prechádzajúceho popisu vieme, výsledkom SHA1 funkcie je 20-bajtový hash v HEX reprezentácii. 

Každý bajt tak bude mať 5% váhu finálnej zhody. Porovnávame bajty pod sebou (prvý s prvým, druhý s druhým...). Finálne percento zhody je tak súčet váh všetkých zhodných bajtov. Miera zhody bajtu je 6.25% pri možných kombináciách 0 až F (1/16). 

Výsledná reprezentácia vyzerá napríklad takto:

Reprezentácia poukazuje na mieru zhody Referenčného profilu s 5-timi profilmi cudzích osôb. Ak si všimneme reprezentáciu zhodnosti adries domov, vidíme, že sa s referenčný profilom zhoduje na 100% - identickosť Profil č. 1. Ak si preskúmame obe hodnoty v tabuľke vyššie, vidíme adresu domov -  SNP, teda i výsledné hashe SHA1 sa rovnajú vo všetkých porovnávaných bajtoch. V prípade ostatných hodnôt je nižšia, nakoľko inde v systéme neexistujú totožné reťazce pre určitú hodnotu. Tento typ overenia zhody hashov je vhodný pre spôsob overenia identickosti údajov v tabuľke.

Programová implementácia u autora: martinius96@gmail.com

Vzorkovanie signálu - MATLAB

Proces vzorkovania signálu má využitie v procese digitalizácie signálu a jeho archivácie. Vzorkovanie je najdôležitejšou časťou digitalizačného procesu, nakoľko od vzorkovania závisí kvalita analógového signálu (audio nahrávky, a pod...). Analógový signál je vzorkovaný vzorkovacou frekvenciou (fvz), ktorá je minimálne 2* vyššia ako maximálna frekvencia signálu (fmax).

To zaručuje lepšiu a vernejšiu reprezentáciu signálu v procese kvantovania, kódovania. Obecne platí, čím vyššia je vzorkovacia frekvencia, tým kvalitnejší signál získame. Vyššou vzorkovacou frekvenciou získavame kratšiu periódu vzorkovania (T). Implementáciu vzorkovania signálu som vyhotovil v prostredí MATLAB ako semestrálne zadanie. Opis návrhu a samotné riešenie môže poslúžiť ako odrazový bod pri realizácii podobnej úlohy, zadania.

V mojej implementácii som využil následovné vzorkovacie frekvencie pôvodného signálu:

  • fvz = 2*fmax
  • fvz = 3*fmax
  • fvz = 10*fmax

MATLAB script obsahuje niekoľko premenných, ktoré sú zodpovedné za vygenerovaný analógový signál a vzorkovací proces:

  • Časová oblasť signálu - os X v grafickej reprezentácii(dĺžka v sekundách)
  • Maximálna frekvencia signálu (fmax v Hz)
  • Vzorkovacia frekvencia 1, 2, 3 (fvz).

V časovej oblasti signálu je vygenerovaný signál, ktorý nadobúda hodnoty 0 až fmax. Signál je vykreslený funkciou plot(). Na základe vzorkovacích frekvencií sa určí perióda vzorkovania, jednotlivé body vzorkovania sú vykreslené do grafu funkciou stem(). Dané body sú v následujúcom grafe spojené čiarou, čo vytvára reprodukovaný signál. Kvalita jednotlivých reprodukcií je znateľná. Fvz 2*fmax nereprezentuje pôvodný signál dostatočne verne. Pri fvz 3*fmax a 10*fmax je vidieť vernejšiu reprodukciu pôvodného signálu. Nevýhodou je však viac pamäťového priestoru, ktorý je potrebný na uloženie digitalizovanej audio nahrávky. 


Zaujímavosťou programovej implementácie je, že využíva random generátor čísel založený na viacerých faktoroch, čo generuje vstupný signál nepredvídateľne.

Programová implementácia dostupná u autora: martinius96@gmail.com

Detekčná charakteristika - MATLAB

  Dnes si ukážeme výpočet a vizualizáciu detekčnej charakteristiky ultrazvukových senzorov v prostredí MATLAB. Vizualizácie boli využité v p...