Symulator powstały w ramach zadania 13 umożliwia badanie predefiniowanych
algorytmów jak i nowych komponentów wprowadzanych przez użytkownika. Modeluje on
sieć radiową składającą się z dowolnej liczby węzłów. Jest to symulator typu
kwazi-statycznego, co oznacza, że ruch obiektów jest w nim modelowany poprzez
zmienność środowiska radiowego (zaniki szybkie). Symulator został napisany w
taki sposób, aby możliwe było łatwe rozszerzanie jego funkcjonalności.
Symulator został napisany w języku Python, wykorzystuje środowisko
bazodanowe. Możliwe jest korzystanie z baz typu SQLite, PostgreSQL.
Symulator składa się z kilku elementów tworzących wspólne środowisko. Poniższy
schemat obrazuje części składowe środowiska symulacyjnego wraz z zależnościami
pomiędzy poszczególnymi elementami.
Schemat środowiska symulacyjnego wraz z zależnościami pomiędzy
poszczególnymi elementami
Najważniejsze elementy prac nad symulatorem wypisane są poniżej:
- Stworzenie modułu symulatora umożliwiającego szybką konfigurację
parametrów
- Stworzenie obiektów przedstawiających węzły w sieci:
- Warstwa fizyczna
- Warstwa ramek
- Warstwa pakietu
- Węzły mogą należeć do predefiniowanych klas, bądź ich cechy składowe mogą być
implementowane w zależności od stawianego zadania
- Stworzenie medium transmisyjnego przekazującego sygnały radiowe między węzłami
- Zaimplementowane zaniki szybkie
- Zaimplementowane zaniki wolne
- Zaimplementowane straty propagacyjne, wyliczane wg modelu Indoor Pathloss 3GPP
albo Extended Okumura-Hata, wraz z wyborem typu terenu [1]
- Stworzenie funkcjonalności odpowiedzialnej za automatyczne
rozmieszczenie węzłów w sieci, w przestrzeni o dowolnie wybranych wymiarach lub
w arbitralnym układzie heksagonalnym.
- Implementacja funkcjonalności realizującej generację pakietów do wysłania,
lub dowolnych innych zdarzeń, w dwóch trybach:
- Tryb ciągły („full buffer”)
- tryb generacji zdarzeń z rozkładem Poissona
Obydwa generatory napisano w taki sposób, aby umożliwić użytkownikowi łatwą
rozszerzalność ich funkcjonalności.
- Stworzenie funkcjonalności odpowiedzialnej za zapisywanie wyników
symulacji
- Logowanie poszczególnych zdarzeń w sieci (zapis do bazy danych)
- Logowanie stanu węzłów i medium transmisyjnego (zapis do bazy danych)
- Zapisywanie wartości wyliczonych przez wybrane elementy sieci
- Implementacja dziennika zdarzeń umożliwiającego pracę symulatora w oparciu o
interakcję między węzłami
- Synchronizacja generatorów losowych w taki sposób, aby symulacje były w pełni
powtarzalne dla zadanego ziarna losowego symulacji
- Stworzenie modułu równoległego przetwarzania danych, umożliwiającego pracę
symulatora w trybie wielowątkowym
- Implementacja odbiornika radiowego o zadanej czułości (zarówno moc jak i SNR)
- Implementacja mechanizmów przesyłania wiadomości pomiędzy węzłami
- Stworzenie buforów wiadomości umożliwiających odbieranie i przetwarzanie
wiadomości odebranych przez węzeł
Opracowano także dokumentacje symulatora, zawierającą, oprócz opisów komponentów
służących modelowaniu sieci, także informacje dla użytkownika, pozwalające w
prosty sposób uruchamiać, modyfikować lub generować własne eksperymenty.
Symulator zawiera także przykładowe eksperymenty.