Commit 379b3cf6 authored by Andrey Filippov's avatar Andrey Filippov

CLAUDE: lean pose FIX: consolidated TD scaled to per-tile sensor SUM (oracle...

CLAUDE: lean pose FIX: consolidated TD scaled to per-tile sensor SUM (oracle fat-zero operating point)

The lean conj-multiply fed the plain 16-sensor AVERAGE into the same
FZ-normalize (same absolute fat zero; JNA drops per-tile weights) that the
oracle feeds with the unweighted SUM of pair products - 1/16 the amplitude,
so the effective fat zero was 16x larger. Invisible in output scale (the
normalize hides it) but measured in peak shape: sqrt_l0 3.22 vs oracle 2.08
and sqrt_l1 5.83 vs 4.15 on identical tiles, corr RMS 0.46 vs 0.33 - and
suspected as the roll-bias mechanism (asymmetric-content centroid pull on
broadened peaks; +0.52 mrad @ 150 edge-weighted tiles, +0.33 @ all tiles).

Fix: multiply each consolidated tile by its per-sensor count (SUM semantics,
matching the oracle exactly incl. partial tiles). consolidateSensorsTD
itself unchanged (A2 validation still uses the true average).

Expected in LEAN-05 (normal LMA run): sqrt_l0 ~2.1 in the HYPER eigen
slices, corr RMS toward ~0.33, roll bias collapse if the mechanism is
confirmed (survival = clean falsification).

Verified: mvn -DskipTests clean package OK.
Co-Authored-By: 's avatarClaude Fable 5 <noreply@anthropic.com>
parent 19355588
......@@ -321,7 +321,20 @@ public class CuasPoseRT {
}
// 3. the CPU consolidation bridge (future clt_average_sensors kernel)
final float [][] fclt16 = gpuQuad.getCltData(false);
final float [] avg_td = CuasTD.consolidateSensorsTD(fclt16, null);
final int [] td_counts = new int [fclt16[0].length / CuasTD.TD_CHUNK];
final float [] avg_td = CuasTD.consolidateSensorsTD(fclt16, td_counts);
// Scale the average back to the per-tile SUM of sensors - the oracle inter-corr
// operating point (it sums the pair products unweighted, and the FZ-normalize
// applies the same absolute fat zero). The 1/16 amplitude of the plain average
// made the effective fat zero 16x larger -> broadened peaks (sqrt_l0 3.22 vs
// oracle 2.08 measured on identical tiles) -> asymmetric-content centroid pull,
// the suspected roll-bias mechanism. Per-tile count (not fixed 16) matches the
// oracle exactly where sensors are missing. By Claude on 07/04/2026.
for (int chunk = 0; chunk < td_counts.length; chunk++) if (td_counts[chunk] > 1) {
final int offs = chunk * CuasTD.TD_CHUNK;
final float scale = td_counts[chunk];
for (int i = 0; i < CuasTD.TD_CHUNK; i++) avg_td[offs + i] *= scale;
}
gpuQuad.setCltData(0, avg_td, false);
// 4. single conj-multiply: only sensor 0 (holding the average) vs the center ref
final double [] col_weights = scene.isMonochrome() ?
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment