def edfa_nf(gain_target, variety_type, equipment): amp_params = equipment['Edfa'][variety_type] amp = Edfa( uid = f'calc_NF', params = amp_params._asdict(), operational = { 'gain_target': gain_target, 'tilt_target': 0, }) return amp._calc_nf(True)
def edfa_nf(gain_target, variety_type, equipment): amp_params = equipment['Edfa'][variety_type] amp = Edfa(uid=f'calc_NF', params=amp_params.__dict__, operational={ 'gain_target': gain_target, 'tilt_target': 0 }) amp.pin_db = 0 amp.nch = 88 return amp._calc_nf(True)
def add_egress_amplifier(network, node): next_nodes = [n for n in network.successors(node) if not (isinstance(n, Transceiver) or isinstance(n, Fused) or isinstance(n, Edfa))] #no amplification for fused spans or TRX for i, next_node in enumerate(next_nodes): network.remove_edge(node, next_node) amp = Edfa( uid = f'Edfa{i}_{node.uid}', params = {}, metadata = { 'location': { 'latitude': (node.lat * 2 + next_node.lat * 2) / 4, 'longitude': (node.lng * 2 + next_node.lng * 2) / 4, 'city': node.loc.city, 'region': node.loc.region, } }, operational = { 'gain_target': None, 'tilt_target': 0, }) network.add_node(amp) if isinstance(node,Fiber): edgeweight = node.params.length else: edgeweight = 0.01 network.add_edge(node, amp, weight = edgeweight) network.add_edge(amp, next_node, weight = 0.01)
def test_compare_nf_models(gain, setup_edfa_variable_gain, si): """ compare the 2 amplifier models (polynomial and estimated from nf_min and max) => nf_model vs nf_poly_fit for intermediate gain values: between gain_min and gain_flatmax some discrepancy is expected but target < 0.5dB => unitary test for Edfa._calc_nf (and Edfa.interpol_params)""" edfa = setup_edfa_variable_gain frequencies = array([c.frequency for c in si.carriers]) pin = array( [c.power.signal + c.power.nli + c.power.ase for c in si.carriers]) pin = pin / db2lin(gain) baud_rates = array([c.baud_rate for c in si.carriers]) edfa.operational.gain_target = gain # edfa is variable gain type pref = Pref(0, -gain, lin2db(len(frequencies))) edfa.interpol_params(frequencies, pin, baud_rates, pref) nf_model = edfa.nf[0] # change edfa type variety to a polynomial el_config = { "uid": "Edfa1", "operational": { "gain_target": gain, "tilt_target": 0 }, "metadata": { "location": { "region": "", "latitude": 2, "longitude": 0 } } } equipment = load_equipment(eqpt_library) extra_params = equipment['Edfa']['CienaDB_medium_gain'] temp = el_config.setdefault('params', {}) temp = merge_amplifier_restrictions(temp, extra_params.__dict__) el_config['params'] = temp edfa = Edfa(**el_config) # edfa is variable gain type edfa.interpol_params(frequencies, pin, baud_rates, pref) nf_poly = edfa.nf[0] print(nf_poly, nf_model) assert pytest.approx(nf_model, abs=0.5) == nf_poly
def add_egress_amplifier(network, node): next_nodes = [ n for n in network.successors(node) if not (isinstance(n, Transceiver) or isinstance(n, Fused) or isinstance(n, Edfa)) ] #no amplification for fused spans or TRX for i, next_node in enumerate(next_nodes): network.remove_edge(node, next_node) amp = Edfa(uid=f'Edfa{i}_{node.uid}', params={}, operational={ 'gain_target': 0, 'tilt_target': 0, }) network.add_node(amp) network.add_edge(node, amp) network.add_edge(amp, next_node)
def add_egress_amplifier(network, node): next_nodes = [n for n in network.successors(node) if not (isinstance(n, Edfa) or isinstance(n, Transceiver))] i = 1 for next_node in next_nodes: network.remove_edge(node, next_node) uid = 'Edfa' + str(i)+ '_' + str(node.uid) metadata = next_node.metadata operational = {'gain_target': node.loss, 'tilt_target': 0} edfa_variety_type = select_edfa(node.loss) config = {'uid':uid, 'type': 'Edfa', 'metadata': metadata, \ 'type_variety': edfa_variety_type, 'operational': operational} new_edfa = Edfa(config) network.add_node(new_edfa) network.add_edge(node,new_edfa) network.add_edge(new_edfa, next_node) i +=1 return network