mirror of
https://github.com/Telecominfraproject/oopt-gnpy.git
synced 2025-11-01 18:47:48 +00:00
feat: separate span power from tx power
gnpy currently uses the same parameter for tx output power and span input power: this prevents from modelling low tx power effect. This patch introduces a new tx-cannel-power and uses it to propagate in ROADM. Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com> Change-Id: Id3ac75e2cb617b513bdb38b51a52e05d15af46f5
This commit is contained in:
@@ -29,7 +29,7 @@ from typing import Union
|
||||
from logging import getLogger
|
||||
|
||||
from gnpy.core.utils import lin2db, db2lin, arrange_frequencies, snr_sum, per_label_average, pretty_summary_print, \
|
||||
watt2dbm, psd2powerdbm
|
||||
watt2dbm, psd2powerdbm, calculate_absolute_min_or_zero
|
||||
from gnpy.core.parameters import RoadmParams, FusedParams, FiberParams, PumpParams, EdfaParams, EdfaOperational, \
|
||||
RoadmPath, RoadmImpairment
|
||||
from gnpy.core.science_utils import NliSolver, RamanSolver
|
||||
@@ -95,6 +95,7 @@ class Transceiver(_Node):
|
||||
self.penalties = {}
|
||||
self.total_penalty = 0
|
||||
self.propagated_labels = [""]
|
||||
self.tx_power = None
|
||||
|
||||
def _calc_cd(self, spectral_info):
|
||||
"""Updates the Transceiver property with the CD of the received channels. CD in ps/nm.
|
||||
@@ -194,6 +195,7 @@ class Transceiver(_Node):
|
||||
osnr_ase = per_label_average(self.osnr_ase, self.propagated_labels)
|
||||
osnr_ase_01nm = per_label_average(self.osnr_ase_01nm, self.propagated_labels)
|
||||
snr_01nm = per_label_average(self.snr_01nm, self.propagated_labels)
|
||||
tx_power_dbm = per_label_average(watt2dbm(self.tx_power), self.propagated_labels)
|
||||
cd = mean(self.chromatic_dispersion)
|
||||
pmd = mean(self.pmd)
|
||||
pdl = mean(self.pdl)
|
||||
@@ -207,7 +209,8 @@ class Transceiver(_Node):
|
||||
f' CD (ps/nm): {cd:.2f}',
|
||||
f' PMD (ps): {pmd:.2f}',
|
||||
f' PDL (dB): {pdl:.2f}',
|
||||
f' Latency (ms): {latency:.2f}'])
|
||||
f' Latency (ms): {latency:.2f}',
|
||||
f' Actual pch out (dBm): {pretty_summary_print(tx_power_dbm)}'])
|
||||
|
||||
cd_penalty = self.penalties.get('chromatic_dispersion')
|
||||
if cd_penalty is not None:
|
||||
@@ -222,6 +225,7 @@ class Transceiver(_Node):
|
||||
return result
|
||||
|
||||
def __call__(self, spectral_info):
|
||||
self.tx_power = spectral_info.tx_power
|
||||
self._calc_snr(spectral_info)
|
||||
self._calc_cd(spectral_info)
|
||||
self._calc_pmd(spectral_info)
|
||||
@@ -244,6 +248,8 @@ class Roadm(_Node):
|
||||
# on the path, since it depends on the equalization definition on the degree.
|
||||
self.ref_pch_out_dbm = None
|
||||
self.loss = 0 # auto-design interest
|
||||
self.loss_pch_db = None
|
||||
|
||||
# Optical power of carriers are equalized by the ROADM, so that the experienced loss is not the same for
|
||||
# different carriers. The ref_effective_loss records the loss for a reference carrier.
|
||||
self.ref_effective_loss = None
|
||||
@@ -315,11 +321,13 @@ class Roadm(_Node):
|
||||
return f'{type(self).__name__} {self.uid}'
|
||||
|
||||
total_pch = pretty_summary_print(per_label_average(self.pch_out_dbm, self.propagated_labels))
|
||||
total_loss = pretty_summary_print(per_label_average(self.loss_pch_db, self.propagated_labels))
|
||||
return '\n'.join([f'{type(self).__name__} {self.uid}',
|
||||
f' type_variety: {self.type_variety}',
|
||||
f' effective loss (dB): {self.ref_effective_loss:.2f}',
|
||||
f' reference pch out (dBm): {self.ref_pch_out_dbm:.2f}',
|
||||
f' actual pch out (dBm): {total_pch}'])
|
||||
f' Type_variety: {self.type_variety}',
|
||||
f' Reference loss (dB): {self.ref_effective_loss:.2f}',
|
||||
f' Actual loss (dB): {total_loss}',
|
||||
f' Reference pch out (dBm): {self.ref_pch_out_dbm:.2f}',
|
||||
f' Actual pch out (dBm): {total_pch}'])
|
||||
|
||||
def get_roadm_target_power(self, spectral_info: SpectralInformation = None) -> Union[float, ndarray]:
|
||||
"""Computes the power in dBm for a reference carrier or for a spectral information.
|
||||
@@ -380,9 +388,13 @@ class Roadm(_Node):
|
||||
There is no difference for add or express : the same target is applied.
|
||||
For the moment propagate operates with spectral info carriers all having the same source or destination.
|
||||
"""
|
||||
# record input powers to compute the actual loss at the end of the process
|
||||
input_power_dbm = watt2dbm(spectral_info.signal + spectral_info.nli + spectral_info.ase)
|
||||
# apply min ROADM loss if it exists
|
||||
roadm_maxloss_db = self.get_roadm_path(from_degree, degree).impairment.maxloss
|
||||
spectral_info.apply_attenuation_db(roadm_maxloss_db)
|
||||
# records the total power after applying minimum loss
|
||||
net_input_power_dbm = watt2dbm(spectral_info.signal + spectral_info.nli + spectral_info.ase)
|
||||
# find the target power for the reference carrier
|
||||
ref_per_degree_pch = self.get_per_degree_ref_power(degree)
|
||||
# find the target powers for each signal carrier
|
||||
@@ -392,15 +404,19 @@ class Roadm(_Node):
|
||||
# Depending on propagation upstream from this ROADM, the input power might be smaller than
|
||||
# the target power out configured for this ROADM degree's egress. Since ROADM does not amplify,
|
||||
# the power out of the ROADM for the ref channel is the min value between target power and input power.
|
||||
# (TODO add a minimum loss for the ROADM crossing)
|
||||
self.ref_pch_out_dbm = min(self.ref_pch_in_dbm[from_degree] - roadm_maxloss_db, ref_per_degree_pch)
|
||||
ref_pch_in_dbm = self.ref_pch_in_dbm[from_degree]
|
||||
# Calculate the output power for the reference channel (only for visualization)
|
||||
self.ref_pch_out_dbm = min(ref_pch_in_dbm - roadm_maxloss_db, ref_per_degree_pch)
|
||||
|
||||
# Definition of effective_loss:
|
||||
# Optical power of carriers are equalized by the ROADM, so that the experienced loss is not the same for
|
||||
# different carriers. effective_loss records the loss for the reference carrier.
|
||||
self.ref_effective_loss = self.ref_pch_in_dbm[from_degree] - self.ref_pch_out_dbm
|
||||
input_power = spectral_info.signal + spectral_info.nli + spectral_info.ase
|
||||
# Calculate the effective loss for the reference channel
|
||||
self.ref_effective_loss = ref_pch_in_dbm - self.ref_pch_out_dbm
|
||||
|
||||
# Calculate the target power per channel according to the equalization policy
|
||||
target_power_per_channel = per_degree_pch + spectral_info.delta_pdb_per_channel
|
||||
# Computation of the per channel target power according to equalization policy
|
||||
# Computation of the correction according to equalization policy
|
||||
# If target_power_per_channel has some channels power above input power, then the whole target is reduced.
|
||||
# For example, if user specifies delta_pdb_per_channel:
|
||||
# freq1: 1dB, freq2: 3dB, freq3: -3dB, and target is -20dBm out of the ROADM,
|
||||
@@ -415,17 +431,25 @@ class Roadm(_Node):
|
||||
# that had the min power.
|
||||
# This change corresponds to a discussion held during coders call. Please look at this document for
|
||||
# a reference: https://telecominfraproject.atlassian.net/wiki/spaces/OOPT/pages/669679645/PSE+Meeting+Minutes
|
||||
correction = (abs(watt2dbm(input_power) - target_power_per_channel)
|
||||
- (watt2dbm(input_power) - target_power_per_channel)) / 2
|
||||
correction = calculate_absolute_min_or_zero(net_input_power_dbm - target_power_per_channel)
|
||||
new_target = target_power_per_channel - correction
|
||||
delta_power = watt2dbm(input_power) - new_target
|
||||
delta_power = net_input_power_dbm - new_target
|
||||
|
||||
spectral_info.apply_attenuation_db(delta_power)
|
||||
spectral_info.pmd = sqrt(spectral_info.pmd ** 2
|
||||
+ self.get_roadm_path(from_degree=from_degree, to_degree=degree).impairment.pmd ** 2)
|
||||
spectral_info.pdl = sqrt(spectral_info.pdl ** 2
|
||||
+ self.get_roadm_path(from_degree=from_degree, to_degree=degree).impairment.pdl ** 2)
|
||||
|
||||
# Update the PMD information
|
||||
pmd_impairment = self.get_roadm_path(from_degree=from_degree, to_degree=degree).impairment.pmd
|
||||
spectral_info.pmd = sqrt(spectral_info.pmd ** 2 + pmd_impairment ** 2)
|
||||
|
||||
# Update the PMD information
|
||||
pdl_impairment = self.get_roadm_path(from_degree=from_degree, to_degree=degree).impairment.pdl
|
||||
spectral_info.pdl = sqrt(spectral_info.pdl ** 2 + pdl_impairment ** 2)
|
||||
|
||||
# Update the per channel power with the result of propagation
|
||||
self.pch_out_dbm = watt2dbm(spectral_info.signal + spectral_info.nli + spectral_info.ase)
|
||||
|
||||
# Update the loss per channel and the labels
|
||||
self.loss_pch_db = input_power_dbm - self.pch_out_dbm
|
||||
self.propagated_labels = spectral_info.label
|
||||
|
||||
def set_roadm_paths(self, from_degree, to_degree, path_type, impairment_id=None):
|
||||
|
||||
@@ -52,7 +52,7 @@ class SpectralInformation(object):
|
||||
|
||||
def __init__(self, frequency: array, baud_rate: array, slot_width: array, signal: array, nli: array, ase: array,
|
||||
roll_off: array, chromatic_dispersion: array, pmd: array, pdl: array, latency: array,
|
||||
delta_pdb_per_channel: array, tx_osnr: array, label: array):
|
||||
delta_pdb_per_channel: array, tx_osnr: array, tx_power: array, label: array):
|
||||
indices = argsort(frequency)
|
||||
self._frequency = frequency[indices]
|
||||
self._df = outer(ones(frequency.shape), frequency) - outer(frequency, ones(frequency.shape))
|
||||
@@ -80,6 +80,7 @@ class SpectralInformation(object):
|
||||
self._latency = latency[indices]
|
||||
self._delta_pdb_per_channel = delta_pdb_per_channel[indices]
|
||||
self._tx_osnr = tx_osnr[indices]
|
||||
self._tx_power = tx_power[indices]
|
||||
self._label = label[indices]
|
||||
|
||||
@property
|
||||
@@ -188,6 +189,14 @@ class SpectralInformation(object):
|
||||
def tx_osnr(self, tx_osnr):
|
||||
self._tx_osnr = tx_osnr
|
||||
|
||||
@property
|
||||
def tx_power(self):
|
||||
return self._tx_power
|
||||
|
||||
@tx_power.setter
|
||||
def tx_power(self, tx_power):
|
||||
self._tx_power = tx_power
|
||||
|
||||
@property
|
||||
def channel_number(self):
|
||||
return self._channel_number
|
||||
@@ -232,6 +241,7 @@ class SpectralInformation(object):
|
||||
delta_pdb_per_channel=append(self.delta_pdb_per_channel,
|
||||
other.delta_pdb_per_channel),
|
||||
tx_osnr=append(self.tx_osnr, other.tx_osnr),
|
||||
tx_power=append(self.tx_power, other.tx_power),
|
||||
label=append(self.label, other.label))
|
||||
except SpectrumError:
|
||||
raise SpectrumError('Spectra cannot be summed: channels overlapping.')
|
||||
@@ -251,6 +261,7 @@ def create_arbitrary_spectral_information(frequency: Union[ndarray, Iterable, fl
|
||||
signal: Union[float, ndarray, Iterable],
|
||||
baud_rate: Union[float, ndarray, Iterable],
|
||||
tx_osnr: Union[float, ndarray, Iterable],
|
||||
tx_power: Union[float, ndarray, Iterable] = None,
|
||||
delta_pdb_per_channel: Union[float, ndarray, Iterable] = 0.,
|
||||
slot_width: Union[float, ndarray, Iterable] = None,
|
||||
roll_off: Union[float, ndarray, Iterable] = 0.,
|
||||
@@ -277,6 +288,7 @@ def create_arbitrary_spectral_information(frequency: Union[ndarray, Iterable, fl
|
||||
ase = zeros(number_of_channels)
|
||||
delta_pdb_per_channel = full(number_of_channels, delta_pdb_per_channel)
|
||||
tx_osnr = full(number_of_channels, tx_osnr)
|
||||
tx_power = full(number_of_channels, tx_power)
|
||||
label = full(number_of_channels, label)
|
||||
return SpectralInformation(frequency=frequency, slot_width=slot_width,
|
||||
signal=signal, nli=nli, ase=ase,
|
||||
@@ -284,7 +296,7 @@ def create_arbitrary_spectral_information(frequency: Union[ndarray, Iterable, fl
|
||||
chromatic_dispersion=chromatic_dispersion,
|
||||
pmd=pmd, pdl=pdl, latency=latency,
|
||||
delta_pdb_per_channel=delta_pdb_per_channel,
|
||||
tx_osnr=tx_osnr, label=label)
|
||||
tx_osnr=tx_osnr, tx_power=tx_power, label=label)
|
||||
except ValueError as e:
|
||||
if 'could not broadcast' in str(e):
|
||||
raise SpectrumError('Dimension mismatch in input fields.')
|
||||
@@ -292,45 +304,47 @@ def create_arbitrary_spectral_information(frequency: Union[ndarray, Iterable, fl
|
||||
raise
|
||||
|
||||
|
||||
def create_input_spectral_information(f_min, f_max, roll_off, baud_rate, power, spacing, tx_osnr, delta_pdb=0):
|
||||
def create_input_spectral_information(f_min, f_max, roll_off, baud_rate, spacing, tx_osnr, tx_power,
|
||||
delta_pdb=0):
|
||||
"""Creates a fixed slot width spectral information with flat power.
|
||||
all arguments are scalar values"""
|
||||
number_of_channels = automatic_nch(f_min, f_max, spacing)
|
||||
frequency = [(f_min + spacing * i) for i in range(1, number_of_channels + 1)]
|
||||
delta_pdb_per_channel = delta_pdb * ones(number_of_channels)
|
||||
label = [f'{baud_rate * 1e-9 :.2f}G' for i in range(number_of_channels)]
|
||||
return create_arbitrary_spectral_information(frequency, slot_width=spacing, signal=power, baud_rate=baud_rate,
|
||||
return create_arbitrary_spectral_information(frequency, slot_width=spacing, signal=tx_power, baud_rate=baud_rate,
|
||||
roll_off=roll_off, delta_pdb_per_channel=delta_pdb_per_channel,
|
||||
tx_osnr=tx_osnr, label=label)
|
||||
tx_osnr=tx_osnr, tx_power=tx_power, label=label)
|
||||
|
||||
|
||||
def carriers_to_spectral_information(initial_spectrum: dict[float, Carrier],
|
||||
power: float) -> SpectralInformation:
|
||||
"""Initial spectrum is a dict with key = carrier frequency, and value a Carrier object.
|
||||
:param initial_spectrum: indexed by frequency in Hz, with power offset (delta_pdb), baudrate, slot width,
|
||||
tx_osnr and roll off.
|
||||
tx_osnr, tx_power and roll off.
|
||||
:param power: power of the request
|
||||
"""
|
||||
frequency = list(initial_spectrum.keys())
|
||||
signal = [power * db2lin(c.delta_pdb) for c in initial_spectrum.values()]
|
||||
signal = [c.tx_power for c in initial_spectrum.values()]
|
||||
roll_off = [c.roll_off for c in initial_spectrum.values()]
|
||||
baud_rate = [c.baud_rate for c in initial_spectrum.values()]
|
||||
delta_pdb_per_channel = [c.delta_pdb for c in initial_spectrum.values()]
|
||||
slot_width = [c.slot_width for c in initial_spectrum.values()]
|
||||
tx_osnr = [c.tx_osnr for c in initial_spectrum.values()]
|
||||
tx_power = [c.tx_power for c in initial_spectrum.values()]
|
||||
label = [c.label for c in initial_spectrum.values()]
|
||||
p_span0 = watt2dbm(power)
|
||||
return create_arbitrary_spectral_information(frequency=frequency, signal=signal, baud_rate=baud_rate,
|
||||
slot_width=slot_width, roll_off=roll_off,
|
||||
delta_pdb_per_channel=delta_pdb_per_channel, tx_osnr=tx_osnr,
|
||||
label=label)
|
||||
tx_power=tx_power, label=label)
|
||||
|
||||
|
||||
@dataclass
|
||||
class Carrier:
|
||||
"""One channel in the initial mixed-type spectrum definition, each type being defined by
|
||||
its delta_pdb (power offset with respect to reference power), baud rate, slot_width, roll_off
|
||||
and tx_osnr. delta_pdb offset is applied to target power out of Roadm.
|
||||
tx_power, and tx_osnr. delta_pdb offset is applied to target power out of Roadm.
|
||||
Label is used to group carriers which belong to the same partition when printing results.
|
||||
"""
|
||||
delta_pdb: float
|
||||
@@ -338,6 +352,7 @@ class Carrier:
|
||||
slot_width: float
|
||||
roll_off: float
|
||||
tx_osnr: float
|
||||
tx_power: float
|
||||
label: str
|
||||
|
||||
|
||||
|
||||
@@ -218,7 +218,7 @@ def estimate_raman_gain(node, equipment, power_dbm):
|
||||
# do not compute twice to save on time
|
||||
return node.estimated_gain
|
||||
spectral_info = create_input_spectral_information(f_min=f_min, f_max=f_max, roll_off=roll_off,
|
||||
baud_rate=baud_rate, power=power, spacing=spacing,
|
||||
baud_rate=baud_rate, tx_power=power, spacing=spacing,
|
||||
tx_osnr=tx_osnr)
|
||||
pin = watt2dbm(sum(spectral_info.signal))
|
||||
attenuation_in_db = node.params.con_in + node.params.att_in
|
||||
@@ -304,9 +304,11 @@ def set_egress_amplifier(network, this_node, equipment, pref_ch_db, pref_total_d
|
||||
prev_node = this_node
|
||||
node = oms
|
||||
if isinstance(this_node, elements.Transceiver):
|
||||
# for the time being use the same power for the target of roadms and for transceivers
|
||||
# TODO: This should be changed when introducing a power parameter dedicated to transceivers
|
||||
this_node_out_power = pref_ch_db
|
||||
# todo change pref to a ref channel
|
||||
if equipment['SI']['default'].tx_power_dbm is not None:
|
||||
this_node_out_power = equipment['SI']['default'].tx_power_dbm
|
||||
else:
|
||||
this_node_out_power = pref_ch_db
|
||||
if isinstance(this_node, elements.Roadm):
|
||||
# get target power out from ROADM for the reference carrier based on equalization settings
|
||||
this_node_out_power = this_node.get_per_degree_ref_power(degree=node.uid)
|
||||
|
||||
@@ -9,7 +9,7 @@ This module contains utility functions that are used with gnpy.
|
||||
"""
|
||||
|
||||
from csv import writer
|
||||
from numpy import pi, cos, sqrt, log10, linspace, zeros, shape, where, logical_and, mean
|
||||
from numpy import pi, cos, sqrt, log10, linspace, zeros, shape, where, logical_and, mean, array
|
||||
from scipy import constants
|
||||
from copy import deepcopy
|
||||
|
||||
@@ -452,3 +452,20 @@ def restore_order(elements, order):
|
||||
[3, 2, 7]
|
||||
"""
|
||||
return [elements[i[0]] for i in sorted(enumerate(order), key=lambda x:x[1]) if elements[i[0]] is not None]
|
||||
|
||||
|
||||
def calculate_absolute_min_or_zero(x: array) -> array:
|
||||
"""Calculates the element-wise absolute minimum between the x and zero.
|
||||
|
||||
Parameters:
|
||||
x (array): The first input array.
|
||||
|
||||
Returns:
|
||||
array: The element-wise absolute minimum between x and zero.
|
||||
|
||||
Example:
|
||||
>>> x = array([-1, 2, -3])
|
||||
>>> calculate_absolute_min_or_zero(x)
|
||||
array([1., 0., 3.])
|
||||
"""
|
||||
return (abs(x) - x) / 2
|
||||
|
||||
@@ -290,6 +290,7 @@
|
||||
"spacing": 50e9,
|
||||
"power_dbm": 0,
|
||||
"power_range_db": [0, 0, 1],
|
||||
"tx_power_dbm": 0,
|
||||
"roll_off": 0.15,
|
||||
"tx_osnr": 40,
|
||||
"sys_margins": 2
|
||||
|
||||
@@ -194,8 +194,10 @@ def transmission_main_example(args=None):
|
||||
params['effective_freq_slot'] = None
|
||||
trx_params = trx_mode_params(equipment)
|
||||
trx_params['power'] = dbm2watt(equipment['SI']['default'].power_dbm)
|
||||
trx_params['tx_power'] = dbm2watt(equipment['SI']['default'].power_dbm)
|
||||
if args.power:
|
||||
trx_params['power'] = dbm2watt(float(args.power))
|
||||
trx_params['tx_power'] = dbm2watt(float(args.power))
|
||||
params.update(trx_params)
|
||||
initial_spectrum = None
|
||||
params['nb_channel'] = automatic_nch(trx_params['f_min'], trx_params['f_max'], trx_params['spacing'])
|
||||
@@ -372,7 +374,8 @@ def path_requests_run(args=None):
|
||||
'effective_freq_slot': None,
|
||||
'nb_channel': automatic_nch(equipment['SI']['default'].f_min, equipment['SI']['default'].f_max,
|
||||
equipment['SI']['default'].spacing),
|
||||
'power': dbm2watt(equipment['SI']['default'].power_dbm)
|
||||
'power': dbm2watt(equipment['SI']['default'].power_dbm),
|
||||
'tx_power': dbm2watt(equipment['SI']['default'].power_dbm)
|
||||
}
|
||||
trx_params = trx_mode_params(equipment)
|
||||
params.update(trx_params)
|
||||
|
||||
@@ -51,9 +51,10 @@ class _JsonThing:
|
||||
clean_kwargs = {k: v for k, v in kwargs.items() if v != ''}
|
||||
for k, v in default_values.items():
|
||||
setattr(self, k, clean_kwargs.get(k, v))
|
||||
if k not in clean_kwargs and name != 'Amp':
|
||||
msg = f'\n WARNING missing {k} attribute in eqpt_config.json[{name}]' \
|
||||
+ f'\n default value is {k} = {v}'
|
||||
if k not in clean_kwargs and name != 'Amp' and v is not None:
|
||||
# do not show this warning if the default value is None
|
||||
msg = f'\n\tWARNING missing {k} attribute in eqpt_config.json[{name}]' \
|
||||
+ f'\n\tdefault value is {k} = {v}\n'
|
||||
_logger.warning(msg)
|
||||
|
||||
|
||||
@@ -67,7 +68,8 @@ class SI(_JsonThing):
|
||||
"power_range_db": [0, 0, 0.5],
|
||||
"roll_off": 0.15,
|
||||
"tx_osnr": 45,
|
||||
"sys_margins": 0
|
||||
"sys_margins": 0,
|
||||
"tx_power_dbm": None # optional value in SI
|
||||
}
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
@@ -268,7 +270,7 @@ def _spectrum_from_json(json_data):
|
||||
label should be different for each partition
|
||||
>>> json_data = {'spectrum': \
|
||||
[{'f_min': 193.2e12, 'f_max': 193.4e12, 'slot_width': 50e9, 'baud_rate': 32e9, 'roll_off': 0.15, \
|
||||
'delta_pdb': 1, 'tx_osnr': 45},\
|
||||
'delta_pdb': 1, 'tx_osnr': 45, 'tx_power_dbm': -7},\
|
||||
{'f_min': 193.4625e12, 'f_max': 193.9875e12, 'slot_width': 75e9, 'baud_rate': 64e9, 'roll_off': 0.15},\
|
||||
{'f_min': 194.075e12, 'f_max': 194.075e12, 'slot_width': 100e9, 'baud_rate': 90e9, 'roll_off': 0.15},\
|
||||
{'f_min': 194.2e12, 'f_max': 194.35e12, 'slot_width': 50e9, 'baud_rate': 32e9, 'roll_off': 0.15}]}
|
||||
@@ -276,24 +278,24 @@ def _spectrum_from_json(json_data):
|
||||
>>> for k, v in spectrum.items():
|
||||
... print(f'{k}: {v}')
|
||||
...
|
||||
193200000000000.0: Carrier(delta_pdb=1, baud_rate=32000000000.0, slot_width=50000000000.0, roll_off=0.15, tx_osnr=45, label='0-32.00G')
|
||||
193250000000000.0: Carrier(delta_pdb=1, baud_rate=32000000000.0, slot_width=50000000000.0, roll_off=0.15, tx_osnr=45, label='0-32.00G')
|
||||
193300000000000.0: Carrier(delta_pdb=1, baud_rate=32000000000.0, slot_width=50000000000.0, roll_off=0.15, tx_osnr=45, label='0-32.00G')
|
||||
193350000000000.0: Carrier(delta_pdb=1, baud_rate=32000000000.0, slot_width=50000000000.0, roll_off=0.15, tx_osnr=45, label='0-32.00G')
|
||||
193400000000000.0: Carrier(delta_pdb=1, baud_rate=32000000000.0, slot_width=50000000000.0, roll_off=0.15, tx_osnr=45, label='0-32.00G')
|
||||
193462500000000.0: Carrier(delta_pdb=0, baud_rate=64000000000.0, slot_width=75000000000.0, roll_off=0.15, tx_osnr=40, label='1-64.00G')
|
||||
193537500000000.0: Carrier(delta_pdb=0, baud_rate=64000000000.0, slot_width=75000000000.0, roll_off=0.15, tx_osnr=40, label='1-64.00G')
|
||||
193612500000000.0: Carrier(delta_pdb=0, baud_rate=64000000000.0, slot_width=75000000000.0, roll_off=0.15, tx_osnr=40, label='1-64.00G')
|
||||
193687500000000.0: Carrier(delta_pdb=0, baud_rate=64000000000.0, slot_width=75000000000.0, roll_off=0.15, tx_osnr=40, label='1-64.00G')
|
||||
193762500000000.0: Carrier(delta_pdb=0, baud_rate=64000000000.0, slot_width=75000000000.0, roll_off=0.15, tx_osnr=40, label='1-64.00G')
|
||||
193837500000000.0: Carrier(delta_pdb=0, baud_rate=64000000000.0, slot_width=75000000000.0, roll_off=0.15, tx_osnr=40, label='1-64.00G')
|
||||
193912500000000.0: Carrier(delta_pdb=0, baud_rate=64000000000.0, slot_width=75000000000.0, roll_off=0.15, tx_osnr=40, label='1-64.00G')
|
||||
193987500000000.0: Carrier(delta_pdb=0, baud_rate=64000000000.0, slot_width=75000000000.0, roll_off=0.15, tx_osnr=40, label='1-64.00G')
|
||||
194075000000000.0: Carrier(delta_pdb=0, baud_rate=90000000000.0, slot_width=100000000000.0, roll_off=0.15, tx_osnr=40, label='2-90.00G')
|
||||
194200000000000.0: Carrier(delta_pdb=0, baud_rate=32000000000.0, slot_width=50000000000.0, roll_off=0.15, tx_osnr=40, label='3-32.00G')
|
||||
194250000000000.0: Carrier(delta_pdb=0, baud_rate=32000000000.0, slot_width=50000000000.0, roll_off=0.15, tx_osnr=40, label='3-32.00G')
|
||||
194300000000000.0: Carrier(delta_pdb=0, baud_rate=32000000000.0, slot_width=50000000000.0, roll_off=0.15, tx_osnr=40, label='3-32.00G')
|
||||
194350000000000.0: Carrier(delta_pdb=0, baud_rate=32000000000.0, slot_width=50000000000.0, roll_off=0.15, tx_osnr=40, label='3-32.00G')
|
||||
193200000000000.0: Carrier(delta_pdb=1, baud_rate=32000000000.0, slot_width=50000000000.0, roll_off=0.15, tx_osnr=45, tx_power=0.00019952623149688798, label='0-32.00G')
|
||||
193250000000000.0: Carrier(delta_pdb=1, baud_rate=32000000000.0, slot_width=50000000000.0, roll_off=0.15, tx_osnr=45, tx_power=0.00019952623149688798, label='0-32.00G')
|
||||
193300000000000.0: Carrier(delta_pdb=1, baud_rate=32000000000.0, slot_width=50000000000.0, roll_off=0.15, tx_osnr=45, tx_power=0.00019952623149688798, label='0-32.00G')
|
||||
193350000000000.0: Carrier(delta_pdb=1, baud_rate=32000000000.0, slot_width=50000000000.0, roll_off=0.15, tx_osnr=45, tx_power=0.00019952623149688798, label='0-32.00G')
|
||||
193400000000000.0: Carrier(delta_pdb=1, baud_rate=32000000000.0, slot_width=50000000000.0, roll_off=0.15, tx_osnr=45, tx_power=0.00019952623149688798, label='0-32.00G')
|
||||
193462500000000.0: Carrier(delta_pdb=0, baud_rate=64000000000.0, slot_width=75000000000.0, roll_off=0.15, tx_osnr=40, tx_power=0.001, label='1-64.00G')
|
||||
193537500000000.0: Carrier(delta_pdb=0, baud_rate=64000000000.0, slot_width=75000000000.0, roll_off=0.15, tx_osnr=40, tx_power=0.001, label='1-64.00G')
|
||||
193612500000000.0: Carrier(delta_pdb=0, baud_rate=64000000000.0, slot_width=75000000000.0, roll_off=0.15, tx_osnr=40, tx_power=0.001, label='1-64.00G')
|
||||
193687500000000.0: Carrier(delta_pdb=0, baud_rate=64000000000.0, slot_width=75000000000.0, roll_off=0.15, tx_osnr=40, tx_power=0.001, label='1-64.00G')
|
||||
193762500000000.0: Carrier(delta_pdb=0, baud_rate=64000000000.0, slot_width=75000000000.0, roll_off=0.15, tx_osnr=40, tx_power=0.001, label='1-64.00G')
|
||||
193837500000000.0: Carrier(delta_pdb=0, baud_rate=64000000000.0, slot_width=75000000000.0, roll_off=0.15, tx_osnr=40, tx_power=0.001, label='1-64.00G')
|
||||
193912500000000.0: Carrier(delta_pdb=0, baud_rate=64000000000.0, slot_width=75000000000.0, roll_off=0.15, tx_osnr=40, tx_power=0.001, label='1-64.00G')
|
||||
193987500000000.0: Carrier(delta_pdb=0, baud_rate=64000000000.0, slot_width=75000000000.0, roll_off=0.15, tx_osnr=40, tx_power=0.001, label='1-64.00G')
|
||||
194075000000000.0: Carrier(delta_pdb=0, baud_rate=90000000000.0, slot_width=100000000000.0, roll_off=0.15, tx_osnr=40, tx_power=0.001, label='2-90.00G')
|
||||
194200000000000.0: Carrier(delta_pdb=0, baud_rate=32000000000.0, slot_width=50000000000.0, roll_off=0.15, tx_osnr=40, tx_power=0.001, label='3-32.00G')
|
||||
194250000000000.0: Carrier(delta_pdb=0, baud_rate=32000000000.0, slot_width=50000000000.0, roll_off=0.15, tx_osnr=40, tx_power=0.001, label='3-32.00G')
|
||||
194300000000000.0: Carrier(delta_pdb=0, baud_rate=32000000000.0, slot_width=50000000000.0, roll_off=0.15, tx_osnr=40, tx_power=0.001, label='3-32.00G')
|
||||
194350000000000.0: Carrier(delta_pdb=0, baud_rate=32000000000.0, slot_width=50000000000.0, roll_off=0.15, tx_osnr=40, tx_power=0.001, label='3-32.00G')
|
||||
"""
|
||||
spectrum = {}
|
||||
json_data = sorted(json_data, key=lambda x: x['f_min'])
|
||||
@@ -309,6 +311,9 @@ def _spectrum_from_json(json_data):
|
||||
# default tx_osnr is set to 40 dB
|
||||
if 'tx_osnr' not in part:
|
||||
part['tx_osnr'] = 40
|
||||
# default tx_power_dbm is set to 0 dBn
|
||||
if 'tx_power_dbm' not in part:
|
||||
part['tx_power_dbm'] = 0
|
||||
# starting freq is exactly f_min to be consistent with utils.automatic_nch
|
||||
# first partition min occupation is f_min - slot_width / 2 (central_frequency is f_min)
|
||||
# supposes that carriers are centered on frequency
|
||||
@@ -327,7 +332,8 @@ def _spectrum_from_json(json_data):
|
||||
part['slot_width']):
|
||||
spectrum[current_freq] = Carrier(delta_pdb=part['delta_pdb'], baud_rate=part['baud_rate'],
|
||||
slot_width=part['slot_width'], roll_off=part['roll_off'],
|
||||
tx_osnr=part['tx_osnr'], label=part['label'])
|
||||
tx_osnr=part['tx_osnr'], tx_power=dbm2watt(part['tx_power_dbm']),
|
||||
label=part['label'])
|
||||
previous_part_max_freq = current_freq + part['slot_width'] / 2
|
||||
return spectrum
|
||||
|
||||
@@ -410,6 +416,9 @@ def _equipment_from_json(json_data, filename):
|
||||
elif key == 'Roadm':
|
||||
equipment[key][subkey] = Roadm(**entry)
|
||||
elif key == 'SI':
|
||||
# use power_dbm value for tx_power_dbm if the key is not in 'SI'
|
||||
# if 'tx_power_dbm' not in entry.keys():
|
||||
# entry['tx_power_dbm'] = entry['power_dbm']
|
||||
equipment[key][subkey] = SI(**entry)
|
||||
elif key == 'Transceiver':
|
||||
equipment[key][subkey] = Transceiver(**entry)
|
||||
@@ -576,7 +585,6 @@ def requests_from_json(json_data, equipment):
|
||||
params['nodes_list'] = [n['num-unnum-hop']['node-id'] for n in nd_list]
|
||||
params['loose_list'] = [n['num-unnum-hop']['hop-type'] for n in nd_list]
|
||||
# recover trx physical param (baudrate, ...) from type and mode
|
||||
# in trx_mode_params optical power is read from equipment['SI']['default'] and
|
||||
# nb_channel is computed based on min max frequency and spacing
|
||||
try:
|
||||
trx_params = trx_mode_params(equipment, params['trx_type'], params['trx_mode'], True)
|
||||
@@ -608,6 +616,14 @@ def requests_from_json(json_data, equipment):
|
||||
params['path_bandwidth'] = req['path-constraints']['te-bandwidth']['path_bandwidth']
|
||||
except KeyError:
|
||||
pass
|
||||
params['tx_power'] = req['path-constraints']['te-bandwidth'].get('tx_power')
|
||||
default_tx_power_dbm = equipment['SI']['default'].tx_power_dbm
|
||||
if params['tx_power'] is None:
|
||||
# use request's input power in span instead
|
||||
params['tx_power'] = params['power']
|
||||
if default_tx_power_dbm is not None:
|
||||
# use default tx power
|
||||
params['tx_power'] = dbm2watt(default_tx_power_dbm)
|
||||
_check_one_request(params, f_max_from_si)
|
||||
requests_list.append(PathRequest(**params))
|
||||
return requests_list
|
||||
|
||||
@@ -36,7 +36,7 @@ RequestParams = namedtuple('RequestParams', 'request_id source destination bidir
|
||||
' trx_mode nodes_list loose_list spacing power nb_channel f_min'
|
||||
' f_max format baud_rate OSNR penalties bit_rate'
|
||||
' roll_off tx_osnr min_spacing cost path_bandwidth effective_freq_slot'
|
||||
' equalization_offset_db')
|
||||
' equalization_offset_db, tx_power')
|
||||
DisjunctionParams = namedtuple('DisjunctionParams', 'disjunction_id relaxable link_diverse'
|
||||
' node_diverse disjunctions_req')
|
||||
|
||||
@@ -65,6 +65,7 @@ class PathRequest:
|
||||
self.bit_rate = params.bit_rate
|
||||
self.roll_off = params.roll_off
|
||||
self.tx_osnr = params.tx_osnr
|
||||
self.tx_power = params.tx_power
|
||||
self.min_spacing = params.min_spacing
|
||||
self.cost = params.cost
|
||||
self.path_bandwidth = params.path_bandwidth
|
||||
@@ -95,7 +96,8 @@ class PathRequest:
|
||||
f'baud_rate:\t{temp} Gbaud',
|
||||
f'bit_rate:\t{temp2} Gb/s',
|
||||
f'spacing:\t{self.spacing * 1e-9} GHz',
|
||||
f'power: \t{round(lin2db(self.power)+30, 2)} dBm',
|
||||
f'power: \t{round(lin2db(self.power) + 30, 2)} dBm',
|
||||
f'tx_power_dbm: \t{round(lin2db(self.tx_power) + 30, 2)} dBm',
|
||||
f'nb channels: \t{self.nb_channel}',
|
||||
f'path_bandwidth: \t{round(self.path_bandwidth * 1e-9, 2)} Gbit/s',
|
||||
f'nodes-list:\t{self.nodes_list}',
|
||||
@@ -337,7 +339,7 @@ def propagate(path, req, equipment):
|
||||
else:
|
||||
si = create_input_spectral_information(
|
||||
f_min=req.f_min, f_max=req.f_max, roll_off=req.roll_off, baud_rate=req.baud_rate,
|
||||
power=req.power, spacing=req.spacing, tx_osnr=req.tx_osnr, delta_pdb=req.offset_db)
|
||||
spacing=req.spacing, tx_osnr=req.tx_osnr, tx_power=req.tx_power, delta_pdb=req.offset_db)
|
||||
roadm_osnr = []
|
||||
for i, el in enumerate(path):
|
||||
if isinstance(el, Roadm):
|
||||
@@ -380,8 +382,9 @@ def propagate_and_optimize_mode(path, req, equipment):
|
||||
raise ServiceError(msg)
|
||||
spc_info = create_input_spectral_information(f_min=req.f_min, f_max=req.f_max,
|
||||
roll_off=equipment['SI']['default'].roll_off,
|
||||
baud_rate=this_br, power=req.power, spacing=req.spacing,
|
||||
delta_pdb=this_offset, tx_osnr=req.tx_osnr)
|
||||
baud_rate=this_br, spacing=req.spacing,
|
||||
delta_pdb=this_offset, tx_osnr=req.tx_osnr,
|
||||
tx_power=req.tx_power)
|
||||
roadm_osnr = []
|
||||
for i, el in enumerate(path):
|
||||
if isinstance(el, Roadm):
|
||||
@@ -968,6 +971,7 @@ def compare_reqs(req1, req2, disjlist):
|
||||
req1.format == req2.format and \
|
||||
req1.OSNR == req2.OSNR and \
|
||||
req1.roll_off == req2.roll_off and \
|
||||
req1.tx_power == req2.tx_power and \
|
||||
same_disj:
|
||||
return True
|
||||
else:
|
||||
|
||||
@@ -170,9 +170,9 @@
|
||||
"roll_off": 0.15,
|
||||
"tx_osnr": 100,
|
||||
"sys_margins": 0
|
||||
}
|
||||
],
|
||||
"Transceiver": [{
|
||||
}],
|
||||
"Transceiver":[
|
||||
{
|
||||
"type_variety": "vendorA_trx-type1",
|
||||
"frequency": {
|
||||
"min": 191.35e12,
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
INFO gnpy.tools.cli_examples:cli_examples.py Computing path requests meshTopologyExampleV2.xls into JSON format
|
||||
WARNING gnpy.tools.json_io:json_io.py
|
||||
WARNING missing type_variety attribute in eqpt_config.json[Roadm]
|
||||
default value is type_variety = default
|
||||
WARNING missing type_variety attribute in eqpt_config.json[Roadm]
|
||||
default value is type_variety = default
|
||||
|
||||
WARNING gnpy.tools.json_io:json_io.py
|
||||
WARNING missing roadm-path-impairments attribute in eqpt_config.json[Roadm]
|
||||
default value is roadm-path-impairments = []
|
||||
WARNING missing roadm-path-impairments attribute in eqpt_config.json[Roadm]
|
||||
default value is roadm-path-impairments = []
|
||||
|
||||
INFO gnpy.tools.json_io:json_io.py Automatically converting requests from XLS to JSON
|
||||
INFO gnpy.topology.request:request.py
|
||||
request 0
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
INFO gnpy.tools.cli_examples:cli_examples.py Computing path requests CORONET_services.json into JSON format
|
||||
WARNING gnpy.tools.json_io:json_io.py
|
||||
WARNING missing type_variety attribute in eqpt_config.json[Roadm]
|
||||
default value is type_variety = default
|
||||
WARNING missing type_variety attribute in eqpt_config.json[Roadm]
|
||||
default value is type_variety = default
|
||||
|
||||
WARNING gnpy.tools.json_io:json_io.py
|
||||
WARNING missing roadm-path-impairments attribute in eqpt_config.json[Roadm]
|
||||
default value is roadm-path-impairments = []
|
||||
WARNING missing roadm-path-impairments attribute in eqpt_config.json[Roadm]
|
||||
default value is roadm-path-impairments = []
|
||||
|
||||
INFO gnpy.topology.request:request.py
|
||||
request 0
|
||||
Computing path from trx Abilene to trx Albany
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
WARNING gnpy.tools.json_io:json_io.py
|
||||
WARNING missing type_variety attribute in eqpt_config.json[Roadm]
|
||||
default value is type_variety = default
|
||||
WARNING missing type_variety attribute in eqpt_config.json[Roadm]
|
||||
default value is type_variety = default
|
||||
|
||||
WARNING gnpy.tools.json_io:json_io.py
|
||||
WARNING missing roadm-path-impairments attribute in eqpt_config.json[Roadm]
|
||||
default value is roadm-path-impairments = []
|
||||
WARNING missing roadm-path-impairments attribute in eqpt_config.json[Roadm]
|
||||
default value is roadm-path-impairments = []
|
||||
|
||||
INFO gnpy.tools.cli_examples:cli_examples.py source = 'brest'
|
||||
INFO gnpy.tools.cli_examples:cli_examples.py destination = 'rennes'
|
||||
WARNING gnpy.core.network:network.py
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
WARNING gnpy.tools.json_io:json_io.py
|
||||
WARNING missing type_variety attribute in eqpt_config.json[Roadm]
|
||||
default value is type_variety = default
|
||||
WARNING missing type_variety attribute in eqpt_config.json[Roadm]
|
||||
default value is type_variety = default
|
||||
|
||||
WARNING gnpy.tools.json_io:json_io.py
|
||||
WARNING missing roadm-path-impairments attribute in eqpt_config.json[Roadm]
|
||||
default value is roadm-path-impairments = []
|
||||
WARNING missing roadm-path-impairments attribute in eqpt_config.json[Roadm]
|
||||
default value is roadm-path-impairments = []
|
||||
|
||||
INFO gnpy.tools.cli_examples:cli_examples.py source = 'lannion'
|
||||
INFO gnpy.tools.cli_examples:cli_examples.py destination = 'lorient'
|
||||
WARNING gnpy.core.network:network.py
|
||||
|
||||
@@ -16,11 +16,13 @@ Transceiver trx_Stockholm
|
||||
PMD (ps): 0.00
|
||||
PDL (dB): 0.00
|
||||
Latency (ms): 0.00
|
||||
Actual pch out (dBm): 2.00
|
||||
Roadm roadm_Stockholm
|
||||
type_variety: default
|
||||
effective loss (dB): 22.00
|
||||
reference pch out (dBm): -20.00
|
||||
actual pch out (dBm): -20.00
|
||||
Type_variety: default
|
||||
Reference loss (dB): 22.00
|
||||
Actual loss (dB): 22.00
|
||||
Reference pch out (dBm): -20.00
|
||||
Actual pch out (dBm): -20.00
|
||||
Edfa Edfa_booster_roadm_Stockholm_to_fiber (Stockholm → Norrköping)_(1/2)
|
||||
type_variety: openroadm_mw_mw_booster
|
||||
effective gain(dB): 22.00
|
||||
@@ -79,10 +81,11 @@ Edfa Edfa_preamp_roadm_Norrköping_from_fiber (Stockholm → Norrköping)_(2/2)
|
||||
actual pch out (dBm): 2.03
|
||||
output VOA (dB): 0.00
|
||||
Roadm roadm_Norrköping
|
||||
type_variety: default
|
||||
effective loss (dB): 22.00
|
||||
reference pch out (dBm): -20.00
|
||||
actual pch out (dBm): -20.00
|
||||
Type_variety: default
|
||||
Reference loss (dB): 22.00
|
||||
Actual loss (dB): 22.03
|
||||
Reference pch out (dBm): -20.00
|
||||
Actual pch out (dBm): -20.00
|
||||
Edfa Edfa_booster_roadm_Norrköping_to_fiber (Norrköping → Linköping)
|
||||
type_variety: openroadm_mw_mw_booster
|
||||
effective gain(dB): 22.00
|
||||
@@ -119,10 +122,11 @@ Edfa Edfa_preamp_roadm_Linköping_from_fiber (Norrköping → Linköping)
|
||||
actual pch out (dBm): 2.01
|
||||
output VOA (dB): 0.00
|
||||
Roadm roadm_Linköping
|
||||
type_variety: default
|
||||
effective loss (dB): 22.00
|
||||
reference pch out (dBm): -20.00
|
||||
actual pch out (dBm): -20.00
|
||||
Type_variety: default
|
||||
Reference loss (dB): 22.00
|
||||
Actual loss (dB): 22.01
|
||||
Reference pch out (dBm): -20.00
|
||||
Actual pch out (dBm): -20.00
|
||||
Edfa Edfa_booster_roadm_Linköping_to_fiber (Linköping → Jönköping)
|
||||
type_variety: openroadm_mw_mw_booster
|
||||
effective gain(dB): 22.00
|
||||
@@ -159,10 +163,11 @@ Edfa Edfa_preamp_roadm_Jönköping_from_fiber (Linköping → Jönköping)
|
||||
actual pch out (dBm): 2.05
|
||||
output VOA (dB): 0.00
|
||||
Roadm roadm_Jönköping
|
||||
type_variety: default
|
||||
effective loss (dB): 22.00
|
||||
reference pch out (dBm): -20.00
|
||||
actual pch out (dBm): -20.00
|
||||
Type_variety: default
|
||||
Reference loss (dB): 22.00
|
||||
Actual loss (dB): 22.05
|
||||
Reference pch out (dBm): -20.00
|
||||
Actual pch out (dBm): -20.00
|
||||
Edfa Edfa_booster_roadm_Jönköping_to_fiber (Jönköping → Borås)
|
||||
type_variety: openroadm_mw_mw_booster
|
||||
effective gain(dB): 22.00
|
||||
@@ -199,10 +204,11 @@ Edfa Edfa_preamp_roadm_Borås_from_fiber (Jönköping → Borås)
|
||||
actual pch out (dBm): 2.02
|
||||
output VOA (dB): 0.00
|
||||
Roadm roadm_Borås
|
||||
type_variety: default
|
||||
effective loss (dB): 22.00
|
||||
reference pch out (dBm): -20.00
|
||||
actual pch out (dBm): -20.00
|
||||
Type_variety: default
|
||||
Reference loss (dB): 22.00
|
||||
Actual loss (dB): 22.02
|
||||
Reference pch out (dBm): -20.00
|
||||
Actual pch out (dBm): -20.00
|
||||
Edfa Edfa_booster_roadm_Borås_to_fiber (Borås → Gothenburg)
|
||||
type_variety: openroadm_mw_mw_booster
|
||||
effective gain(dB): 22.00
|
||||
@@ -239,10 +245,11 @@ Edfa Edfa_preamp_roadm_Gothenburg_from_fiber (Borås → Gothenburg)
|
||||
actual pch out (dBm): 2.02
|
||||
output VOA (dB): 0.00
|
||||
Roadm roadm_Gothenburg
|
||||
type_variety: default
|
||||
effective loss (dB): 22.00
|
||||
reference pch out (dBm): -20.00
|
||||
actual pch out (dBm): -20.00
|
||||
Type_variety: default
|
||||
Reference loss (dB): 22.00
|
||||
Actual loss (dB): 22.02
|
||||
Reference pch out (dBm): -20.00
|
||||
Actual pch out (dBm): -20.00
|
||||
Transceiver trx_Gothenburg
|
||||
GSNR (0.1nm, dB): 18.89
|
||||
GSNR (signal bw, dB): 14.86
|
||||
@@ -252,6 +259,7 @@ Transceiver trx_Gothenburg
|
||||
PMD (ps): 7.99
|
||||
PDL (dB): 3.74
|
||||
Latency (ms): 2.45
|
||||
Actual pch out (dBm): 2.00
|
||||
|
||||
Transmission result for input power = 2.00 dBm:
|
||||
Final GSNR (0.1 nm): [1;36;40m18.89 dB[0m
|
||||
|
||||
@@ -16,11 +16,13 @@ Transceiver trx_Stockholm
|
||||
PMD (ps): 0.00
|
||||
PDL (dB): 0.00
|
||||
Latency (ms): 0.00
|
||||
Actual pch out (dBm): 2.00
|
||||
Roadm roadm_Stockholm
|
||||
type_variety: default
|
||||
effective loss (dB): 22.00
|
||||
reference pch out (dBm): -20.00
|
||||
actual pch out (dBm): -20.00
|
||||
Type_variety: default
|
||||
Reference loss (dB): 22.00
|
||||
Actual loss (dB): 22.00
|
||||
Reference pch out (dBm): -20.00
|
||||
Actual pch out (dBm): -20.00
|
||||
Edfa Edfa_booster_roadm_Stockholm_to_fiber (Stockholm → Norrköping)_(1/2)
|
||||
type_variety: openroadm_mw_mw_booster
|
||||
effective gain(dB): 22.00
|
||||
@@ -79,10 +81,11 @@ Edfa Edfa_preamp_roadm_Norrköping_from_fiber (Stockholm → Norrköping)_(2/2)
|
||||
actual pch out (dBm): 2.03
|
||||
output VOA (dB): 0.00
|
||||
Roadm roadm_Norrköping
|
||||
type_variety: default
|
||||
effective loss (dB): 22.00
|
||||
reference pch out (dBm): -20.00
|
||||
actual pch out (dBm): -20.00
|
||||
Type_variety: default
|
||||
Reference loss (dB): 22.00
|
||||
Actual loss (dB): 22.03
|
||||
Reference pch out (dBm): -20.00
|
||||
Actual pch out (dBm): -20.00
|
||||
Edfa Edfa_booster_roadm_Norrköping_to_fiber (Norrköping → Linköping)
|
||||
type_variety: openroadm_mw_mw_booster
|
||||
effective gain(dB): 22.00
|
||||
@@ -119,10 +122,11 @@ Edfa Edfa_preamp_roadm_Linköping_from_fiber (Norrköping → Linköping)
|
||||
actual pch out (dBm): 2.01
|
||||
output VOA (dB): 0.00
|
||||
Roadm roadm_Linköping
|
||||
type_variety: default
|
||||
effective loss (dB): 22.00
|
||||
reference pch out (dBm): -20.00
|
||||
actual pch out (dBm): -20.00
|
||||
Type_variety: default
|
||||
Reference loss (dB): 22.00
|
||||
Actual loss (dB): 22.01
|
||||
Reference pch out (dBm): -20.00
|
||||
Actual pch out (dBm): -20.00
|
||||
Edfa Edfa_booster_roadm_Linköping_to_fiber (Linköping → Jönköping)
|
||||
type_variety: openroadm_mw_mw_booster
|
||||
effective gain(dB): 22.00
|
||||
@@ -159,10 +163,11 @@ Edfa Edfa_preamp_roadm_Jönköping_from_fiber (Linköping → Jönköping)
|
||||
actual pch out (dBm): 2.04
|
||||
output VOA (dB): 0.00
|
||||
Roadm roadm_Jönköping
|
||||
type_variety: default
|
||||
effective loss (dB): 22.00
|
||||
reference pch out (dBm): -20.00
|
||||
actual pch out (dBm): -20.00
|
||||
Type_variety: default
|
||||
Reference loss (dB): 22.00
|
||||
Actual loss (dB): 22.04
|
||||
Reference pch out (dBm): -20.00
|
||||
Actual pch out (dBm): -20.00
|
||||
Edfa Edfa_booster_roadm_Jönköping_to_fiber (Jönköping → Borås)
|
||||
type_variety: openroadm_mw_mw_booster
|
||||
effective gain(dB): 22.00
|
||||
@@ -199,10 +204,11 @@ Edfa Edfa_preamp_roadm_Borås_from_fiber (Jönköping → Borås)
|
||||
actual pch out (dBm): 2.02
|
||||
output VOA (dB): 0.00
|
||||
Roadm roadm_Borås
|
||||
type_variety: default
|
||||
effective loss (dB): 22.00
|
||||
reference pch out (dBm): -20.00
|
||||
actual pch out (dBm): -20.00
|
||||
Type_variety: default
|
||||
Reference loss (dB): 22.00
|
||||
Actual loss (dB): 22.02
|
||||
Reference pch out (dBm): -20.00
|
||||
Actual pch out (dBm): -20.00
|
||||
Edfa Edfa_booster_roadm_Borås_to_fiber (Borås → Gothenburg)
|
||||
type_variety: openroadm_mw_mw_booster
|
||||
effective gain(dB): 22.00
|
||||
@@ -239,10 +245,11 @@ Edfa Edfa_preamp_roadm_Gothenburg_from_fiber (Borås → Gothenburg)
|
||||
actual pch out (dBm): 2.02
|
||||
output VOA (dB): 0.00
|
||||
Roadm roadm_Gothenburg
|
||||
type_variety: default
|
||||
effective loss (dB): 22.00
|
||||
reference pch out (dBm): -20.00
|
||||
actual pch out (dBm): -20.00
|
||||
Type_variety: default
|
||||
Reference loss (dB): 22.00
|
||||
Actual loss (dB): 22.02
|
||||
Reference pch out (dBm): -20.00
|
||||
Actual pch out (dBm): -20.00
|
||||
Transceiver trx_Gothenburg
|
||||
GSNR (0.1nm, dB): 19.25
|
||||
GSNR (signal bw, dB): 15.23
|
||||
@@ -252,6 +259,7 @@ Transceiver trx_Gothenburg
|
||||
PMD (ps): 7.99
|
||||
PDL (dB): 3.74
|
||||
Latency (ms): 2.45
|
||||
Actual pch out (dBm): 2.00
|
||||
|
||||
Transmission result for input power = 2.00 dBm:
|
||||
Final GSNR (0.1 nm): [1;36;40m19.25 dB[0m
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
bit_rate: None Gb/s
|
||||
spacing: 50.0 GHz
|
||||
power: 1.0 dBm
|
||||
tx_power_dbm: 0.0 dBm
|
||||
nb channels: 80
|
||||
path_bandwidth: 100.0 Gbit/s
|
||||
nodes-list: []
|
||||
@@ -34,6 +35,7 @@
|
||||
bit_rate: 100.0 Gb/s
|
||||
spacing: 50.0 GHz
|
||||
power: 1.0 dBm
|
||||
tx_power_dbm: 0.0 dBm
|
||||
nb channels: 95
|
||||
path_bandwidth: 200.0 Gbit/s
|
||||
nodes-list: ['roadm Brest_KLA', 'roadm Lannion_CAS', 'roadm Lorient_KMA', 'roadm Vannes_KBE']
|
||||
@@ -47,6 +49,7 @@
|
||||
bit_rate: 100.0 Gb/s
|
||||
spacing: 50.0 GHz
|
||||
power: 0.0 dBm
|
||||
tx_power_dbm: 0.0 dBm
|
||||
nb channels: 95
|
||||
path_bandwidth: 60.0 Gbit/s
|
||||
nodes-list: []
|
||||
@@ -60,6 +63,7 @@
|
||||
bit_rate: None Gb/s
|
||||
spacing: 75.0 GHz
|
||||
power: 3.0 dBm
|
||||
tx_power_dbm: 0.0 dBm
|
||||
nb channels: 63
|
||||
path_bandwidth: 150.0 Gbit/s
|
||||
nodes-list: []
|
||||
@@ -73,6 +77,7 @@
|
||||
bit_rate: 200.0 Gb/s
|
||||
spacing: 75.0 GHz
|
||||
power: 3.0 dBm
|
||||
tx_power_dbm: 0.0 dBm
|
||||
nb channels: 63
|
||||
path_bandwidth: 20.0 Gbit/s
|
||||
nodes-list: []
|
||||
@@ -86,6 +91,7 @@
|
||||
bit_rate: 100.0 Gb/s
|
||||
spacing: 50.0 GHz
|
||||
power: 0.0 dBm
|
||||
tx_power_dbm: 0.0 dBm
|
||||
nb channels: 76
|
||||
path_bandwidth: 700.0 Gbit/s
|
||||
nodes-list: []
|
||||
@@ -99,6 +105,7 @@
|
||||
bit_rate: 100.0 Gb/s
|
||||
spacing: 75.0 GHz
|
||||
power: 0.0 dBm
|
||||
tx_power_dbm: 0.0 dBm
|
||||
nb channels: 50
|
||||
path_bandwidth: 400.0 Gbit/s
|
||||
nodes-list: []
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
bit_rate: 300.0 Gb/s
|
||||
spacing: 62.50000000000001 GHz
|
||||
power: 0.0 dBm
|
||||
tx_power_dbm: 0.0 dBm
|
||||
nb channels: 76
|
||||
path_bandwidth: 100.0 Gbit/s
|
||||
nodes-list: []
|
||||
|
||||
@@ -16,6 +16,7 @@ Transceiver trx Rennes_STA
|
||||
PMD (ps): 0.57
|
||||
PDL (dB): 0.00
|
||||
Latency (ms): 0.98
|
||||
Actual pch out (dBm): 3.00
|
||||
|
||||
Propagating with input power = [1;36;40m-2.50 dBm[0m:
|
||||
Transceiver trx Rennes_STA
|
||||
@@ -27,6 +28,7 @@ Transceiver trx Rennes_STA
|
||||
PMD (ps): 0.57
|
||||
PDL (dB): 0.00
|
||||
Latency (ms): 0.98
|
||||
Actual pch out (dBm): 3.00
|
||||
|
||||
Propagating with input power = [1;36;40m-2.00 dBm[0m:
|
||||
Transceiver trx Rennes_STA
|
||||
@@ -38,6 +40,7 @@ Transceiver trx Rennes_STA
|
||||
PMD (ps): 0.57
|
||||
PDL (dB): 0.00
|
||||
Latency (ms): 0.98
|
||||
Actual pch out (dBm): 3.00
|
||||
|
||||
Propagating with input power = [1;36;40m-1.50 dBm[0m:
|
||||
Transceiver trx Rennes_STA
|
||||
@@ -49,6 +52,7 @@ Transceiver trx Rennes_STA
|
||||
PMD (ps): 0.57
|
||||
PDL (dB): 0.00
|
||||
Latency (ms): 0.98
|
||||
Actual pch out (dBm): 3.00
|
||||
|
||||
Propagating with input power = [1;36;40m-1.00 dBm[0m:
|
||||
Transceiver trx Rennes_STA
|
||||
@@ -60,6 +64,7 @@ Transceiver trx Rennes_STA
|
||||
PMD (ps): 0.57
|
||||
PDL (dB): 0.00
|
||||
Latency (ms): 0.98
|
||||
Actual pch out (dBm): 3.00
|
||||
|
||||
Propagating with input power = [1;36;40m-0.50 dBm[0m:
|
||||
Transceiver trx Rennes_STA
|
||||
@@ -71,6 +76,7 @@ Transceiver trx Rennes_STA
|
||||
PMD (ps): 0.57
|
||||
PDL (dB): 0.00
|
||||
Latency (ms): 0.98
|
||||
Actual pch out (dBm): 3.00
|
||||
|
||||
Propagating with input power = [1;36;40m-0.00 dBm[0m:
|
||||
Transceiver trx Rennes_STA
|
||||
@@ -82,6 +88,7 @@ Transceiver trx Rennes_STA
|
||||
PMD (ps): 0.57
|
||||
PDL (dB): 0.00
|
||||
Latency (ms): 0.98
|
||||
Actual pch out (dBm): 3.00
|
||||
|
||||
Propagating with input power = [1;36;40m0.50 dBm[0m:
|
||||
Transceiver trx Rennes_STA
|
||||
@@ -93,6 +100,7 @@ Transceiver trx Rennes_STA
|
||||
PMD (ps): 0.57
|
||||
PDL (dB): 0.00
|
||||
Latency (ms): 0.98
|
||||
Actual pch out (dBm): 3.00
|
||||
|
||||
Propagating with input power = [1;36;40m1.00 dBm[0m:
|
||||
Transceiver trx Rennes_STA
|
||||
@@ -104,6 +112,7 @@ Transceiver trx Rennes_STA
|
||||
PMD (ps): 0.57
|
||||
PDL (dB): 0.00
|
||||
Latency (ms): 0.98
|
||||
Actual pch out (dBm): 3.00
|
||||
|
||||
Propagating with input power = [1;36;40m1.50 dBm[0m:
|
||||
Transceiver trx Rennes_STA
|
||||
@@ -115,6 +124,7 @@ Transceiver trx Rennes_STA
|
||||
PMD (ps): 0.57
|
||||
PDL (dB): 0.00
|
||||
Latency (ms): 0.98
|
||||
Actual pch out (dBm): 3.00
|
||||
|
||||
Propagating with input power = [1;36;40m2.00 dBm[0m:
|
||||
Transceiver trx Rennes_STA
|
||||
@@ -126,6 +136,7 @@ Transceiver trx Rennes_STA
|
||||
PMD (ps): 0.57
|
||||
PDL (dB): 0.00
|
||||
Latency (ms): 0.98
|
||||
Actual pch out (dBm): 3.00
|
||||
|
||||
Propagating with input power = [1;36;40m2.50 dBm[0m:
|
||||
Transceiver trx Rennes_STA
|
||||
@@ -137,6 +148,7 @@ Transceiver trx Rennes_STA
|
||||
PMD (ps): 0.57
|
||||
PDL (dB): 0.00
|
||||
Latency (ms): 0.98
|
||||
Actual pch out (dBm): 3.00
|
||||
|
||||
Propagating with input power = [1;36;40m3.00 dBm[0m:
|
||||
Transceiver trx Rennes_STA
|
||||
@@ -148,6 +160,7 @@ Transceiver trx Rennes_STA
|
||||
PMD (ps): 0.57
|
||||
PDL (dB): 0.00
|
||||
Latency (ms): 0.98
|
||||
Actual pch out (dBm): 3.00
|
||||
|
||||
(Invalid source node 'brest' replaced with trx Brest_KLA)
|
||||
|
||||
|
||||
@@ -17,11 +17,13 @@ Transceiver trx Lannion_CAS
|
||||
PMD (ps): 0.00
|
||||
PDL (dB): 0.00
|
||||
Latency (ms): 0.00
|
||||
Actual pch out (dBm): 0.00
|
||||
Roadm roadm Lannion_CAS
|
||||
type_variety: default
|
||||
effective loss (dB): 20.00
|
||||
reference pch out (dBm): -20.00
|
||||
actual pch out (dBm): -20.00
|
||||
Type_variety: default
|
||||
Reference loss (dB): 20.00
|
||||
Actual loss (dB): 20.00
|
||||
Reference pch out (dBm): -20.00
|
||||
Actual pch out (dBm): -20.00
|
||||
Edfa east edfa in Lannion_CAS to Corlay
|
||||
type_variety: std_medium_gain
|
||||
effective gain(dB): 21.00
|
||||
@@ -80,10 +82,11 @@ Edfa west edfa in Lorient_KMA to Loudeac
|
||||
actual pch out (dBm): 1.05
|
||||
output VOA (dB): 0.00
|
||||
Roadm roadm Lorient_KMA
|
||||
type_variety: default
|
||||
effective loss (dB): 21.00
|
||||
reference pch out (dBm): -20.00
|
||||
actual pch out (dBm): -20.00
|
||||
Type_variety: default
|
||||
Reference loss (dB): 21.00
|
||||
Actual loss (dB): 21.05
|
||||
Reference pch out (dBm): -20.00
|
||||
Actual pch out (dBm): -20.00
|
||||
Transceiver trx Lorient_KMA
|
||||
GSNR (0.1nm, dB): 23.61
|
||||
GSNR (signal bw, dB): 19.53
|
||||
@@ -93,6 +96,7 @@ Transceiver trx Lorient_KMA
|
||||
PMD (ps): 0.46
|
||||
PDL (dB): 0.00
|
||||
Latency (ms): 0.64
|
||||
Actual pch out (dBm): 0.00
|
||||
|
||||
Transmission result for input power = 0.00 dBm:
|
||||
Final GSNR (0.1 nm): [1;36;40m23.61 dB[0m
|
||||
|
||||
@@ -17,11 +17,13 @@ Transceiver trx Lannion_CAS
|
||||
PMD (ps): 0.00
|
||||
PDL (dB): 0.00
|
||||
Latency (ms): 0.00
|
||||
Actual pch out (dBm): mode_1: 0.00, mode_2: 0.00
|
||||
Roadm roadm Lannion_CAS
|
||||
type_variety: default
|
||||
effective loss (dB): 20.00
|
||||
reference pch out (dBm): -20.00
|
||||
actual pch out (dBm): mode_1: -20.00, mode_2: -20.00
|
||||
Type_variety: default
|
||||
Reference loss (dB): 20.00
|
||||
Actual loss (dB): mode_1: 20.00, mode_2: 20.00
|
||||
Reference pch out (dBm): -20.00
|
||||
Actual pch out (dBm): mode_1: -20.00, mode_2: -20.00
|
||||
Edfa east edfa in Lannion_CAS to Corlay
|
||||
type_variety: std_medium_gain
|
||||
effective gain(dB): 21.00
|
||||
@@ -80,10 +82,11 @@ Edfa west edfa in Lorient_KMA to Loudeac
|
||||
actual pch out (dBm): mode_1: 1.04, mode_2: 1.09
|
||||
output VOA (dB): 0.00
|
||||
Roadm roadm Lorient_KMA
|
||||
type_variety: default
|
||||
effective loss (dB): 21.00
|
||||
reference pch out (dBm): -20.00
|
||||
actual pch out (dBm): mode_1: -20.00, mode_2: -20.00
|
||||
Type_variety: default
|
||||
Reference loss (dB): 21.00
|
||||
Actual loss (dB): mode_1: 21.04, mode_2: 21.09
|
||||
Reference pch out (dBm): -20.00
|
||||
Actual pch out (dBm): mode_1: -20.00, mode_2: -20.00
|
||||
Transceiver trx Lorient_KMA
|
||||
GSNR (0.1nm, dB): mode_1: 23.66, mode_2: 23.81
|
||||
GSNR (signal bw, dB): mode_1: 19.58, mode_2: 16.72
|
||||
@@ -93,6 +96,7 @@ Transceiver trx Lorient_KMA
|
||||
PMD (ps): 0.46
|
||||
PDL (dB): 0.00
|
||||
Latency (ms): 0.64
|
||||
Actual pch out (dBm): mode_1: 0.00, mode_2: 0.00
|
||||
|
||||
Transmission result for input power = 0.00 dBm:
|
||||
Final GSNR (0.1 nm): [1;36;40m23.72 dB[0m
|
||||
|
||||
@@ -17,11 +17,13 @@ Transceiver Site_A
|
||||
PMD (ps): 0.00
|
||||
PDL (dB): 0.00
|
||||
Latency (ms): 0.00
|
||||
Actual pch out (dBm): mode_1: 0.00, mode_2: 0.00
|
||||
Roadm roadm Site A
|
||||
type_variety: default
|
||||
effective loss (dB): 20.00
|
||||
reference pch out (dBm): -20.00
|
||||
actual pch out (dBm): mode_1: -20.00, mode_2: -20.00
|
||||
Type_variety: default
|
||||
Reference loss (dB): 20.00
|
||||
Actual loss (dB): mode_1: 20.00, mode_2: 20.00
|
||||
Reference pch out (dBm): -20.00
|
||||
Actual pch out (dBm): mode_1: -20.00, mode_2: -20.00
|
||||
Edfa booster A
|
||||
type_variety: std_medium_gain
|
||||
effective gain(dB): 20.00
|
||||
@@ -146,10 +148,11 @@ Edfa Edfa5
|
||||
actual pch out (dBm): mode_1: 0.05, mode_2: 0.08
|
||||
output VOA (dB): 0.00
|
||||
Roadm roadm Site C
|
||||
type_variety: default
|
||||
effective loss (dB): 20.00
|
||||
reference pch out (dBm): -20.00
|
||||
actual pch out (dBm): mode_1: -20.00, mode_2: -20.00
|
||||
Type_variety: default
|
||||
Reference loss (dB): 20.00
|
||||
Actual loss (dB): mode_1: 20.05, mode_2: 20.08
|
||||
Reference pch out (dBm): -20.00
|
||||
Actual pch out (dBm): mode_1: -20.00, mode_2: -20.00
|
||||
Edfa booster C
|
||||
type_variety: std_medium_gain
|
||||
effective gain(dB): 20.00
|
||||
@@ -274,10 +277,11 @@ Edfa Edfa10
|
||||
actual pch out (dBm): mode_1: 0.05, mode_2: 0.08
|
||||
output VOA (dB): 0.00
|
||||
Roadm roadm Site D
|
||||
type_variety: default
|
||||
effective loss (dB): 20.00
|
||||
reference pch out (dBm): -20.00
|
||||
actual pch out (dBm): mode_1: -20.00, mode_2: -20.00
|
||||
Type_variety: default
|
||||
Reference loss (dB): 20.00
|
||||
Actual loss (dB): mode_1: 20.05, mode_2: 20.08
|
||||
Reference pch out (dBm): -20.00
|
||||
Actual pch out (dBm): mode_1: -20.00, mode_2: -20.00
|
||||
Edfa booster D
|
||||
type_variety: std_medium_gain
|
||||
effective gain(dB): 20.00
|
||||
@@ -336,10 +340,11 @@ Edfa Edfa12
|
||||
actual pch out (dBm): mode_1: 0.03, mode_2: 0.04
|
||||
output VOA (dB): 0.00
|
||||
Roadm roadm Site E
|
||||
type_variety: default
|
||||
effective loss (dB): 20.00
|
||||
reference pch out (dBm): -20.00
|
||||
actual pch out (dBm): mode_1: -20.00, mode_2: -20.00
|
||||
Type_variety: default
|
||||
Reference loss (dB): 20.00
|
||||
Actual loss (dB): mode_1: 20.03, mode_2: 20.04
|
||||
Reference pch out (dBm): -20.00
|
||||
Actual pch out (dBm): mode_1: -20.00, mode_2: -20.00
|
||||
Edfa booster E
|
||||
type_variety: std_medium_gain
|
||||
effective gain(dB): 20.00
|
||||
@@ -420,10 +425,11 @@ Edfa Edfa15
|
||||
actual pch out (dBm): mode_1: 0.03, mode_2: 0.05
|
||||
output VOA (dB): 0.00
|
||||
Roadm roadm Site B
|
||||
type_variety: default
|
||||
effective loss (dB): 20.00
|
||||
reference pch out (dBm): -20.00
|
||||
actual pch out (dBm): mode_1: -20.00, mode_2: -20.00
|
||||
Type_variety: default
|
||||
Reference loss (dB): 20.00
|
||||
Actual loss (dB): mode_1: 20.03, mode_2: 20.05
|
||||
Reference pch out (dBm): -20.00
|
||||
Actual pch out (dBm): mode_1: -20.00, mode_2: -20.00
|
||||
Transceiver Site_B
|
||||
GSNR (0.1nm, dB): mode_1: 18.11, mode_2: 19.18
|
||||
GSNR (signal bw, dB): mode_1: 14.02, mode_2: 12.09
|
||||
@@ -433,6 +439,7 @@ Transceiver Site_B
|
||||
PMD (ps): 1.39
|
||||
PDL (dB): 0.00
|
||||
Latency (ms): 5.88
|
||||
Actual pch out (dBm): mode_1: 0.00, mode_2: 0.00
|
||||
|
||||
Transmission result for input power = 0.00 dBm:
|
||||
Final GSNR (0.1 nm): [1;36;40m18.56 dB[0m
|
||||
|
||||
@@ -17,11 +17,13 @@ Transceiver Site_A
|
||||
PMD (ps): 0.00
|
||||
PDL (dB): 0.00
|
||||
Latency (ms): 0.00
|
||||
Actual pch out (dBm): mode_1: 0.00, mode_2: 0.00
|
||||
Roadm roadm Site A
|
||||
type_variety: default
|
||||
effective loss (dB): 20.00
|
||||
reference pch out (dBm): -20.00
|
||||
actual pch out (dBm): mode_1: -20.00, mode_2: -16.99
|
||||
Type_variety: default
|
||||
Reference loss (dB): 20.00
|
||||
Actual loss (dB): mode_1: 20.00, mode_2: 16.99
|
||||
Reference pch out (dBm): -20.00
|
||||
Actual pch out (dBm): mode_1: -20.00, mode_2: -16.99
|
||||
Edfa booster A
|
||||
type_variety: std_medium_gain
|
||||
effective gain(dB): 20.00
|
||||
@@ -146,10 +148,11 @@ Edfa Edfa5
|
||||
actual pch out (dBm): mode_1: 0.06, mode_2: 3.07
|
||||
output VOA (dB): 0.00
|
||||
Roadm roadm Site C
|
||||
type_variety: default
|
||||
effective loss (dB): 20.00
|
||||
reference pch out (dBm): -20.00
|
||||
actual pch out (dBm): mode_1: -20.00, mode_2: -16.99
|
||||
Type_variety: default
|
||||
Reference loss (dB): 20.00
|
||||
Actual loss (dB): mode_1: 20.06, mode_2: 20.06
|
||||
Reference pch out (dBm): -20.00
|
||||
Actual pch out (dBm): mode_1: -20.00, mode_2: -16.99
|
||||
Edfa booster C
|
||||
type_variety: std_medium_gain
|
||||
effective gain(dB): 20.00
|
||||
@@ -274,10 +277,11 @@ Edfa Edfa10
|
||||
actual pch out (dBm): mode_1: 0.06, mode_2: 3.07
|
||||
output VOA (dB): 0.00
|
||||
Roadm roadm Site D
|
||||
type_variety: default
|
||||
effective loss (dB): 20.00
|
||||
reference pch out (dBm): -20.00
|
||||
actual pch out (dBm): mode_1: -20.00, mode_2: -16.99
|
||||
Type_variety: default
|
||||
Reference loss (dB): 20.00
|
||||
Actual loss (dB): mode_1: 20.06, mode_2: 20.06
|
||||
Reference pch out (dBm): -20.00
|
||||
Actual pch out (dBm): mode_1: -20.00, mode_2: -16.99
|
||||
Edfa booster D
|
||||
type_variety: std_medium_gain
|
||||
effective gain(dB): 20.00
|
||||
@@ -336,10 +340,11 @@ Edfa Edfa12
|
||||
actual pch out (dBm): mode_1: 0.03, mode_2: 3.04
|
||||
output VOA (dB): 0.00
|
||||
Roadm roadm Site E
|
||||
type_variety: default
|
||||
effective loss (dB): 20.00
|
||||
reference pch out (dBm): -20.00
|
||||
actual pch out (dBm): mode_1: -20.00, mode_2: -16.99
|
||||
Type_variety: default
|
||||
Reference loss (dB): 20.00
|
||||
Actual loss (dB): mode_1: 20.03, mode_2: 20.03
|
||||
Reference pch out (dBm): -20.00
|
||||
Actual pch out (dBm): mode_1: -20.00, mode_2: -16.99
|
||||
Edfa booster E
|
||||
type_variety: std_medium_gain
|
||||
effective gain(dB): 20.00
|
||||
@@ -420,10 +425,11 @@ Edfa Edfa15
|
||||
actual pch out (dBm): mode_1: 0.04, mode_2: 3.05
|
||||
output VOA (dB): 0.00
|
||||
Roadm roadm Site B
|
||||
type_variety: default
|
||||
effective loss (dB): 20.00
|
||||
reference pch out (dBm): -20.00
|
||||
actual pch out (dBm): mode_1: -20.00, mode_2: -16.99
|
||||
Type_variety: default
|
||||
Reference loss (dB): 20.00
|
||||
Actual loss (dB): mode_1: 20.04, mode_2: 20.04
|
||||
Reference pch out (dBm): -20.00
|
||||
Actual pch out (dBm): mode_1: -20.00, mode_2: -16.99
|
||||
Transceiver Site_B
|
||||
GSNR (0.1nm, dB): mode_1: 17.91, mode_2: 20.37
|
||||
GSNR (signal bw, dB): mode_1: 13.83, mode_2: 13.28
|
||||
@@ -433,6 +439,7 @@ Transceiver Site_B
|
||||
PMD (ps): 1.39
|
||||
PDL (dB): 0.00
|
||||
Latency (ms): 5.88
|
||||
Actual pch out (dBm): mode_1: 0.00, mode_2: 0.00
|
||||
|
||||
Transmission result for input power = 0.00 dBm:
|
||||
Final GSNR (0.1 nm): [1;36;40m18.94 dB[0m
|
||||
|
||||
@@ -17,11 +17,13 @@ Transceiver Site_A
|
||||
PMD (ps): 0.00
|
||||
PDL (dB): 0.00
|
||||
Latency (ms): 0.00
|
||||
Actual pch out (dBm): mode_1: 0.00, mode_2: 0.00
|
||||
Roadm roadm Site A
|
||||
type_variety: default
|
||||
effective loss (dB): 20.00
|
||||
reference pch out (dBm): -20.00
|
||||
actual pch out (dBm): mode_1: -20.00, mode_2: -18.24
|
||||
Type_variety: default
|
||||
Reference loss (dB): 20.00
|
||||
Actual loss (dB): mode_1: 20.00, mode_2: 18.24
|
||||
Reference pch out (dBm): -20.00
|
||||
Actual pch out (dBm): mode_1: -20.00, mode_2: -18.24
|
||||
Edfa booster A
|
||||
type_variety: std_medium_gain
|
||||
effective gain(dB): 20.00
|
||||
@@ -146,10 +148,11 @@ Edfa Edfa5
|
||||
actual pch out (dBm): mode_1: 0.05, mode_2: 1.82
|
||||
output VOA (dB): 0.00
|
||||
Roadm roadm Site C
|
||||
type_variety: default
|
||||
effective loss (dB): 20.00
|
||||
reference pch out (dBm): -20.00
|
||||
actual pch out (dBm): mode_1: -20.00, mode_2: -18.24
|
||||
Type_variety: default
|
||||
Reference loss (dB): 20.00
|
||||
Actual loss (dB): mode_1: 20.05, mode_2: 20.06
|
||||
Reference pch out (dBm): -20.00
|
||||
Actual pch out (dBm): mode_1: -20.00, mode_2: -18.24
|
||||
Edfa booster C
|
||||
type_variety: std_medium_gain
|
||||
effective gain(dB): 20.00
|
||||
@@ -274,10 +277,11 @@ Edfa Edfa10
|
||||
actual pch out (dBm): mode_1: 0.05, mode_2: 1.82
|
||||
output VOA (dB): 0.00
|
||||
Roadm roadm Site D
|
||||
type_variety: default
|
||||
effective loss (dB): 20.00
|
||||
reference pch out (dBm): -20.00
|
||||
actual pch out (dBm): mode_1: -20.00, mode_2: -18.24
|
||||
Type_variety: default
|
||||
Reference loss (dB): 20.00
|
||||
Actual loss (dB): mode_1: 20.05, mode_2: 20.06
|
||||
Reference pch out (dBm): -20.00
|
||||
Actual pch out (dBm): mode_1: -20.00, mode_2: -18.24
|
||||
Edfa booster D
|
||||
type_variety: std_medium_gain
|
||||
effective gain(dB): 20.00
|
||||
@@ -336,10 +340,11 @@ Edfa Edfa12
|
||||
actual pch out (dBm): mode_1: 0.03, mode_2: 1.79
|
||||
output VOA (dB): 0.00
|
||||
Roadm roadm Site E
|
||||
type_variety: default
|
||||
effective loss (dB): 20.00
|
||||
reference pch out (dBm): -20.00
|
||||
actual pch out (dBm): mode_1: -20.00, mode_2: -18.24
|
||||
Type_variety: default
|
||||
Reference loss (dB): 20.00
|
||||
Actual loss (dB): mode_1: 20.03, mode_2: 20.03
|
||||
Reference pch out (dBm): -20.00
|
||||
Actual pch out (dBm): mode_1: -20.00, mode_2: -18.24
|
||||
Edfa booster E
|
||||
type_variety: std_medium_gain
|
||||
effective gain(dB): 20.00
|
||||
@@ -420,10 +425,11 @@ Edfa Edfa15
|
||||
actual pch out (dBm): mode_1: 0.03, mode_2: 1.80
|
||||
output VOA (dB): 0.00
|
||||
Roadm roadm Site B
|
||||
type_variety: default
|
||||
effective loss (dB): 20.00
|
||||
reference pch out (dBm): -20.00
|
||||
actual pch out (dBm): mode_1: -20.00, mode_2: -18.24
|
||||
Type_variety: default
|
||||
Reference loss (dB): 20.00
|
||||
Actual loss (dB): mode_1: 20.03, mode_2: 20.04
|
||||
Reference pch out (dBm): -20.00
|
||||
Actual pch out (dBm): mode_1: -20.00, mode_2: -18.24
|
||||
Transceiver Site_B
|
||||
GSNR (0.1nm, dB): mode_1: 18.02, mode_2: 20.22
|
||||
GSNR (signal bw, dB): mode_1: 13.94, mode_2: 13.12
|
||||
@@ -433,6 +439,7 @@ Transceiver Site_B
|
||||
PMD (ps): 1.39
|
||||
PDL (dB): 0.00
|
||||
Latency (ms): 5.88
|
||||
Actual pch out (dBm): mode_1: 0.00, mode_2: 0.00
|
||||
|
||||
Transmission result for input power = 0.00 dBm:
|
||||
Final GSNR (0.1 nm): [1;36;40m18.94 dB[0m
|
||||
|
||||
@@ -16,6 +16,7 @@ Transceiver Site_A
|
||||
PMD (ps): 0.00
|
||||
PDL (dB): 0.00
|
||||
Latency (ms): 0.00
|
||||
Actual pch out (dBm): 0.00
|
||||
Fiber Span1
|
||||
type_variety: SSMF
|
||||
length (km): 80.00
|
||||
@@ -47,6 +48,7 @@ Transceiver Site_B
|
||||
PMD (ps): 0.36
|
||||
PDL (dB): 0.00
|
||||
Latency (ms): 0.39
|
||||
Actual pch out (dBm): 0.00
|
||||
|
||||
Transmission result for input power = 0.00 dBm:
|
||||
Final GSNR (0.1 nm): [1;36;40m31.18 dB[0m
|
||||
|
||||
@@ -16,6 +16,7 @@ Transceiver Site_A
|
||||
PMD (ps): 0.00
|
||||
PDL (dB): 0.00
|
||||
Latency (ms): 0.00
|
||||
Actual pch out (dBm): 0.00
|
||||
RamanFiber Span1
|
||||
type_variety: SSMF
|
||||
length (km): 80.00
|
||||
@@ -51,6 +52,7 @@ Transceiver Site_B
|
||||
PMD (ps): 0.36
|
||||
PDL (dB): 0.00
|
||||
Latency (ms): 0.39
|
||||
Actual pch out (dBm): 0.00
|
||||
|
||||
Transmission result for input power = 0.00 dBm:
|
||||
Final GSNR (0.1 nm): [1;36;40m31.44 dB[0m
|
||||
|
||||
@@ -16,11 +16,13 @@ Transceiver Site_A
|
||||
PMD (ps): 0.00
|
||||
PDL (dB): 0.00
|
||||
Latency (ms): 0.00
|
||||
Actual pch out (dBm): 0.00
|
||||
Roadm roadm Site A
|
||||
type_variety: default
|
||||
effective loss (dB): 20.00
|
||||
reference pch out (dBm): -20.00
|
||||
actual pch out (dBm): -20.00
|
||||
Type_variety: default
|
||||
Reference loss (dB): 20.00
|
||||
Actual loss (dB): 20.00
|
||||
Reference pch out (dBm): -20.00
|
||||
Actual pch out (dBm): -20.00
|
||||
Edfa booster A
|
||||
type_variety: std_medium_gain
|
||||
effective gain(dB): 20.00
|
||||
@@ -145,10 +147,11 @@ Edfa Edfa5
|
||||
actual pch out (dBm): 0.06
|
||||
output VOA (dB): 0.00
|
||||
Roadm roadm Site C
|
||||
type_variety: default
|
||||
effective loss (dB): 20.00
|
||||
reference pch out (dBm): -20.00
|
||||
actual pch out (dBm): -20.00
|
||||
Type_variety: default
|
||||
Reference loss (dB): 20.00
|
||||
Actual loss (dB): 20.06
|
||||
Reference pch out (dBm): -20.00
|
||||
Actual pch out (dBm): -20.00
|
||||
Edfa booster C
|
||||
type_variety: std_medium_gain
|
||||
effective gain(dB): 20.00
|
||||
@@ -273,10 +276,11 @@ Edfa Edfa10
|
||||
actual pch out (dBm): 0.06
|
||||
output VOA (dB): 0.00
|
||||
Roadm roadm Site D
|
||||
type_variety: default
|
||||
effective loss (dB): 20.00
|
||||
reference pch out (dBm): -20.00
|
||||
actual pch out (dBm): -20.00
|
||||
Type_variety: default
|
||||
Reference loss (dB): 20.00
|
||||
Actual loss (dB): 20.06
|
||||
Reference pch out (dBm): -20.00
|
||||
Actual pch out (dBm): -20.00
|
||||
Edfa booster D
|
||||
type_variety: std_medium_gain
|
||||
effective gain(dB): 20.00
|
||||
@@ -335,10 +339,11 @@ Edfa Edfa12
|
||||
actual pch out (dBm): 0.03
|
||||
output VOA (dB): 0.00
|
||||
Roadm roadm Site E
|
||||
type_variety: default
|
||||
effective loss (dB): 20.00
|
||||
reference pch out (dBm): -20.00
|
||||
actual pch out (dBm): -20.00
|
||||
Type_variety: default
|
||||
Reference loss (dB): 20.00
|
||||
Actual loss (dB): 20.03
|
||||
Reference pch out (dBm): -20.00
|
||||
Actual pch out (dBm): -20.00
|
||||
Edfa booster E
|
||||
type_variety: std_medium_gain
|
||||
effective gain(dB): 20.00
|
||||
@@ -419,10 +424,11 @@ Edfa Edfa15
|
||||
actual pch out (dBm): 0.04
|
||||
output VOA (dB): 0.00
|
||||
Roadm roadm Site B
|
||||
type_variety: default
|
||||
effective loss (dB): 20.00
|
||||
reference pch out (dBm): -20.00
|
||||
actual pch out (dBm): -20.00
|
||||
Type_variety: default
|
||||
Reference loss (dB): 20.00
|
||||
Actual loss (dB): 20.04
|
||||
Reference pch out (dBm): -20.00
|
||||
Actual pch out (dBm): -20.00
|
||||
Transceiver Site_B
|
||||
GSNR (0.1nm, dB): 17.84
|
||||
GSNR (signal bw, dB): 13.76
|
||||
@@ -432,6 +438,7 @@ Transceiver Site_B
|
||||
PMD (ps): 1.39
|
||||
PDL (dB): 0.00
|
||||
Latency (ms): 5.88
|
||||
Actual pch out (dBm): 0.00
|
||||
|
||||
Transmission result for input power = 0.00 dBm:
|
||||
Final GSNR (0.1 nm): [1;36;40m17.84 dB[0m
|
||||
|
||||
@@ -16,11 +16,13 @@ Transceiver trx Lannion_CAS
|
||||
PMD (ps): 0.00
|
||||
PDL (dB): 0.00
|
||||
Latency (ms): 0.00
|
||||
Actual pch out (dBm): 3.00
|
||||
Roadm roadm Lannion_CAS
|
||||
type_variety: default
|
||||
effective loss (dB): 23.00
|
||||
reference pch out (dBm): -20.00
|
||||
actual pch out (dBm): -20.00
|
||||
Type_variety: default
|
||||
Reference loss (dB): 23.00
|
||||
Actual loss (dB): 23.00
|
||||
Reference pch out (dBm): -20.00
|
||||
Actual pch out (dBm): -20.00
|
||||
Edfa east edfa in Lannion_CAS to Corlay
|
||||
type_variety: test
|
||||
effective gain(dB): 21.18
|
||||
@@ -79,10 +81,11 @@ Edfa west edfa in Lorient_KMA to Loudeac
|
||||
actual pch out (dBm): 1.21
|
||||
output VOA (dB): 0.00
|
||||
Roadm roadm Lorient_KMA
|
||||
type_variety: default
|
||||
effective loss (dB): 21.18
|
||||
reference pch out (dBm): -20.00
|
||||
actual pch out (dBm): -20.00
|
||||
Type_variety: default
|
||||
Reference loss (dB): 21.18
|
||||
Actual loss (dB): 21.21
|
||||
Reference pch out (dBm): -20.00
|
||||
Actual pch out (dBm): -20.00
|
||||
Transceiver trx Lorient_KMA
|
||||
GSNR (0.1nm, dB): 23.77
|
||||
GSNR (signal bw, dB): 19.69
|
||||
@@ -92,6 +95,7 @@ Transceiver trx Lorient_KMA
|
||||
PMD (ps): 0.46
|
||||
PDL (dB): 0.00
|
||||
Latency (ms): 0.64
|
||||
Actual pch out (dBm): 3.00
|
||||
|
||||
Transmission result for input power = 3.00 dBm:
|
||||
Final GSNR (0.1 nm): [1;36;40m23.77 dB[0m
|
||||
|
||||
@@ -74,8 +74,8 @@ def si(nch_and_spacing, bw):
|
||||
nb_channel, spacing = nch_and_spacing
|
||||
f_min = 191.3e12
|
||||
f_max = automatic_fmax(f_min, spacing, nb_channel)
|
||||
return create_input_spectral_information(f_min=f_min, f_max=f_max, roll_off=0.15, baud_rate=bw, power=1e-3,
|
||||
spacing=spacing, tx_osnr=40.0)
|
||||
return create_input_spectral_information(f_min=f_min, f_max=f_max, roll_off=0.15, baud_rate=bw,
|
||||
spacing=spacing, tx_osnr=40.0, tx_power=1e-3)
|
||||
|
||||
|
||||
@pytest.mark.parametrize("gain, nf_expected", [(10, 15), (15, 10), (25, 5.8)])
|
||||
@@ -232,8 +232,8 @@ def test_amp_behaviour(tilt_target, delta_p):
|
||||
fiber.params.con_in = 0
|
||||
fiber.params.con_out = 0
|
||||
fiber.ref_pch_in_dbm = 0.0
|
||||
si = create_input_spectral_information(f_min=191.3e12, f_max=196.05e12, roll_off=0.15, baud_rate=64e9, power=0.001,
|
||||
spacing=75e9, tx_osnr=None)
|
||||
si = create_input_spectral_information(f_min=191.3e12, f_max=196.05e12, roll_off=0.15, baud_rate=64e9,
|
||||
spacing=75e9, tx_osnr=None, tx_power=1e-3)
|
||||
si = fiber(si)
|
||||
total_sig_powerin = sum(si.signal)
|
||||
sig_in = lin2db(si.signal)
|
||||
@@ -320,7 +320,7 @@ def test_amp_saturation(delta_pdb_per_channel, base_power, delta_p):
|
||||
si = create_arbitrary_spectral_information(frequency=frequency, slot_width=slot_width,
|
||||
signal=signal, baud_rate=baud_rate, roll_off=0.15,
|
||||
delta_pdb_per_channel=delta_pdb_per_channel,
|
||||
tx_osnr=None)
|
||||
tx_osnr=None, tx_power=None)
|
||||
total_sig_powerin = sum(si.signal)
|
||||
sig_in = lin2db(si.signal)
|
||||
si = edfa(si)
|
||||
|
||||
@@ -119,8 +119,9 @@ def create_rq(equipment, srce, dest, bdir, node_list, loose_list, rqid='test_req
|
||||
'nodes_list': node_list,
|
||||
'loose_list': loose_list,
|
||||
'path_bandwidth': 100.0e9,
|
||||
'power': 1.0,
|
||||
'effective_freq_slot': None,
|
||||
'power': 1.0e-3,
|
||||
'tx_power': 1.0e-3,
|
||||
'effective_freq_slot': None
|
||||
}
|
||||
params['format'] = params['trx_mode']
|
||||
trx_params = trx_mode_params(equipment, params['trx_type'], params['trx_mode'], True)
|
||||
@@ -258,7 +259,8 @@ def request_set():
|
||||
'f_min': 191.1e12,
|
||||
'f_max': 196.3e12,
|
||||
'nb_channel': None,
|
||||
'power': 0.001,
|
||||
'power': 1e-3,
|
||||
'tx_power': 1e-3,
|
||||
'path_bandwidth': 200e9}
|
||||
|
||||
|
||||
|
||||
@@ -17,12 +17,14 @@ from copy import deepcopy
|
||||
from gnpy.core.utils import lin2db, automatic_nch, dbm2watt, power_dbm_to_psd_mw_ghz, watt2dbm, psd2powerdbm
|
||||
from gnpy.core.network import build_network
|
||||
from gnpy.core.elements import Roadm
|
||||
from gnpy.core.info import create_input_spectral_information, create_arbitrary_spectral_information, ReferenceCarrier
|
||||
from gnpy.core.info import create_input_spectral_information, create_arbitrary_spectral_information, ReferenceCarrier, \
|
||||
carriers_to_spectral_information
|
||||
from gnpy.core.equipment import trx_mode_params
|
||||
from gnpy.core.exceptions import ConfigurationError
|
||||
from gnpy.tools.json_io import network_from_json, load_equipment, load_network, _spectrum_from_json, load_json, \
|
||||
Transceiver, requests_from_json
|
||||
from gnpy.topology.request import PathRequest, compute_constrained_path, propagate, propagate_and_optimize_mode
|
||||
from gnpy.topology.spectrum_assignment import build_oms_list
|
||||
|
||||
|
||||
TEST_DIR = Path(__file__).parent
|
||||
@@ -330,10 +332,11 @@ def create_voyager_req(equipment, source, dest, bidir, nodes_list, loose_list, m
|
||||
'nodes_list': nodes_list,
|
||||
'loose_list': loose_list,
|
||||
'path_bandwidth': 100.0e9,
|
||||
'effective_freq_slot': None}
|
||||
'effective_freq_slot': None,
|
||||
'power': 1e-3,
|
||||
'tx_power': 1e-3}
|
||||
trx_params = trx_mode_params(equipment, params['trx_type'], params['trx_mode'], True)
|
||||
params.update(trx_params)
|
||||
params['power'] = dbm2watt(power_dbm) if power_dbm else dbm2watt(equipment['SI']['default'].power_dbm)
|
||||
f_min = params['f_min']
|
||||
f_max_from_si = params['f_max']
|
||||
params['nb_channel'] = automatic_nch(f_min, f_max_from_si, params['spacing'])
|
||||
@@ -368,9 +371,9 @@ def test_initial_spectrum(mode, slot_width, power_dbm):
|
||||
assert_array_equal(infos_expected.frequency, infos_actual.frequency)
|
||||
assert_array_equal(infos_expected.baud_rate, infos_actual.baud_rate)
|
||||
assert_array_equal(infos_expected.slot_width, infos_actual.slot_width)
|
||||
assert_array_equal(infos_expected.signal, infos_actual.signal)
|
||||
assert_array_equal(infos_expected.nli, infos_actual.nli)
|
||||
assert_array_equal(infos_expected.ase, infos_actual.ase)
|
||||
assert_allclose(infos_expected.signal, infos_actual.signal, rtol=1e-10)
|
||||
assert_allclose(infos_expected.nli, infos_actual.nli, rtol=1e-10)
|
||||
assert_allclose(infos_expected.ase, infos_actual.ase, rtol=1e-10)
|
||||
assert_array_equal(infos_expected.roll_off, infos_actual.roll_off)
|
||||
assert_array_equal(infos_expected.chromatic_dispersion, infos_actual.chromatic_dispersion)
|
||||
assert_array_equal(infos_expected.pmd, infos_actual.pmd)
|
||||
@@ -539,8 +542,8 @@ def test_equalization(case, deltap, target, mode, slot_width, equalization):
|
||||
assert getattr(roadm, equalization) == target_psd
|
||||
path = compute_constrained_path(network, req)
|
||||
si = create_input_spectral_information(
|
||||
f_min=req.f_min, f_max=req.f_max, roll_off=req.roll_off, baud_rate=req.baud_rate, power=req.power,
|
||||
spacing=req.spacing, tx_osnr=req.tx_osnr)
|
||||
f_min=req.f_min, f_max=req.f_max, roll_off=req.roll_off, baud_rate=req.baud_rate,
|
||||
spacing=req.spacing, tx_osnr=req.tx_osnr, tx_power=req.power)
|
||||
for i, el in enumerate(path):
|
||||
if isinstance(el, Roadm):
|
||||
si = el(si, degree=path[i + 1].uid, from_degree=path[i - 1].uid)
|
||||
@@ -583,9 +586,9 @@ def test_power_option(req_power):
|
||||
infos_actual = propagate(path2, req, equipment)
|
||||
assert_array_equal(infos_expected.baud_rate, infos_actual.baud_rate)
|
||||
assert_array_equal(infos_expected.slot_width, infos_actual.slot_width)
|
||||
assert_array_equal(infos_expected.signal, infos_actual.signal)
|
||||
assert_array_equal(infos_expected.nli, infos_actual.nli)
|
||||
assert_array_equal(infos_expected.ase, infos_actual.ase)
|
||||
assert_allclose(infos_expected.signal, infos_actual.signal, rtol=1e-10)
|
||||
assert_allclose(infos_expected.nli, infos_actual.nli, rtol=1e-10)
|
||||
assert_allclose(infos_expected.ase, infos_actual.ase, rtol=1e-10)
|
||||
assert_array_equal(infos_expected.roll_off, infos_actual.roll_off)
|
||||
assert_array_equal(infos_expected.chromatic_dispersion, infos_actual.chromatic_dispersion)
|
||||
assert_array_equal(infos_expected.pmd, infos_actual.pmd)
|
||||
@@ -841,3 +844,103 @@ def test_power_offset_automatic_mode_selection(slot_width, value, equalization,
|
||||
_, mode = propagate_and_optimize_mode(path, free_req, equipment)
|
||||
assert mode['format'] == expected_mode
|
||||
assert_allclose(path_expected[-1].snr_01nm, path[-1].snr_01nm, rtol=1e-5)
|
||||
|
||||
|
||||
@pytest.mark.parametrize('tx_power_dbm', [-10, -8, 0, 10])
|
||||
def test_tx_power(tx_power_dbm):
|
||||
"""If carrier add power is below equalization target + ROADM add max loss, then equalizatio
|
||||
can not be applied.
|
||||
"""
|
||||
json_data = load_json(NETWORK_FILENAME)
|
||||
for el in json_data['elements']:
|
||||
if el['uid'] == 'roadm Lannion_CAS':
|
||||
el['type_variety'] = 'example_detailed_impairments'
|
||||
equipment = load_equipment(EQPT_FILENAME)
|
||||
network = network_from_json(json_data, equipment)
|
||||
default_spectrum = equipment['SI']['default']
|
||||
p_db = default_spectrum.power_dbm
|
||||
p_total_db = p_db + lin2db(automatic_nch(default_spectrum.f_min, default_spectrum.f_max, default_spectrum.spacing))
|
||||
build_network(network, equipment, p_db, p_total_db)
|
||||
build_oms_list(network, equipment)
|
||||
expected_roadm_lannion = {
|
||||
"uid": "roadm Lannion_CAS",
|
||||
"type": "Roadm",
|
||||
"type_variety": "example_detailed_impairments",
|
||||
"params": {
|
||||
"restrictions": {
|
||||
"preamp_variety_list": [],
|
||||
"booster_variety_list": []
|
||||
},
|
||||
'per_degree_pch_out_db': {'east edfa in Lannion_CAS to Corlay': -20,
|
||||
'east edfa in Lannion_CAS to Morlaix': -20,
|
||||
'east edfa in Lannion_CAS to Stbrieuc': -20},
|
||||
"target_pch_out_db": -20
|
||||
},
|
||||
'metadata': {
|
||||
'location': {
|
||||
'city': 'Lannion_CAS',
|
||||
'latitude': 2.0,
|
||||
'longitude': 0.0,
|
||||
'region': 'RLD'
|
||||
}
|
||||
}
|
||||
}
|
||||
roadm = next(n for n in network.nodes() if n.uid == 'roadm Lannion_CAS')
|
||||
assert roadm.to_json == expected_roadm_lannion
|
||||
spectrum = _spectrum_from_json([
|
||||
{
|
||||
"f_min": 191.35e12,
|
||||
"f_max": 191.35e12,
|
||||
"baud_rate": 32e9,
|
||||
"slot_width": 50e9,
|
||||
"power_dbm": 0,
|
||||
"roll_off": 0.15,
|
||||
"tx_osnr": 40
|
||||
},
|
||||
{
|
||||
"f_min": 193.15e12,
|
||||
"f_max": 193.15e12,
|
||||
"baud_rate": 32e9,
|
||||
"slot_width": 50e9,
|
||||
"power_dbm": 0,
|
||||
"roll_off": 0.15,
|
||||
"tx_osnr": 40,
|
||||
"tx_power_dbm": tx_power_dbm
|
||||
},
|
||||
{
|
||||
"f_min": 193.2e12,
|
||||
"f_max": 193.2e12,
|
||||
"baud_rate": 32e9,
|
||||
"slot_width": 50e9,
|
||||
"power_dbm": 0,
|
||||
"roll_off": 0.15,
|
||||
"tx_osnr": 40}])
|
||||
power = 1.0e-3
|
||||
si = carriers_to_spectral_information(initial_spectrum=spectrum,
|
||||
power=power)
|
||||
si = roadm(si, "east edfa in Lannion_CAS to Corlay", "trx Lannion_CAS")
|
||||
# Checks that if tx_power on add port is below min required power, its equalization target can not be met
|
||||
add_max_loss = next(e for e in getattr(equipment['Roadm']['example_detailed_impairments'], 'roadm-path-impairments')
|
||||
if 'roadm-add-path' in e)['roadm-add-path']['roadm-maxloss']
|
||||
min_required_add_power = -20 + add_max_loss
|
||||
power_reduction = max(0, min_required_add_power - tx_power_dbm)
|
||||
assert_allclose(si.signal, dbm2watt(array([-20, -20 - power_reduction, -20])), rtol=1e-5)
|
||||
path = ['trx Lannion_CAS',
|
||||
'roadm Lannion_CAS',
|
||||
'east edfa in Lannion_CAS to Stbrieuc',
|
||||
'fiber (Lannion_CAS → Stbrieuc)-F056',
|
||||
'east edfa in Stbrieuc to Rennes_STA',
|
||||
'fiber (Stbrieuc → Rennes_STA)-F057',
|
||||
'west edfa in Rennes_STA to Stbrieuc',
|
||||
'roadm Rennes_STA',
|
||||
'trx Rennes_STA']
|
||||
|
||||
si = carriers_to_spectral_information(initial_spectrum=spectrum,
|
||||
power=power)
|
||||
for i, uid in enumerate(path):
|
||||
node = next(n for n in network.nodes() if n.uid == uid)
|
||||
if isinstance(node, Roadm):
|
||||
si = node(si, path[i + 1], path[i - 1])
|
||||
else:
|
||||
si = node(si)
|
||||
assert_allclose(watt2dbm(si.signal + si.ase + si.nli), array([-20, -20, -20]), rtol=1e-5)
|
||||
|
||||
@@ -53,7 +53,8 @@ def create_rq(equipment, srce, dest, bdir, nd_list, ls_list, mode, power_dbm):
|
||||
'effective_freq_slot': None,
|
||||
'path_bandwidth': 100000000000.0,
|
||||
'spacing': 50e9 if mode == 'mode 1' else 75e9,
|
||||
'power': dbm2watt(power_dbm)
|
||||
'power': dbm2watt(power_dbm),
|
||||
'tx_power': dbm2watt(power_dbm)
|
||||
}
|
||||
trx_params = trx_mode_params(equipment, params['trx_type'], params['trx_mode'], True)
|
||||
params.update(trx_params)
|
||||
|
||||
@@ -12,7 +12,7 @@ def test_create_arbitrary_spectral_information():
|
||||
si = create_arbitrary_spectral_information(frequency=[193.25e12, 193.3e12, 193.35e12],
|
||||
baud_rate=32e9, signal=[1, 1, 1],
|
||||
delta_pdb_per_channel=[1, 1, 1],
|
||||
tx_osnr=40.0)
|
||||
tx_osnr=40.0, tx_power=[1, 1, 1])
|
||||
assert_array_equal(si.baud_rate, array([32e9, 32e9, 32e9]))
|
||||
assert_array_equal(si.slot_width, array([37.5e9, 37.5e9, 37.5e9]))
|
||||
assert_array_equal(si.signal, ones(3))
|
||||
@@ -33,7 +33,7 @@ def test_create_arbitrary_spectral_information():
|
||||
si = create_arbitrary_spectral_information(frequency=array([193.35e12, 193.3e12, 193.25e12]),
|
||||
slot_width=array([50e9, 50e9, 50e9]),
|
||||
baud_rate=32e9, signal=array([1, 2, 3]),
|
||||
tx_osnr=40.0)
|
||||
tx_osnr=40.0, tx_power=array([1, 2, 3]))
|
||||
|
||||
assert_array_equal(si.signal, array([3, 2, 1]))
|
||||
|
||||
@@ -41,16 +41,16 @@ def test_create_arbitrary_spectral_information():
|
||||
r'larger than the slot width for channels: \[1, 3\].'):
|
||||
create_arbitrary_spectral_information(frequency=[193.25e12, 193.3e12, 193.35e12], signal=1,
|
||||
baud_rate=[64e9, 32e9, 64e9], slot_width=50e9,
|
||||
tx_osnr=40.0)
|
||||
tx_osnr=40.0, tx_power=1)
|
||||
with pytest.raises(SpectrumError, match='Spectrum required slot widths larger than the frequency spectral '
|
||||
r'distances between channels: \[\(1, 2\), \(3, 4\)\].'):
|
||||
create_arbitrary_spectral_information(frequency=[193.26e12, 193.3e12, 193.35e12, 193.39e12], signal=1,
|
||||
tx_osnr=40.0, baud_rate=32e9, slot_width=50e9)
|
||||
tx_osnr=40.0, baud_rate=32e9, slot_width=50e9, tx_power=1)
|
||||
with pytest.raises(SpectrumError, match='Spectrum required slot widths larger than the frequency spectral '
|
||||
r'distances between channels: \[\(1, 2\), \(2, 3\)\].'):
|
||||
create_arbitrary_spectral_information(frequency=[193.25e12, 193.3e12, 193.35e12], signal=1, baud_rate=49e9,
|
||||
tx_osnr=40.0, roll_off=0.1)
|
||||
tx_osnr=40.0, roll_off=0.1, tx_power=1)
|
||||
with pytest.raises(SpectrumError,
|
||||
match='Dimension mismatch in input fields.'):
|
||||
create_arbitrary_spectral_information(frequency=[193.25e12, 193.3e12, 193.35e12], signal=[1, 2], baud_rate=49e9,
|
||||
tx_osnr=40.0)
|
||||
tx_osnr=40.0, tx_power=1)
|
||||
|
||||
@@ -34,7 +34,7 @@ def test_jsonthing(caplog):
|
||||
"sys_margins": 2
|
||||
}
|
||||
_ = SI(**json_data)
|
||||
expected_msg = 'WARNING missing f_min attribute in eqpt_config.json[SI]\n ' \
|
||||
expected_msg = 'WARNING missing f_min attribute in eqpt_config.json[SI]\n\t' \
|
||||
+ 'default value is f_min = 191350000000000.0'
|
||||
assert expected_msg in caplog.text
|
||||
|
||||
|
||||
@@ -228,6 +228,7 @@ def test_design_non_amplified_link(elem1, elem2, expected_gain, expected_delta_p
|
||||
equipment = load_equipment(EQPT_FILENAME)
|
||||
equipment['Span']['default'].power_mode = power_mode
|
||||
equipment['SI']['default'].power_dbm = p_db
|
||||
equipment['SI']['default'].tx_power_dbm = p_db
|
||||
network = network_from_json(json_data, equipment)
|
||||
edfa = next(a for a in network.nodes() if a.uid == 'edfa')
|
||||
edfa.params.out_voa_auto = True
|
||||
|
||||
@@ -352,6 +352,7 @@ def test_excel_ila_constraints(source, destination, route_list, hoptype, expecte
|
||||
'cost': None,
|
||||
'roll_off': 0,
|
||||
'tx_osnr': 0,
|
||||
'tx_power': 0,
|
||||
'penalties': None,
|
||||
'min_spacing': None,
|
||||
'nb_channel': 0,
|
||||
|
||||
@@ -52,7 +52,8 @@ def propagation(input_power, con_in, con_out, dest):
|
||||
p = db2lin(p) * 1e-3
|
||||
spacing = 50e9 # THz
|
||||
si = create_input_spectral_information(f_min=191.3e12, f_max=191.3e12 + 79 * spacing, roll_off=0.15,
|
||||
baud_rate=32e9, power=p, spacing=spacing, tx_osnr=None)
|
||||
baud_rate=32e9, spacing=spacing, tx_osnr=None,
|
||||
tx_power=p)
|
||||
source = next(transceivers[uid] for uid in transceivers if uid == 'trx A')
|
||||
sink = next(transceivers[uid] for uid in transceivers if uid == dest)
|
||||
path = dijkstra_path(network, source, sink)
|
||||
@@ -181,7 +182,7 @@ def test_json_element(error, json_data, expected_msg):
|
||||
network = network_from_json(json_data, equipment)
|
||||
elem = next(e for e in network.nodes() if e.uid == 'Elem')
|
||||
si = create_input_spectral_information(f_min=191.3e12, f_max=196.1e12, roll_off=0.15,
|
||||
baud_rate=32e9, power=1.0e-3, spacing=50.0e9, tx_osnr=45)
|
||||
baud_rate=32e9, tx_power=1.0e-3, spacing=50.0e9, tx_osnr=45)
|
||||
with pytest.raises(error, match=re.escape(expected_msg)):
|
||||
_ = elem(si)
|
||||
|
||||
|
||||
@@ -255,7 +255,8 @@ def test_roadm_target_power(prev_node_type, effective_pch_out_db, power_dbm, roa
|
||||
'path_bandwidth': 100e9,
|
||||
'effective_freq_slot': None,
|
||||
'nb_channel': nb_channel,
|
||||
'power': dbm2watt(power_dbm)
|
||||
'power': dbm2watt(power_dbm),
|
||||
'tx_power': dbm2watt(power_dbm)
|
||||
}
|
||||
trx_params = trx_mode_params(equipment)
|
||||
params.update(trx_params)
|
||||
@@ -264,7 +265,7 @@ def test_roadm_target_power(prev_node_type, effective_pch_out_db, power_dbm, roa
|
||||
path = compute_constrained_path(network, req)
|
||||
si = create_input_spectral_information(
|
||||
f_min=req.f_min, f_max=req.f_max, roll_off=req.roll_off, baud_rate=req.baud_rate,
|
||||
power=req.power, spacing=req.spacing, tx_osnr=req.tx_osnr)
|
||||
spacing=req.spacing, tx_osnr=req.tx_osnr, tx_power=req.tx_power)
|
||||
for i, el in enumerate(path):
|
||||
if isinstance(el, Roadm):
|
||||
power_in_roadm = si.signal + si.ase + si.nli
|
||||
@@ -311,7 +312,8 @@ def create_per_oms_request(network, eqpt, req_power):
|
||||
'path_bandwidth': 100e9,
|
||||
'effective_freq_slot': None,
|
||||
'nb_channel': nb_channel,
|
||||
'power': dbm2watt(req_power)
|
||||
'power': dbm2watt(req_power),
|
||||
'tx_power': dbm2watt(req_power)
|
||||
}
|
||||
trx_params = trx_mode_params(eqpt)
|
||||
params.update(trx_params)
|
||||
@@ -339,6 +341,7 @@ def create_per_oms_request(network, eqpt, req_power):
|
||||
carrier['label'] = ""
|
||||
carrier['slot_width'] = req.spacing
|
||||
carrier['delta_pdb'] = 0
|
||||
carrier['tx_power'] = 1e-3
|
||||
req.initial_spectrum = {(req.f_min + req.spacing * f): Carrier(**carrier)
|
||||
for f in range(1, req.nb_channel + 1)}
|
||||
req_list.append(req)
|
||||
@@ -353,6 +356,7 @@ def create_per_oms_request(network, eqpt, req_power):
|
||||
carrier['label'] = ""
|
||||
carrier['slot_width'] = req.spacing
|
||||
carrier['delta_pdb'] = 0
|
||||
carrier['tx_power'] = 1e-3
|
||||
req.initial_spectrum = {(req.f_min + req.spacing * f): Carrier(**carrier) for f in range(1, req.nb_channel + 1)}
|
||||
req_list.append(req)
|
||||
return req_list
|
||||
|
||||
@@ -28,7 +28,8 @@ def test_fiber():
|
||||
fiber.ref_pch_in_dbm = 0.0
|
||||
# fix grid spectral information generation
|
||||
spectral_info_input = create_input_spectral_information(f_min=191.3e12, f_max=196.1e12, roll_off=0.15,
|
||||
baud_rate=32e9, power=1e-3, spacing=50e9, tx_osnr=40.0)
|
||||
baud_rate=32e9, spacing=50e9, tx_osnr=40.0,
|
||||
tx_power=1e-3)
|
||||
# propagation
|
||||
spectral_info_out = fiber(spectral_info_input)
|
||||
|
||||
@@ -48,7 +49,7 @@ def test_fiber():
|
||||
spectral_info_input = create_arbitrary_spectral_information(frequency=frequency, slot_width=slot_width,
|
||||
signal=signal, baud_rate=baud_rate, roll_off=0.15,
|
||||
delta_pdb_per_channel=delta_pdb_per_channel,
|
||||
tx_osnr=40.0)
|
||||
tx_osnr=40.0, tx_power=1e-3)
|
||||
|
||||
# propagation
|
||||
spectral_info_out = fiber(spectral_info_input)
|
||||
@@ -66,7 +67,8 @@ def test_raman_fiber():
|
||||
"""Test the accuracy of propagating the RamanFiber."""
|
||||
# spectral information generation
|
||||
spectral_info_input = create_input_spectral_information(f_min=191.3e12, f_max=196.1e12, roll_off=0.15,
|
||||
baud_rate=32e9, power=1e-3, spacing=50e9, tx_osnr=40.0)
|
||||
baud_rate=32e9, spacing=50e9, tx_osnr=40.0,
|
||||
tx_power=1e-3)
|
||||
SimParams.set_params(load_json(TEST_DIR / 'data' / 'sim_params.json'))
|
||||
fiber = RamanFiber(**load_json(TEST_DIR / 'data' / 'test_science_utils_fiber_config.json'))
|
||||
fiber.ref_pch_in_dbm = 0.0
|
||||
@@ -103,7 +105,8 @@ def test_fiber_lumped_losses_srs(set_sim_params):
|
||||
"""Test the accuracy of Fiber with lumped losses propagation."""
|
||||
# spectral information generation
|
||||
spectral_info_input = create_input_spectral_information(f_min=191.3e12, f_max=196.1e12, roll_off=0.15,
|
||||
baud_rate=32e9, power=1e-3, spacing=50e9, tx_osnr=40.0)
|
||||
baud_rate=32e9, spacing=50e9, tx_osnr=40.0,
|
||||
tx_power=1e-3)
|
||||
|
||||
SimParams.set_params(load_json(TEST_DIR / 'data' / 'sim_params.json'))
|
||||
fiber = Fiber(**load_json(TEST_DIR / 'data' / 'test_lumped_losses_raman_fiber_config.json'))
|
||||
|
||||
@@ -288,6 +288,7 @@ def request_set():
|
||||
'cost': 1,
|
||||
'roll_off': 0.15,
|
||||
'tx_osnr': 38,
|
||||
'tx_power': 0.001,
|
||||
'penalties': {},
|
||||
'min_spacing': 37.5e9,
|
||||
'nb_channel': None,
|
||||
|
||||
@@ -61,7 +61,7 @@ def test_trx_mode_params(trx_type, trx_mode, error_message, no_error, expected_r
|
||||
'penalties': {},
|
||||
'roll_off': 0.15,
|
||||
'spacing': 50000000000.0,
|
||||
'tx_osnr': 100
|
||||
'tx_osnr': 100,
|
||||
}
|
||||
possible_results["mode 2"] = {
|
||||
'format': 'mode 2',
|
||||
|
||||
Reference in New Issue
Block a user