def test_noisy1(self): a = Circuit() a.add('R1 1 0') a.add('R2 1 0') an = a.noisy() b = Circuit() b.add('R1 1 0 {R1 * R2 / (R1 + R2)}') bn = b.noisy() self.assertEqual(an[1].V.n.expr, bn[1].V.n.expr, "Incorrect noise")
Rs = 30 G = 1000 R1 = 100 R2 = (G - 1) * R1 Vn = 1e-9 * sqrt(3.5 / f + 1) In = 1e-12 * sqrt(250 / f + 1) T = 273 + 20 k_B = 1.38e-23 a = Circuit('opamp-noninverting-amplifier.sch') an = a.noisy() Vno = an[8].V.n(f) Vno = Vno.limit('A', oo) Vnov = Vno.subs({ 'R1': R1, 'R2': R2, 'In1': 0, 'In2': 0, 'Vn': Vn, 'Rs': Rs, 'k_B': k_B, 'T': 0 })
def main (argv=None): if argv is None: argv = sys.argv version = __doc__.split('\n')[0] parser = ArgumentParser(description='Convert Lcapy schematic to image file.') parser.add_argument('--version', action='version', version=__doc__.split('\n')[0]) parser.add_argument('--debug', type=int, dest='debug', default=None, help="enable debugging") parser.add_argument('--draw-nodes', type=str, dest='draw_nodes', default=None, help='draw nodes, choice: none, connections, primary, all') parser.add_argument('--nodraw-nodes', action='store_false', dest='draw_nodes', help="don't draw nodes") parser.add_argument('--label-nodes', type=str, dest='label_nodes', default=None, help='label nodes, choice: none, alpha, pins, primary, all or a list of comma separated node names in braces, e.g, {1, 2, 3}') parser.add_argument('--nolabel-nodes', action='store_false', dest='label_nodes', help="don't label nodes") parser.add_argument('--nolabel-ids', action='store_false', dest='label_ids', default=None, help="don't label element identifiers") parser.add_argument('--label-ids', action='store_true', dest='label_ids', default=None, help="label element identifiers") parser.add_argument('--nolabel-values', action='store_false', dest='label_values', default=None, help="don't label values") parser.add_argument('--label-values', action='store_true', dest='label_values', default=None, help="labels values") parser.add_argument('--s-model', action='store_true', dest='s_model', default=False, help='generate s-domain model schematic') parser.add_argument('--noisy-model', action='store_true', dest='noisy_model', default=False, help='generate noisy model schematic') parser.add_argument('--ac-model', action='store_true', dest='ac_model', default=False, help='generate AC model schematic') parser.add_argument('--p-model', action='store_true', dest='p_model', default=False, help='generate pre-initial model schematic') parser.add_argument('--k-model', action='store_true', dest='k_model', default=False, help='generate schematic with independent sources killed') parser.add_argument('--kill-zero', action='store_true', default=False, help='generate schematic with zero independent sources killed') parser.add_argument('--scale', type=float, dest='scale', default=None, help='schematic scale factor, this scales the schematic size but not the fonts') parser.add_argument('--node-spacing', type=float, dest='node_spacing', default=None, help='this specifies the spacing of the nodes of a component') parser.add_argument('--cpt-size', type=float, dest='cpt_size', default=None, help='this specifies the size of a component; it needs to be smaller than node_spacing') parser.add_argument('--dpi', type=float, default=None, help='this specifies the number of dots per inch when creating a png file') parser.add_argument('--help-lines', type=float, dest='help_lines', default=None, help="draw help lines") parser.add_argument('--xgraph', action='store_true', dest='xgraph', default=False, help="generate graph of component x positions") parser.add_argument('--circuitgraph', action='store_true', default=False, help="generate circuit graph") parser.add_argument('--ygraph', action='store_true', dest='ygraph', default=False, help="generate graph of component y positions") parser.add_argument('--stage', type=int, dest='stage', default=0, help='select graph analysis stage 0--4') parser.add_argument('--pdb', action='store_true', default=False, help="enter python debugger on exception") parser.add_argument('--allow-anon', action='store_true', default=False, help="allow anonymous component ids") parser.add_argument('--renumber', type=str, dest='renumber', default=None, help='renumber nodes, e.g, 10:1, 11:2 or all') parser.add_argument('--font', type=str, default=None, help=r'specify default font, e.g., \small, \sffamily\tiny') parser.add_argument('--options', type=str, default=None, help='specify circuitikz options') parser.add_argument('--preamble', type=str, default=None, help='specify circuitikz commands at start') parser.add_argument('--postamble', type=str, default=None, help='specify circuitikz commands at end') parser.add_argument('--method', type=str, default='graph', help='specify component placement algorithm') parser.add_argument('filename', type=str, help='schematic filename') parser.add_argument('outfilename', type=str, nargs='?', help='output filename', default=None) parser.add_argument('--show', action='store_true', dest='show', default=None, help="show image") args = parser.parse_args() infilename = args.filename outfilename = args.outfilename if args.pdb: sys.excepthook = schtex_exception from lcapy import Circuit, CircuitGraph cct = Circuit(infilename, allow_anon=args.allow_anon) if args.k_model: cct = cct.kill() if args.kill_zero: cct = cct.kill_zero() if args.s_model: cct = cct.s_model() if args.ac_model: cct = cct.ac_model() if args.p_model: cct = cct.pre_initial_model() if args.noisy_model: cct = cct.noisy() if args.renumber == 'all': cct = cct.renumber() elif args.renumber: parts = args.renumber.split(',') node_map = {} for part in parts: part = part.strip() fields = part.split(':') if len(fields) != 2: raise ValueError('Expecting mapping of form a:b got %s' % part) node_map[fields[0]] = fields[1] cct = cct.renumber(node_map) if args.label_nodes not in ('none', 'all', 'alpha', 'pins', 'primary', False, None): raise ValueError('Illegal option %s for label_nodes' % args.label_nodes) if args.draw_nodes not in ('none', 'all', 'primary', 'connections', False, None): raise ValueError('Illegal option %s for draw_nodes' % args.draw_nodes) if outfilename is not None: base, ext = os.path.splitext(outfilename) if ext == '.sch': open(outfilename, 'w').write(str(cct)) return 0 nosave = args.xgraph or args.ygraph if not args.xgraph and not args.ygraph and not args.circuitgraph: kwargs = {} if args.options != None: kwargs['options'] = args.options if args.preamble != None: kwargs['preamble'] = args.preamble if args.postamble != None: kwargs['postamble'] = args.postamble if args.font != None: kwargs['font'] = args.font cct.draw(label_nodes=args.label_nodes, draw_nodes=args.draw_nodes, label_ids=args.label_ids, label_values=args.label_values, filename=outfilename, scale=args.scale, node_spacing=args.node_spacing, cpt_size=args.cpt_size, help_lines=args.help_lines, debug=args.debug, method=args.method, dpi=args.dpi, nosave=nosave, **kwargs) if args.xgraph: xgraph, ygraph = cct.sch.make_graphs(debug=args.debug) xgraph.dot(outfilename, stage=args.stage) if args.ygraph: xgraph, ygraph = cct.sch.make_graphs(debug=args.debug) ygraph.dot(outfilename, stage=args.stage) if args.circuitgraph: cg = CircuitGraph(cct) cg.draw(filename=outfilename) if args.show: show() return 0
from lcapy import Circuit, f a = Circuit(""" R 1 0; down W 1 2; right C 2 0_2; down W 0 0_2; right""") b = a.noisy() Vn = b.C.V.n(f).subs({'R': 10e3, 'C': 1e-9, 'T': 293, 'k_B': 1.38e-23}) from numpy import linspace vf = linspace(0, 100e3, 200) from matplotlib.pyplot import savefig (Vn * 1e9).plot(vf, plot_type='mag', ylabel='ASD (nV/rootHz)') savefig(__file__.replace('.py', '.png'), bbox_inches='tight')