Calibration System Architecture¶
Overview¶
El Calibration System es un framework modular para calibración y ajuste fino de componentes DSP. Implementa un pipeline estándar de 5 etapas y soporta optimización multi-objetivo.
Core Concepts¶
1. Calibration Target¶
Un CalibrationTarget encapsula:
- El componente a calibrar (ICalibratableComponent)
- Una o más especificaciones (CalibrationSpecification)
- Método para calcular error entre respuesta medida y target
CalibrationTarget target("FilterID", componentPtr);
target.addSpecification(spec1);
target.addSpecification(spec2); // Multi-objective
2. Calibration Specification¶
Define el comportamiento target:
CalibrationSpecification spec(TargetType::FREQUENCY_RESPONSE);
spec.idealResponse = { /* target curve */ };
spec.tolerances = { /* per-point tolerances */ };
spec.importance = 1.0f; // Weight for multi-objective
spec.errorThreshold = 0.1f; // Convergence criterion
3. Calibration Process¶
Pipeline estándar de 5 etapas:
1. Preparation → Setup test signals, initialize optimizer
2. Measurement → Inject stimulus, capture response
3. Optimization → Iteratively adjust parameters
4. Validation → Verify stability, consistency
5. Storage → Save and apply results
Implementado como clase base CalibrationProcess con métodos virtuales.
4. Measured Response¶
Datos capturados del componente:
struct MeasuredResponse {
std::vector<float> frequencies;
std::vector<float> magnitudes; // dB
std::vector<float> phases; // radians
std::map<std::string, float> metrics;
};
5. Calibration Result¶
Output final:
struct CalibrationResult {
bool success;
std::map<std::string, float> parameters; // Optimized values
CalibrationError error;
int iterationsUsed;
MeasuredResponse finalResponse;
};
Architecture Diagrams¶
Component Hierarchy¶
ICalibratableComponent
↓
CalibrationTarget (wraps component + specs)
↓
CalibrationProcess (abstract base)
↓
Concrete Calibrators:
- FilterCalibrator
- DynamicsCalibrator
- NonlinearCalibrator
- etc.
Data Flow¶
Component Parameters
↓
Test Signal Generator → Component → Measurement
↓
Error Calculation (vs Target)
↓
Optimizer → New Parameters
↓
Repeat until convergence
Multi-Objective Optimization¶
Population of Solutions
↓
Evaluate all objectives
↓
Calculate Pareto Ranks
↓
Calculate Crowding Distances
↓
Select next generation
↓
Crossover & Mutation
↓
Repeat until convergence
↓
Select best from Pareto front
Subsystems¶
00_calibration_framework¶
Core framework con estructuras base:
- CalibrationTarget: Define qué calibrar
- CalibrationProcess: Pipeline estándar
- MultiObjectiveOptimizer: NSGA-II implementation
- CalibrationSignalGenerator: Test signal generation
01_frequency_calibration¶
Calibración de respuesta en frecuencia:
- FilterCalibrator: Filtros y EQs
- Log sweep o discrete tone measurement
- Gradient descent optimization
02_dynamics_calibration¶
Calibración de procesadores dinámicos: - Curvas de compresión - Tiempos de attack/release - Gate/expander thresholds
03_nonlinear_calibration¶
Calibración de no-linealidades: - Contenido armónico - Transfer functions - Saturación y distorsión
04_modulation_calibration¶
Calibración de moduladores: - Rangos de LFO - Curvas de envelope - Depths musicales
05_level_calibration¶
Calibración de niveles: - Gain staging - Unity gain - Headroom management
06_latency_calibration¶
Medición y compensación de latencia: - Sample-accurate measurement - Phase-locked loops - Delay compensation
07_reference_matching¶
Matching de referencias: - Hardware emulation - Null test calibration - Component matching
08_psychoacoustic_calibration¶
Calibración perceptual: - Loudness calibration - Equal loudness curves - Masking-aware optimization
09_adaptive_calibration¶
Auto-calibración: - Continuous calibration - ML-based parameter prediction - User preference learning
10_standards_compliance¶
Conformidad con estándares: - AES17 audio measurement - EBU R128 loudness - ITU-R BS.1770
Optimization Algorithms¶
Gradient Descent¶
Para espacios de parámetros suaves: - Learning rate adaptativo - Momentum para convergencia más rápida - Backtracking line search
Genetic Algorithm¶
Para espacios complejos: - Tournament selection - Uniform crossover - Gaussian mutation
Particle Swarm¶
Para optimización rápida: - Swarm intelligence - Global y local best - Inertia weight
Multi-Objective (NSGA-II)¶
Para objetivos competing: - Pareto optimization - Crowding distance para diversidad - Elitism
Extension Points¶
Custom Calibrators¶
Inherit from CalibrationProcess:
class MyCustomCalibrator : public CalibrationProcess {
protected:
bool prepare(CalibrationTarget& target) override {
// Custom preparation
}
MeasuredResponse measure(CalibrationTarget& target) override {
// Custom measurement
}
CalibrationResult optimize(/* ... */) override {
// Custom optimization
}
bool validate(/* ... */) override {
// Custom validation
}
void store(/* ... */) override {
// Custom storage
}
};
Custom Components¶
Implement ICalibratableComponent:
class MyComponent : public ICalibratableComponent {
public:
std::string getComponentId() const override;
void process(const float* input, float* output, size_t numSamples) override;
void setParameter(const std::string& name, float value) override;
float getParameter(const std::string& name) const override;
// ... etc
};
Custom Objectives¶
Add to CalibrationSpecification:
CalibrationSpecification spec(TargetType::CUSTOM);
spec.idealResponse = computeCustomTarget();
spec.importance = 0.8f;
Performance Considerations¶
Measurement Speed¶
- Log sweeps más rápidos que discrete tones
- Averaging reduce noise pero aumenta tiempo
- Cache resultados de mediciones idénticas
Optimization Speed¶
- Gradient descent rápido pero puede quedar stuck
- GA/PSO más robusto pero más lento
- Multi-objetivo significativamente más costoso
Memory Usage¶
- Response data puede ser grande (muchas frecuencias)
- Population-based algorithms usan mucha memoria
- Stream processing para señales largas
Error Handling¶
Component Errors¶
try {
result = calibrator.calibrate(target);
} catch (const std::exception& e) {
// Handle calibration failure
}
Convergence Failures¶
Validation Failures¶
if (result.success && !calibrator.validate(target, result)) {
// Calibration succeeded but validation failed
// May indicate instability
}
Thread Safety¶
CalibrationProcessis NOT thread-safe- Each thread should have its own calibrator instance
- Components should be thread-safe for parallel evaluation
- Use mutex for shared resources (databases, files)
Future Enhancements¶
Planned Features¶
- FFT-based frequency analysis
- Phase measurement
- Harmonic analysis
- Noise floor measurement
- Multi-channel calibration
- Real-time calibration
- Cloud-based calibration profiles
- ML-based parameter prediction
Performance Improvements¶
- Parallel evaluation in GA/PSO
- GPU acceleration for FFT
- Cache optimization
- SIMD for signal processing
Usability Improvements¶
- GUI for calibration visualization
- Preset calibration profiles
- Automatic component discovery
- Calibration scheduling
References¶
Academic Papers¶
- "Multi-Objective Optimization Using Evolutionary Algorithms" (Deb, 2001)
- "A Fast Elitist Non-Dominated Sorting Genetic Algorithm: NSGA-II" (Deb et al., 2002)
- "Audio Measurement Handbook" (Metzler, 2005)
Standards¶
- AES17: Digital Audio Measurement
- EBU R128: Loudness normalisation
- ITU-R BS.1770: Loudness measurement
- IEC 61606: Digital Audio Interfaces
Tools¶
- Audio Precision APx series
- QuantAsylum QA400 series
- MATLAB Audio Toolbox
- Python librosa, scipy.signal
Version: 1.0.0 Last Updated: 2025-10-14 Maintainer: AudioLab Team