Lokalizace výkonnostních úrovní

Přehled revizí
Revize 0.7 2005-05-22
Aktualizován diagram tříd.
Revize 0.6 2005-04-26
Upraven iterativní algoritmus na používání jedné poloviny rozdílu vzdáleností.
Revize 0.5 2005-04-23
Popsán způsob výpočtu vzdálenosti od vysílače na základě naměřené výkonnostní úrovně signálu.
Revize 0.4 2005-03-23
Přejmenováno rozhraní AcceptGuess na GuesstorFacade.
Revize 0.3 2005-03-20
Návrh architektury serveru a iteračního lokalizačního algoritmu. Popsán guesstor server v CVS a odkazy.
Revize 0.2 2005-03-15
Návrh GUI.
Revize 0.1 2005-02-14
Startovní definice projektu.

Obsah

1. Definice projektu
1.1. Úvod
1.2. Model síření signálu
1.3. Lokalizační server
1.4. Grafický klient
1.5. Cíle projektu
1.6. Časové milníky
2. Návrh uživatelského rozhraní
3. Návrh architektury
3.1. Guesstor server
3.2. Vyhledávací algoritmus
4. Organizace
4.1. Guesstor server
4.2. Guesstor klient
4.3. Dokumentace
5. Výpočet vzdálenosti
5.1. Model šíření
5.2. Referenční úroveň signálu
5.3. Vyjádření vzdálenosti
6. Odkazy

1. Definice projektu

1.1. Úvod

Každý účastník mobilní sítě je obsloužen signálem z jedné nebo více základnových stanic. Základnové stanice představují rádiové vysílače vybudované mobilním operátorem. Mobilní telefon monitoruje úrovně signálu z okolních vysílačů a vybere si ten, od kterého dostává nejsilnější radiový signál. Informace o síle signálů z jednotlivých vysílačů by bylo možné využít k zjištění polohy mobilního telefonu. Právě na tuto možnost bych se chtěl zaměřit ve svém projektu.

V projektu bych se chtěl zabývat vytvořením lokalizačního serveru, který z předaných úrovní signálu určí, v kterých místech se účastník pravděpodobně nachází. Výpočet bude založen na modelu šíření radiových vln a znalosti rozmístění základnových stanic.

Získané informace od serveru bude možné prohlížet v uživatelsky přívětivém grafickém klientovi. Tento klient bude zobrazovat polohy základových stanic, pravděpodobnou polohu mobilního telefonu a předpokládanou odchylku od této polohy.

1.2. Model síření signálu

V libovolném prostředí platí, že velikost přijatého signálu je nepřímo závislá na vzdálenosti od vysílače. Míru závislosti určuje koeficient prostředí alpha.

        Rx(d) = Rx(d0) * (d0/d)^alpha [W]
        Rx(d) ... received power at distance d
        d ... distance between transmitter and receiver
        d0 ... reference distance
        alpha ... path-loss factor
    

Hodnota koeficientu prostředí alpha se pohybuje od 2 pro volný prostor do 6 pro velmi hustou městkou zástavbu. Referenční velikost přijatého signálu Rx(d0) můžeme ve vztahu nahradit pomocí výkonu zdrojového vysílače a útlumu L(d0).

        Rx(d) = PWR / L(d) [W]
        L ... path loss
        PWR ... transmit power
        Rx ... received power
    

Hodnota útlumu L(d0) není závislá na výkonu zdrojového vysílače. Hodnotu lze předpočítat podle parametrů vysílače nebo experimentálně zjistit pro dané prostředí.

1.3. Lokalizační server

Hlavním cílem projektu je vyvinout lokalizační server, který na základě předložených úrovní signálů a identifikátorů základnových stanic určí pravděpodobné místo výskytu takových podmínek. Komunikace se serverem se uskuteční pomocí RMI rozhraní. Informace o poloze základových stanic bude server získávat z databáze.

Server bude konfigurovatelný pomocí konfiguračních souborů psaných v jazyce XML. Jednou z nejdůležitějších nastavení bude volba vyhledávacího algoritmu. Dále bude možné algoritmy parametrizovat.

Zdrojový kód serveru bude dokumentován pomocí systému JavaDoc. K problematice lokalizace výkonnostních úrovní bych sepsal středně obsáhlý ucelený nadhled jako součást dokumentace projektu. Další součástí dokumentace serveru bude instalační a uživatelská příručka napsaná v systému DocBook.

1.4. Grafický klient

