This is ug.flt.c in view mode; [Download] [Up]
/* Second-Order Filter */
/* y[i] = gain * (a0*x[i] - a1*x[i-1] - a2*x[i-2] + b1*y[i-1] + b2*y[i-2]) */
#include "mm.head.h"
#include "ug.head.h"
#define IN 1
#define GAIN 2
#define A0 3
#define A1 4
#define A2 5
#define B1 6
#define B2 7
#define XM1 8
#define XM2 9
#define YM1 10
#define YM2 11
int flt_bug = -1;
flt
UGHEAD{
UGINIT;
UGLOOP{
if (flt_bug > 0) {
if (flt_bug > 1) fprintf(stderr, "O%3.3f G%3.3f 0A%3.3f 0X%3.3f 1A%3.3f 1X%3.3f 2A%3.3f 2X%3.3f 1B%3.3f 1Y%3.3f 2B%3.3f 2Y%3.3f\n", VAL(OUT) , VAL(GAIN), VAL(A0), VAL(IN), VAL(A1), VAL(XM1), VAL(A2), VAL(XM2), VAL(B1), VAL(YM1), VAL(B2), VAL(YM2));
VAL(OUT) = VAL(GAIN) * (VAL(A0) * VAL(IN) + VAL(A1) * VAL(XM1) + VAL(A2) * VAL(XM2) + VAL(B1) * VAL(YM1) + VAL(B2) * VAL(YM2));
VAL(YM2) = VAL(YM1);
VAL(YM1) = VAL(OUT);
VAL(XM2) = VAL(XM1);
VAL(XM1) = VAL(IN);
} else {
double out, gain, a0, in, a1, xm1, a2, xm2, b1, ym1, b2, ym2;
gain = VAL(GAIN);
in = VAL(IN);
a0 = VAL(A0);
a1 = VAL(A1);
a2 = VAL(A2);
b1 = VAL(B1);
b2 = VAL(B2);
if (flt_bug < -1) fprintf(stderr, "O%3.3f G%3.3f 0A%3.3f 0X%3.3f 1A%3.3f 1X%3.3f 2A%3.3f 2X%3.3f 1B%3.3f 1Y%3.3f 2B%3.3f 2Y%3.3f\n", out , gain , a0 , in , a1 , xm1 , a2 , xm2 , b1 , ym1 , b2 , ym2);
out = gain * ( a0 * in + a1 * xm1 + a2 * xm2 + b1 * ym1 + b2 * ym2);
ym2 = VAL(YM2) = VAL(YM1) = ym1;
ym1 = VAL(YM1) = VAL(OUT) = out;
xm2 = VAL(XM2) = VAL(XM1) = xm1;
xm1 = VAL(XM1) = in;
}
UGEND(0)
}
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.