• Welcome to ASR. There are many reviews of audio hardware and expert members to help answer your questions. Click here to have your audio equipment measured for free!

CamillaFIR v2.5.0 - Automated Mixed Phase FIR Generator (Python/WebUI)

I ran a correction, and it came out with a noticeable channel imbalance (e.g. non-centered vocal in Bird on a Wire). I suggest adding an SPL alignment feature the way OCA uses it (adjust to average between 500 to 2000 Hz. I used 1/24 octave smoothing.)
 
I ran a correction, and it came out with a noticeable channel imbalance (e.g. non-centered vocal in Bird on a Wire). I suggest adding an SPL alignment feature the way OCA uses it (adjust to average between 500 to 2000 Hz. I used 1/24 octave smoothing.)
Hi Daverz, thanks for the feedback.
In v2.8.7 ( https://github.com/VilhoValittu/CamillaFIR/releases/ ) ,CamillaFIR basically assumes that the left/right channel balance in the system is already in good shape. The idea is not to fix hardware or upstream gain issues, but to work from measurements that are already properly balanced.
If a channel imbalance becomes noticeable after correction (for example, vocals no longer sitting in the center), it usually means there was a level difference in the original measurements. In those cases, turning on stereo_link should take care of it by keeping a shared reference between the channels and avoiding relative level offsets during the correction process.
The SPL alignment idea itself makes sense, and it’s something that could be looked at later as an optional feature. For now, CamillaFIR is trying to stay transparent and predictable rather than applying automatic channel-level adjustments.
 
What is your typical workflow regarding measurements? I typically take a few shots around the listening area and perform a scalar average, though this doesn’t preserve timing information. Would a time aligned vector average suffice, or is this designed for individual measurements only?
 
What is your typical workflow regarding measurements? I typically take a few shots around the listening area and perform a scalar average, though this doesn’t preserve timing information. Would a time aligned vector average suffice, or is this designed for individual measurements only?
I personally measure only at the MLP (main listening position), but I take several measurements there. Then I remove the worst one and also the “best” one if it clearly stands out from the rest.
After that, I create a time-aligned vector average from the remaining measurements.
I don’t use scalar averaging because it loses timing information. If averaging is needed, a time-aligned vector average is much better.
In general, CamillaFIR tries to create the best possible filter based on the data it is given. The best measurement method is ultimately the one that gives you the most consistent and convincing results in your own system.
 
I personally measure only at the MLP (main listening position), but I take several measurements there. Then I remove the worst one and also the “best” one if it clearly stands out from the rest.
After that, I create a time-aligned vector average from the remaining measurements.
I don’t use scalar averaging because it loses timing information. If averaging is needed, a time-aligned vector average is much better.
In general, CamillaFIR tries to create the best possible filter based on the data it is given. The best measurement method is ultimately the one that gives you the most consistent and convincing results in your own system.
Thanks!
 
CamillaFIR 3.4.2 – Automatic Mode Refinement Update

This update focuses entirely on improving the behavior and stability of Automatic Mode.
No UI changes, no cosmetic additions — just search logic and decision model refinements.

The goal was simple: reduce “lucky” outliers and make the optimization more robust and repeatable.

---

### 1. Two-Phase Optimization with Plateau Detection

Automatic Mode now runs in two stages:

• Phase 1: broad parameter exploration
• Phase 2: refinement around the best-performing presets

If no improvement is detected for a defined number of rounds, the search automatically advances (or stops), instead of blindly consuming trials.

This reduces unnecessary runs and improves convergence consistency.

---

### 2. Target Curve Selection is Now Trial-Based

Built-in house curves (Harman variants, BK series, Studio, Cinema, Flat, etc.) are no longer selected purely by static curve matching.

Process now:

1. Pre-rank curves against the measured response
2. Select Top-N candidates
3. Run actual optimization trials for each
4. Choose winner based on full DSP scoring

Additionally, if a “milder” adjacent curve performs nearly the same (within defined rank and RMS tolerance), the algorithm prefers the milder option to avoid unnecessary LF emphasis.

This significantly reduces over-aggressive curve selection.

---

### 3. Measurement-Based Target Caching

If the same measurement is used again:

• Previously selected best target curve is reused
• Best preset is injected as search seed
• Optimization begins near known optimum

This improves repeatability and reduces warm-up variance between runs.

---

### 4. Improved LF (-6 dB) Estimation

The low-frequency extension estimate now:

• Uses smoothing
• Applies envelope tracking (monotonic LF envelope)
• Requires stable consecutive bins before accepting crossing
• Compares L/R and resolves disagreement conservatively

This avoids false early -6 dB detection caused by SBIR dips or sparse LF bins.

Effect: more realistic mag_c_min determination.

---

### 5. Revised Ranking Model

The scoring function was rebalanced to prevent single-metric domination.

Rank now considers:

• Acoustic score (with fallback path if AI score unavailable)
• Soft-knee net boost penalty (no hard 5 dB cliff anymore)
• DSP quality penalties (GD gradient, ripple, boundary artifacts)
• Pre-ringing / pre-energy metrics
• Reflection severity weighting
• L/R symmetry
• Excursion protection behavior

Each penalty has capped contribution to avoid collapse-to-zero behavior.

The net boost penalty now uses a smooth hinge instead of a hard threshold.

---

### 6. Excursion Protection Awareness

Automatic Mode now:

• Prefers presets where excursion protection remains active
• Penalizes LF boost inside excursion-guard region
• Reduces (but does not eliminate) excursion penalty when auto frequency detection is valid

This prevents selection of technically “good looking” filters that are mechanically risky.

---

### 7. Filter-Type Aware Search

Search space adapts depending on filter type:

Mixed phase:
• Optimizes mixed crossover frequency

Linear phase:
• Optimizes phase limit region

All modes respect bass-first logic and smoothing constraints.

---

If anyone wants to test edge cases:

• Strong SBIR null systems
• Large LF drivers with excursion limits

Feedback is welcome.

Disclaimer : AI was used to translate this text Finnish --> English
 
Back
Top Bottom