예제 #1
0
 def loadNetworkAndObstaclesFromFile(self, filename):
     network = csv.reader(open(filename), delimiter=';', quotechar='|')
     for row in network:
         if row[0] == "x_size_real":
             self.parent.constraintAreaMaxX = float(row[1])
         if row[0] == "y_size_real":
             self.parent.constraintAreaMaxY = float(row[1])
         if row[0] == "x_size_map":
             x_size_map = float(row[1])
         if row[0] == "y_size_map":
             y_size_map = float(row[1])
         if row[0] == "wall":
             obstacle = []
             obstacle.append(float(row[1])/x_size_map*self.parent.constraintAreaMaxX)
             obstacle.append(self.parent.constraintAreaMaxY - float(row[2])/y_size_map*self.parent.constraintAreaMaxY)
             obstacle.append(float(row[3])/x_size_map*self.parent.constraintAreaMaxX)
             obstacle.append(self.parent.constraintAreaMaxY - float(row[4])/y_size_map*self.parent.constraintAreaMaxY)
             obstacle.append(float(row[5]))
             self.parent.obstacles.append(obstacle)
         if row[0] == "bs":
             bs = devices.BS()
             bs.x = float(float(row[1])/x_size_map*self.parent.constraintAreaMaxX)
             bs.y = float(self.parent.constraintAreaMaxY - float(row[2])/y_size_map*self.parent.constraintAreaMaxY)
             bs.ID = int(row[3])
             bs.turnedOn = True
             self.parent.bs.append(bs)
예제 #2
0
    def createHoneycombBSdeployment(self,
                                    radius,
                                    numberOfBS=36,
                                    omnidirectionalAntennas=False,
                                    SFR=False):
        """This function creates a honeycomb deployment with any number of Base Stations eg. 2 or 9
        In case of sector antennas the number will be increased to by multiply of 3 because it's
        assumed that there are 3 Base Stations at the spot with 120 degress antennas """

        if not omnidirectionalAntennas:
            if numberOfBS % 3 == 1:
                print(
                    "Incorrect number of BaseStations for sector antennas. Increasing the number."
                )
            numberOfBS = math.ceil(numberOfBS / 3.0)

        x = int(math.ceil(math.sqrt(numberOfBS)))
        y = int(math.floor(math.sqrt(numberOfBS)))
        if x * y < numberOfBS:
            y += 1
        print(x, y)

        self.parent.constraintAreaMaxX = x * radius + 0.5 * radius
        self.parent.constraintAreaMaxY = y * radius
        self.parent.radius = radius

        xc = 0
        yc = 0
        xo = 1

        for i in range(0, numberOfBS):
            sectors = 1
            if not omnidirectionalAntennas:
                sectors = 3

            for j in range(sectors):
                bs = devices.BS()
                bs.ID = i * sectors + j
                bs.turnedOn = True
                bs.omnidirectionalAntenna = omnidirectionalAntennas
                bs.useSFR = SFR
                bs.Rc = radius
                bs.angle = 120 * j
                bs.x = (0.5 * radius) * (xc + 1) + (0.5 * radius) * xo
                bs.y = (0.5 * radius) * (yc + 1)
                self.parent.bs.append(bs)
            xc += 2
            if xc > 2 * x - 1:
                xc = 0
                yc += 2
                if (yc / 2) % 2 == 1:
                    xo = 0
                else:
                    xo = 1
예제 #3
0
    def createHexagonalBSdeployment(self, radius, numberOfBS = 36, omnidirectionalAntennas = False, SFR = False):
        d_x = math.sqrt(3)/2 * radius
        d_y = radius/2
        H_hex = 2 * radius
        W_hex = radius * math.sqrt(3)
        self.parent.radius = radius
        if numberOfBS == 36:
            self.parent.constraintAreaMaxX = 6.5 * W_hex
            self.parent.constraintAreaMaxY = 3 * H_hex + 3.5 * radius
        if numberOfBS == 75:
            self.parent.constraintAreaMaxX = 8 * W_hex
            self.parent.constraintAreaMaxY = 4 * H_hex + 7.5 * radius
        if numberOfBS == 90:
            self.parent.constraintAreaMaxX = 9.5 * W_hex
            self.parent.constraintAreaMaxY = 4 * H_hex + 7.5 * radius
        if numberOfBS == 108:
            self.parent.constraintAreaMaxX = 9.5 * W_hex
            self.parent.constraintAreaMaxY = 6 * H_hex + 6.5 * radius
        for i in range(0, numberOfBS):
            bs = devices.BS()
            bs.ID = i
            bs.turnedOn = True
            bs.omnidirectionalAntenna = omnidirectionalAntennas
            bs.useSFR = SFR
            self.parent.bs.append(bs)

        if numberOfBS == 36:
            numberOfRows = 3
            numberOfColumns = 4
            multiplier = 12
        if numberOfBS == 75:
            numberOfRows = 5
            numberOfColumns = 5
            multiplier = 15
        if numberOfBS == 90:
            numberOfRows = 5
            numberOfColumns = 6
            multiplier = 18
        if numberOfBS == 108:
            numberOfRows = 6
            numberOfColumns = 6
            multiplier = 18

        for row_number in range(0, numberOfRows):
            for column_number  in range(0, numberOfColumns):
                for sector_nb in range(0, 3):
                    self.parent.bs[multiplier*row_number + 3*column_number + sector_nb].x = (3*(column_number+1)-1) * d_x
                    self.parent.bs[multiplier*row_number + 3*column_number + sector_nb].y = (1 + row_number) * H_hex - d_y + row_number * radius
                    self.parent.bs[multiplier*row_number + 3*column_number + sector_nb].angle = sector_nb * 120
                    if column_number % 2 == 1:
                        self.parent.bs[multiplier*row_number + 3*column_number + sector_nb].x = (3*(column_number+1)-1) * d_x
                        self.parent.bs[multiplier*row_number + 3*column_number + sector_nb].y += d_y
                        self.parent.bs[multiplier*row_number + 3*column_number + sector_nb].angle += 60
