physical.PhysicalInductor("0807SQ-17NGL", circuit.Value(17.0e-09, tolerance=2), R_S=0.009, Q=100, SRF=4.0e9), physical.PhysicalInductor("0807SQ-22NGL", circuit.Value(22.0e-09, tolerance=2), R_S=0.010, Q=100, SRF=3.5e9), physical.PhysicalInductor("0908SQ-17NGL", circuit.Value(16.6e-09, tolerance=2), R_S=0.008, Q=130, SRF=3.4e9), physical.PhysicalInductor("0908SQ-25NGL", circuit.Value(25.0e-09, tolerance=2), R_S=0.010, Q=130, SRF=2.5e9), physical.PhysicalInductor("0908SQ-28NGL", circuit.Value(27.3e-09, tolerance=2), R_S=0.010, Q=130, SRF=3.2e9), ] coilcraft = coilcraft_0603hp + coilcraft_sq murata = [ physical.CapacitorModel(circuit.Value(18e-12, tolerance="1"), name="GRM1885C1H180FA01D"), physical.CapacitorModel(circuit.Value(20e-12, tolerance="1"), name="GRM1885C1H200FA01D") ] library_components = physical.map_library_components(netlist_realisation, inductor_library=coilcraft, capacitor_library=murata) physical.print_library_map(netlist_realisation, library_components) physical.substitute_library_components(netlist_realisation, library_components) capacitors = [ ("C%i" % i) for i in range(1, 7) ] inductors = [ ("L%i" % i) for i in range(1, 8) ] for c in capacitors: # Use on purpose a more leaky capacitor, so the difference shows up in the graphs :) physical.model_capacitor(netlist_realisation, c, R_L = "10 k", R_ESR = "0.1", L_ESL = "1 nH") # TODO: look at the trick from the qucs test cases to wrap the simulation data into multi-dimensional arrays? def acceptable_circuit(sim): for (idx, freq) in enumerate(sim.data["frequency"]):
config = ConfigParser.SafeConfigParser() config.read('pyqucs.cfg') # TODO: automatically generate the LowPassFilter from LowPassFilterOriginal :) base_file_original = "LowPassFilterOriginal" schematic_original = qucsator.Schematic(config, base_file_original + ".sch") schematic_original.to_netlist(base_file_original+ ".net") netlist_original = qucsator.Netlist(base_file_original + ".net") # Now make this physical netlist_realisation = copy.deepcopy(netlist_original) # Use component values from a standard set of components library_components = physical.map_library_components(netlist_realisation) physical.print_library_map(netlist_realisation, library_components) physical.substitute_library_components(netlist_realisation, library_components) # If they would have been decently labeled, this was easier: #capacitors = [ ("C%i" % i) for i in range(1, 5) ] #inductors = [ ("L%i" % i) for i in range(1, 6) ] capacitors = [ "C1", "C3", "C5" ] inductors = [ "L2", "L4" ] for c in capacitors: # Use on purpose a more leaky capacitor, so the difference shows up in the graphs :) physical.model_capacitor(netlist_realisation, c, R_L = "10 k", R_ESR = "0.1", L_ESL = "0")