def __init__(self): '''Create the components''' super(ControlStep, self).__init__() # Simulation time in seconds T = 120 freq = 50 dt = 1.0 / freq p = 4.0 * 2 * scipy.pi # Defines the system transfer function (Numerator, Denominator) sys = scipy.signal.lti(p, [1, p]) # Simulate the output of the system based on input u and time t yo = scipy.signal.lsim(sys, u, t) wires = MakeChans(5) # Create a time vector src = Constant(wires[0], value=0, resolution=freq, simulation_time=T) # Create the signal source signal = Step(wires[1], switch_time=60, resolution=50, simulation_time=120) dst = Plotter(wires[0]) dst2 = Plotter(wires[1]) self.components = [src, dst, dst2, signal]
def __init__(self): '''Run the simulation''' super(RandomPlot, self).__init__() connection = Channel() src = RandomSource(connection) dst = Plotter(connection) self.components = [src, dst]
def __init__(self): chan1, chan2, chan3 = MakeChans(3) src1 = Ramp(chan1) src2 = CTSinGenerator(chan2, amplitude=1.0, freq=1.0) summer = Summer([chan1, chan2], chan3) dst = Plotter(chan3, title="Sin+Ramp") self.components = [src1, src2, summer, dst]
def __init__(self): '''Create the components''' super(RampPlot, self).__init__() connection = Channel() src = Ramp(connection) dst = Plotter(connection, xlabel='Time (s)', ylabel='Amplitude', title='Ramp Plot') self.components = [src, dst]
def __init__(self): '''Setup the sim''' super(RampGainPlot, self).__init__() ramp2gain = Channel() gain2plot = Channel() src = Ramp(ramp2gain) filt = Proportional(ramp2gain, gain2plot) dst = Plotter(gain2plot) self.components = [src, filt, dst]
def __init__(self): ''' A basic simulation that sums two (default) Ramp sources together and plots the combined output. ''' connection1, connection2, connection3 = MakeChans(3) src1 = Ramp(connection1) src2 = Ramp(connection2) summer = Summer([connection1, connection2], connection3) dst = Plotter(connection3, title="Double Ramp Sum") self.components = [src1, src2, summer, dst]
def __init__(self, res=10, simulation_length=40): super(DelayedRampSum, self).__init__() conns = MakeChans(5) src1 = Ramp(conns[0], resolution=res, simulation_time=simulation_length) src2 = Ramp(conns[1], resolution=res, simulation_time=simulation_length) src3 = RandomSource(conns[2], resolution=res, simulation_time=simulation_length) # The following "magic number" is one time step, (1/res) # the delay must be an integer factor of this so the events line up # for the summer block to work... time_step = 1.0 / res delay1 = Delay(conns[1], conns[4], 3 * time_step) summer = Summer([conns[0], conns[4], conns[2]], conns[3]) dst = Plotter(conns[3]) self.components = [src1, src2, src3, summer, dst, delay1]
def __init__(self): ct_wires = MakeChans(5, 'CT') dt_wires = MakeChans(11, 'DT') # Initial condition dt_wires[7].put(Event(0,0)) self.components = [ # Continuous-Time signal source CTSinGenerator(ct_wires[0], simulation_time=3, timestep=0.003), CTSinGenerator(ct_wires[1], amplitude = 0.3, freq = 10, simulation_time=3), Summer(inputs = [ct_wires[0], ct_wires[1]], output_channel = ct_wires[2]), Split(ct_wires[2], [ct_wires[3], ct_wires[4]]), Plotter(ct_wires[3], title="CT signal", xlabel="t", ylabel="value", refresh_rate=5), # Tag-conversion actor Ct2Dt(ct_wires[4], dt_wires[0], 30), # Discrete-time system Split(dt_wires[0], [dt_wires[1], dt_wires[2]]), StemPlotter(dt_wires[1], title="Original DT signal", refresh_rate=5, xlabel="n", ylabel="value"), # The filter: y[n] = x[n] + 0.7x[n-1] + 0.7y[n-1] Summer(inputs = [dt_wires[2], dt_wires[8]], output_channel = dt_wires[3]), Split(dt_wires[3], [dt_wires[4], dt_wires[5]]), Delay(dt_wires[4], dt_wires[6], wait=1), Gain(dt_wires[6], dt_wires[7], gain = 0.7), Split(dt_wires[7], [dt_wires[8], dt_wires[9]]), Summer(inputs = [dt_wires[5], dt_wires[9]], output_channel = dt_wires[10]), # Plot StemPlotter(dt_wires[10], title="Filtered DT signal", refresh_rate=5, xlabel="n", ylabel="value"), ]
def __init__(self): '''Setup the simulation''' super(SumSinPlot, self).__init__() connection1 = Channel(domain="CT") connection2 = Channel(domain="CT") connection3 = Channel() # 2 Hz, 90 degree phase src1 = CTSinGenerator(connection1, 2, 2.0, numpy.pi / 2, timestep=0.001) # 4 Hz, 45 degree phase, different timestep src2 = CTSinGenerator(connection2, 1, 3.5, numpy.pi / 4, timestep=0.005) summer = Summer([connection1, connection2], connection3) dst = Plotter(connection3, refresh_rate=50) self.components = [src1, src2, summer, dst]
def __init__(self, simulation_length=0.02, simulation_resolution=10000): self.sim_time = simulation_length self.sim_res = simulation_resolution wire_names = [ 'ramp', 'sin', 'const_offset', 'offset_sin', 'ramp_probe', 'ramp_plot', 'offset_sin_probe', 'sin_plot', 'diff', 'pwm_bool', 'on_value', 'off_value', 'pwm_value' ] wires = MakeNamedChans(wire_names) ramp_src = Ramp(wires['ramp_probe'], freq=500, simulation_time=self.sim_time, resolution=self.sim_res) sin_src = CTSinGenerator(wires['sin'], amplitude=0.5, freq=50.0, phi=0.0, timestep=1.0 / self.sim_res, simulation_time=self.sim_time) const_src = Constant(wires['const_offset'], 0.5, resolution=self.sim_res, simulation_time=self.sim_time) offset_sin_sum = Summer([wires['sin'], wires['const_offset']], wires['offset_sin_probe']) ramp_cloning_probe = Split(wires['ramp_probe'], [wires['ramp'], wires['ramp_plot']]) ramp_plotter = Plotter(wires['ramp_plot']) sin_cloning_probe = Split(wires['offset_sin_probe'], [wires['offset_sin'], wires['sin_plot']]) sin_plotter = Plotter(wires['sin_plot']) # Output = sin - ramp subtractor = Summer([wires['offset_sin'], (wires['ramp'], '-')], wires['diff']) # Want to see when that is > 0 comparison = GreaterThan(wires['diff'], wires['pwm_bool'], threshold=0.0, boolean_output=True) if_device = PassThrough(wires['pwm_bool'], wires['on_value'], wires['pwm_value'], else_data_input=wires['off_value']) output_value_on = Constant(wires['on_value'], 1.0, resolution=self.sim_res, simulation_time=self.sim_time) output_value_off = Constant(wires['off_value'], 0.0, resolution=self.sim_res, simulation_time=self.sim_time) pwm_plotter = Plotter(wires['pwm_value'], own_fig=True) self.components = [ ramp_src, sin_src, const_src, offset_sin_sum, ramp_cloning_probe, ramp_plotter, sin_cloning_probe, sin_plotter, subtractor, comparison, if_device, output_value_on, output_value_off, pwm_plotter ]