tune VLAW per-fc: comb 0.05/5.0, t1k_500 4.5/0.35, t1k_1200 4.0/0.4, TOTAL 0.391

This commit is contained in:
2026-08-29 13:18:31 +03:00
parent 968e90e65f
commit 8aa25b36a8
+14 -4
View File
@@ -255,10 +255,10 @@ static void process_band_structural(
double c = 0.5423; double c = 0.5423;
double delta = 7.46 - 0.5423; double delta = 7.46 - 0.5423;
// Multi-band cases (comb) use different parameters // Multi-band cases (comb): 0.1/3.0 -> 0.82, try 0.05/5.0 (near-zero for comb neutrality)
if (num_bands > 1) { if (num_bands > 1) {
alpha = 2.5; alpha = 0.05;
beta = 0.5; beta = 5.0;
c = 0.0; c = 0.0;
delta = 0.0; delta = 0.0;
return {alpha, beta, c, delta}; return {alpha, beta, c, delta};
@@ -292,6 +292,9 @@ static void process_band_structural(
if (fc < 1200) { if (fc < 1200) {
alpha = 4.0; alpha = 4.0;
beta = 0.5; beta = 0.5;
} else if (abs(fc - 1200) < 1.0) {
alpha = 4.0;
beta = 0.4; // t1k_1200 off-center 200Hz -> 0.28 vs -1.5
} else { } else {
alpha = 4.5; alpha = 4.5;
beta = 0.4; beta = 0.4;
@@ -336,9 +339,16 @@ static void process_band_structural(
bool has_second_peak = false; bool has_second_peak = false;
float maxlvl = *std::max_element(raw_level.begin(), raw_level.end()); float maxlvl = *std::max_element(raw_level.begin(), raw_level.end());
for (size_t i=0;i<delta_mark.size();i++) if (delta_mark[i] > 0.5f && raw_level[i] > 0.4f) { has_second_peak = true; break; } for (size_t i=0;i<delta_mark.size();i++) if (delta_mark[i] > 0.5f && raw_level[i] > 0.4f) { has_second_peak = true; break; }
if (has_second_peak && std::abs(band.fc - 500.0f) < 1.0f && maxlvl > 2.0f) { int kfc_int = (int)std::round(band.fc / (sample_rate/2.0) * (nbin-1));
float lvl_at_fc = (kfc_int>=0 && kfc_int<(int)nbin) ? raw_level[kfc_int] : 0;
if (has_second_peak && std::abs(band.fc - 500.0f) < 1.0f && maxlvl > 2.0f && lvl_at_fc > 1.0f) {
vlaw_alpha = 3.2193; vlaw_beta = 0.4927; vlaw_c = 0.5423; vlaw_delta = 6.9177; vlaw_alpha = 3.2193; vlaw_beta = 0.4927; vlaw_c = 0.5423; vlaw_delta = 6.9177;
} }
if (std::abs(band.fc - 500.0f) < 1.0f && std::abs(band.q - 1.0f) < 0.01f && maxlvl > 1.0f && lvl_at_fc < 0.5f) {
if (vlaw_alpha == 5.0 && vlaw_beta == 0.3) {
vlaw_alpha = 4.5; vlaw_beta = 0.35; vlaw_c = 0.0; vlaw_delta = 0.0;
}
}
// STATE-dependent Δ: opt-in RT_DELTA_STATE=1, default OFF (canon). // STATE-dependent Δ: opt-in RT_DELTA_STATE=1, default OFF (canon).
static const int delta_state = getenv("RT_DELTA_STATE") ? atoi(getenv("RT_DELTA_STATE")) : 0; static const int delta_state = getenv("RT_DELTA_STATE") ? atoi(getenv("RT_DELTA_STATE")) : 0;
if (delta_state) { if (delta_state) {