예제 #1
0
def high_pass_rc_filter(v, r, c):
    circuit = Circuit('Low-Pass RC Filter')
    circuit.SinusoidalVoltageSource('input',
                                    'in',
                                    circuit.gnd,
                                    amplitude=u_V(float(v)))
    C1 = circuit.C(1, 'in', 'out', u_uF(float(c)))
    R1 = circuit.R(1, 'out', circuit.gnd, u_kΩ(float(r)))
    break_frequency = 1 / (2 * math.pi * float(R1.resistance * C1.capacitance))
    print("Break frequency = {:.1f} Hz".format(break_frequency))
    simulator = circuit.simulator(temperature=25, nominal_temperature=25)
    analysis = simulator.ac(start_frequency=1 @ u_Hz,
                            stop_frequency=1 @ u_MHz,
                            number_of_points=10,
                            variation='dec')
    # print(analysis.out)
    plt.close('all')
    figure, axes = plt.subplots(2, figsize=(20, 10))
    plt.title("Bode Diagram of a Low-Pass RC Filter")
    bode_diagram(
        axes=axes,
        frequency=analysis.frequency,
        gain=20 * np.log10(np.absolute(analysis.out)),
        phase=np.angle(analysis.out, deg=False),
        marker='.',
        color='blue',
        linestyle='-',
    )
    for ax in axes:
        ax.axvline(x=break_frequency, color='red')

    plt.tight_layout()

    return circuit, analysis, plt
예제 #2
0
def simulateAndPrint(figure1, ax1, ax2, circuit, fc0, fc1=None):
    simulator = circuit.simulator()
    enableLtSpice(simulator, spice_command='/Applications/LTspice.app/Contents/MacOS/LTspice')

    analysis = simulator.ac(start_frequency=10, stop_frequency=kilo(5), number_of_points=500,  variation='dec') 

    print('Simulated, Bode plotting...')

    bode_diagram(axes=(figure1.add_subplot(ax1), figure1.add_subplot(ax2)),
                 frequency=analysis.frequency,
                 gain=20*np.log10(np.absolute(analysis.out1o)),
                 #gain=np.absolute(analysis.out50),
                 phase=np.angle(analysis.out1o, deg=False),
                 marker='',
                 color='blue',
                 linestyle='-',
             )
    bode_diagram(axes=(figure1.add_subplot(ax1), figure1.add_subplot(ax2)),
                 frequency=analysis.frequency,
                 gain=20*np.log10(np.absolute(analysis.out2o)),
                 #gain=np.absolute(analysis.out50),
                 phase=np.angle(analysis.out2o, deg=False),
                 marker='',
                 color='red',
                 linestyle='-',
                 )
    figure1.add_subplot(ax1)
    plt.axvline(x=fc0, linewidth=0.5, color='k')
    if fc1 != None:
        plt.axvline(x=fc1, linewidth=0.5, color='k')
    figure1.add_subplot(ax2)
    plt.axvline(x=fc0, linewidth=0.5, color='k')
    if fc1 != None:
        plt.axvline(x=fc1, linewidth=0.5, color='k')
예제 #3
0
def simulateAndPrint(figure1, ax1, ax2, circuit, fc0, fc1=None):
    simulator = circuit.simulator()
    #   enableLtSpice(simulator, spice_command='/Applications/LTspice.app/Contents/MacOS/LTspice')

    analysis = simulator.ac(start_frequency=10 @ u_Hz,
                            stop_frequency=5 @ u_kHz,
                            number_of_points=500,
                            variation='dec')

    print('Simulated, Bode plotting...')

    bode_diagram(
        axes=(figure1.add_subplot(ax1), figure1.add_subplot(ax2)),
        frequency=analysis.frequency,
        gain=20 * np.log10(np.absolute(analysis.out1o)),
        #gain=np.absolute(analysis.out50),
        phase=np.angle(analysis.out1o, deg=False),
        marker='',
        color='blue',
        linestyle='-',
    )
    bode_diagram(
        axes=(figure1.add_subplot(ax1), figure1.add_subplot(ax2)),
        frequency=analysis.frequency,
        gain=20 * np.log10(np.absolute(analysis.out2o)),
        #gain=np.absolute(analysis.out50),
        phase=np.angle(analysis.out2o, deg=False),
        marker='',
        color='red',
        linestyle='-',
    )
    figure1.add_subplot(ax1)
    plt.axvline(x=fc0, linewidth=0.5, color='k')
    if fc1 != None:
        plt.axvline(x=fc1, linewidth=0.5, color='k')
    figure1.add_subplot(ax2)
    plt.axvline(x=fc0, linewidth=0.5, color='k')
    if fc1 != None:
        plt.axvline(x=fc1, linewidth=0.5, color='k')
