#define STEP_SIZE 			400

U0 LowPassFilterDemo()
{
	F64   y, y1, t, dt;
	CDC  *dc = DCAlias;

	WinBorder;
	WinMax;
	DocClear;

	dc->color = BLUE;
	GrLine(dc, 0, 0, 0, STEP_SIZE);
	GrLine(dc, 0, STEP_SIZE, GR_WIDTH / 2, STEP_SIZE);
	GrLine(dc, GR_WIDTH / 2, STEP_SIZE, GR_WIDTH / 2, 0);
	GrLine(dc, GR_WIDTH / 2, 0, GR_WIDTH, 0);
	PressAKey;

	dc->color = CYAN;
	t = 0;
	y = 0.0;
	while (t < GR_WIDTH)
	{
		dt = 1.0;
		if (t < GR_WIDTH / 2)
			y1 = STEP_SIZE - STEP_SIZE * Exp(-0.01 * t);
		else
			y1 = STEP_SIZE * Exp(-0.01 * (t - GR_WIDTH / 2));
		GrLine(dc, t, y, t + dt, y1);
		y = y1;
		t += dt;
	}
	PressAKey;

	dc->color = BLACK;
	t = 0;
	y = 0.0;
	while (t < GR_WIDTH)
	{
		dt = 1.0;
		if (t < GR_WIDTH / 2)
			y1 = 0.99 * y + .01 * STEP_SIZE;
		else
			y1 = 0.99 * y;
		GrLine(dc, t, y, t + dt, y1);
		y = y1;
		t += dt;
	}
	PressAKey;

	dc->color = RED;
	t = 0;
	y = 0.0;
	while (t < GR_WIDTH)
	{
		dt = Rand / 10;
		if (t < GR_WIDTH / 2)
			y1 = LowPass1(.01, y, STEP_SIZE, dt);
		else
			y1 = LowPass1(.01, y, 0, dt);
		GrLine(dc, t, y, t + dt, y1);
		y = y1;
		t += dt;
	}
	PressAKey;

	dc->color = GREEN;
	t = 0;
	y = 0.0;
	while (t < GR_WIDTH)
	{
		dt = Rand / 10;
		if (t < GR_WIDTH / 2)
			y1 = LowPass1(.1, y, STEP_SIZE, dt);
		else
			y1 = LowPass1(.1, y, 0, dt);
		GrLine(dc, t, y, t + dt, y1);
		y = y1;
		t += dt;
	}
	PressAKey;

	DCDel(dc);
	DCFill;
}

LowPassFilterDemo;
