Ejemplo n.º 1
0
    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]
Ejemplo n.º 2
0
    def __init__(self):
        '''Run the simulation'''
        super(RandomPlot, self).__init__()
        connection = Channel()
        src = RandomSource(connection)
        dst = Plotter(connection)

        self.components = [src, dst]
Ejemplo n.º 3
0
    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]
Ejemplo n.º 4
0
    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]
Ejemplo n.º 5
0
    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]
Ejemplo n.º 6
0
    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]
Ejemplo n.º 8
0
    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"),
        ]
Ejemplo n.º 9
0
    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]
Ejemplo n.º 10
0
    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
        ]