FAILURE MAP
← Case archive

FA-91761 / Digital signal filters / Open access

DC blocker subtracts the feedback term · case 01

The pole sits at -R, producing an alternating tail instead of a slow decay.

Verified by executionVariant 1 · 7 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

The recursion uses - R y[n-1].

VERIFIED REPAIR

Use + R y[n-1].

Unsuccessful approach: The attempted repair uses + (1 - R) y[n-1], moving the pole away from the unit circle.

Case contract

Input [R, samples]: y[n] = x[n] - x[n-1] + R y[n-1] with 0 <= R < 1 ("bad-pole"), warm-started so x[-1] = x[0] and y[-1] = 0 (no start-up step). Return exact fraction strings.

Why this case matters

DC blockers remove offsets before further processing; a cold start injects a large transient.

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):
    R, xs = Fraction(x[0]), x[1]
    if not 0 <= R < 1:
        return 'bad-pole'
    if not xs:
        return []
    xp = xs[0]
    yp = Fraction(0)
    out = []
    for v in xs:
        y = v - xp - R * yp
        xp, yp = v, 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: step', ['1/2', [0, 4, 4, 4]], ['0', '4', '2', '1']], ['regression: random dc blocker 0', ['3/4', [-2, -1, 1, -3]], ['0', '1', '11/4', '-31/16']], ['repair check: pole zero', ['0', [1, 3, 2]], ['0', '2', '-1']], ['control: constant input warm start', ['9/10', [5, 5, 5]], ['0', '0', '0']], ['control: bad pole', ['1', [1]], 'bad-pole'], ['control: empty', ['1/2', []], []], ['control: random dc blocker 1', ['3/4', [-2, 2]], ['0', '4']]], [['regression: random dc blocker 3', ['9/10', [1, 4, -3, -3, 5, -2]], ['0', '3', '-43/10', '-387/100', '4517/1000', '-29347/10000']], ['regression: random dc blocker 4', ['3/4', [1, 2, 6, 0, -2]], ['0', '1', '19/4', '-39/16', '-245/64']], ['regression: random dc blocker 2', ['1/4', [-3, 0, 1, -3]], ['0', '3', '7/4', '-57/16']], ['control: random dc blocker 5', ['9/10', [2, 5]], ['0', '3']], ['control: random dc blocker 14', ['1/2', [2, 2]], ['0', '0']], ['control: random dc blocker 17', ['1/2', [5, 2]], ['0', '-3']], ['control: random dc blocker 19', ['3/4', [6, -1]], ['0', '-7']]], [['regression: random dc blocker 7', ['1/2', [0, 6, -2, -1, 2, 0]], ['0', '6', '-5', '-3/2', '9/4', '-7/8']], ['regression: random dc blocker 8', ['9/10', [-3, -3, 2, -2, 2, -2]], ['0', '0', '5', '1/2', '89/20', '1/200']], ['regression: random dc blocker 4', ['3/4', [1, 2, 6, 0, -2]], ['0', '1', '19/4', '-39/16', '-245/64']], ['control: random dc blocker 26', ['3/4', [2, 5]], ['0', '3']], ['control: random dc blocker 32', ['9/10', [0, 0]], ['0', '0']], ['control: constant input warm start', ['9/10', [5, 5, 5]], ['0', '0', '0']], ['control: bad pole', ['1', [1]], 'bad-pole']], [['regression: random dc blocker 10', ['1/4', [2, 0, 5, -1, 6, 2, 5]], ['0', '-2', '9/2', '-39/8', '185/32', '-327/128', '1209/512']], ['regression: random dc blocker 11', ['1/2', [-1, 0, 6]], ['0', '1', '13/2']], ['regression: random dc blocker 8', ['9/10', [-3, -3, 2, -2, 2, -2]], ['0', '0', '5', '1/2', '89/20', '1/200']], ['control: empty', ['1/2', []], []], ['control: random dc blocker 1', ['3/4', [-2, 2]], ['0', '4']], ['control: random dc blocker 5', ['9/10', [2, 5]], ['0', '3']], ['control: random dc blocker 14', ['1/2', [2, 2]], ['0', '0']]], [['regression: random dc blocker 13', ['3/4', [2, 2, 3, 5, -1, 6, -2]], ['0', '0', '1', '11/4', '-63/16', '259/64', '-1271/256']], ['regression: random dc blocker 15', ['1/2', [5, 4, 0, 0, -3]], ['0', '-1', '-9/2', '-9/4', '-33/8']], ['regression: random dc blocker 10', ['1/4', [2, 0, 5, -1, 6, 2, 5]], ['0', '-2', '9/2', '-39/8', '185/32', '-327/128', '1209/512']], ['control: random dc blocker 17', ['1/2', [5, 2]], ['0', '-3']], ['control: random dc blocker 19', ['3/4', [6, -1]], ['0', '-7']], ['control: random dc blocker 26', ['3/4', [2, 5]], ['0', '3']], ['control: random dc blocker 32', ['9/10', [0, 0]], ['0', '0']]]]
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 fixtureActualExpectedOutcome
regression: step['0', '4', '-2', '1']['0', '4', '2', '1']Failed
regression: random dc blocker 0['0', '1', '5/4', '-79/16']['0', '1', '11/4', '-31/16']Failed
repair check: pole zero['0', '2', '-1']['0', '2', '-1']Passed
control: constant input warm start['0', '0', '0']['0', '0', '0']Passed
control: bad polebad-polebad-polePassed
control: empty[][]Passed
control: random dc blocker 1['0', '4']['0', '4']Passed