Dále v rámci projektu vznikne grafický klient, který na základě informací od serveru vykreslí zadanou situaci včetně základnových stanic a nalezené místo pravděpodobného výskytu. Dále graficky zobrazí předpokládanou odchylku skutečné polohy od tohoto místa.

Zdrojový kód klienta bude rovněž dokumentován pomocí systému JavaDoc. Součástí dokumentace klienta bude i uživatelská příručka napsaná v systém DocBook.

Obrázek 1. Určené vzdálenosti od vysílačů podle přijatých úrovní signálu

Určené vzdálenosti od vysílačů podle přijatých úrovní signálu

1.5. Cíle projektu

  • čitelný konfigurační soubor (XML)

  • konfigurovatelná volba vyhledávacího algoritmu

  • nastavitelné logování

  • nezávislost na konkrétní databázi

  • anglická JavaDoc dokumentace zdrojového kódu

  • ucelený popis problému lokalizace výkonnostních úrovní

    • modely síření radiového signálu

    • operace se zeměpisnými údaji

  • instalační příručka

  • grafický klient

  • vizualizace problému v klientovi

  • otestování algoritmu na měřeních z terénu

1.6. Časové milníky

Bližší studie síření signálů

10 dní práce

Vývoj algoritmů pro lokalizaci mobilního telefonu

20 dní práce

Otestování algoritmu na skutečných naměřených údajích

7 dní práce

Vytvoření lokalizačního serveru s požadovanou funkčností

20 dní práce

Vytvoření uživatelsky přívětivého grafického klienta

20 dní práce

Vylepšení projektu na základě připomínek k 1. vydání

10 dní práce

Vývoj serveru a klienta bude třeba provádět paralelně, aby bylo možné tyto programy testovat.

2. Návrh uživatelského rozhraní

Grafický klient bude poskytovat rozhraní pro vložení identifikátoru vysílače a naměřené úrovně signálu od něj. Po zadání hodnot se dotáže serveru na parametry vysílače (pozice, vysílací výkon, natočení, úhlová_šíře_paprsku) a tyto hodnoty graficky zobrazí.

Klient nebo server zároveň z naměřené úrovně signálu určí teoretickou vzdálenost od vysílače. Ta bude zakreslena jako kružnice se středem na pozici vysílače. Úroveň signálu lze zadávat v dBm i v dílkách přečtených z RSSI indikátoru. Přibližný převod: Pr = 2*RSSI - 113 [dBm]

Klient bude udržovat vizuální seznam všech zadaných vysílačů, např. formou tabulky. Položky seznamu půjde přidávat, editovat nebo smazat.

Po zadání alespoň jednoho páru [vysílač, úroveň signálu] bude dostupná možnost provést výpočet lokalizace místa měření. Pro podporu iterativních algoritmů by mělo být možné zadat počet iterací algoritmu (např. 100). Vlastní výpočet probíhá na serveru, klient mu k výpočtu odešle všechny zadané páry [vysílač, úroveň] ze seznamu.

Získanou vypočtenou pozici klient graficky zobrazí na ploše mezi zadanými vysílači.

Obrázek 2. Grafické prvky uživatelského rozhraní

Grafické prvky uživatelského rozhraní

Domluvená soustava jednotek

  • výkon signálu - dBm

  • souřadnice - UTM jednotky (TODO: zjistit více)

  • úhly - stupně

3. Návrh architektury

3.1. Guesstor server

Na následujícím UML diagramu 3 – „Class diagram pro Guesstor server“ je konceptuální návrh architektury lokalizačního serveru. Význam UML symbolů lze pochopit z Umbrello nápovědy.

Obrázek 3. Class diagram pro Guesstor server

Class diagram pro Guesstor server

Rozhraní GuesstorFacade je poskytnuté pro vzdálené volání od klienta. Poskytuje metody pro zjištění informací o vysílači a pro hledání pozice na základě úrovní signálů.

Informace o vysílačích se získávají z databáze. Je to jen jedna tabulka, takže vystačíme s použitím JDBC (Java DatabaBase Conectivity). Pro zajištění rozšiřitelnosti, však bude přístup probíhat přes implementačně nezávislé rozhraní DataService.

Implementace GuessAlgorithm vyhledávajícího algoritmu je jeden z hlavních cílů projektu. Náznak jedné možné implementace je uveden v následující sekci.

3.2. Vyhledávací algoritmus

Na následujících řádkách je zapsána pseudokódem idea pro iterační vyhledávací algoritmus.

Zadání

  • Vstup: souřadnice vysílačů, hodnoty úrovní signálů v hledaném místě (receivedPower)

  • Výstup: odhadnutá pozice místa měření

  • Myšlenka: postupnou iterací se bude hledané místo dostávat na pozici, která nejlépe splňuje teoretické vzdálenosti od vysílačů

