示例#1
0
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)
示例#2
0
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)
示例#3
0
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)
示例#4
0
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
示例#5
0
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)
示例#6
0
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