Source code for imtoolkit.Parameters

# Copyright (c) IMToolkit Development Team
# This toolkit is released under the MIT License, see LICENSE.txt

import re


[docs]class Parameters(object): """This class is used to pack various simulation parameters into an instance.""" arg = "" table = {} # default parameters M = 1 # Number of transmit antennas or subcarriers N = 1 # Number of receive antennas T = 1 # Number of timeslots in a space-time codeword Q = 1 # Number of dispersion matrices or active indices P = 1 # Number of selected elements K = 1 # Number of selected elements O = 1 # Number of embedded symbols in a space-time codeword IT = 1 # Number of iterations ITo = 1 # Number of outer iterations ITi = 1 # Number of inner iterations snrfrom = 0.0 # The beginning of SNR to = 50.0 # The end of SNR len = 11 # The above SNR range is divided by len by = 1.0 # SNR step size optsnr = snr = 0.0 # A specific SNR sim = "coh" # Type of simulator channel = "rayleigh" # Channel environment mod = "PSK" # Type of modulation such as PAM, PSK, QAM... L = 2 # Number of constellation RC = 1 # The number of repetition # other parameters (avoid pylint errors) Nsc = 0 # Number of subcarriers Ncp = 0 # CP length Ns = 0 # Number of scatters in Jakes channel model Nt = Nr = Mt = Mr = Nu = NRF = Lc = 0 W = R = Wl = J = PsiHalf = PhiHalf = deg = 0 taps = mind = hit = limit = Hflu = 0 a = d = r = v = u1 = u2 = alpha = rate = 0.0 dTx = 0.0 # Space between source antennas or LEDs Rx = 0.0 # Horizontal position of a receiver FdTs = 0.0 # Normalized Doppler frequency in Jakes channel model delta = Herr = cfo = 0.0 Kf = Dt = Dr = 0.0 dm = "" # Type of dispersion matrices or active indices dec = code = Wmode = Fmode = dmi = "" det = basis = CR = option = "" minh = 0 def __init__(self, arg): """ Args: arg (string): the specified simulation parameters. """ self.arg = arg options = arg.split("_") if "=" in options[0]: self.mode = "" else: self.mode = options.pop(0) self.table["mode"] = self.mode self.__setattr__("mode", self.mode) # parse arguments such as "M=2" for op in options: pair = op.split("=") pv = self.parseValue(pair[1]) self.table[pair[0]] = pv self.__setattr__(pair[0], pv) # def __setattr__(self, key, value): # self.table[key] = value # print(self.table) # return super(Parameters, self).__setattr__(key, value) def __getitem__(self, key): if key in self.table: return self.table[key] else: return False
[docs] def isSpeficied(self, key): if key in self.table: return True else: return False
[docs] def parseValue(self, value): if re.match(r'-*\d+', value): if value.find("e") > 0: return int(float(value)) # e.g. IT=1e5, IT=2.5e7 elif value.find(".") > 0: return float(value) # e.g. to=50.00 else: return int(value) # e.g. M=4 else: return value # e.g. channel=rayleigh