Improve ROADM loss calculation in power mode

Signed-off-by: Jean-Luc Auge <jeanluc.auge@orange.com>
This commit is contained in:
Jean-Luc Auge
2018-11-19 20:32:03 +01:00
parent 4bd9a9cdda
commit c0cc5fa9fd
4 changed files with 24 additions and 12 deletions

View File

@@ -94,7 +94,8 @@ class Roadm(Node):
params = {'loss':None}
super().__init__(*args, params=RoadmParams(**params), **kwargs)
self.loss = self.params.loss
self.pch_out = None
self.pout_target = None #set in Networks.py by def set_roadm_loss
self.effective_loss = None #set in self.propagate
self.passive = True
@property
@@ -112,11 +113,16 @@ class Roadm(Node):
def __str__(self):
return '\n'.join([f'{type(self).__name__} {self.uid}',
f' loss (dB): {self.loss:.2f}',
f' pch out (dBm): {self.pch_out!r}'])
f' loss (dB): {self.effective_loss:.2f}',
f' pch out (dBm): {self.pout_target!r}'])
def propagate(self, *carriers):
attenuation = db2lin(self.loss)
def propagate(self, pref, *carriers):
#pin_target and loss are read from eqpt_config.json['Roadm']
#all ingress channels in xpress are set to this power level
#but add channels are not, so we define an effective loss
#in the case of add channels
self.effective_loss = pref.pi - self.pout_target
attenuation = db2lin(self.effective_loss)
for carrier in carriers:
pwr = carrier.power
@@ -126,11 +132,10 @@ class Roadm(Node):
yield carrier._replace(power=pwr)
def update_pref(self, pref):
self.pch_out = round(pref.pi - self.loss, 2)
return pref._replace(p_span0=pref.p0, p_spani=pref.pi - self.loss)
return pref._replace(p_span0=pref.p0, p_spani=self.pout_target)
def __call__(self, spectral_info):
carriers = tuple(self.propagate(*spectral_info.carriers))
carriers = tuple(self.propagate(spectral_info.pref, *spectral_info.carriers))
pref = self.update_pref(spectral_info.pref)
return spectral_info.update(carriers=carriers, pref=pref)