A perceptually optimized EQ framework that scales with the biology of human hearing.
Most headphone targets (such as Harman) are static averages of subjective listener preferences. This project takes a physiological approach. By deriving a target strictly from the ISO 226:2023 equal-loudness contours, this framework delivers a perceptually flat, energy-balanced response that minimizes auditory masking and preserves midrange clarity at natural listening volumes.
- The Theory
- The Calibration Ritual
- The Included Curves
- The Toolkit
- Quick Start
- Measurement Platform Compatibility
- IEM Compatibility
- Harman Target Deviation
- What I learned
Human hearing is non-linear; we are highly sensitive to mid-frequencies (where human speech lives) and significantly less sensitive to sub-bass and extreme treble. This target uses the latest ISO 226:2023 data at an 85-phon reference level to map exactly how much acoustic pressure is required at every frequency for the brain to perceive the spectrum as equally loud.
Applying raw equal-loudness contours directly to headphones results in a skewed response because headphones bypass the outer ear, lacking the natural acoustic interaction of a physical room. To correct this, the target inverts the sensitivity data above 1 kHz to properly reconstruct the required pinna gain area.
Combined with adaptive shaping and spectral tilt, this mathematically balances the total acoustic energy across the frequency spectrum while maintaining the integrity of the ISO baseline.
Bass tuning is a battle against auditory masking, where excessive low-frequency energy bleeds into and obscures the lower midrange. To solve this, I defined a boundary range between two extreme profiles:
headphone_target_0.00.csv: The "Clinical Floor"—the absolute mathematical minimum of the bass shelf.headphone_target_1.00.csv: The "Maximum Ceiling"—the maximum saturation of the bass shelf.
The family of curves was generated by calculating a weighted linear interpolation between these two boundaries. If
Through extensive A/B listening validation and polynomial regression analysis (
The 0.3661543 optimal target is calibrated to an 85-phon reference level—the "unity" point for the ISO 226:2023 contours. Because headphone sensitivity varies, you must calibrate your playback system to match this 85-phon baseline to ensure the EQ curve behaves exactly as engineered.
The Workflow:
- Reference Signal: Play a Pink Noise generator through your system.
- The Measurement: Place a measurement device (e.g., an iPhone running Decibel X) sandwiched snugly between your earcups to mimic the seal against your head.
- The Calibration Settings: Set your SPL app to C-Weighting (dBC) and Slow response time.
- The Calibration: Pan your pink noise to one channel only (Left or Right). Adjust your amplifier/interface volume until the average reading sits exactly at 85 dBC.
- The Baseline: Your setup is now calibrated to the 85-phon reference. At this volume, the EQ curve will prevent auditory masking and preserve midrange clarity.
Note: Calibrating to one side ensures you are hitting the 85-phon target per driver, preventing math errors caused by signal summation. If your headphone channel-matching is accurate, both sides will now sit perfectly at 85 dBC. Repeat this step whenever you switch headphones.
All provided CSV files are 0 dB normalized at 1 kHz and calculated for the 85-phon reference level.
| Target File | Bass Shelf Weight | Description |
|---|---|---|
headphone_target_0.00.csv |
0.00 | The absolute mathematical floor of the bass transition. |
headphone_target_0.25.csv |
0.25 | Reduced low-end weight. |
headphone_target_0.3661543.csv |
0.366 | The Solved Baseline. Maximum low-end authority with zero midrange masking at 85 phon. |
headphone_target_0.50.csv |
0.50 | Elevated low-end weight. |
headphone_target_0.75.csv |
0.75 | Heavy low-end weight. |
headphone_target_1.00.csv |
1.00 | The mathematical ceiling of the bass transition. |
Warning
A Note on Listening Volume: The optimal 0.3661543 curve provided above is engineered specifically for an 85-phon listening level. Because human hearing sensitivity shifts dramatically with volume, this target will not be perceptually accurate at significantly lower or higher volumes.
If you prefer to listen at a quieter or louder volume, do not just pick a different CSV file from the table. Instead, use the included gentarget.py tool to generate a mathematically accurate curve tailored to your exact listening level.
💡 The Ultimate Sanity Check: Trust Your Ears While the "sandwich" method gets you into the exact mathematical ballpark, it cannot account for your unique ear canal anatomy or personal hearing response (HRTF). ISO 226:2023 is a statistical average of human hearing, not a biological absolute for your ears.
Once you complete the physical calibration, play a familiar, well-engineered track. If the spectrum doesn't sound perceptually flat to you, nudge the volume up or down slightly until the midrange balances out. Your brain is the final audio analyzer—adjust the volume to what sounds flattest to you, regardless of what the phone screen says.
This repository includes custom Python tools to generate dynamic targets and perform accurate psychoacoustic A/B testing.
Generate targets scaled to any phon level, or derive a custom ISO-based target from raw headphone measurements or existing target curves like Harman.
Usage:
# Standard optimal target at 85 phon
python gentarget.py --phon 85
# Target adjusted for a quieter listening level (e.g., 75 phon)
python gentarget.py --phon 75
# Derive an ISO-corrected target from your own headphone's raw measurement CSV
python gentarget.py --phon 82 --input my_headphone_raw.csv
# Change reference frequency from the 1000 Hz default
python gentarget.py --phon 85 --ref 500
Arguments:
-p,--phon: Target loudness in phon (Default: 85)-r,--ref: Reference frequency for 0 dB normalization (Default: 1000)-i,--input: Optional CSV to derive a custom target from-b,--base-phon: Phon level of the input curve (Default: 85)
Switching between EQ profiles often changes the overall perceived volume, which invalidates A/B testing (the brain naturally prefers the louder signal). This script automatically adjusts the Preamp of a target EQ profile to match the perceived loudness of your source profile using linear power summation and selectable psychoacoustic weighting curves.
By default, the script uses C-weighting. Traditional A-weighting aggressively rolls off low frequencies (mimicking human hearing at very quiet ~40 phon levels). If you try to A/B test a bass-heavy profile (like Harman) using A-weighting, the script will ignore the bass energy and the resulting match will sound significantly louder than your target. C-weighting correctly registers low-end acoustic energy, making it the mathematically accurate lens for our 85-phon baseline.
Usage:
# Standard match using default C-weighting (Recommended for 85-phon targets)
python volume_match.py source_eq.txt target_eq.txt
# Match using A-weighting (Best if calibrating for very quiet listening ~40 phon)
python volume_match.py source_eq.txt target_eq.txt -w A
# Match using Z-weighting (Zero/Unweighted raw power summation)
python volume_match.py source_eq.txt target_eq.txt -w ZOutputs a new file (target_eq_volume_matched.txt) with a mathematically corrected Preamp value. The resulting file can be loaded directly into SoundSource or Equalizer APO (including the Peace GUI) and is fully compatible with profiles generated by AutoEQ or AcoustiQ.
- Download
headphone_target_0.3661543.csv. - Load the file as a custom target in AcoustiQ or AutoEQ, alongside your headphone's raw measurement to generate your EQ filters.
- Import those generated filters into your preferred DSP (SoundSource, Equalizer APO, Roon, etc.).
- Calibrate your amplifier to 85 dBC using pink noise.
If you wish to use the Python scripts to generate custom phon levels, install the dependencies:
pip install numpy
The target was derived purely from ISO 226:2023 and first principles. It was subsequently found to be compatible with GRAS measurement infrastructure, which was independently engineered to approximate average human ear canal acoustics. Users measuring on GRAS rigs can therefore expect a consistent measurement chain between their hardware and this target.
Users on the B&K 5128 platform should be aware that its differing ear canal geometry may require accounting for platform-specific deviations, particularly at higher frequencies. Congratulations to everyone who bought the new standard so they could measure the wrong transfer function more accurately.
The target has been validated on IEMs using impulse testing (click train) with the 7Hz Zero:2. The target scales correctly across transducer types, which is consistent with the ISO 226 foundation — the biology doesn't change based on how the sound is delivered.
This precise scaling is demonstrated below in the EQ optimization for the 7Hz Zero:2. Even on a budget IEM, the parametric correction accurately tracks the ISO-derived target curve across the entire frequency spectrum:
7Hz Zero:2 to ISO 226:2023 EQ Profile
Preamp: -7.2 dB
Filter 1: ON PK Fc 31.82 Hz Gain -5.27 dB Q 0.423
Filter 2: ON PK Fc 89.79 Hz Gain -9.39 dB Q 0.272
Filter 3: ON PK Fc 935.12 Hz Gain 7.40 dB Q 0.960
Filter 4: ON PK Fc 991.83 Hz Gain -6.31 dB Q 0.625
Filter 5: ON PK Fc 999.09 Hz Gain 1.89 dB Q 5.000
Filter 6: ON PK Fc 1487.42 Hz Gain -7.54 dB Q 1.081
Filter 7: ON PK Fc 2815.58 Hz Gain 3.55 dB Q 0.260
Filter 8: ON PK Fc 8035.74 Hz Gain -15.80 dB Q 1.825
Filter 9: ON PK Fc 11109.70 Hz Gain 5.09 dB Q 2.960
Filter 10: ON PK Fc 16000.00 Hz Gain 7.40 dB Q 1.398
To test the framework against an uncompromising, deep-insertion hardware platform, the target was further validated on the Etymotic ER2SE. Known for its exceptionally low distortion, the ER2SE serves as an ideal physical baseline for psychoacoustic correction.
The parametric fit achieves an RMS error of just 0.74 dB across the active fit region (20 Hz–17 kHz). The optimization eliminates the raw driver's native 1.4 kHz diffuse-field shout and high-frequency canal resonance, transforming an ultra-low distortion transducer into a true, fatigue-free studio monitor:
Etymotic ER2SE to ISO 226:2023 EQ Profile
Preamp: -9.5 dB
Filter 1: ON PK Fc 20.00 Hz Gain 3.37 dB Q 4.219
Filter 2: ON PK Fc 25.00 Hz Gain 4.64 dB Q 1.273
Filter 3: ON PK Fc 27.26 Hz Gain -1.49 dB Q 1.578
Filter 4: ON PK Fc 138.08 Hz Gain -6.03 dB Q 0.250
Filter 5: ON PK Fc 1003.96 Hz Gain 5.23 dB Q 1.264
Filter 6: ON PK Fc 1480.88 Hz Gain -10.10 dB Q 1.652
Filter 7: ON PK Fc 9081.29 Hz Gain -10.10 dB Q 1.907
Filter 8: ON PK Fc 11834.86 Hz Gain 5.69 dB Q 2.952
Filter 9: ON PK Fc 12550.66 Hz Gain 7.50 dB Q 2.474
I initially wondered why the Harman target sounds so similar to this Headphone Target, albeit with some bass bloom and treble hiss. To understand the exact difference, I plotted the deviation of the Harman target against my own, alongside a raw ISO 226 contour.
In the plot below, the Headphone Target is flattened into a straight baseline, and the Harman curve is plotted as the deviation from that line. The result is a smoking gun: while the bass naturally diverges (which is expected, given that ISO 226 is a free-field measurement lacking the acoustic pressure-chamber seal of headphones), the Harman deviation almost perfectly traces the shape of the ISO 226 curve everywhere above 200 Hz.
It seems the Harman target is essentially a "double-decker bus": a target built on top of another target. Given the constraints of the testing environment, the listening panels organically gravitated toward the curve that felt most natural to the human ear, effectively stacking an equal-loudness contour directly on top of whatever acoustic baseline they started with.
🔊 By the way, if you fancy your speakers sounding like the Harman target, just EQ them against the Harman_deviation.csv included in the targets folder. 🔊
My main takeaway from this project is that if I were an audio researcher, I wouldn't let the auditory system adjust existing auditory-related curves, because the listener's own biological baseline just gets baked in. Instead, I would bypass that feedback loop entirely and put resources into extending ISO 226 directly to headphones and IEMs.
Averaging by definition eliminates individual variance. With enough listeners, the individual ear differences cancel out and what remains is what every human ear has in common. In this case, that common thing is auditory biology.
Analogy: If you measure a signal with 250 uncalibrated microphones, the average result will include the frequency response of the microphones themselves. The Harman deviation plot above illustrates this directly.
When the Harman target is plotted as a deviation from this ISO 226-derived baseline, the residual above 200 Hz traces the shape of the equal-loudness contour almost exactly. The listening panels did not converge on a preference. They converged on their own auditory system. The data already contains the optimal target. It just hasn't been read that way yet.
ResponseRank data shows that Audeze is the only manufacturer consistently building headphones that respect human hearing, within the limits of planar magnetic physics.
While the market as a whole is converging towards a measurement error.
MIT








