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

Frekvenčné spektrum - MATLAB

Frekvenčné spektrum môže reprezentovať jednotlivé spektrá signálu a analyzovať rôzne stavy, napríklad či dochádza k aliasingu, t.j. prekrývaniu spektier signálu. Využitie tejto metódy nájde uplatnenie pri návrhu číslicových filtrov FIR, IIR pri skúmaní ich vlastností.

V tejto implementácii použijeme interpolátor (respektíve operáciu interpolácie) na pôvodné spektrum signálu. Interpolácia dokáže stlačiť pôvodné spektrum signálu. Na voľné miesto je možné vložiť kópiu spektra (nazývame to aj nultou hodnotou). Interpolátor teda predchádza aliasingu, nakoľko v ňom nedochádza k prekrývaniu spektier. V prípade vyšších interpolácii môžeme spektrum stlačiť ešte viac a vložiť vždy  L-1 (L mínus 1) kópii do spektra namiesto pôvodnej vzorky. L označuje stupeň interpolácie.

Script v prostredí MATLAB pracuje s menovitou frekvenciou signálu 1Hz. Nakoľko budeme pracovať s uhlovou (kruhovou) frekvenciou, potrebujeme si frekvenciu vyjadriť  v rad/s (možno vyjadriť aj ako s-1). Následne si určíme vzorkovaciu frekvenciu s hodnotou 2*uhlová frekvencia. Následne násobky vzorkovacej frekvencie do + i do - *2, *3. Tieto hodnoty budú následne slúžiť na reprezentáciu na x osi grafu. MATLAB umožňuje upraviť funkčné hodnoty osi x a y použitím xticks funkcie a následne funkciou xticklabels priradiť aj textové hodnoty - labely k jednotlivým hodnotám. Následne môžeme do čiarového grafu vykresliť spektrum pôvodného signálu. 

Vidíme, že v spektre nie je aliasing - prekrývanie spektier signálu. Následne vykonáme operáciu s interpolátorom, ktorý umožňuje stlačiť pôvodné spektrum o faktor L-1. Interpolátor má faktor L, ktorý sa na spektrum aplikuje. Všeobecne platí, že interpolátor do spektra vloží L-1 kópii, respektíve nultú zložku. Teda aby interpolátor zmenil spektrum, musí mať hodnotu minimálne, pri L=1 nedôjde ku zmene - stlačeniu pôvodného spektra signálu. V tejto implementácii sme použili faktor L=2 a L=3. Výsledkom sú spektrá, do ktorých sú vložené kópie a pôvodné spektrum je stlačené. Vzorkovacia frekvencia je nadvzorkovaná - vynásobená * faktor L.

Interpolátor má využitie predovšetkým v elektotechnike pri spracovaní a prenose signálov, napríklad pri odosielaní nadvzorkuje signál, čím predchádza prípadnej chybe, nakoľko rovnaký signál je nadvzorkovaný, t.j. môže ho reprodukovať vernejšie. 

Výstup celého grafu s priebehom hlavného spektra a interpolácii L=2, L=3:

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...