mirror of
https://github.com/Telecominfraproject/oopt-gnpy.git
synced 2025-10-30 01:32:21 +00:00
Correct calculation of NF for OpenROADM amps
This fixes #420. In order to be consistent with the OpenROADM MSA, the input power per channel used for calculating incremental OSNR and NF should be scaled to 50 GHz slot width. Signed-off-by: Jonas Mårtensson <jonas.martensson@ri.se> Change-Id: I64ca3e4cad6399f308827f4161d7c6b89be9d2ca
This commit is contained in:
committed by
Jan Kundrát
parent
57e98d7173
commit
99b2a554dc
@@ -636,6 +636,9 @@ class Edfa(_Node):
|
||||
|
||||
self.nch = frequencies.size
|
||||
self.pin_db = lin2db(sum(pin * 1e3))
|
||||
# The following should be changed when we have the new spectral information including slot widths.
|
||||
# For now, with homogeneous spectrum, we can calculate it as the difference between neighbouring channels.
|
||||
self.slot_width = self.channel_freq[1] - self.channel_freq[0]
|
||||
|
||||
"""in power mode: delta_p is defined and can be used to calculate the power target
|
||||
This power target is used calculate the amplifier gain"""
|
||||
@@ -673,13 +676,17 @@ class Edfa(_Node):
|
||||
elif type_def == 'fixed_gain':
|
||||
nf_avg = nf_model.nf0
|
||||
elif type_def == 'openroadm':
|
||||
pin_ch = self.pin_db - lin2db(self.nch)
|
||||
# model OSNR = f(Pin)
|
||||
nf_avg = pin_ch - polyval(nf_model.nf_coef, pin_ch) + 58
|
||||
# OpenROADM specifies OSNR vs. input power per channel for 50 GHz slot width so we
|
||||
# scale it to 50 GHz based on actual slot width.
|
||||
pin_ch_50GHz = self.pin_db - lin2db(self.nch) + lin2db(50e9 / self.slot_width)
|
||||
# model OSNR = f(Pin per 50 GHz channel)
|
||||
nf_avg = pin_ch_50GHz - polyval(nf_model.nf_coef, pin_ch_50GHz) + 58
|
||||
elif type_def == 'openroadm_preamp':
|
||||
pin_ch = self.pin_db - lin2db(self.nch)
|
||||
# model OSNR = f(Pin)
|
||||
nf_avg = pin_ch - min((4 * pin_ch + 275) / 7, 33) + 58
|
||||
# OpenROADM specifies OSNR vs. input power per channel for 50 GHz slot width so we
|
||||
# scale it to 50 GHz based on actual slot width.
|
||||
pin_ch_50GHz = self.pin_db - lin2db(self.nch) + lin2db(50e9 / self.slot_width)
|
||||
# model OSNR = f(Pin per 50 GHz channel)
|
||||
nf_avg = pin_ch_50GHz - min((4 * pin_ch_50GHz + 275) / 7, 33) + 58
|
||||
elif type_def == 'openroadm_booster':
|
||||
# model a zero-noise amp with "infinitely negative" (in dB) NF
|
||||
nf_avg = float('-inf')
|
||||
|
||||
@@ -27,6 +27,7 @@ def edfa_nf(gain_target, variety_type, equipment):
|
||||
)
|
||||
amp.pin_db = 0
|
||||
amp.nch = 88
|
||||
amp.slot_width = 50e9
|
||||
return amp._calc_nf(True)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user