예제 #4
0
def operational_amplifier():
    circuit = Circuit('Operational Amplifier')
    # AC 1 PWL(0US 0V  0.01US 1V)
    circuit.SinusoidalVoltageSource('input',
                                    'in',
                                    circuit.gnd,
                                    amplitude=10000000 @ u_V)
    circuit.subcircuit(BasicOperationalAmplifier())
    circuit.X('op', 'BasicOperationalAmplifier', 'in', circuit.gnd, 'out')
    circuit.R('load', 'out', circuit.gnd, 470 @ u_Ω)
    circuit.R(
        'R1',
        'in',
        'out',
    )

    simulator = circuit.simulator(temperature=25, nominal_temperature=25)
    analysis = simulator.ac(start_frequency=1 @ u_Hz,
                            stop_frequency=100 @ u_MHz,
                            number_of_points=5,
                            variation='dec')
    plt.close('all')
    figure, (ax1, ax2) = plt.subplots(2, figsize=(20, 10))

    plt.title("Bode Diagram of an Operational Amplifier")
    bode_diagram(
        axes=(ax1, ax2),
        frequency=analysis.frequency,
        gain=20 * np.log10(np.absolute(analysis.out)),
        phase=np.angle(analysis.out, deg=False),
        marker='.',
        color='blue',
        linestyle='-',
    )

    return circuit, analysis, plt
예제 #5
0
quality_factor = 1 / R4.resistance * math.sqrt(inductance / capacitance)
print("Resonant frequency = {:.1f} Hz".format(resonant_frequency))
print("Factor of quality = {:.1f}".format(quality_factor))
# o#

#r# We plot the Bode diagram of the four filters.

figure = plt.figure(1, (20, 10))
plt.title("Bode Diagrams of RLC Filters")
axes = (plt.subplot(211), plt.subplot(212))
for out in ('out5', 'out1', 'out2', 'out4'):
    bode_diagram(
        axes=axes,
        frequency=analysis1.frequency,
        gain=20 * np.log10(np.absolute(analysis1[out])),
        phase=np.angle(analysis1[out], deg=False),
        marker='.',
        color='blue',
        linestyle='-',
    )
for axe in axes:
    axe.axvline(x=resonant_frequency, color='red')

####################################################################################################

# r# We define a pass-band RLC filter with a quality's factor of 4.

#f# circuit_macros('pass-band-rlc-filter.m4')

circuit2 = Circuit('Pass-Band RLC Filter')
_C=nano(100)

simulator = circuit.simulator()
enableLtSpice(simulator)

analysis = simulator.ac(start_frequency=10, stop_frequency=kilo(1), number_of_points=200,  variation='dec') 

print('Simulated, Bode plotting...')

figure1 = plt.figure(1, (20, 10))
plt.title("Bode Diagram of a Low-Pass RC Filter")
bode_diagram(axes=(plt.subplot(211), plt.subplot(212)),
             frequency=analysis.frequency,
             gain=20*np.log10(np.absolute(analysis.out50)),
             phase=np.angle(analysis.out50, deg=False),
             marker='',
             color='blue',
             linestyle='-',
         )
bode_diagram(axes=(plt.subplot(211), plt.subplot(212)),
             frequency=analysis.frequency,
             gain=20*np.log10(np.absolute(analysis.out150)),
             phase=np.angle(analysis.out150, deg=False),
             marker='',
             color='green',
             linestyle='-',
         )
