Пример #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()