OpenRoadm amplifier model!

nf = f(Pin)

Signed-off-by: Jean-Luc Auge <jeanluc.auge@orange.com>
This commit is contained in:
Jean-Luc Auge
2018-11-02 10:29:30 +01:00
committed by EstherLerouzic
parent 88c2e2bd70
commit a46c8c5398
2 changed files with 18 additions and 2 deletions

View File

@@ -420,6 +420,7 @@ class Edfa(Node):
self.nf = None # dB edfa nf at operational.gain_target
self.gprofile = None
self.pin_db = None
self.nch = None
self.pout_db = None
self.dp_db = None #delta P with Pref (power swwep) in power mode
self.target_pch_db = None
@@ -485,6 +486,7 @@ class Edfa(Node):
self.interpol_gain_ripple = interp(self.channel_freq, amplifier_freq, self.params.gain_ripple)
self.interpol_nf_ripple =interp(self.channel_freq, amplifier_freq, self.params.nf_ripple)
self.nch = frequencies.size
self.pin_db = lin2db(sum(pin*1e3))
"""check power saturation and correct target_gain accordingly:"""
@@ -521,6 +523,9 @@ class Edfa(Node):
nf_avg = lin2db(db2lin(self.params.nf_model.nf1) + db2lin(self.params.nf_model.nf2)/db2lin(g1a))
elif self.params.type_def == 'fixed_gain':
nf_avg = self.params.nf_model.nf0
elif self.params.type_def == 'openroadm':
print('openroadm',self.pin_db - lin2db(self.nch) )
nf_avg = polyval(self.params.nf_model.nf_coef, self.pin_db - lin2db(self.nch))
else:
nf_avg = polyval(self.params.nf_fit_coeff, -dg)
if avg:

View File

@@ -20,6 +20,7 @@ from gnpy.core.elements import Edfa
Model_vg = namedtuple('Model_vg', 'nf1 nf2 delta_p')
Model_fg = namedtuple('Model_fg', 'nf0')
Model_openroadm = namedtuple('Model_openroadm', 'nf_coef')
Fiber = namedtuple('Fiber', 'type_variety dispersion gamma')
Spans = namedtuple('Spans', 'power_mode delta_power_range_db max_length length_units \
max_loss padding EOL con_in con_out')
@@ -79,6 +80,13 @@ class Amp(AmpBase):
except KeyError: pass #nf0 is not needed for variable gain amp
nf1, nf2, delta_p = nf_model(type_variety, gain_min, gain_max, nf_min, nf_max)
nf_def = Model_vg(nf1, nf2, delta_p)
elif type_def == 'openroadm':
try:
nf_coef = kwargs.pop('nf_coef')
except KeyError: #nf_coef is expected for openroadm amp
print(f'missing nf_coef input for amplifier: {type_variety} in eqpt_config.json')
exit()
nf_def = Model_openroadm(nf_coef)
return cls(**{**kwargs, **json_data, 'nf_model': nf_def})
@@ -140,8 +148,11 @@ def edfa_nf(gain_target, variety_type, equipment):
params = amp_params._asdict(),
operational = {
'gain_target': gain_target,
'tilt_target': 0,
})
'tilt_target': 0
}
)
amp.pin_db = 0
amp.nch = 88
return amp._calc_nf(True)
def trx_mode_params(equipment, trx_type_variety='', trx_mode='', error_message=False):