14.2 Background and Terminology

Introduction

The following terminology is used throughout this document.

14.2.1 Understanding abstraction level

We can conceptually view SEAMCAT as a layered cake of abstractions. Knowing these different layers helps a lot in understanding how to navigate the source and how to understand SEAMCAT. 



image.png

Figure 299: Abstraction level in SEAMCAT

 

So in a very high level of abstraction, the Monte Carlo simulation runs through the specified number of randomised events, which each produces an EventResult. Lastly it combines all these EventResults into a simulation result which can be inspected in SEAMCAT.

14.2.2 Simulation & Engine

We start at the highest abstraction: Simulation & Engine. If we forget about the specific system types and multiple interferers we get the conceptualized view of a scenario. A victim system can be interfered by an interfering system.

On a very high level of abstraction an interference simulation consists of

  1. victim.simulate, i.e. Configure the victim system;

  2. interferer.simulate, i.e. Configure the interference system;

  3. and collect the interference results based on the settings of the two systems.

    image.png


Figure 300: Abstraction level of an interference simulation

 

A closer look at the 3 steps: get the list of active receivers from the victim. Remember do not think of a specific system, if you for instance think of a Generic system you might say that this is never the case because there can be only one receiver. But there being only one is a special case of being many. And for Cellular systems there can definitely be many receivers (UE or BS). So the highlevel view of the algorithm is that there is a list of active receivers in the victim system.

Now we do the same (but opposite) for the interfering system: get the list of active transmitters. Again the list of active transmitters is the most general or highlevel notion of the algorithm which describes all possible cases (0, 1, or many).

Finally we combine all victim receivers with interfering transmitters and base the calculation of the interference with this as shown in Figure 301.

image.png

Figure 301: Abstraction level of IT->VR links

 

Given this the following results are possible:

 

We have certainly described a lot about how SEAMCAT works but at no point it was needed to talk about any systems specifics. Of course during a simulation the choise of system will very much affect how it is done, but conceptualized like this there is no need.

On the highest level of abstraction we have the Simulation & Engine. “Simulation” holds the scenario setup and various hook for starting and completing a snapshot while “Engine” runs a simulation by controlling the steps in the simulation

image.png

Figure 302: Simulation and Engine abstract representation

 

The figure below from the engine shows almost exactly the steps described above.

The real implementation is in InterferenceSimulationEngine.java take a look at it. Remind yourself that programming is all about details: there are so many other things going on than the actual loop.

 

image.png

Figure 303: Engine code

 

The engine asks the simulation for the victim system simulation. So the simulation controls which victim simulation instance is handed to the engine, and the engine then uses that instance for doing its calculation. Therefore the engine is decoupled from the knowledge of which specific victim simulation is running (e.g. Cellular victim).

14.2.3 Packages

SEAMCAT has different modules. These are used to group certain classes of the code and handle dependencies between them. This is similar to the layers of abstraction where the engine only knows general system types but not specifics. Modules can be used to enforce such dependencies.

There are two main modules: model and application.

image.png

Figure 304: Modules of SEAMCAT

 

Inside a module we organise the software files in packages. It is similar to a folder and like a folder it contains the individual source code files. The names of the packages is helpful when nagivating the source code.

The packages of the model module:

 

The packages of Application is more messy than the model. So here it is harder to know exactly where to go. The packages to know here is: scenario and simulation:

 

It is the very nature of code to change, but with a good design and understanding of the abstractions it should be easy to identify part that will change the least. Most of the dynamic parts of the code can be examined with runtime inspection by software development tools. Mechanism vs Policy is a software principle based on the fact that mechanism change infrequently whereas policies change all the time.

Mechanism is here the engine of SEAMCAT and policies are the plugins. The parts that changes behaviour are left open for developers.




image.png




image.png


 

Figure 305: Packages of Model

 

 

Figure 306: Packages of Application