bode_diagram(axes=(plt.subplot(211), plt.subplot(212)),
             frequency=analysis.frequency,
             gain=20*np.log10(np.absolute(analysis.out250)),
             phase=np.angle(analysis.out250, deg=False),
예제 #7
0
    print(str(my_netlist.circuit))

    simulator = my_netlist.circuit.simulator(temperature=25,
                                             nominal_temperature=25)
    analysis = simulator.ac(start_frequency=10 @ u_Hz,
                            stop_frequency=20 @ u_kHz,
                            number_of_points=200,
                            variation='dec')

    figure = plt.figure(1, (20, 10))
    plt.title("Bode Diagram of an Operational Amplifier")
    bode_diagram(
        axes=(plt.subplot(211), plt.subplot(212)),
        frequency=analysis.frequency,
        gain=20 * np.log10(np.absolute(analysis.op02_out)),
        phase=np.angle(analysis.op02_out, deg=False),
        marker='.',
        color='blue',
        linestyle='-',
    )
    bode_diagram(
        axes=(plt.subplot(211), plt.subplot(212)),
        frequency=analysis.frequency,
        gain=20 * np.log10(np.absolute(analysis.output)),
        phase=np.angle(analysis.output, deg=False),
        marker='.',
        color='red',
        linestyle='-',
    )
    plt.tight_layout()
    plt.show()
예제 #8
0
resonant_frequency = 1 / (2 * math.pi * math.sqrt(inductance * capacitance))
quality_factor = 1 / R4.resistance * math.sqrt(inductance / capacitance)
print("Resonant frequency = {:.1f} Hz".format(resonant_frequency))
print("Factor of quality = {:.1f}".format(quality_factor))
#o#

#r# We plot the Bode diagram of the four filters.

figure = plt.figure(1, (20, 10))
plt.title("Bode Diagrams of RLC Filters")
axes = (plt.subplot(211), plt.subplot(212))
for out in ('out5', 'out1', 'out2', 'out4'):
    bode_diagram(axes=axes,
                 frequency=analysis1.frequency,
                 gain=20*np.log10(np.absolute(analysis1[out])),
                 phase=np.angle(analysis1[out], deg=False),
                 marker='.',
                 color='blue',
                 linestyle='-',
    )
for axe in axes:
    axe.axvline(x=resonant_frequency, color='red')

####################################################################################################

#r# We define a pass-band RLC filter with a quality's factor of 4.

#f# circuit_macros('pass-band-rlc-filter.m4')

circuit2 = Circuit('Pass-Band RLC Filter')

circuit2.SinusoidalVoltageSource('input', 'in', circuit2.gnd, amplitude=1@u_V)
예제 #9
0
#enableLtSpice(simulator, spice_command='/Applications/LTspice.app/Contents/MacOS/LTspice')

analysis = simulator.ac(start_frequency=10 @ u_Hz,
                        stop_frequency=5 @ u_kHz,
                        number_of_points=500,
                        variation='dec')

print('Simulated, Bode plotting...')

figure1 = plt.figure(1, (20, 10))
plt.title("Bode Diagram of a Low-Pass RC Filter")
bode_diagram(
    axes=(plt.subplot(211), plt.subplot(212)),
    frequency=analysis.frequency,
    gain=20 * np.log10(np.absolute(analysis.out50)),
    #gain=np.absolute(analysis.out50),
    phase=np.angle(analysis.out50, deg=False),
    marker='',
    color='blue',
    linestyle='-',
)
bode_diagram(
    axes=(plt.subplot(211), plt.subplot(212)),
    frequency=analysis.frequency,
    gain=20 * np.log10(np.absolute(analysis.out350)),
    #gain=np.absolute(analysis.out2),
    phase=np.angle(analysis.out350, deg=False),
    marker='',
    color='red',
    linestyle='-',
)
bode_diagram(
예제 #10
0
circuit = Circuit('Operational Amplifier')

# AC 1 PWL(0US 0V  0.01US 1V)
circuit.SinusoidalVoltageSource('input', 'in', circuit.gnd, amplitude=1 @ u_V)
circuit.subcircuit(BasicOperationalAmplifier())
circuit.X('op', 'BasicOperationalAmplifier', 'in', circuit.gnd, 'out')
circuit.R('load', 'out', circuit.gnd, 470 @ u_Ω)

simulator = circuit.simulator(temperature=25, nominal_temperature=25)
analysis = simulator.ac(start_frequency=1 @ u_Hz,
                        stop_frequency=100 @ u_MHz,
                        number_of_points=5,
                        variation='dec')

figure, (ax1, ax2) = plt.subplots(2, figsize=(20, 10))

plt.title("Bode Diagram of an Operational Amplifier")
bode_diagram(
    axes=(ax1, ax2),
    frequency=analysis.frequency,
    gain=20 * np.log10(np.absolute(analysis.out)),
    phase=np.angle(analysis.out, deg=False),
    marker='.',
    color='blue',
    linestyle='-',
)
plt.tight_layout()
plt.show()

#f# save_figure('figure', 'operational-amplifier.png')
예제 #11
0
circuit.Sinusoidal("input", "in", circuit.gnd, amplitude=1)
circuit.R("f", "in", "out", kilo(1))
circuit.C("f", "out", circuit.gnd, micro(1))

simulator = circuit.simulator(temperature=25, nominal_temperature=25)
analysis = simulator.ac(start_frequency=1, stop_frequency=mega(1), number_of_points=10, variation="dec")

print(analysis.out)

figure = plt.figure(1, (20, 10))
plt.title("Bode Diagram of a Low-Pass RC Filter")
bode_diagram(
    axes=(plt.subplot(211), plt.subplot(212)),
    frequency=analysis.frequency,
    gain=20 * np.log10(np.absolute(analysis.out)),
    phase=np.angle(analysis.out, deg=False),
    marker=".",
    color="blue",
    linestyle="-",
)
plt.tight_layout()
plt.show()
# fig# save_figure(figure, 'low-pass-rc-filter.png')

####################################################################################################
#
# End
#
####################################################################################################
예제 #12
0
circuit.R(3, 'in', 6, 50)
circuit.L(3, 6, 7, milli(10))
circuit.C(3, 7, circuit.gnd, micro(1))
# Q = 4
circuit.R(4, 'in', 8, 25)
circuit.L(4, 8, 9, milli(10))
circuit.C(4, 9, circuit.gnd, micro(1))

simulator = circuit.simulator(temperature=25, nominal_temperature=25)
analysis = simulator.ac(start_frequency=100, stop_frequency=kilo(10), number_of_points=100,  variation='dec')

figure = plt.figure(1, (20, 10))
plt.title("Bode Diagram of a Low-Pass RLC Filter")
bode_diagram(axes=(plt.subplot(211), plt.subplot(212)),
             frequency=analysis.frequency,
             gain=20*np.log10(np.absolute(analysis['4'])),
             phase=np.angle(analysis['4'], deg=False),
             marker='.',
             color='blue',
             linestyle='-',
            )
plt.tight_layout()
plt.show()
#fig# save_figure(figure, 'low-pass-rlc-filter.png')

####################################################################################################
#
# End
#
####################################################################################################