DM601-S3, DSP based active bi-amp design and result

A month ago I have modified B&W DM601-S3 crossover according to Rutcho's design but I have noticed that the top end is too suppressed and it sounds dull and lifeless. Now I have completely removed the passive crossover with a remaining 10uF film cap (Janzten Standard-Z Cap 400v) in the tweeter signal line and used DSP crossover and 2 separate amplifier channels to drive the speakers. I used an AV-Receiver with HDMI input and 5.1 output (Yamaha RX-V373). The PC runs Ubuntu Server 20.04 with Media Player Daemon, Ecasound and Richard Taylor's LADSPA plug-ins. PC connects to AV-Receiver using HDMI audio. The front L/R channels are connected to the Woofer (LF) input of the speaker. Surround L/R channels are connected to the Tweeter (HF) input of the speaker and Subwoofer pre-out is connected to the subwoofer. With appropriate settings in the software the digital music source is being split into HF/LF/Sub sections and sent to each respective channels.

The software I used is VituixCAD. I firstly re-created the factory crossover in the simulation, with the approximate tweeter offset of 28mm, I am able to fairly accurately simulate the response. Then I spent a couple of weeks running simulations using all sorts of different configurations and came up with this final arrangement in the 2nd picture. The result is a ruler flat response with +/- 1db accuracy from 200Hz to 15Khz and an intentional slight drop off at the top end. The phase matching is as close as I could get, with two drivers matching closely from 2.5Khz all the way up to 7.5Khz. The crossover frequency is same as factory setting at 4Khz since the tweeter's Fs is at 2Khz and I don't feel comfortable crossing it any lower.

The settings is as follows: Mid-woofer has a 4th order LR low-pass filter at 3.5Khz and a Parametric EQ filters to counter for elevated response at 1.3Khz. The drop off at the lower end is because I crossed it over with the subwoofer at 80Hz and the 4th order LR high-pass filter is also embedded in mid-woofer's DSP parameters. The tweeter is a bit more complex. It consists a 4th order LR high-pass filter at 3.7Khz, a high-shelf filter at 15Khz to fix tweeter's top end droop and another 1st order high-pass filter at 3.7Khz. Together with the 10uF series capacitor it forms a 6th order filter crossed at 4Khz. This is because woofer and tweet have different rate of roll off at the crossover frequency and it must also be taken into consideration. Tweeter is padded down electronically at -3.5db so padding resistor is not needed. As a result the amp should have better damping factor to control the tweeter. Phase of tweeter is inverted, also electronically, to bring it closer to the phase of the woofer at the crossover frequency range. A delay of 76us is added to adjust the phase of the tweeter so it matches exactly the woofer's phase at 4Khz.

As a result, both drivers have steep roll off after crossover so woofers' break up and tweeter's resonance have been reduced to minimum. Tweeter at Fs of 2Khz is already -30db down and woofer's worst break up at 10Khz is off the chart (probably -40db down).

The next step is to fine tune the delay. I used the approximated 28mm tweeter Z offset as a starting point. Invert the tweeter phase (which is now as easy as editing one parameter in the dsp) then adjust the delay until I get the deepest null at the crossover frequency when running a frequency sweep.

For now it already sounds really good. Lots of details in the top end while not being shrill at all. Mid range is very tight and immediate. Along with a flat response and tight phase matching, it sounds a lot cleaner than before.

I have converted the CAD design into Linux Ecasound profile so if anyone is interested in doing Linux PC based DSP can look at them:

tweeter.ecp
# Tweeter driver
tweeter = -el:RTlr4hipass,3700 -el:RThighshelf,3,15000,1 -el:RThighpass1,3700 -eadb:-3.5 -ea:-100 -el:delay_0.01s,0.000076

mid.ecp
# Mid-woofer driver
mid = -el:RTlowshelf,5,80,0.65 -el:RTlr4hipass,80 -el:RTlr4lowpass,3500 -el:RTparaeq,-4,1300,0.8

woofer.ecp
# Subwoofer
woofer = -el:RTlr4lowpass,80

Audio-output section of mpd.conf:
audio_output {
type "pipe"
name "HDMI 5.1 DSP Crossover/EQ"
command "ecasound -q -z:nodb -z:mixmode,sum -a:woofer,mid,tweeter -f:s32\_le,2,44100 -i:stdin -a:woofer -
pf:/etc/woofer.ecp -chmix:1 -chorder:0,0,0,0,0,1 -a:mid -pf:/etc/mid.ecp -chorder:1,2,0,0,0,0 -a:tweeter -pf:/etc/tweeter.ecp -chorder:0,0,1,2,0,0 -a:woofer,mid,tweeter -f:16,6,44100 -o:alsa,hdmi:CARD=PCH,DEV=0"
format "44100:32:2"
}

The DSP software configuration I did was according to the blog by Richard Taylor: https://rtaylor.sites.tru.ca/2013/06/25/digital-crossovereq-with-open-source-software-howto/
The Crossover hardware upgrade I did was according to the article by Rutcho: http://rutcho.com/tweaks/01_bw_dm601s3/bw_dm601s3.html

Image 1: Original crossover simulated in VituixCAD
dm601s3_factory.JPG


Image 2: DSP crossover simulated in VituixCAD
dm601s3_hybrid.3.JPG


Update: I think I made a mistake of ignoring the Y axis offset between tweeter and woofer. I have added the measured 135mm vertical offset to the woofer and had to update the Z offset of tweeter and delay to make it work. The result is the tweeter delay has been modified from 71us to 76us. I have also removed a 1db Param EQ on the woofer which is more or less useless and only complicates things. I haven't done the actual measuring yet as I don't have a calibrated mic and I will try to get one soon.

One more thing I cannot enphase enough: Have a tweeter protection cap at all times! When I test ran this setup, the software configuration was incorrect so I ended up sending full range audio signal to both drivers. The tweeter sounded so loud and has more low frequency signal that I remember, until I discovered that the DSP plugins were not at the right place and the software couldn't find them! If I didn't have that 10uF cap in there my tweeters would have already been blown. I almost learned it the hard way so I will always have a cap in tweeter's signal line because the risk is not worth any sonic improvement of removing it.

I am pretty new to speaker design and measurement. I appreciate if people here can point out any obvious issues that I'm not aware of.
 
Last edited: