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
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')
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')
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
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),
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()
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)
#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(
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')
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 # ####################################################################################################
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 # ####################################################################################################