コード例 #1
0
ファイル: test_circuits.py プロジェクト: mph-/lcapy
    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")
コード例 #2
0
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
})
コード例 #3
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
コード例 #4
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')