SHA-256 / 3ec0c35ff7f9608f858851e89b3851b9a56fa6757b703e8445326d2e4efc8619

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):
    R, xs = Fraction(x[0]), x[1]
    if not 0 <= R < 1:
        return 'bad-pole'
    if not xs:
        return []
    xp = xs[0]
    yp = Fraction(0)
    out = []
    for v in xs:
        y = v - xp + (1 - R) * yp
        xp, yp = v, 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: step', ['1/2', [0, 4, 4, 4]], ['0', '4', '2', '1']], ['regression: random dc blocker 0', ['3/4', [-2, -1, 1, -3]], ['0', '1', '11/4', '-31/16']], ['repair check: pole zero', ['0', [1, 3, 2]], ['0', '2', '-1']], ['control: constant input warm start', ['9/10', [5, 5, 5]], ['0', '0', '0']], ['control: bad pole', ['1', [1]], 'bad-pole'], ['control: empty', ['1/2', []], []], ['control: random dc blocker 1', ['3/4', [-2, 2]], ['0', '4']]], [['regression: random dc blocker 3', ['9/10', [1, 4, -3, -3, 5, -2]], ['0', '3', '-43/10', '-387/100', '4517/1000', '-29347/10000']], ['regression: random dc blocker 4', ['3/4', [1, 2, 6, 0, -2]], ['0', '1', '19/4', '-39/16', '-245/64']], ['regression: random dc blocker 2', ['1/4', [-3, 0, 1, -3]], ['0', '3', '7/4', '-57/16']], ['control: random dc blocker 5', ['9/10', [2, 5]], ['0', '3']], ['control: random dc blocker 14', ['1/2', [2, 2]], ['0', '0']], ['control: random dc blocker 17', ['1/2', [5, 2]], ['0', '-3']], ['control: random dc blocker 19', ['3/4', [6, -1]], ['0', '-7']]], [['regression: random dc blocker 7', ['1/2', [0, 6, -2, -1, 2, 0]], ['0', '6', '-5', '-3/2', '9/4', '-7/8']], ['regression: random dc blocker 8', ['9/10', [-3, -3, 2, -2, 2, -2]], ['0', '0', '5', '1/2', '89/20', '1/200']], ['regression: random dc blocker 4', ['3/4', [1, 2, 6, 0, -2]], ['0', '1', '19/4', '-39/16', '-245/64']], ['control: random dc blocker 26', ['3/4', [2, 5]], ['0', '3']], ['control: random dc blocker 32', ['9/10', [0, 0]], ['0', '0']], ['control: constant input warm start', ['9/10', [5, 5, 5]], ['0', '0', '0']], ['control: bad pole', ['1', [1]], 'bad-pole']], [['regression: random dc blocker 10', ['1/4', [2, 0, 5, -1, 6, 2, 5]], ['0', '-2', '9/2', '-39/8', '185/32', '-327/128', '1209/512']], ['regression: random dc blocker 11', ['1/2', [-1, 0, 6]], ['0', '1', '13/2']], ['regression: random dc blocker 8', ['9/10', [-3, -3, 2, -2, 2, -2]], ['0', '0', '5', '1/2', '89/20', '1/200']], ['control: empty', ['1/2', []], []], ['control: random dc blocker 1', ['3/4', [-2, 2]], ['0', '4']], ['control: random dc blocker 5', ['9/10', [2, 5]], ['0', '3']], ['control: random dc blocker 14', ['1/2', [2, 2]], ['0', '0']]], [['regression: random dc blocker 13', ['3/4', [2, 2, 3, 5, -1, 6, -2]], ['0', '0', '1', '11/4', '-63/16', '259/64', '-1271/256']], ['regression: random dc blocker 15', ['1/2', [5, 4, 0, 0, -3]], ['0', '-1', '-9/2', '-9/4', '-33/8']], ['regression: random dc blocker 10', ['1/4', [2, 0, 5, -1, 6, 2, 5]], ['0', '-2', '9/2', '-39/8', '185/32', '-327/128', '1209/512']], ['control: random dc blocker 17', ['1/2', [5, 2]], ['0', '-3']], ['control: random dc blocker 19', ['3/4', [6, -1]], ['0', '-7']], ['control: random dc blocker 26', ['3/4', [2, 5]], ['0', '3']], ['control: random dc blocker 32', ['9/10', [0, 0]], ['0', '0']]]]
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 fixtureActualExpectedOutcome
regression: step['0', '4', '2', '1']['0', '4', '2', '1']Passed
regression: random dc blocker 0['0', '1', '9/4', '-55/16']['0', '1', '11/4', '-31/16']Failed
repair check: pole zero['0', '2', '1']['0', '2', '-1']Failed
control: constant input warm start['0', '0', '0']['0', '0', '0']Passed
control: bad polebad-polebad-polePassed
control: empty[][]Passed
control: random dc blocker 1['0', '4']['0', '4']Passed