Iterativní výpočet

  1. přepočet receivedPower na teoretické vzdálenosti od vysílačů (podle modelu šíření signálu)

  2. hrubý odhad hledaného místa (např. pomocí váženého průměru souřadnic vysílačů, kde váha je 1/distance)

  3. zjištění rozdílu vzdálenosti odhadnutého místa a teoretické vzdálenosti od vysílače

  4. posun odhadnutého místa o jednu poloviny rozdílu ve směru spojnice s vysílačem

  5. opakování bodů 3 a 4 několikrát pro všechny vysílače, dokud se výsledky mění nebo dokud mě to baví (např. 100-krát)

V budoucnu by šlo do algoritmu začlenit i úpravy teoretických vzdáleností na základě natočení vysílače (azimuth). Pokud hrubý odhad určí, že hledané místo leží na odvrácené straně některého vysílače, sníží se u toho vysílače teoreticky určená distance. Postupně se bude iterovat k dalším změnám hodnot.

4. Organizace

4.1. Guesstor server

Projekt je umístěn ve společném CVS na project.rdc.cz.

Příklad 1. Stažení a překlad guesstor serveru

    $ cvs -d :pserver:USERNAME@project.rdc.cz:/osp login
    $ cvs -d :pserver:USERNAME@project.rdc.cz:/osp co guesstor
    $ cd guesstor
    $ ant
        

Konfigurace se provádí v etc/appContext.xml. Spojení do databáze se zatím nepoužívá, je zde však již připraveno k nastavení. Formát konfiguračního souboru je daný použitou Spring Framework knihovnou.

Spring Framework umožňuje snadno nastavit spojení do databáze, řeší závislosti mezi definovanými objekty a v případě potřeby sám spuští rmiregistry pro zpřístupnění rozhraní vzdálenému klientovi. Stručně řečeno, pomáhá se startem aplikace.

Hlavní rozhraní čekající na implementaci je GuessAlgorithm. Zatím jen používá jen hloupá implementace, která vždy odhadne pozici [100, 200].

4.2. Guesstor klient

V adresáři guesstor/client se nachází jednoduchý klient do příkazové řádky. Slouží k předvedení rozhraní. Grafický klient bude pravděpodobně ve vlastním CVS modulu.

Příklad 2. Spuštění serveru a klienta

    guesstor$ ant run &
     [java] 00:29:06 INFO: Loading XML bean definitions from file [/home/ivo/0data/prog/java/prace/lbs/vyvoj/guesstor/etc/appContext.xml]
     [java] 00:29:06 INFO: Creating shared instance of singleton bean 'rpc'
     [java] 00:29:06 INFO: Creating shared instance of singleton bean 'guesstor'
     [java] 00:29:06 INFO: Creating shared instance of singleton bean 'dataService'
     [java] 00:29:06 INFO: Creating shared instance of singleton bean 'dataSource'
     [java] 00:29:06 INFO: Loaded JDBC driver: com.mysql.jdbc.Driver
     [java] 00:29:06 INFO: Creating shared instance of singleton bean 'guessAlgorithm'
     [java] 00:29:06 INFO: Looking for RMI registry at port '1099'
     [java] 00:29:06 WARN: Could not detect RMI registry - creating new one
     [java] 00:29:06 INFO: Binding RMI service 'GuesstorFacade' to registry at port '1099'


    guesstor$ cd client
    guesstor/client$ ant run
     [java] 00:29:45 INFO: guess request; infos=[[cell=1,rx=20.0], [cell=2,rx=12.0], [cell=3,rx=7.0]]
     [java] position=[100.0,200.0]
        

Ve výpisu je vidět start serveru. V metodě Main.main() se načte konfigurační server a získá se object "rpc". Ten závisí na "guesstor" objektu, který se tudíž také vytvoří. Závislost lze v konfiguračním etc/appContext.xml souboru zadefinována na místě <ref local="guesstor"/>.

Po spuštění klienta server zaloguje příchozí požadavek a vrátí odpověď. Jednoduchý klient vypisuje nalezené [100, 200] souřadnice do konsole. Úroveň logování lze u serveru nastavit v souboru classes/log4j.properties.

4.3. Dokumentace

Tato dokumentace je v CVS modulu guesstor_spec.

5. Výpočet vzdálenosti

Tento oddíl odvozuje vzorečky pro výpočet vzdálenosti na základě znalostí naměřené úrovně signálu, zdrojového vysílače, okolního prostředí. Výpočet vzdálenosti bude základem mnoha algoritmů na určení polohy. Použité vzorce vycházejí ze studií radiového šíření signálu uvedených v odkazech.

Pokud nebude řečeno jinak, používáme jednotky soustavy SI (tj. metr, watt).

5.1. Model šíření

Jak již bylo řečeno v oddílu popisujícím model šíření signálu, klesá úroveň signálu s rostoucí vzdáleností od vysílače.

    Rx(d) = Rx(d0) * (d0/d)^alpha
    Rx(d) [W] ... received power at distance d
    d     [m] ... distance between transmitter and receiver
    d0    [m] ... reference distance
    alpha []  ... path-loss factor
        

Koeficient útlumu alpha má hodnotu 2 pro volný prostor. To je dáno tím, že ve vesmíru je signál rozprostřen na povrchu koule, tj. 4*pi*r^2. Konstanty se při sledování poměru úrovní pokrátí a zbude jenom druhá mocnina vzdálenosti.

Pro městské prostředí se hodnota koeficientu útlumu pohybuje od 3 do 6. Pokles úrovně signálu je s rostoucí vzdáleností strmější. Je to způsobeno sčítáním přímého signálu s odrazy. Na krátké vzdálenosti by tedy signál byl městě silnější něž ve vesmíru, ale s rostoucí vzdáleností bude signál rychleji ubývat.

5.2. Referenční úroveň signálu

Uvedený model šíření signálu je použitelný, pokud dokážeme dosadit za Rx(d0), tj. úroveň signálu v referenční vzdálenosti d0. Referenční vzdálenost se volí kolem 1000m, kde už je model šíření ustálený, počítají se pak úrovně signálu pro vzdálenosti od 1000m výše.

Poznámka

V malých vzdálenostech od vysílače, tj. dříve než zachytíme odrazy, lze uvažovat model šíření pro volný prostor.

Hodnota úrovně signálu v určité vzdálenosti je určitě závislá na výkonu zdrojového vysílače. Proto se místo referenční úrovně signálu používá útlum prostředí "path-loss", což je podíl zdrojového výkonu a naměřeného v určité vzdálenosti.

            L(d) = PWR / Rx(d)
            L(d)  [] ... path loss for distance d
            PWR   [W]... transmit power
            Rx(d) [W]... received power at distance d
        

Poznámka

Je třeba rozlišovat koeficient útlumu prostředí alpha a útlum prostředí L(d).

Referenční útlum prostředí je nezávislý na výkonu zdrojového vysílače. Lze ho pro dané prostředí předpočítat, nebo experimentálně změřit. Jednu možnou závislost útlumu prostředí na frekvenci a výšce antén popsal Okumara-Hata, viz. odkazy.

5.3. Vyjádření vzdálenosti

Nyní dosadíme útlum prostředí do původního vzorečku popisujícího model šíření radiového signálu a vyjádříme z něj vzdálenost d.

    Rx(d) = Rx(d0) * (d0/d)^alpha
    Rx(d) = (PWR / L(d0)) * (d0/d)^alpha
    Rx(d) * L(d0) / PWR = (d0/d)^alpha
    (Rx(d) * L(d0) / PWR)^(1/alpha) = d0/d
    d = d0 * (PWR / (Rx(d) * L(d0)))^(1/alpha)
        

Při počítání s výkony antén se často počítá s poměrovými jednotkami, tj. s decibely. Výkon se vztahuje k 1W nebo 1mW, od toho jsou odvozeny jednotky dBW, resp. dBm.

    decibel ... 10 * log10(a/b)
    dBW     ... 10 * log10(PWR/1W)
    dBm     ... 10 * log10(PWR/0.001W) = 10 * (3 + log10(PWR/1W))
    1 dBW = 30 dBm

    W       ... 10^(PWR_db/10)
        

Převedeme-li vztah pro výpočet vzdálenosti na použití dBW, získáme jednoduší výraz:

    d = d0 * (10^(PWR_db/10) / (10^(Rx_db(d)/10) * 10^(L_db(d0)/10)))^(1/alpha)
    d = d0 * 10^((PWR_db - Rx_db(d) - L_db(d0)) / (10 * alpha))
        

Výkony PWR a Rx jsou vyjádřeny v dBW nebo v dBm, to je jedno, protože 10^-3 se pokrátí. Bezrozměrný útlum prostředí je vyjádřen v dB.

Poznámka

V literatuře se často počítá jenom s decibely a takové hodnoty se označují prostě PWR, Rx, L.

6. Odkazy

Radiové šíření signálu