Taming a Subwoofer

Modern DSPs are great (and cheap)

As part of my "home-cinema" setup I got an old Bose sourround set (Acoustimass 15 II) for free.

After setting it up as intended (the satellites connected through the subwoofer which has a built-in crossover and amplifier) and listening to it I came to the conclusion that it sounds absolutely horrible.

It had a very V-shaped response curve with way to much sub.

Another problem was that my living room is quite cubic and has two really nice room resonances at around 38 and 45Hz which is not the fault of Bose but still something I'll have to deal with.

Be gone, Crossover!

My receiver (a Denon AVR-4306 I also got for free) already has a built-in subwoofer crossover with low-power output and my theorey at the time was that this would solve most of my problems.

So my first course of action was to completely bypass the subwoofer's built-in crossover and just wire one of the RCA jacks directly to the input of the subwoofer amplifier and connect it the the Denon's subwoofer output. Combined with two better front speakers and the built-in calibration of the receiver this made for a waaaaay better listening experience and had a way flatter response. Sadly the Denon's built-in EQ is not fine enough to componesate for the room resonances so the two peaks are still there and when measured (with my laptops uncalibrated microphone) had almost +20dB compared to the average of the other frequencies.

Enter Sigma-DSP

My first thought was to build an analogue band-trap filter to filter the two peaks but considering the effort required to tune it the way I want I opted against it. Also this would've meant that it would've been really annoying if my setup or room layout changes in the future as this will shift the peaks.

After ranting about the problem for a while in a group of friends, someone recommended me the miniDSP series of DSPs. After looking into the miniDSPs for a while I found there software rather annoying and unflexible but while learning about the topic I stumbled upon the chip used in the miniDSP 2x4. The ADAU1701.

The SigmaDSP series from Analog Devices, the ADAU1701 belongs to, turns out to have excellent GUI software (called SigmaStudio) for configuring the DSP so I opted to buy a cheap development board for it from Aliexpress (the "with rca out" variant from the link) and start my adventures from there. The seller was even nice enough to send me the schematic and a SigmaStudio demo project (drop me an email should you need it and the seller wont send it to you ^^).

A screenshot of Analog Devices' software Sigma Studio
SigmaStudio Project view

Programming the DSP

Sadly the TCP programming interface seems to have some annoying problems. So using it in wine and using an ESP32/ESP8266 as an programming interface was too fiddely for my taste, even though wireless programming would've made my life easier.

As I found out pretty quickly, the official USBi interface is based on the Cypress FX2 chip of which I have a dev board lying around already. The original USBi or an Aliexpress clone would've both been more epxensive than the DSP board itself so I opted to use the FX2 dev board with a simplified version of the freeUSBi inteface and installed everything (drivers as described in the freeUSBi documentation and SigmaStudio) in a fresh Windows10 VM.

This resulted in a rather ugly broadboard wire mess but worked - surprisingly enough - on the first try.

A picture of the SigmaDSP development board and the Cypress FX2 development board used as a programmer.
Not pretty but functional!

After installing SigmaStudio and loading the demo project to verify that the board and programmer is working I was sucessfully able to maul a piece of music played to the input by slapping arbitrary filters onto it and hearing the results.

Another gotcha I stumbled into is that the smaple-rate is fixed to 48kHz by the external Crystal used as a clock source on this specific board. Setting it to anything else but 48kHz will result in okish audio passthrough but all filters will have a completely different frequency response than expected!

Filter Design

Now that we know how to make the DSP do whatever we want it to I'll need to find out what I actually want it to do. After a failed attempt of manually designing a filter bank to get rid of the peaks I decided to look for more strategic solutions which turned out to come in form of REW - Room EQ Wizard. This amazing piece of software makes it surprisingly easy to measure a room/speaker setup and design a filter to compensate for it.

After sweeping the room with my Laptop's internal microphone (which is surprisingly good but definitely not the perfect tool for the job) I used the EQ-Window of REW to design a simple filter for my setup. After designing it I exported it into IIR coefficients (I selected the export format for the miniDSP software) and put them into chained 2nd order IIR filters in SigmaStudio. This did not work at all.

As it turns out, the miniDSP software uses the inverted sign for the b-coefficients which results in a completely different filter in SigmaStudio. After inverting the two values per filter the results are actually quite nice and pass as "good sounding". The only steps missing now are a nice case for the DSP board and to borrow the measurement microphone a friend of mine owns and repeat the filter design process with a microphone with known characteristics.

A screenshot of Room EQ Wizard showing the response curves of the three configurations described in the image caption.
The frequency response of my setup without subwoofer (green), with subwoofer but without DSP (red) and with subwoofer and DSP (orange).


The resulting SigmaStudio project file can be found here. Do not expect to be able to use it as-is but feel free to use it with your measurement data.