def test_loopanalysis_incorrect_circuit(): cir = SubCircuit() assert_raises(ValueError, lambda: FeedbackLoopAnalysis(cir)) cir['probe1'] = LoopProbe('out', gnd, 'out_R2', gnd) cir['probe2'] = LoopProbe('out', gnd, 'out_R2', gnd) assert_raises(ValueError, lambda: FeedbackLoopAnalysis(cir))
def test_loopanalysis_numeric(): cir = SubCircuit() cir['A1'] = VCVS(gnd, 'int', 'out', gnd, g = 10) cir['R1'] = R('in', 'int') cir['probe'] = LoopProbe('out', gnd, 'out_R2', gnd) cir['C2'] = C('int', 'out_R2') cir['VS'] = VS('in', gnd) ana = FeedbackLoopAnalysis(cir) res = ana.solve(np.logspace(4,6), complexfreq=True) print abs(res['loopgain'])
def test_loopanalysis_viiv(): sympy.var('R1 R2 CL A s') cir = SubCircuit(toolkit=symbolic) cir['A1'] = VCVS(gnd, 'int', 'out', gnd, g = A, toolkit=symbolic) cir['R1'] = R('in', 'int', r=R1) cir['probe'] = LoopProbe('out', gnd, 'out_R2', gnd, toolkit=symbolic) cir['R2'] = R('int', 'out_R2', r=R2) cir['VS'] = VS('in', gnd) ana = FeedbackLoopAnalysis(cir, toolkit=symbolic) res = ana.solve(s, complexfreq=True) assert sympy.simplify(res['loopgain'] - (- A * R1 / (R1 + R2))) == 0
def test_deviceanalysis_viiv(): """Loopgain of a resistor V-I and a I-V amplifier with a vcvs as gain element""" sympy.var('R1 R2 CL A s') cir = SubCircuit(toolkit=symbolic) cir['A1'] = VCVS(gnd, 'int', 'out', gnd, g = A,toolkit=symbolic) cir['R1'] = R('in', 'int', r=R1) cir['R2'] = R('int', 'out', r=R2) cir['VS'] = VS('in', gnd) ana = FeedbackDeviceAnalysis(cir, 'A1', toolkit=symbolic) res = ana.solve(s, complexfreq=True) assert simplify(res['loopgain'] - (- A * R1 / (R1 + R2))) == 0
def test_deviceanalysis_sourcefollower(): """Loopgain of a source follower""" gm,RL,CL,s = sympy.symbols('gm RL CL s') cir = SubCircuit(toolkit=symbolic) cir['M1'] = VCCS('g', 's', gnd, 's', gm = gm,toolkit=symbolic) cir['RL'] = R('s', gnd, r=RL) cir['CL'] = C('s', gnd, c=CL) cir['VS'] = VS('g', gnd) ana = FeedbackDeviceAnalysis(cir, 'M1', toolkit=symbolic) res = ana.solve(s, complexfreq=True) assert_equal(simplify(res['loopgain']), simplify(- gm / (1/RL + s*CL)))
# -*- coding: latin-1 -*- # Copyright (c) 2008 Pycircuit Development Team # See LICENSE for details. from pycircuit.circuit import SubCircuit, VCCS, G, C, IS, VS, Parameter, gnd, \ R, symbolic, TwoPortAnalysis, AC, Noise from pycircuit.circuit.mos import MOS from sympy import Symbol, simplify, ratsimp, sympify, factor, limit from numpy import array, zeros from copy import copy from pycircuit.circuit.symbolicapprox import * ## Create regulated cascode circuit c = SubCircuit() nin, nout, n1 = c.add_nodes('in', 'out', 'n1') gm1, gm2, gds1, gds2, Cgs1, Cgs2 = [ Symbol(symname, real=True) for symname in 'gm1,gm2,gds1,gds2,Cgs1,Cgs2'.split(',') ] c['M2'] = MOS(nin, n1, gnd, gnd, gm=gm2, gds=gds2, Cgs=0 * Cgs1) c['M1'] = MOS(n1, nout, nin, nin, gm=gm1, gds=gds1, Cgs=0 * Cgs2) #c['r'] = R(nin, gnd, r = Symbol('Rs', real=True)) ## Perform twoport analysis with noise twoportana = TwoPortAnalysis(c, nin,