예제 #4
0
 def create1BSnetwork(self, radius):
     H_hex = 2 * radius
     W_hex = radius * math.sqrt(3)
     self.parent.radius = radius
     self.parent.constraintAreaMaxX = 2 * W_hex
     self.parent.constraintAreaMaxY = H_hex + 1.5 * radius
     bs = devices.BS()
     bs.ID = 0
     bs.turnedOn = True
     bs.x = self.parent.constraintAreaMaxX/2
     bs.y = self.parent.constraintAreaMaxY/2
     self.parent.bs.append(bs)
예제 #5
0
 def addOneBSTower(self, x_pos, y_pos, omnidirectional=False):
     if omnidirectional == False:
         for i in range(3):
             bs = devices.BS()
             bs.x = x_pos
             bs.y = y_pos
             bs.insidePower = 37
             bs.outsidePower = 40
             bs.angle = i * 120
             bs.ID = len(self.bs)
             bs.turnedOn = True
             self.bs.append(copy.deepcopy(bs))
예제 #6
0
    def createHoneyccrBSdeployment(self,
                                   radius,
                                   numberOfBS=36,
                                   omnidirectionalAntennas=False,
                                   SFR=False):
        """Similar to createHoneycombBSdeployment, but fixed some of the geometry"""

        if not omnidirectionalAntennas:
            if numberOfBS % 3 != 0:
                print(
                    "Incorrect number of BaseStations for sector antennas. Increasing to be divisible by 3."
                )
            numberOfBS = math.ceil(numberOfBS / 3.0)

        x = int(math.ceil(math.sqrt(numberOfBS)))
        y = int(math.floor(math.sqrt(numberOfBS)))
        if x * y < numberOfBS:
            y += 1
        print("Network is", x, "by", y)

        self.parent.constraintAreaMaxX = (x + 0.5) * radius * math.sqrt(3)
        self.parent.constraintAreaMaxY = 2 * radius + 3 / 2 * radius * (y - 1)
        self.parent.radius = radius

        for i in range(numberOfBS):
            sectors = 1
            if not omnidirectionalAntennas:
                sectors = 3

            for j in range(sectors):
                bs = devices.BS()
                bs.ID = i * sectors + j
                bs.turnedOn = True
                bs.omnidirectionalAntenna = omnidirectionalAntennas
                bs.useSFR = SFR
                bs.Rc = radius
                bs.angle = 120 * j
                even_row_offset = (
                    1 - int(i % (2 * x) / x)) * math.sqrt(3) / 2 * radius
                bs.x = math.sqrt(3) / 2 * radius + even_row_offset + math.sqrt(
                    3) * (i % x) * radius
                bs.y = radius + 3 / 2 * radius * (int(i / x))
                self.parent.bs.append(bs)
예제 #7
0
 def loadDeploymentFromFile(self, filename):
     self.parent.constraintAreaMaxX = 3000
     self.parent.constraintAreaMaxY = 5000
     network = csv.reader(open(filename), delimiter=';', quotechar='|')
     bs_number = 0
     for row in network:
         bs = devices.BS()
         bs.x = float(row[1])
         bs.y = float(row[2])
         bs.x = bs.x - 8500
         bs.y = bs.y - 11000
         bs.ID = bs_number
         bs_number +=1
         bs.angle = float(row[4])
         bs.turnedOn = True
         if (len(row)>12):
             bs.color = int(row[12])
         else:
             bs.color = 1
         self.parent.bs.append(bs)