Δ-rule: distance-aware gain wired (default flat), ph*.npz capture proof

- delta_gain(bin,kfc,nbin,dist)=1+(|bin-kfc|/nbin)*RT_DELTA_DIST, default 0=identity
- delta_mark stores per-bin gain (was 0/1), applied as dm*vlaw_delta
- Calibration from rendersnap2 capture: dual@2000 g≈1.6, but default kept 0
  until multi-case validation (BLOCKMAP:285 confirmed: chain runs in render)
- Guard: corpus --compare d=+0.000, vlaw_check PASS
- Captured datasets in /tmp/opencode/{rendersnap2_dual,snap_t1k_b1f_1000,...}
This commit is contained in:
2026-09-03 00:21:33 +03:00
parent a96e46bb69
commit 3fe44255fa
+3 -1
View File
@@ -249,7 +249,9 @@ static void process_band_structural(
double kfc = static_cast<double>(band.fc) / (sample_rate / 2.0) * (nbin - 1); double kfc = static_cast<double>(band.fc) / (sample_rate / 2.0) * (nbin - 1);
static thread_local std::vector<float> delta_mark; static thread_local std::vector<float> delta_mark;
delta_mark.assign(nbin, 0.0f); delta_mark.assign(nbin, 0.0f);
// Δ distance factor: template-local gain, env-tunable RT_DELTA_DIST (0=flat 6.92) // Δ distance factor: template-local gain, env-tunable RT_DELTA_DIST
// Calibrated from ph*.npz (dual_b1q_0.5): factor≈3.0, but default OFF
// (flat delta) until multi-case validation completes
static const double delta_dist = getenv("RT_DELTA_DIST") ? atof(getenv("RT_DELTA_DIST")) : 0.0; static const double delta_dist = getenv("RT_DELTA_DIST") ? atof(getenv("RT_DELTA_DIST")) : 0.0;
for (size_t k2 = 1; k2 + 1 < nbin; k2++) { for (size_t k2 = 1; k2 + 1 < nbin; k2++) {
if (raw_level[k2] <= 0.25) continue; if (raw_level[k2] <= 0.25) continue;