{"abstract":"The resonator is tuned to the wrong frequency and DC input does not accumulate linearly.","category":"Digital signal filters","checks":7,"contract":"Input [N, k, samples]; samples must have length N (\"length-mismatch\"). Goertzel recursion s = x + c s1 - s2 with c = 2 cos(2 pi k / N) from zero state; power = s1^2 + s2^2 - c s1 s2, rounded to 6 decimals (equals |X[k]|^2 of the DFT).","contract_signature":"x","evaluation_group":"w2-digital_signal_filters-goertzel-bin-power","failed_approach":"The attempted repair uses 2 cos(w / 2), tuning to half the bin frequency.","family":"w2-digital_signal_filters-goertzel-bin-power-resonator-coefficient","id":"FA-91731","implementations":{"attempt":{"sha256":"2616c2f7a072a5317d657732a15f64ba97946fbeeb325e7c2543cd66937d386b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    N, k, xs = x\n    if len(xs) != N:\n        return 'length-mismatch'\n    w = 2 * math.pi * k / N\n    coeff = 2 * math.cos(w / 2)\n    s1 = s2 = 0.0\n    for v in xs:\n        s = v + coeff * s1 - s2\n        s2 = s1\n        s1 = s\n    power = s1 * s1 + s2 * s2 - coeff * s1 * s2\n    return round(power, 6) + 0.0\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: dc bin', [4, 0, [1, 1, 1, 1]], 16.0], ['regression: tone on bin 1', [8, 1, [1, 0.707107, 0, -0.707107, -1, -0.707107, 0, 0.707107]], 16.000005], ['regression: nyquist bin', [4, 2, [1, -1, 1, -1]], 16.0], ['control: length mismatch', [4, 1, [1, 2, 3]], 'length-mismatch'], ['regression: random goertzel 0', [5, 3, [1.783, -0.103, 1.735, 0.172, 0.47]], 7.631659], ['regression: random goertzel 1', [16, 7, [1.67, -0.361, -1.179, -1.404, -0.191, 0.823, -1.353, 1.734, 0.486, 0.989, 1.205, -0.229, 1.256, -0.62, 1.422, -1.514]], 81.860198], ['regression: random goertzel 2', [4, 2, [1.006, -1.378, 0.575, -0.798]], 14.115049]], [['regression: random goertzel 0', [5, 3, [1.783, -0.103, 1.735, 0.172, 0.47]], 7.631659], ['regression: random goertzel 1', [16, 7, [1.67, -0.361, -1.179, -1.404, -0.191, 0.823, -1.353, 1.734, 0.486, 0.989, 1.205, -0.229, 1.256, -0.62, 1.422, -1.514]], 81.860198], ['regression: random goertzel 2', [4, 2, [1.006, -1.378, 0.575, -0.798]], 14.115049], ['control: length mismatch', [4, 1, [1, 2, 3]], 'length-mismatch'], ['regression: nyquist bin', [4, 2, [1, -1, 1, -1]], 16.0], ['regression: random goertzel 3', [5, 2, [0.006, 0.503, -1.021, -1.836, 1.378]], 7.416002], ['regression: random goertzel 4', [5, 1, [0.277, 1.508, 1.644, 1.371, 0.902]], 2.552062]], [['regression: random goertzel 3', [5, 2, [0.006, 0.503, -1.021, -1.836, 1.378]], 7.416002], ['regression: random goertzel 4', [5, 1, [0.277, 1.508, 1.644, 1.371, 0.902]], 2.552062], ['regression: random goertzel 2', [4, 2, [1.006, -1.378, 0.575, -0.798]], 14.115049], ['control: length mismatch', [4, 1, [1, 2, 3]], 'length-mismatch'], ['regression: random goertzel 0', [5, 3, [1.783, -0.103, 1.735, 0.172, 0.47]], 7.631659], ['regression: random goertzel 1', [16, 7, [1.67, -0.361, -1.179, -1.404, -0.191, 0.823, -1.353, 1.734, 0.486, 0.989, 1.205, -0.229, 1.256, -0.62, 1.422, -1.514]], 81.860198], ['regression: random goertzel 6', [16, 3, [-0.301, 1.167, -1.088, 1.455, 1.212, 0.703, -1.679, -0.745, -1.885, -0.092, 1.441, 0.517, 1.787, 1.007, 1.333, 0.125]], 11.236712]], [['regression: random goertzel 9', [16, 0, [1.777, -1.73, -1.599, 0.005, -0.185, 1.341, 1.416, -0.302, 1.918, -1.985, 0.787, -1.656, 0.349, -1.026, 0.686, 1.037]], 0.693889], ['regression: random goertzel 12', [8, 5, [1.095, -0.847, 1.178, 0.214, 0.875, -0.711, 1.404, 0.206]], 0.121928], ['regression: random goertzel 4', [5, 1, [0.277, 1.508, 1.644, 1.371, 0.902]], 2.552062], ['control: length mismatch', [4, 1, [1, 2, 3]], 'length-mismatch'], ['regression: random goertzel 1', [16, 7, [1.67, -0.361, -1.179, -1.404, -0.191, 0.823, -1.353, 1.734, 0.486, 0.989, 1.205, -0.229, 1.256, -0.62, 1.422, -1.514]], 81.860198], ['regression: random goertzel 2', [4, 2, [1.006, -1.378, 0.575, -0.798]], 14.115049], ['regression: random goertzel 3', [5, 2, [0.006, 0.503, -1.021, -1.836, 1.378]], 7.416002]], [['regression: random goertzel 15', [16, 6, [1.04, 0.286, -0.64, -1.873, -0.871, -1.5, 0.134, 0.288, -1.297, -0.068, -0.49, 1.205, 1.309, -0.906, -1.289, 0.92]], 15.284909], ['regression: random goertzel 16', [4, 2, [0.184, -0.187, 1.09, -0.658]], 4.490161], ['regression: random goertzel 6', [16, 3, [-0.301, 1.167, -1.088, 1.455, 1.212, 0.703, -1.679, -0.745, -1.885, -0.092, 1.441, 0.517, 1.787, 1.007, 1.333, 0.125]], 11.236712], ['control: length mismatch', [4, 1, [1, 2, 3]], 'length-mismatch'], ['regression: random goertzel 2', [4, 2, [1.006, -1.378, 0.575, -0.798]], 14.115049], ['regression: random goertzel 3', [5, 2, [0.006, 0.503, -1.021, -1.836, 1.378]], 7.416002], ['regression: random goertzel 4', [5, 1, [0.277, 1.508, 1.644, 1.371, 0.902]], 2.552062]]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"f686aa6106b28b8215bda362860001c41e013054f66cc599480cf1bd281ac7b8","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    N, k, xs = x\n    if len(xs) != N:\n        return 'length-mismatch'\n    w = 2 * math.pi * k / N\n    coeff = math.cos(w)\n    s1 = s2 = 0.0\n    for v in xs:\n        s = v + coeff * s1 - s2\n        s2 = s1\n        s1 = s\n    power = s1 * s1 + s2 * s2 - coeff * s1 * s2\n    return round(power, 6) + 0.0\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: dc bin', [4, 0, [1, 1, 1, 1]], 16.0], ['regression: tone on bin 1', [8, 1, [1, 0.707107, 0, -0.707107, -1, -0.707107, 0, 0.707107]], 16.000005], ['regression: nyquist bin', [4, 2, [1, -1, 1, -1]], 16.0], ['control: length mismatch', [4, 1, [1, 2, 3]], 'length-mismatch'], ['regression: random goertzel 0', [5, 3, [1.783, -0.103, 1.735, 0.172, 0.47]], 7.631659], ['regression: random goertzel 1', [16, 7, [1.67, -0.361, -1.179, -1.404, -0.191, 0.823, -1.353, 1.734, 0.486, 0.989, 1.205, -0.229, 1.256, -0.62, 1.422, -1.514]], 81.860198], ['regression: random goertzel 2', [4, 2, [1.006, -1.378, 0.575, -0.798]], 14.115049]], [['regression: random goertzel 0', [5, 3, [1.783, -0.103, 1.735, 0.172, 0.47]], 7.631659], ['regression: random goertzel 1', [16, 7, [1.67, -0.361, -1.179, -1.404, -0.191, 0.823, -1.353, 1.734, 0.486, 0.989, 1.205, -0.229, 1.256, -0.62, 1.422, -1.514]], 81.860198], ['regression: random goertzel 2', [4, 2, [1.006, -1.378, 0.575, -0.798]], 14.115049], ['control: length mismatch', [4, 1, [1, 2, 3]], 'length-mismatch'], ['regression: nyquist bin', [4, 2, [1, -1, 1, -1]], 16.0], ['regression: random goertzel 3', [5, 2, [0.006, 0.503, -1.021, -1.836, 1.378]], 7.416002], ['regression: random goertzel 4', [5, 1, [0.277, 1.508, 1.644, 1.371, 0.902]], 2.552062]], [['regression: random goertzel 3', [5, 2, [0.006, 0.503, -1.021, -1.836, 1.378]], 7.416002], ['regression: random goertzel 4', [5, 1, [0.277, 1.508, 1.644, 1.371, 0.902]], 2.552062], ['regression: random goertzel 2', [4, 2, [1.006, -1.378, 0.575, -0.798]], 14.115049], ['control: length mismatch', [4, 1, [1, 2, 3]], 'length-mismatch'], ['regression: random goertzel 0', [5, 3, [1.783, -0.103, 1.735, 0.172, 0.47]], 7.631659], ['regression: random goertzel 1', [16, 7, [1.67, -0.361, -1.179, -1.404, -0.191, 0.823, -1.353, 1.734, 0.486, 0.989, 1.205, -0.229, 1.256, -0.62, 1.422, -1.514]], 81.860198], ['regression: random goertzel 6', [16, 3, [-0.301, 1.167, -1.088, 1.455, 1.212, 0.703, -1.679, -0.745, -1.885, -0.092, 1.441, 0.517, 1.787, 1.007, 1.333, 0.125]], 11.236712]], [['regression: random goertzel 9', [16, 0, [1.777, -1.73, -1.599, 0.005, -0.185, 1.341, 1.416, -0.302, 1.918, -1.985, 0.787, -1.656, 0.349, -1.026, 0.686, 1.037]], 0.693889], ['regression: random goertzel 12', [8, 5, [1.095, -0.847, 1.178, 0.214, 0.875, -0.711, 1.404, 0.206]], 0.121928], ['regression: random goertzel 4', [5, 1, [0.277, 1.508, 1.644, 1.371, 0.902]], 2.552062], ['control: length mismatch', [4, 1, [1, 2, 3]], 'length-mismatch'], ['regression: random goertzel 1', [16, 7, [1.67, -0.361, -1.179, -1.404, -0.191, 0.823, -1.353, 1.734, 0.486, 0.989, 1.205, -0.229, 1.256, -0.62, 1.422, -1.514]], 81.860198], ['regression: random goertzel 2', [4, 2, [1.006, -1.378, 0.575, -0.798]], 14.115049], ['regression: random goertzel 3', [5, 2, [0.006, 0.503, -1.021, -1.836, 1.378]], 7.416002]], [['regression: random goertzel 15', [16, 6, [1.04, 0.286, -0.64, -1.873, -0.871, -1.5, 0.134, 0.288, -1.297, -0.068, -0.49, 1.205, 1.309, -0.906, -1.289, 0.92]], 15.284909], ['regression: random goertzel 16', [4, 2, [0.184, -0.187, 1.09, -0.658]], 4.490161], ['regression: random goertzel 6', [16, 3, [-0.301, 1.167, -1.088, 1.455, 1.212, 0.703, -1.679, -0.745, -1.885, -0.092, 1.441, 0.517, 1.787, 1.007, 1.333, 0.125]], 11.236712], ['control: length mismatch', [4, 1, [1, 2, 3]], 'length-mismatch'], ['regression: random goertzel 2', [4, 2, [1.006, -1.378, 0.575, -0.798]], 14.115049], ['regression: random goertzel 3', [5, 2, [0.006, 0.503, -1.021, -1.836, 1.378]], 7.416002], ['regression: random goertzel 4', [5, 1, [0.277, 1.508, 1.644, 1.371, 0.902]], 2.552062]]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-digital_signal_filters-goertzel-bin-power-resonator-coefficient","generated_at":"2026-09-29T14:51:38.805414+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Goertzel filters detect single tones cheaply (DTMF, pilot tones); recursion or coefficient slips misreport bin energy.","root_cause":"The coefficient omits the factor 2.","sha256":"bbfa987b50e868a639ce6a63c0168b2212cc8ff79130f5187297e79fdd7699de","title":"Goertzel uses cos(w) as the resonator coefficient · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":39.964,"exit_code":1,"observations":[{"actual":16.0,"check":"regression: dc bin","expected":16.0,"passed":true},{"actual":4.116521,"check":"regression: tone on bin 1","expected":16.000005,"passed":false},{"actual":0.0,"check":"regression: nyquist bin","expected":16.0,"passed":false},{"actual":"length-mismatch","check":"control: length mismatch","expected":"length-mismatch","passed":true},{"actual":1.079603,"check":"regression: random goertzel 0","expected":7.631659,"passed":false},{"actual":26.050352,"check":"regression: random goertzel 1","expected":81.860198,"passed":false},{"actual":0.522161,"check":"regression: random goertzel 2","expected":14.115049,"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: dc bin\", \"actual\": 16.0, \"expected\": 16.0, \"passed\": true}, {\"check\": \"regression: tone on bin 1\", \"actual\": 4.116521, \"expected\": 16.000005, \"passed\": false}, {\"check\": \"regression: nyquist bin\", \"actual\": 0.0, \"expected\": 16.0, \"passed\": false}, {\"check\": \"control: length mismatch\", \"actual\": \"length-mismatch\", \"expected\": \"length-mismatch\", \"passed\": true}, {\"check\": \"regression: random goertzel 0\", \"actual\": 1.079603, \"expected\": 7.631659, \"passed\": false}, {\"check\": \"regression: random goertzel 1\", \"actual\": 26.050352, \"expected\": 81.860198, \"passed\": false}, {\"check\": \"regression: random goertzel 2\", \"actual\": 0.522161, \"expected\": 14.115049, \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":38.671,"exit_code":1,"observations":[{"actual":3.0,"check":"regression: dc bin","expected":16.0,"passed":false},{"actual":7.875003,"check":"regression: tone on bin 1","expected":16.000005,"passed":false},{"actual":3.0,"check":"regression: nyquist bin","expected":16.0,"passed":false},{"actual":"length-mismatch","check":"control: length mismatch","expected":"length-mismatch","passed":true},{"actual":1.532241,"check":"regression: random goertzel 0","expected":7.631659,"passed":false},{"actual":6.620564,"check":"regression: random goertzel 1","expected":81.860198,"passed":false},{"actual":3.232147,"check":"regression: random goertzel 2","expected":14.115049,"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: dc bin\", \"actual\": 3.0, \"expected\": 16.0, \"passed\": false}, {\"check\": \"regression: tone on bin 1\", \"actual\": 7.875003, \"expected\": 16.000005, \"passed\": false}, {\"check\": \"regression: nyquist bin\", \"actual\": 3.0, \"expected\": 16.0, \"passed\": false}, {\"check\": \"control: length mismatch\", \"actual\": \"length-mismatch\", \"expected\": \"length-mismatch\", \"passed\": true}, {\"check\": \"regression: random goertzel 0\", \"actual\": 1.532241, \"expected\": 7.631659, \"passed\": false}, {\"check\": \"regression: random goertzel 1\", \"actual\": 6.620564, \"expected\": 81.860198, \"passed\": false}, {\"check\": \"regression: random goertzel 2\", \"actual\": 3.232147, \"expected\": 14.115049, \"passed\": false}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}