SHA-256 / 75e4d3241dc6f59ec1dc130015db0c61e86d9f9bc97891d0bc424c73f376e346

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):
    R, xs = Fraction(x[0]), x[1]
    if not 0 <= R < 1:
        return 'bad-pole'
    if not xs:
        return []
    xp = xs[0]
    yp = Fraction(0)
    out = []
    for v in xs:
        y = v - xp + R * yp
        xp, yp = v, 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: step', ['1/2', [0, 4, 4, 4]], ['0', '4', '2', '1']], ['regression: random dc blocker 0', ['3/4', [-2, -1, 1, -3]], ['0', '1', '11/4', '-31/16']], ['repair check: pole zero', ['0', [1, 3, 2]], ['0', '2', '-1']], ['control: constant input warm start', ['9/10', [5, 5, 5]], ['0', '0', '0']], ['control: bad pole', ['1', [1]], 'bad-pole'], ['control: empty', ['1/2', []], []], ['control: random dc blocker 1', ['3/4', [-2, 2]], ['0', '4']]], [['regression: random dc blocker 3', ['9/10', [1, 4, -3, -3, 5, -2]], ['0', '3', '-43/10', '-387/100', '4517/1000', '-29347/10000']], ['regression: random dc blocker 4', ['3/4', [1, 2, 6, 0, -2]], ['0', '1', '19/4', '-39/16', '-245/64']], ['regression: random dc blocker 2', ['1/4', [-3, 0, 1, -3]], ['0', '3', '7/4', '-57/16']], ['control: random dc blocker 5', ['9/10', [2, 5]], ['0', '3']], ['control: random dc blocker 14', ['1/2', [2, 2]], ['0', '0']], ['control: random dc blocker 17', ['1/2', [5, 2]], ['0', '-3']], ['control: random dc blocker 19', ['3/4', [6, -1]], ['0', '-7']]], [['regression: random dc blocker 7', ['1/2', [0, 6, -2, -1, 2, 0]], ['0', '6', '-5', '-3/2', '9/4', '-7/8']], ['regression: random dc blocker 8', ['9/10', [-3, -3, 2, -2, 2, -2]], ['0', '0', '5', '1/2', '89/20', '1/200']], ['regression: random dc blocker 4', ['3/4', [1, 2, 6, 0, -2]], ['0', '1', '19/4', '-39/16', '-245/64']], ['control: random dc blocker 26', ['3/4', [2, 5]], ['0', '3']], ['control: random dc blocker 32', ['9/10', [0, 0]], ['0', '0']], ['control: constant input warm start', ['9/10', [5, 5, 5]], ['0', '0', '0']], ['control: bad pole', ['1', [1]], 'bad-pole']], [['regression: random dc blocker 10', ['1/4', [2, 0, 5, -1, 6, 2, 5]], ['0', '-2', '9/2', '-39/8', '185/32', '-327/128', '1209/512']], ['regression: random dc blocker 11', ['1/2', [-1, 0, 6]], ['0', '1', '13/2']], ['regression: random dc blocker 8', ['9/10', [-3, -3, 2, -2, 2, -2]], ['0', '0', '5', '1/2', '89/20', '1/200']], ['control: empty', ['1/2', []], []], ['control: random dc blocker 1', ['3/4', [-2, 2]], ['0', '4']], ['control: random dc blocker 5', ['9/10', [2, 5]], ['0', '3']], ['control: random dc blocker 14', ['1/2', [2, 2]], ['0', '0']]], [['regression: random dc blocker 13', ['3/4', [2, 2, 3, 5, -1, 6, -2]], ['0', '0', '1', '11/4', '-63/16', '259/64', '-1271/256']], ['regression: random dc blocker 15', ['1/2', [5, 4, 0, 0, -3]], ['0', '-1', '-9/2', '-9/4', '-33/8']], ['regression: random dc blocker 10', ['1/4', [2, 0, 5, -1, 6, 2, 5]], ['0', '-2', '9/2', '-39/8', '185/32', '-327/128', '1209/512']], ['control: random dc blocker 17', ['1/2', [5, 2]], ['0', '-3']], ['control: random dc blocker 19', ['3/4', [6, -1]], ['0', '-7']], ['control: random dc blocker 26', ['3/4', [2, 5]], ['0', '3']], ['control: random dc blocker 32', ['9/10', [0, 0]], ['0', '0']]]]
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 fixtureActualExpectedOutcome
regression: step['0', '4', '2', '1']['0', '4', '2', '1']Passed
regression: random dc blocker 0['0', '1', '11/4', '-31/16']['0', '1', '11/4', '-31/16']Passed
repair check: pole zero['0', '2', '-1']['0', '2', '-1']Passed
control: constant input warm start['0', '0', '0']['0', '0', '0']Passed
control: bad polebad-polebad-polePassed
control: empty[][]Passed
control: random dc blocker 1['0', '4']['0', '4']Passed

SHA-256 / 4a31e2d3637c660be902dd8a1ff1f81d8a6823781f680b2b408be0094da3178f

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:38.946355+00:00.

Case digest / efd9d02c6b57cb2c968098390daab6d0711c01a2994febee8ef4566949f08529