Virtual crossover with CDSP
Though not Raspberry Pi specific. I thought enough people in this thread are interested in CDSP to share. CDSP is teaching me a lot about sound, it's almost like a small science project by now.
I made a major cleaning of my living space (irregular with open Kitchen and open to another room - not idea listening space, but this is where I spend the majority of my time, so it just has to work!). Among other things I cleared the adjacent room of a lot of stash boxes and large empty packaging (like boxes for speakers, subwoofers, PC monitors etc). Unfortunately it had quite detrimental acoustic effect, so I decided I wanted to recalibrate my speakers. I never had a really good stereo image as I only did a combined L+R correction anyway.
During measurements, I noticed the left speaker was consistently arriving 0.7ms late in my listening position. Moving the speaker is not an option, as it's already far out in the room, and I would risk knocking it over walking past it.
My speakers in this room are KEF LSX II with a subwoofer connected. Unfortunately, that means I have no control over the subwoofer from within CDSP, but that the bass high/lowpass is handled in the KEF speakers and the sub itself. CDSP just outputs full left and right channel via USB directly into the LSX speakers.
Delaying the right channel by 0.7ms (to match the delay of the left channal) was a noticeable improvement in the phantom image. It's now dead center and much more strongly defined. From playing around with the delay, I can even move the phantom center left and right (for example a 1.7ms delay moves the center close to the left speaker).
But with 0.7ms delay on the right channel, it also means the subwoofer get a down-mixed mono signal with a delay of 0.7ms in the right channel. Not ideal.
Enter virtual crossover:
The high and lowpass are 8th order Linkwitz–Riley filters at the same frequency that I have the sub crossed over.
Whether it's worth it is another matter. The way I think of it, an 85Hz wavelength is 4 meters, and a 0.7ms delay is 24 cm. Or the delay of the right channel is 6%. If this is audible in the down-mixing to mono is probably questionable. With lower frequencies it's, of course, even more negligible.
To test it out, I applied a 200Hz lowpass filter at the end of the chain to only play bass. And increased the delay to 30ms to get a more pronounced effect. Which produces a noticeable echo. A quick test was measuring the SPL which yielded 2.3dB more with the highpass filter than without.
I hope that by getting the left speaker in phase I can get rid of some dips in the frequency response, and need to do a lot more measurements and perhaps play around with the steepness of the filter to negate any weirdness the the delay may cause in the crossover region.
Maybe someone else is interested in the method (probably a lot of you know this is possible already), but I was excited to share...