Source code for BinPy.Analog.source

from math import *
from BinPy import *


[docs]class Source: "This class represents a base class for the signal source" def __init__(self, equation, params): self.params = params self.equation = equation
[docs] def setParam(self, param, value): if not isinstance(self.params[param], type(value)): raise Exception("Invalid Value") self.params[param] = value self.trigger()
[docs] def setParams(self, params): for i in params: self.setParam(i, params[i])
[docs] def getParams(self): self.trigger() return self.params
[docs] def setEquation(self, equation): self.equation = equation self.trigger()
[docs] def evaluate(self): for i in self.params: exec("%s=%f" % (i, self.params[i])) self.val = eval(self.equation) return self.val
[docs]class VoltageSource(Source): def __init__(self, equation, params): Source.__init__(self, equation, params) self.params.update({'H': Connector(0), 'L': Connector(0)}) self.trigger()
[docs] def trigger(self): self.params['H'].state = self.evaluate() + self.params['L'].state
[docs] def setOutput(self, param, value): if not isinstance(value, Connector): raise Exception("Expecting a Connector Class Object") self.params[param] = value
[docs]class CurrentSource(Source): def __init__(self, equation, params): Source.__init__(self, equation, params) self.params.update({'H': Connector(0), 'L': Connector(0)}) self.trigger()
[docs] def trigger(self): self.params['i'] = self.evaluate()
[docs] def setoutput(self, param, value): if not isinstance(value, Connector): raise Exception("Expecting a Connector Class Object") self.params[param] = value
[docs]class SinWaveVoltageSource(VoltageSource): def __init__(self, amplitude=0, frequency=0, time=0, epoch=0): equation = 'V*round(sin(radians((w*t)+e)), 2)' params = {'V': amplitude, 'w': frequency, 't': time, 'e': epoch} VoltageSource.__init__(self, equation, params)
[docs]class CosWaveVoltageSource(VoltageSource): def __init__(self, amplitude=0, frequency=0, time=0, epoch=0): equation = 'V*round(cos(radians((w*t)+e)), 2)' params = {'V': amplitude, 'w': frequency, 't': time, 'e': epoch} VoltageSource.__init__(self, equation, params)
[docs]class SinWaveCurrentSource(CurrentSource): def __init__(self, amplitude=0, frequency=0, time=0, epoch=0): equation = 'I*round(sin(radians((w*t)+e)), 2)' params = {'I': amplitude, 'w': frequency, 't': time, 'e': epoch} CurrentSource.__init__(self, equation, params)
[docs]class CosWaveCurrentSource(CurrentSource): def __init__(self, amplitude=0, frequency=0, time=0, epoch=0): equation = 'I*round(cos(radians((w*t)+e)), 2)' params = {'I': amplitude, 'w': frequency, 't': time, 'e': epoch} CurrentSource.__init__(self, equation, params)