Even-Odd Harmonic Binaural Separation — User Guide
Separates alternating harmonic regions around one global F0 into stereo channels: the odd-series output suppresses even-harmonic bands, while the even-series output suppresses odd-harmonic bands. Two methods are available: cascading Hann stop-band filters or single-pass spectral zeroing.
What this does
The script takes one selected Sound, converts multichannel material to a mono working source, determines one fundamental frequency F0, and builds one or both of two filtered versions:
The fundamental is harmonic 1, so it belongs to the odd series. The even-series output therefore suppresses the fundamental. This asymmetry is intentional and can make the two channels sound very different even when the filtering itself is working correctly.
Quick start
- Select exactly one Sound.
- Run
Even-Odd_Harmonic_Binaural_Separation.praat. - Choose a Preset to determine which series is placed in each output channel.
- Choose Cascading notches or Spectral zeroing.
- For automatic F0, set a realistic Pitch_floor and Pitch_ceiling.
- For manual operation, disable Auto_detect_F0 and enter Manual_F0_Hz. Preset 5 does this automatically.
- Set Maximum_frequency and Filter_width_factor.
- Run the script and inspect the LTAS panel if visualization is enabled.
Presets
| Preset | Left channel | Right channel | F0 behavior |
|---|---|---|---|
| 1. Odd Left / Even Right | Odd-series version | Even-series version | Uses Auto_detect_F0 setting. |
| 2. Even Left / Odd Right | Even-series version | Odd-series version | Uses Auto_detect_F0 setting. |
| 3. Odd Only | Odd-series version | Same Odd version | Uses Auto_detect_F0 setting. |
| 4. Even Only | Even-series version | Same Even version | Uses Auto_detect_F0 setting. |
| 5. Custom | Odd-series version | Even-series version | Forces manual F0 from Manual_F0_Hz. |
Presets 3 and 4 do not return mono Sounds. The chosen processed Sound is duplicated with Convert to stereo, so both output channels are identical.
Separation methods
Cascading notches — default
Starting from a copy of the mono source, the script repeatedly applies Praat's Hann stop-band filter at every harmonic that must be rejected.
For the odd-series output, even harmonics are rejected. For the even-series output, odd harmonics are rejected. Each filtering pass becomes the input to the next pass.
Spectral zeroing
The source is transformed once to a whole-file Spectrum. A single formula sets every complex-spectrum bin whose frequency lies inside any rejected harmonic band to zero. The modified Spectrum is then inverse-transformed to a Sound.
This method gives sharper rejection than the cascading Hann filters, but its abrupt whole-file spectral editing can create time-domain ringing or pre-echo around transients. It is therefore a different trade-off, not simply a “higher quality” mode.
F0 detection and harmonic grid
Automatic detection
The detected value is one global mean F0. The notch grid does not follow a changing pitch contour. If Praat cannot obtain a defined mean pitch, the script falls back to Manual_F0_Hz and reports the fallback in the Info window.
Manual F0
Disable Auto_detect_F0 to use Manual_F0_Hz. Preset 5 always disables auto detection internally and uses the manual value.
Maximum harmonic
The processing loops also stop when a harmonic centre would exceed Nyquist − 200 Hz. Therefore, if Maximum_frequency is set above the usable bandwidth of the current Sound, fewer harmonics are actually filtered than the nominal maxHarmonic value suggests.
Filter width
Filter_width_factor controls the half-width of every rejected band, not its complete bandwidth:
For example, at F0 = 100 Hz and factor = 0.4, a notch centered on 200 Hz spans approximately 160–240 Hz: ±40 Hz, or 80 Hz total before considering the Hann transition behavior.
Parameters
| Parameter | Default | Actual role |
|---|---|---|
| Preset | Odd Left / Even Right | Controls channel orientation, series-only output, or manual-F0 Custom mode. |
| Method | Cascading notches | Iterative Hann band-stop filtering or whole-file spectral bin zeroing. |
| Auto_detect_F0 | on | Uses mean Praat pitch over the complete file. Forced off by Preset 5. |
| Pitch_floor | 75 Hz | Lower bound for automatic pitch analysis. |
| Pitch_ceiling | 600 Hz | Upper bound for automatic pitch analysis. |
| Manual_F0_Hz | 100 Hz | Manual F0 and fallback when auto detection fails. |
| Maximum_frequency | 5000 Hz | Upper requested harmonic-grid limit; actual filtering also obeys Nyquist − 200 Hz. |
| Filter_width_factor | 0.4 | Rejected-band half-width as a proportion of F0. |
| Draw_visualization | on | Draws the v0.5 harmonic-layout / LTAS / notch-pattern figure. |
| Play_result | on | Plays the final stereo Sound. |
Level handling
The two processed series are peak-scaled independently to 0.95 before they are combined into stereo:
Output
The result is always stereo and is named:
Method names used in object names are CascadeNotches and SpectralZero. Preset labels are OddL_EvenR, EvenL_OddR, OddOnly, EvenOnly, or Custom.
Visualization v0.5
The current 8 × 8 visualization separates the intended harmonic routing from the measured output spectrum.
Implementation notes & limitations
- Input is mono-derived: any multichannel source is converted to mono with Praat's ordinary mono conversion before analysis and filtering.
- One global F0: auto mode uses the mean detected pitch, not a frame-by-frame moving harmonic grid.
- Not an additive/sinusoidal decomposition: the tool removes frequency bands; it does not identify and resynthesize individual harmonic partials.
- Broadband material remains: noise and inharmonic content outside the rejected bands can appear in both series.
- Fundamental asymmetry: harmonic 1 belongs to the odd series and is rejected from the even series.
- Near Nyquist: harmonic targets above Nyquist − 200 Hz are skipped.
- Cascading mode: successive Hann stop-band filters accumulate their spectral and temporal effects.
- Spectral-zero mode: sharper whole-file spectral edits can produce ringing/pre-echo around transients.
- Independent normalization: the delivered stereo pair does not preserve the source's natural odd/even amplitude relationship.
- Not HRTF binaural: the stereo channel split is intended for left/right comparison; it does not model a listener's anatomy or 3D localization.