#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;