When we combine the outputs of two loudspeaker drivers with a crossover, we usually want the drivers’ outputs to add in-phase. Otherwise the summed frequency response gets wobbly, as does the polar response, thanks to destructive interference. Even with an even-order crossover designed to have its outputs in-phase, there’s usually some confounding factor to mess things up: physical offsets of the drivers, and/or phase shifts introduced by equalization, the acoustic response of the baffle, and the high-pass characteristic of the drivers themselves.
The remedy here is to delay the signal to one of the drivers, bringing them into alignment at the crossover frequency (and hopefully out to an octave or so on either side). In the analog world this can be done by exploiting the group delay of an all-pass filter. With a digital crossover it’s easier: we just hold back the signal for as many samples as needed.
But how to set the right amount of delay? Here’s the standard trick:
- Invert the phase of one of the drivers (just wire it backwards) and measure the combined acoustic response.
- Vary the delay to get the deepest interference null at the crossover frequency.
- Now the drivers are 180° out of phase; wire them back up the right way round and they’re in-phase.
This sounds easy, but when I first tried it there were hiccups. When I measured an in-room acoustic response, the room reflections made it hard to see the interference null. So I went to a gated measurement, and that worked. But it won’t do for a crossover below about 500Hz, where gating causes loss of resolution. I don’t know what people do. I guess you’d have to go outside, or ask for an anechoic chamber for your birthday.
I wanted to see how the measurements ought to look under ideal conditions, so I ran some simulations. My fave tool for this (any many things) is ecasound. Here’s a command that inputs a wav file, splits the signal with a 4th-order Linkwitz-Riley crossover at 1kHz, delays the low-pass section by 0.2ms, inverts the high-pass section, then sums the outputs:
ecasound -a:all -i:infile.wav -o:outfile.wav \ -a:low -efl:1000 -efl:1000 -eli:1053,0.0002,1 \ -a:high -efh:1000 -efh:1000 -ea:-100
Pretty simple for what is does. The delay is provided by a nice little LADSPA plugin. With the usual MLS techniques we can measure the frequency response of this filter: feed it an MLS signal, sift the output to derive an impulse response, then do an FFT to get the transfer function. I had scripts for this sort of thing anyway. Here’s what we get, for various delays…
… a nice deep null at 1kHz, as expected. But that’s not what I measured when I did this in real life. My real-life measurement looked more like this one (change -ea:-100 to -ea:-50 in the ecasound command):
This happens when the drivers’ levels aren’t matched. There’s still a deep null, which gets deeper as the drivers come into alignment, but it’s not at 1kHz. Why?!
Well, the interference null occurs where the outputs are 180° out of phase and of equal magnitude. If the levels are out of whack this won’t happen at the -6dB points of respective filters any more. If the low-passed section is louder than the high-pass, the output levels end up equal at a frequency somewhat higher than the cross-over — and so that’s where they cancel to create the null. If it’s the high-pass that’s louder, the null moves to the left instead.
No big deal: the drivers still end up in phase. But this caused me some real confusion. Maybe everyone else is just smarter. If not, perhaps this blurb will aid someone in their time of confusion.
I figured I should show what happens if you add too much delay (or delay the wrong driver). If the time delay between drivers is equal to the wave period at the crossover point (1ms in the figures here) this puts the drivers 360° out-of-phase at the crossover frequency, and sets up a comb filter. Here’s what it looks like with one driver inverted: