Пример #1
0
def aliases_figure(f0, fs):
    t = np.linspace(0, 1, 50*fs)
    y = np.sin(f0 * 2*np.pi * t)
    sig = Signal(t, y)
    alias_sig = Signal(t, y)

    fig = sig.get_fig(size=(1080,300),title="Aliases of {} Hz signal".format(f0))
    alias_sig.update_line_opts({'line_color' : 'orange', 'line_alpha': 1})
    alias_sig.create_line_renderer(fig)

    alias_x = np.linspace(0, 1, fs, endpoint=False)
    alias_y = np.sin(f0 * 2*np.pi * alias_x)
    alias_points = ColumnDataSource({
        'x' : alias_x,
        'y' : alias_y,
        'y0': np.zeros(alias_x.size)
    })
    fig.circle(x='x', y='y', source=alias_points, fill_color='red', line_width=3, line_color='red')
    fig.segment(x0='x', x1='x', y0='y0', y1='y', source=alias_points,line_width=3, line_color='red')
    handle = show(fig, notebook_handle=True)

    def frame_gen(fv):
        return {'y': np.sin(fv*2*np.pi*t)}

    anim_sets = []
    for k in range(1, 6):
        f_previous = f0 + (k-1)*fs
        f_alias = f0 + k*fs
        frame_values = np.linspace(f_previous, f_alias, 60)
        anim = FrameAnimation(alias_sig.data_source(), frame_gen, frame_values)
        anim_sets.append(AnimationSet([anim]))
        anim_sets.append(AnimationSet([Pause(1)]))

    AnimateSets(anim_sets, handle).run()
Пример #2
0
def scale_time(title='Time scaling', size=(400, 400), animated=False):
    frames = 50
    scale = 2*np.pi
    m = max(1, scale) + 0.5
    t = np.linspace(-m*2, m*2, 256)
    y = np.sin(2 * np.pi * t)

    sig1 = Signal(t, y)
    sig1.remove_view('spans')

    fig = sig1.get_fig(title=title, size=size, scale='2pi')

    marker_source = ColumnDataSource({'x':[1, 1], 'y': [0, 1]})
    marker_ref = fig.line(x=[1,1], y=[0,1], line_width=2,
                    line_color='purple', line_dash='dashed')
    marker = fig.line(x='x', y='y', source=marker_source,
                    line_width=2, line_color='purple')
    label = Label(x=1, y=1, text='1 second marker', render_mode='css')

    fig.add_layout(label)
    handle = show(fig, notebook_handle=True)

    if animated:
        def gen_marker_frame(frame_value):
            return {'x': [frame_value, frame_value]}

        def gen_sig_frame(frame_value):
            return {'x': t * frame_value}


        frame_values = np.linspace(1, scale, frames)
        a1 = FrameAnimation(marker_source, gen_marker_frame, frame_values)
        a2 = FrameAnimation(sig1.data_source(), gen_sig_frame, frame_values)
        aset = AnimationSet([a1, a2])
        AnimateSets([aset], handle, fps=25).run()

    else:
        ones = np.asarray([1, 1])
        def update(scale=1):
            marker_update = { 'x' : ones * scale }
            signal_update = { 'x' : t * scale }
            marker_source.data.update(marker_update)
            sig1.update(signal_update)
            push_notebook(handle=handle)

        interact(update, scale=(-1*np.pi, 2*np.pi))