mirror of
https://github.com/Telecominfraproject/oopt-gnpy.git
synced 2025-11-01 18:47:48 +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.nch = frequencies.size
|
||||||
self.pin_db = lin2db(sum(pin * 1e3))
|
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
|
"""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"""
|
This power target is used calculate the amplifier gain"""
|
||||||
@@ -673,13 +676,17 @@ class Edfa(_Node):
|
|||||||
elif type_def == 'fixed_gain':
|
elif type_def == 'fixed_gain':
|
||||||
nf_avg = nf_model.nf0
|
nf_avg = nf_model.nf0
|
||||||
elif type_def == 'openroadm':
|
elif type_def == 'openroadm':
|
||||||
pin_ch = self.pin_db - lin2db(self.nch)
|
# OpenROADM specifies OSNR vs. input power per channel for 50 GHz slot width so we
|
||||||
# model OSNR = f(Pin)
|
# scale it to 50 GHz based on actual slot width.
|
||||||
nf_avg = pin_ch - polyval(nf_model.nf_coef, pin_ch) + 58
|
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':
|
elif type_def == 'openroadm_preamp':
|
||||||
pin_ch = self.pin_db - lin2db(self.nch)
|
# OpenROADM specifies OSNR vs. input power per channel for 50 GHz slot width so we
|
||||||
# model OSNR = f(Pin)
|
# scale it to 50 GHz based on actual slot width.
|
||||||
nf_avg = pin_ch - min((4 * pin_ch + 275) / 7, 33) + 58
|
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':
|
elif type_def == 'openroadm_booster':
|
||||||
# model a zero-noise amp with "infinitely negative" (in dB) NF
|
# model a zero-noise amp with "infinitely negative" (in dB) NF
|
||||||
nf_avg = float('-inf')
|
nf_avg = float('-inf')
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ def edfa_nf(gain_target, variety_type, equipment):
|
|||||||
)
|
)
|
||||||
amp.pin_db = 0
|
amp.pin_db = 0
|
||||||
amp.nch = 88
|
amp.nch = 88
|
||||||
|
amp.slot_width = 50e9
|
||||||
return amp._calc_nf(True)
|
return amp._calc_nf(True)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user