AEC: open-loop echo validation, the echo chapter, and the afc~/aec~ naming (HANDOFF Rev 4) - #4
Merged
Merged
Conversation
…aec~) Planning revision, no code. Records the chosen next effort — AEC objects + the echo-cancellation book chapter — as a three-stage plan (validation layer, mutap.aec~ external + the defeed~->afc~ rename + submodule re-pin, book chapter), and resolves the external-naming open decision. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TLE2rvptWxV8catE8vTvgx
…tests The cores already run open loop — pem_afc::process_block(x, y, e) is the AEC signature, and the Gil-Cacho 2014 paper the PEM structure implements is an open-loop double-talk framework. This adds the validation layer: - tests/support/echo_scenario.h: block-synchronous open-loop echo simulation (far-end -> true path -> mic, near-end injection) reporting both observable ERLE and the true residual-echo suppression only a simulation can measure; shared misalignment metric. - tests/test_aec.cpp (9 tests, every threshold measured first): 0 dB double-talk kicks the naive estimate past useless (median +3.4 dB misalignment) where PEM holds -8.5 and the Kalman core -13.3 with 13.4 dB suppression, config-free; the gated M4 stack freezes flat; the warped predictor beat the speech cascade's music double-talk suppression in all 18 room x seed pairs measured; typed float/double single-talk suites on the studio fixture room. - Emulated-target selections updated in BOTH places (bare_metal_main.cpp and tests/CMakeLists.txt): +aec_test/0, 58 tests on-target. - Notebook section 8 (via the generator): the AEC misalignment traces and the ERLE-vs-double-talk scoreboard. - README Status: the AEC bullet and the measured numbers; HANDOFF: Stage 1 of 'The next effort' done. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TLE2rvptWxV8catE8vTvgx
The echo-cancellation chapter, per the honesty rule: every number is measured by tests/test_aec.cpp or notebook section 8 (the naive learner kicked past useless by 0 dB double-talk, the gate's +-0.1 dB freeze, the PEM/Kalman engines adapting through it, the excitation-weighted ERLE trade, the warped predictor's 18-of-18 music sweep), and every attribute described exists on the mutap.aec~ external that Stage 2 added. Also the MuTap-side half of the Rev 4 rename: mutap.defeed~ -> mutap.afc~ across chapter 1, the introduction, README, and the notebook generator (notebook re-executed); HANDOFF marks Stages 2-3 done and re-ranks what's next. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TLE2rvptWxV8catE8vTvgx
tap
pushed a commit
to tap/MuTap-Max
that referenced
this pull request
Jul 16, 2026
tap/MuTap#4 merged; the pin moves from the pre-AEC 7a82d0d to the new tip so the gitlink stays reachable once branches are cleaned up (HANDOFF working note 6). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TLE2rvptWxV8catE8vTvgx
tap
pushed a commit
to tap/MuTap-Max
that referenced
this pull request
Jul 16, 2026
tap/MuTap#4 merged; the pin moves from the pre-AEC 7a82d0d to the new tip so the gitlink stays reachable once branches are cleaned up (HANDOFF working note 6). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TLE2rvptWxV8catE8vTvgx
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The MuTap half of HANDOFF Rev 4's "next effort" (AEC objects + echo chapter), in three commits:
HANDOFF Rev 4 — the plan
Records the chosen effort as a three-stage plan and settles the external-naming open decision:
mutap.afc~(rename from themutap.defeed~placeholder) andmutap.aec~for the new echo canceller.Stage 1 — open-loop AEC validation layer
tests/support/echo_scenario.h: block-synchronous open-loop echo simulation (far-end → true path → mic, near-end injection) reporting both the observable ERLE and the true residual-echo suppression only a simulation can measure.tests/test_aec.cpp(9 tests, thresholds measured first per the house workflow): at 0 dB double-talk the naive estimate is kicked past useless (median misalignment +3.4 dB) while PEM holds −8.5 dB and the Kalman core holds −13.3 dB with 13.4 dB suppression through the segment, config-free; the gated M4 stack freezes flat (±0.1 dB); the warped predictor won the music double-talk suppression in all 18 room × seed pairs; typed f32/f64 single-talk suites on the studio fixture room.bare_metal_main.cppandtests/CMakeLists.txt, now 58 tests on-target.Stage 3 — the book chapter + rename sweep
book/src/echo-cancellation.md("The echo canceller"), honesty rule observed: every number fromtest_aec.cpp/notebook section 8, every attribute exists on themutap.aec~external (MuTap-Max PR).mutap.defeed~→mutap.afc~across chapter 1, the introduction, README, and the notebook generator; HANDOFF marks the stages done and re-ranks what's next.Verification
Full suite green locally: 97/97 (Linux GCC, Release), clang-format/tidy clean, notebook executed with zero errors.
Merge order: this PR first, then tap/MuTap-Max#claude/handoff-review-planning-nkc5q4 — and per working note 6, the MuTap-Max submodule pin needs one final bump after this rebase-merge lands.
🤖 Generated with Claude Code
https://claude.ai/code/session_01TLE2rvptWxV8catE8vTvgx
Generated by Claude Code