FA-91391 / Digital signal filters / Open access
Steady-state priming forgets the b0 feedthrough in s1 · case 01
A primed lowpass fed a constant still shows a transient on its first sample.
ROOT CAUSE
The primed s1 is set to y_ss instead of y_ss - b0 x0.
VERIFIED REPAIR
Set s1 = y_ss - b0 x0 so that y[0] = y_ss.
Unsuccessful approach: The attempted repair subtracts b1 x0, the wrong coefficient.
Case contract
Input [[b0, b1, b2, a1, a2], samples, prime] (a0 = 1). Transposed direct form II: y = b0 x + s1; s1 = b1 x - a1 y + s2; s2 = b2 x - a2 y. If prime and samples exist, initialize s1, s2 to the steady state for a constant input equal to the first sample (y_ss = x0 (b0+b1+b2)/(1+a1+a2), "dc-pole" if the denominator is 0). Return exact fraction strings.
Why this case matters
Transposed DF-II is the default numerical form in filtering libraries, and steady-state priming avoids start-up transients.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
N = 1
observations = []
def solve(x):
b0, b1, b2, a1, a2 = [Fraction(v) for v in x[0]]
xs, prime = x[1], x[2]
s1 = s2 = Fraction(0)
if prime and xs:
den = 1 + a1 + a2
if den == 0:
return 'dc-pole'
x0 = xs[0]
yss = x0 * (b0 + b1 + b2) / den
s1 = yss
s2 = b2 * x0 - a2 * yss
out = []
for v in xs:
y = b0 * v + s1
s1 = b1 * v - a1 * y + s2
s2 = b2 * v - a2 * y
out.append(str(y))
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression: primed step lowpass', [['1/4', '1/2', '1/4', '-1/2', '1/4'], [2, 2, 2, 2], True], ['8/3', '8/3', '8/3', '8/3']], ['regression: primed highpass', [['1', '-2', '1', '0', '0'], [3, 3, 1], True], ['0', '0', '-2']], ['regression: random df2t 2', [['3/4', '-1/4', '1/2', '1/8', '-1/2'], [-2, 2], True], ['-16/5', '-1/5']], ['control: dc pole', [['1', '0', '0', '-2', '1'], [1, 1], True], 'dc-pole'], ['control: unprimed impulse', [['1', '1/2', '1/3', '1/2', '-1/4'], [1, 0, 0, 0], False], ['1', '0', '7/12', '-7/24']], ['control: primed empty', [['1', '0', '0', '0', '0'], [], True], []], ['control: random df2t 0', [['5/4', '1/3', '3/4', '-1/2', '2'], [-1, 2, 4, 4, 1], False], ['-5/4', '37/24', '131/16', '283/32', '-1223/192']]], [['regression: random df2t 4', [['-1/2', '-3/8', '0', '0', '1/3'], [-3], True], ['63/32']], ['regression: random df2t 5', [['-3/8', '-1/4', '-1/4', '1/3', '-1/4'], [2], True], ['-21/13']], ['regression: random df2t 2', [['3/4', '-1/4', '1/2', '1/8', '-1/2'], [-2, 2], True], ['-16/5', '-1/5']], ['control: random df2t 1', [['-1/4', '-1/2', '0', '-1/2', '-3/8'], [-3, 3, 1, 2], False], ['3/4', '9/8', '-29/32', '-33/32']], ['control: random df2t 3', [['1/8', '3/4', '-3/8', '-1/2', '1/8'], [2], False], ['1/4']], ['control: random df2t 6', [['0', '-1/2', '1/8', '3/4', '3/4'], [4, 4, 2, 4], False], ['0', '-2', '0', '1']], ['control: random df2t 9', [['-3/8', '0', '-1/2', '2', '5/4'], [3, -3, 3, 2], False], ['-9/8', '27/8', '-255/32', '399/32']]], [['regression: random df2t 8', [['-3/8', '2', '1/8', '1/3', '2'], [4, -3, -2, 1, 4], True], ['21/10', '189/40', '-421/40', '-1283/120', '8951/360']], ['regression: random df2t 16', [['5/4', '1/8', '1/8', '-3/8', '1/3'], [-2, 2, 3], True], ['-72/23', '43/23', '1011/184']], ['regression: random df2t 5', [['-3/8', '-1/4', '-1/4', '1/3', '-1/4'], [2], True], ['-21/13']], ['control: random df2t 10', [['1/8', '1/3', '-1/4', '1/3', '1/8'], [1, -1, 2, 3, 3], False], ['1/8', '1/6', '-233/576', '2429/1728', '18953/41472']], ['control: random df2t 11', [['1/8', '1/8', '5/4', '-3/8', '1/2'], [0], True], ['0']], ['control: random df2t 12', [['-1/2', '5/4', '-1/4', '5/4', '-1/4'], [0, 0], False], ['0', '0']], ['control: random df2t 13', [['-1/4', '-1/4', '1/2', '5/4', '0'], [2, -3, -1, 3, -3], False], ['-1/2', '7/8', '29/32', '-401/128', '1749/512']]], [['regression: random df2t 22', [['1/3', '-3/8', '1/3', '0', '5/4'], [4], True], ['14/27']], ['regression: random df2t 25', [['-1/4', '1/3', '1/3', '0', '1/8'], [-1, 3, -1, 0], True], ['-10/27', '-37/27', '26/27', '181/216']], ['regression: random df2t 8', [['-3/8', '2', '1/8', '1/3', '2'], [4, -3, -2, 1, 4], True], ['21/10', '189/40', '-421/40', '-1283/120', '8951/360']], ['control: random df2t 14', [['1/3', '2', '1/2', '1/2', '5/4'], [0, -2], True], ['0', '-2/3']], ['control: random df2t 15', [['-1/4', '2', '-1/2', '1/2', '1/2'], [4], False], ['-1']], ['control: random df2t 19', [['-1/4', '1/3', '1/8', '1/3', '1/8'], [0, 1, -3], True], ['0', '-1/4', '7/6']], ['control: random df2t 20', [['5/4', '0', '5/4', '-1/2', '-1/2'], [-3, 1], True], 'dc-pole']], [['regression: random df2t 33', [['1/8', '3/4', '1/2', '5/4', '1/2'], [4, -2, 1, 4, 1], True], ['2', '5/4', '-31/16', '131/64', '521/256']], ['regression: random df2t 44', [['3/4', '1/3', '1/2', '-1/4', '3/4'], [3, 4], True], ['19/6', '47/12']], ['regression: random df2t 17', [['2', '-1/2', '3/4', '-1/4', '-3/8'], [-1, 1], True], ['-6', '-2']], ['control: random df2t 21', [['1/2', '1/8', '-1/4', '-1/4', '3/4'], [2, 0, 3, -3], False], ['1', '1/2', '3/8', '-45/32']], ['control: random df2t 23', [['3/4', '0', '-1/2', '-1/2', '0'], [3, 0, 3], False], ['9/4', '9/8', '21/16']], ['control: random df2t 24', [['2', '0', '-1/4', '1/8', '2'], [1, 0], False], ['2', '-1/4']], ['control: random df2t 27', [['-1/4', '2', '2', '3/4', '-3/8'], [-1, 3, 1], False], ['1/4', '-47/16', '387/64']]]]
for label, args, expected in fixtures[N-1]:
check(label, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: primed step lowpass | ['19/6', '35/12', '8/3', '125/48'] | ['8/3', '8/3', '8/3', '8/3'] | Failed |
| regression: primed highpass | ['3', '0', '-2'] | ['0', '0', '-2'] | Failed |
| regression: random df2t 2 | ['-47/10', '-1/80'] | ['-16/5', '-1/5'] | Failed |
| control: dc pole | dc-pole | dc-pole | Passed |
| control: unprimed impulse | ['1', '0', '7/12', '-7/24'] | ['1', '0', '7/12', '-7/24'] | Passed |
| control: primed empty | [] | [] | Passed |
| control: random df2t 0 | ['-5/4', '37/24', '131/16', '283/32', '-1223/192'] | ['-5/4', '37/24', '131/16', '283/32', '-1223/192'] | Passed |
SHA-256 / d204168a0adf02397f08f6443309348da075f900fc434295c1f8e70ca50c3ca7
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
N = 1
observations = []
def solve(x):
b0, b1, b2, a1, a2 = [Fraction(v) for v in x[0]]
xs, prime = x[1], x[2]
s1 = s2 = Fraction(0)
if prime and xs:
den = 1 + a1 + a2
if den == 0:
return 'dc-pole'
x0 = xs[0]
yss = x0 * (b0 + b1 + b2) / den
s1 = yss - b1 * x0
s2 = b2 * x0 - a2 * yss
out = []
for v in xs:
y = b0 * v + s1
s1 = b1 * v - a1 * y + s2
s2 = b2 * v - a2 * y
out.append(str(y))
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression: primed step lowpass', [['1/4', '1/2', '1/4', '-1/2', '1/4'], [2, 2, 2, 2], True], ['8/3', '8/3', '8/3', '8/3']], ['regression: primed highpass', [['1', '-2', '1', '0', '0'], [3, 3, 1], True], ['0', '0', '-2']], ['regression: random df2t 2', [['3/4', '-1/4', '1/2', '1/8', '-1/2'], [-2, 2], True], ['-16/5', '-1/5']], ['control: dc pole', [['1', '0', '0', '-2', '1'], [1, 1], True], 'dc-pole'], ['control: unprimed impulse', [['1', '1/2', '1/3', '1/2', '-1/4'], [1, 0, 0, 0], False], ['1', '0', '7/12', '-7/24']], ['control: primed empty', [['1', '0', '0', '0', '0'], [], True], []], ['control: random df2t 0', [['5/4', '1/3', '3/4', '-1/2', '2'], [-1, 2, 4, 4, 1], False], ['-5/4', '37/24', '131/16', '283/32', '-1223/192']]], [['regression: random df2t 4', [['-1/2', '-3/8', '0', '0', '1/3'], [-3], True], ['63/32']], ['regression: random df2t 5', [['-3/8', '-1/4', '-1/4', '1/3', '-1/4'], [2], True], ['-21/13']], ['regression: random df2t 2', [['3/4', '-1/4', '1/2', '1/8', '-1/2'], [-2, 2], True], ['-16/5', '-1/5']], ['control: random df2t 1', [['-1/4', '-1/2', '0', '-1/2', '-3/8'], [-3, 3, 1, 2], False], ['3/4', '9/8', '-29/32', '-33/32']], ['control: random df2t 3', [['1/8', '3/4', '-3/8', '-1/2', '1/8'], [2], False], ['1/4']], ['control: random df2t 6', [['0', '-1/2', '1/8', '3/4', '3/4'], [4, 4, 2, 4], False], ['0', '-2', '0', '1']], ['control: random df2t 9', [['-3/8', '0', '-1/2', '2', '5/4'], [3, -3, 3, 2], False], ['-9/8', '27/8', '-255/32', '399/32']]], [['regression: random df2t 8', [['-3/8', '2', '1/8', '1/3', '2'], [4, -3, -2, 1, 4], True], ['21/10', '189/40', '-421/40', '-1283/120', '8951/360']], ['regression: random df2t 16', [['5/4', '1/8', '1/8', '-3/8', '1/3'], [-2, 2, 3], True], ['-72/23', '43/23', '1011/184']], ['regression: random df2t 5', [['-3/8', '-1/4', '-1/4', '1/3', '-1/4'], [2], True], ['-21/13']], ['control: random df2t 10', [['1/8', '1/3', '-1/4', '1/3', '1/8'], [1, -1, 2, 3, 3], False], ['1/8', '1/6', '-233/576', '2429/1728', '18953/41472']], ['control: random df2t 11', [['1/8', '1/8', '5/4', '-3/8', '1/2'], [0], True], ['0']], ['control: random df2t 12', [['-1/2', '5/4', '-1/4', '5/4', '-1/4'], [0, 0], False], ['0', '0']], ['control: random df2t 13', [['-1/4', '-1/4', '1/2', '5/4', '0'], [2, -3, -1, 3, -3], False], ['-1/2', '7/8', '29/32', '-401/128', '1749/512']]], [['regression: random df2t 22', [['1/3', '-3/8', '1/3', '0', '5/4'], [4], True], ['14/27']], ['regression: random df2t 25', [['-1/4', '1/3', '1/3', '0', '1/8'], [-1, 3, -1, 0], True], ['-10/27', '-37/27', '26/27', '181/216']], ['regression: random df2t 8', [['-3/8', '2', '1/8', '1/3', '2'], [4, -3, -2, 1, 4], True], ['21/10', '189/40', '-421/40', '-1283/120', '8951/360']], ['control: random df2t 14', [['1/3', '2', '1/2', '1/2', '5/4'], [0, -2], True], ['0', '-2/3']], ['control: random df2t 15', [['-1/4', '2', '-1/2', '1/2', '1/2'], [4], False], ['-1']], ['control: random df2t 19', [['-1/4', '1/3', '1/8', '1/3', '1/8'], [0, 1, -3], True], ['0', '-1/4', '7/6']], ['control: random df2t 20', [['5/4', '0', '5/4', '-1/2', '-1/2'], [-3, 1], True], 'dc-pole']], [['regression: random df2t 33', [['1/8', '3/4', '1/2', '5/4', '1/2'], [4, -2, 1, 4, 1], True], ['2', '5/4', '-31/16', '131/64', '521/256']], ['regression: random df2t 44', [['3/4', '1/3', '1/2', '-1/4', '3/4'], [3, 4], True], ['19/6', '47/12']], ['regression: random df2t 17', [['2', '-1/2', '3/4', '-1/4', '-3/8'], [-1, 1], True], ['-6', '-2']], ['control: random df2t 21', [['1/2', '1/8', '-1/4', '-1/4', '3/4'], [2, 0, 3, -3], False], ['1', '1/2', '3/8', '-45/32']], ['control: random df2t 23', [['3/4', '0', '-1/2', '-1/2', '0'], [3, 0, 3], False], ['9/4', '9/8', '21/16']], ['control: random df2t 24', [['2', '0', '-1/4', '1/8', '2'], [1, 0], False], ['2', '-1/4']], ['control: random df2t 27', [['-1/4', '2', '2', '3/4', '-3/8'], [-1, 3, 1], False], ['1/4', '-47/16', '387/64']]]]
for label, args, expected in fixtures[N-1]:
check(label, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: primed step lowpass | ['13/6', '29/12', '8/3', '131/48'] | ['8/3', '8/3', '8/3', '8/3'] | Failed |
| regression: primed highpass | ['9', '0', '-2'] | ['0', '0', '-2'] | Failed |
| regression: random df2t 2 | ['-26/5', '1/20'] | ['-16/5', '-1/5'] | Failed |
| control: dc pole | dc-pole | dc-pole | Passed |
| control: unprimed impulse | ['1', '0', '7/12', '-7/24'] | ['1', '0', '7/12', '-7/24'] | Passed |
| control: primed empty | [] | [] | Passed |
| control: random df2t 0 | ['-5/4', '37/24', '131/16', '283/32', '-1223/192'] | ['-5/4', '37/24', '131/16', '283/32', '-1223/192'] | Passed |
SHA-256 / 06452350630b23e888297f5da197731573e4045617f368d356bc65fadbd3adb9
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
N = 1
observations = []
def solve(x):
b0, b1, b2, a1, a2 = [Fraction(v) for v in x[0]]
xs, prime = x[1], x[2]
s1 = s2 = Fraction(0)
if prime and xs:
den = 1 + a1 + a2
if den == 0:
return 'dc-pole'
x0 = xs[0]
yss = x0 * (b0 + b1 + b2) / den
s1 = yss - b0 * x0
s2 = b2 * x0 - a2 * yss
out = []
for v in xs:
y = b0 * v + s1
s1 = b1 * v - a1 * y + s2
s2 = b2 * v - a2 * y
out.append(str(y))
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression: primed step lowpass', [['1/4', '1/2', '1/4', '-1/2', '1/4'], [2, 2, 2, 2], True], ['8/3', '8/3', '8/3', '8/3']], ['regression: primed highpass', [['1', '-2', '1', '0', '0'], [3, 3, 1], True], ['0', '0', '-2']], ['regression: random df2t 2', [['3/4', '-1/4', '1/2', '1/8', '-1/2'], [-2, 2], True], ['-16/5', '-1/5']], ['control: dc pole', [['1', '0', '0', '-2', '1'], [1, 1], True], 'dc-pole'], ['control: unprimed impulse', [['1', '1/2', '1/3', '1/2', '-1/4'], [1, 0, 0, 0], False], ['1', '0', '7/12', '-7/24']], ['control: primed empty', [['1', '0', '0', '0', '0'], [], True], []], ['control: random df2t 0', [['5/4', '1/3', '3/4', '-1/2', '2'], [-1, 2, 4, 4, 1], False], ['-5/4', '37/24', '131/16', '283/32', '-1223/192']]], [['regression: random df2t 4', [['-1/2', '-3/8', '0', '0', '1/3'], [-3], True], ['63/32']], ['regression: random df2t 5', [['-3/8', '-1/4', '-1/4', '1/3', '-1/4'], [2], True], ['-21/13']], ['regression: random df2t 2', [['3/4', '-1/4', '1/2', '1/8', '-1/2'], [-2, 2], True], ['-16/5', '-1/5']], ['control: random df2t 1', [['-1/4', '-1/2', '0', '-1/2', '-3/8'], [-3, 3, 1, 2], False], ['3/4', '9/8', '-29/32', '-33/32']], ['control: random df2t 3', [['1/8', '3/4', '-3/8', '-1/2', '1/8'], [2], False], ['1/4']], ['control: random df2t 6', [['0', '-1/2', '1/8', '3/4', '3/4'], [4, 4, 2, 4], False], ['0', '-2', '0', '1']], ['control: random df2t 9', [['-3/8', '0', '-1/2', '2', '5/4'], [3, -3, 3, 2], False], ['-9/8', '27/8', '-255/32', '399/32']]], [['regression: random df2t 8', [['-3/8', '2', '1/8', '1/3', '2'], [4, -3, -2, 1, 4], True], ['21/10', '189/40', '-421/40', '-1283/120', '8951/360']], ['regression: random df2t 16', [['5/4', '1/8', '1/8', '-3/8', '1/3'], [-2, 2, 3], True], ['-72/23', '43/23', '1011/184']], ['regression: random df2t 5', [['-3/8', '-1/4', '-1/4', '1/3', '-1/4'], [2], True], ['-21/13']], ['control: random df2t 10', [['1/8', '1/3', '-1/4', '1/3', '1/8'], [1, -1, 2, 3, 3], False], ['1/8', '1/6', '-233/576', '2429/1728', '18953/41472']], ['control: random df2t 11', [['1/8', '1/8', '5/4', '-3/8', '1/2'], [0], True], ['0']], ['control: random df2t 12', [['-1/2', '5/4', '-1/4', '5/4', '-1/4'], [0, 0], False], ['0', '0']], ['control: random df2t 13', [['-1/4', '-1/4', '1/2', '5/4', '0'], [2, -3, -1, 3, -3], False], ['-1/2', '7/8', '29/32', '-401/128', '1749/512']]], [['regression: random df2t 22', [['1/3', '-3/8', '1/3', '0', '5/4'], [4], True], ['14/27']], ['regression: random df2t 25', [['-1/4', '1/3', '1/3', '0', '1/8'], [-1, 3, -1, 0], True], ['-10/27', '-37/27', '26/27', '181/216']], ['regression: random df2t 8', [['-3/8', '2', '1/8', '1/3', '2'], [4, -3, -2, 1, 4], True], ['21/10', '189/40', '-421/40', '-1283/120', '8951/360']], ['control: random df2t 14', [['1/3', '2', '1/2', '1/2', '5/4'], [0, -2], True], ['0', '-2/3']], ['control: random df2t 15', [['-1/4', '2', '-1/2', '1/2', '1/2'], [4], False], ['-1']], ['control: random df2t 19', [['-1/4', '1/3', '1/8', '1/3', '1/8'], [0, 1, -3], True], ['0', '-1/4', '7/6']], ['control: random df2t 20', [['5/4', '0', '5/4', '-1/2', '-1/2'], [-3, 1], True], 'dc-pole']], [['regression: random df2t 33', [['1/8', '3/4', '1/2', '5/4', '1/2'], [4, -2, 1, 4, 1], True], ['2', '5/4', '-31/16', '131/64', '521/256']], ['regression: random df2t 44', [['3/4', '1/3', '1/2', '-1/4', '3/4'], [3, 4], True], ['19/6', '47/12']], ['regression: random df2t 17', [['2', '-1/2', '3/4', '-1/4', '-3/8'], [-1, 1], True], ['-6', '-2']], ['control: random df2t 21', [['1/2', '1/8', '-1/4', '-1/4', '3/4'], [2, 0, 3, -3], False], ['1', '1/2', '3/8', '-45/32']], ['control: random df2t 23', [['3/4', '0', '-1/2', '-1/2', '0'], [3, 0, 3], False], ['9/4', '9/8', '21/16']], ['control: random df2t 24', [['2', '0', '-1/4', '1/8', '2'], [1, 0], False], ['2', '-1/4']], ['control: random df2t 27', [['-1/4', '2', '2', '3/4', '-3/8'], [-1, 3, 1], False], ['1/4', '-47/16', '387/64']]]]
for label, args, expected in fixtures[N-1]:
check(label, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: primed step lowpass | ['8/3', '8/3', '8/3', '8/3'] | ['8/3', '8/3', '8/3', '8/3'] | Passed |
| regression: primed highpass | ['0', '0', '-2'] | ['0', '0', '-2'] | Passed |
| regression: random df2t 2 | ['-16/5', '-1/5'] | ['-16/5', '-1/5'] | Passed |
| control: dc pole | dc-pole | dc-pole | Passed |
| control: unprimed impulse | ['1', '0', '7/12', '-7/24'] | ['1', '0', '7/12', '-7/24'] | Passed |
| control: primed empty | [] | [] | Passed |
| control: random df2t 0 | ['-5/4', '37/24', '131/16', '283/32', '-1223/192'] | ['-5/4', '37/24', '131/16', '283/32', '-1223/192'] | Passed |
SHA-256 / 8166cf3deedb8d257ba1c1879a1bb11832252f0ddc306d5669402d6a1ad3732a
Verification & scope
A deterministic bounded teaching model with a stipulated toy contract; exact rational arithmetic or fixed-decimal rounding keeps outputs strict JSON. It is not a production DSP library and claims no standards conformance. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.
Observations recorded using Python 3.12.14 at 2026-09-29T14:51:35.588421+00:00.
Case digest / 9fae6ba8276d068f7220472c7595be841046d702726bc06644601567e297cdc7