Summary
This experiment investigates vinyl playback optimization. Box-Behnken design to maximize audio fidelity and minimize surface noise by tuning tracking force, anti-skate, and cartridge alignment.
The design varies 3 factors: tracking force g (g), ranging from 1.2 to 2.2, anti skate g (g), ranging from 0.5 to 2.0, and overhang mm (mm), ranging from 14 to 18. The goal is to optimize 2 responses: fidelity score (pts) (maximize) and surface noise (dB) (minimize). Fixed conditions held constant across all runs include turntable = belt_drive, cartridge type = moving_magnet.
A Box-Behnken design was chosen because it efficiently fits quadratic models with 3 continuous factors while avoiding extreme corner combinations — requiring only 15 runs instead of the 8 needed for a full factorial at two levels.
Quadratic response surface models were fitted to capture potential curvature and factor interactions. The RSM contour plots below visualize how pairs of factors jointly affect each response.
Key Findings
For fidelity score, the most influential factors were anti skate g (62.3%), tracking force g (22.0%), overhang mm (15.7%). The best observed value was 7.3 (at tracking force g = 1.7, anti skate g = 2, overhang mm = 18).
For surface noise, the most influential factors were overhang mm (37.8%), anti skate g (33.8%), tracking force g (28.4%). The best observed value was -57.0 (at tracking force g = 1.2, anti skate g = 0.5, overhang mm = 16).
Recommended Next Steps
- Run confirmation experiments at the predicted optimal settings to validate the model.
- Consider whether any fixed factors should be varied in a future study.
Experimental Setup
Factors
| Factor | Low | High | Unit |
tracking_force_g | 1.2 | 2.2 | g |
anti_skate_g | 0.5 | 2.0 | g |
overhang_mm | 14 | 18 | mm |
Fixed: turntable = belt_drive, cartridge_type = moving_magnet
Responses
| Response | Direction | Unit |
fidelity_score | ↑ maximize | pts |
surface_noise | ↓ minimize | dB |
Configuration
{
"metadata": {
"name": "Vinyl Playback Optimization",
"description": "Box-Behnken design to maximize audio fidelity and minimize surface noise by tuning tracking force, anti-skate, and cartridge alignment"
},
"factors": [
{
"name": "tracking_force_g",
"levels": [
"1.2",
"2.2"
],
"type": "continuous",
"unit": "g"
},
{
"name": "anti_skate_g",
"levels": [
"0.5",
"2.0"
],
"type": "continuous",
"unit": "g"
},
{
"name": "overhang_mm",
"levels": [
"14",
"18"
],
"type": "continuous",
"unit": "mm"
}
],
"fixed_factors": {
"turntable": "belt_drive",
"cartridge_type": "moving_magnet"
},
"responses": [
{
"name": "fidelity_score",
"optimize": "maximize",
"unit": "pts"
},
{
"name": "surface_noise",
"optimize": "minimize",
"unit": "dB"
}
],
"settings": {
"operation": "box_behnken",
"test_script": "use_cases/159_vinyl_playback/sim.sh"
}
}
Experimental Matrix
The Box-Behnken Design produces 15 runs. Each row is one experiment with specific factor settings.
| Run | tracking_force_g | anti_skate_g | overhang_mm |
| 1 | 1.7 | 0.5 | 14 |
| 2 | 1.7 | 1.25 | 16 |
| 3 | 2.2 | 1.25 | 18 |
| 4 | 2.2 | 1.25 | 14 |
| 5 | 1.7 | 1.25 | 16 |
| 6 | 1.7 | 1.25 | 16 |
| 7 | 1.2 | 1.25 | 18 |
| 8 | 2.2 | 0.5 | 16 |
| 9 | 1.7 | 0.5 | 18 |
| 10 | 2.2 | 2 | 16 |
| 11 | 1.2 | 1.25 | 14 |
| 12 | 1.7 | 2 | 18 |
| 13 | 1.2 | 0.5 | 16 |
| 14 | 1.2 | 2 | 16 |
| 15 | 1.7 | 2 | 14 |
Step-by-Step Workflow
1
Preview the design
$ doe info --config use_cases/159_vinyl_playback/config.json
2
Generate the runner script
$ doe generate --config use_cases/159_vinyl_playback/config.json \
--output use_cases/159_vinyl_playback/results/run.sh --seed 42
3
Execute the experiments
$ bash use_cases/159_vinyl_playback/results/run.sh
4
Analyze results
$ doe analyze --config use_cases/159_vinyl_playback/config.json
5
Get optimization recommendations
$ doe optimize --config use_cases/159_vinyl_playback/config.json
6
Multi-objective optimization
With 2 competing responses, use --multi to find the best compromise via Derringer–Suich desirability.
$ doe optimize --config use_cases/159_vinyl_playback/config.json --multi
7
Generate the HTML report
$ doe report --config use_cases/159_vinyl_playback/config.json \
--output use_cases/159_vinyl_playback/results/report.html
Features Exercised
| Feature | Value |
| Design type | box_behnken |
| Factor types | continuous (all 3) |
| Arg style | double-dash |
| Responses | 2 (fidelity_score ↑, surface_noise ↓) |
| Total runs | 15 |
Analysis Results
Generated from actual experiment runs using the DOE Helper Tool.
Response: fidelity_score
Top factors: anti_skate_g (62.3%), tracking_force_g (22.0%), overhang_mm (15.7%).
ANOVA
| Source | DF | SS | MS | F | p-value |
| Source | DF | SS | MS | F | p-value |
| tracking_force_g | 2 | 0.4172 | 0.2086 | 0.288 | 0.7569 |
| anti_skate_g | 2 | 3.2533 | 1.6266 | 2.249 | 0.1679 |
| overhang_mm | 2 | 0.2775 | 0.1388 | 0.192 | 0.8291 |
| Lack | of | Fit | 6 | 5.2947 | 0.8824 |
| Pure | Error | 2 | 1.4467 | | |
| Error | 8 | 6.7413 | 0.7233 | | |
| Total | 14 | 10.6893 | 0.7635 | | |
Pareto Chart
Main Effects Plot
Normal Probability Plot of Effects
Half-Normal Plot of Effects
Model Diagnostics
Response: surface_noise
Top factors: overhang_mm (37.8%), anti_skate_g (33.8%), tracking_force_g (28.4%).
ANOVA
| Source | DF | SS | MS | F | p-value |
| Source | DF | SS | MS | F | p-value |
| tracking_force_g | 2 | 1.4690 | 0.7345 | 0.184 | 0.8357 |
| anti_skate_g | 2 | 2.3262 | 1.1631 | 0.291 | 0.7553 |
| overhang_mm | 2 | 2.0048 | 1.0024 | 0.251 | 0.7842 |
| Lack | of | Fit | 6 | 27.1333 | 4.5222 |
| Pure | Error | 2 | 8.0000 | | |
| Error | 8 | 35.1333 | 4.0000 | | |
| Total | 14 | 40.9333 | 2.9238 | | |
Pareto Chart
Main Effects Plot
Normal Probability Plot of Effects
Half-Normal Plot of Effects
Model Diagnostics
Response Surface Plots
3D surfaces fitted with quadratic RSM. Red dots are observed data points.
fidelity score anti skate g vs overhang mm
fidelity score tracking force g vs anti skate g
fidelity score tracking force g vs overhang mm
surface noise anti skate g vs overhang mm
surface noise tracking force g vs anti skate g
surface noise tracking force g vs overhang mm
Multi-Objective Optimization
When responses compete, Derringer–Suich desirability finds the best compromise.
Each response is scaled to a 0–1 desirability, then combined via a weighted geometric mean.
Overall Desirability
D = 0.9784
Per-Response Desirability
| Response | Weight | Desirability | Predicted | Dir |
fidelity_score |
1.5 |
|
7.68 1.0000 7.68 pts |
↑ |
surface_noise |
1.0 |
|
-56.96 0.9470 -56.96 dB |
↓ |
Recommended Settings
| Factor | Value |
tracking_force_g | 1.2 g |
anti_skate_g | 2 g |
overhang_mm | 18 mm |
Source: from RSM model prediction
Trade-off Summary
Sacrifice = how much worse than single-objective best.
| Response | Predicted | Best Observed | Sacrifice |
surface_noise | -56.96 | -57.00 | +0.04 |
Top 3 Runs by Desirability
| Run | D | Factor Settings |
| #6 | 0.7879 | tracking_force_g=1.2, anti_skate_g=1.25, overhang_mm=18 |
| #2 | 0.7711 | tracking_force_g=2.2, anti_skate_g=0.5, overhang_mm=16 |
Model Quality
| Response | R² | Type |
surface_noise | 0.7333 | quadratic |
Full Multi-Objective Output
============================================================
MULTI-OBJECTIVE OPTIMIZATION
Method: Derringer-Suich Desirability Function
============================================================
Overall desirability: D = 0.9784
Response Weight Desirability Predicted Direction
---------------------------------------------------------------------
fidelity_score 1.5 1.0000 7.68 pts ↑
surface_noise 1.0 0.9470 -56.96 dB ↓
Recommended settings:
tracking_force_g = 1.2 g
anti_skate_g = 2 g
overhang_mm = 18 mm
(from RSM model prediction)
Trade-off summary:
fidelity_score: 7.68 (best observed: 7.30, sacrifice: -0.38)
surface_noise: -56.96 (best observed: -57.00, sacrifice: +0.04)
Model quality:
fidelity_score: R² = 0.8226 (quadratic)
surface_noise: R² = 0.7333 (quadratic)
Top 3 observed runs by overall desirability:
1. Run #5 (D=0.8395): tracking_force_g=2.2, anti_skate_g=1.25, overhang_mm=14
2. Run #6 (D=0.7879): tracking_force_g=1.2, anti_skate_g=1.25, overhang_mm=18
3. Run #2 (D=0.7711): tracking_force_g=2.2, anti_skate_g=0.5, overhang_mm=16
Full Analysis Output
=== Main Effects: fidelity_score ===
Factor Effect Std Error % Contribution
--------------------------------------------------------------
anti_skate_g 1.2750 0.2256 62.3%
tracking_force_g 0.4500 0.2256 22.0%
overhang_mm 0.3214 0.2256 15.7%
=== ANOVA Table: fidelity_score ===
Source DF SS MS F p-value
-----------------------------------------------------------------------------
tracking_force_g 2 0.4172 0.2086 0.288 0.7569
anti_skate_g 2 3.2533 1.6266 2.249 0.1679
overhang_mm 2 0.2775 0.1388 0.192 0.8291
Lack of Fit 6 5.2947 0.8824 1.220 0.5155
Pure Error 2 1.4467 0.7233
Error 8 6.7413 0.7233
Total 14 10.6893 0.7635
=== Summary Statistics: fidelity_score ===
tracking_force_g:
Level N Mean Std Min Max
------------------------------------------------------------
1.2 4 6.2250 1.0145 5.0000 7.2000
1.7 7 6.0571 0.7547 5.1000 7.1000
2.2 4 5.7750 1.1206 4.6000 7.3000
anti_skate_g:
Level N Mean Std Min Max
------------------------------------------------------------
0.5 4 5.4000 0.2828 5.0000 5.6000
1.25 7 6.0143 0.9856 4.6000 7.2000
2 4 6.6750 0.6752 5.8000 7.3000
overhang_mm:
Level N Mean Std Min Max
------------------------------------------------------------
14 4 5.9750 1.1266 4.6000 7.2000
16 7 5.9286 0.8480 5.0000 7.3000
18 4 6.2500 0.8737 5.4000 7.1000
=== Main Effects: surface_noise ===
Factor Effect Std Error % Contribution
--------------------------------------------------------------
overhang_mm 1.0000 0.4415 37.8%
anti_skate_g 0.8929 0.4415 33.8%
tracking_force_g 0.7500 0.4415 28.4%
=== ANOVA Table: surface_noise ===
Source DF SS MS F p-value
-----------------------------------------------------------------------------
tracking_force_g 2 1.4690 0.7345 0.184 0.8357
anti_skate_g 2 2.3262 1.1631 0.291 0.7553
overhang_mm 2 2.0048 1.0024 0.251 0.7842
Lack of Fit 6 27.1333 4.5222 1.131 0.5394
Pure Error 2 8.0000 4.0000
Error 8 35.1333 4.0000
Total 14 40.9333 2.9238
=== Summary Statistics: surface_noise ===
tracking_force_g:
Level N Mean Std Min Max
------------------------------------------------------------
1.2 4 -54.5000 1.7321 -56.0000 -52.0000
1.7 7 -54.4286 1.9881 -57.0000 -52.0000
2.2 4 -53.7500 1.5000 -55.0000 -52.0000
anti_skate_g:
Level N Mean Std Min Max
------------------------------------------------------------
0.5 4 -54.7500 2.2174 -57.0000 -52.0000
1.25 7 -53.8571 1.5736 -56.0000 -52.0000
2 4 -54.5000 1.7321 -56.0000 -52.0000
overhang_mm:
Level N Mean Std Min Max
------------------------------------------------------------
14 4 -54.7500 2.0616 -57.0000 -52.0000
16 7 -54.2857 1.7043 -56.0000 -52.0000
18 4 -53.7500 1.7078 -56.0000 -52.0000
Optimization Recommendations
=== Optimization: fidelity_score ===
Direction: maximize
Best observed run: #6
tracking_force_g = 1.7
anti_skate_g = 2
overhang_mm = 18
Value: 7.3
RSM Model (linear, R² = 0.0138, Adj R² = -0.2552):
Coefficients:
intercept +6.0267
tracking_force_g -0.0125
anti_skate_g +0.0750
overhang_mm +0.1125
RSM Model (quadratic, R² = 0.3508, Adj R² = -0.8177):
Coefficients:
intercept +5.7333
tracking_force_g -0.0125
anti_skate_g +0.0750
overhang_mm +0.1125
tracking_force_g*anti_skate_g -0.1750
tracking_force_g*overhang_mm -0.3500
anti_skate_g*overhang_mm +0.6750
tracking_force_g^2 -0.1417
anti_skate_g^2 +0.1833
overhang_mm^2 +0.5083
Curvature analysis:
overhang_mm coef=+0.5083 convex (has a minimum)
anti_skate_g coef=+0.1833 convex (has a minimum)
tracking_force_g coef=-0.1417 concave (has a maximum)
Notable interactions:
anti_skate_g*overhang_mm coef=+0.6750 (synergistic)
tracking_force_g*overhang_mm coef=-0.3500 (antagonistic)
Predicted optimum (from linear model, at observed points):
tracking_force_g = 1.7
anti_skate_g = 2
overhang_mm = 18
Predicted value: 6.2142
Surface optimum (via L-BFGS-B, linear model):
tracking_force_g = 1.2
anti_skate_g = 2
overhang_mm = 18
Predicted value: 6.2267
Model quality: Weak fit — consider adding center points or using a different design.
Factor importance:
1. overhang_mm (effect: 0.6, contribution: 58.6%)
2. anti_skate_g (effect: 0.2, contribution: 22.0%)
3. tracking_force_g (effect: 0.2, contribution: 19.3%)
=== Optimization: surface_noise ===
Direction: minimize
Best observed run: #7
tracking_force_g = 1.2
anti_skate_g = 0.5
overhang_mm = 16
Value: -57.0
RSM Model (linear, R² = 0.0550, Adj R² = -0.2028):
Coefficients:
intercept -54.2667
tracking_force_g +0.3750
anti_skate_g +0.0000
overhang_mm +0.3750
RSM Model (quadratic, R² = 0.3546, Adj R² = -0.8070):
Coefficients:
intercept -54.6667
tracking_force_g +0.3750
anti_skate_g +0.0000
overhang_mm +0.3750
tracking_force_g*anti_skate_g +0.2500
tracking_force_g*overhang_mm +1.5000
anti_skate_g*overhang_mm +0.2500
tracking_force_g^2 -0.1667
anti_skate_g^2 +0.0833
overhang_mm^2 +0.8333
Curvature analysis:
overhang_mm coef=+0.8333 convex (has a minimum)
tracking_force_g coef=-0.1667 concave (has a maximum)
anti_skate_g coef=+0.0833 negligible curvature
Notable interactions:
tracking_force_g*overhang_mm coef=+1.5000 (synergistic)
Predicted optimum (from linear model, at observed points):
tracking_force_g = 2.2
anti_skate_g = 1.25
overhang_mm = 18
Predicted value: -53.5167
Surface optimum (via L-BFGS-B, linear model):
tracking_force_g = 1.2
anti_skate_g = 1.15832
overhang_mm = 14
Predicted value: -55.0167
Model quality: Weak fit — consider adding center points or using a different design.
Factor importance:
1. overhang_mm (effect: 1.2, contribution: 60.7%)
2. tracking_force_g (effect: 0.8, contribution: 37.5%)
3. anti_skate_g (effect: 0.0, contribution: 1.8%)