float iirlpf(in, reset) float in; int reset; { float t; static float d1, d2; static float k = 0.125; /* 0 < k < 1 */ if (!reset) { t = d1; d1 += (d2 - in) * k; d2 -= (t + d2 * 2.0) * k; /* Q = 0.5 */ return d2; }else{ d1 = -2.0 * in; d2 = in; return d2; } } |
float iirlpf(in, reset) float in; int reset; { float t; static float d1, d2; static float k = 0.125; /* 0 < k < 1 */ if (!reset) { t = d1; d1 -= (d1 * 2.0 + in - d2) * k; /* Q = 0.5 */ d2 -= t * k; return d2; }else{ d1 = 0.0; d2 = in; return d2; } } |
float iirlpf(in, reset) float in; int reset; { static float r1, r2; static float k = 0.125; /* 0 < k < 1 */ if (!reset) { r2 += (r1 - r2) * k; r1 += (in - r1) * k; return r2; }else{ r2 = r1 = in; return r2; } } |
float iirlpf3(in, reset) float in; int reset; { float f; static float r1, r2, r3; static float k = 5.0 / 32.0; if (!reset) { f = r3; r3 += (r2 - 3.0 * f) * k; r2 += (r1 - 3.5 * f) * k; r1 += (in - f) * 1.5 * k; return r3; }else{ r1 = 3.5 * in; r2 = 3.0 * in; return r3 = in; } } |
3次状態変数型フィルタEXTERNAL LINKS
清水さんの xmbmon-2.04 - このプログラムではバイカッド型 LPF *fig.6 を使用している。