AVS Forum banner

Optimizing subwoofers and integration with mains: multi sub optimizer

462K views 5K replies 328 participants last post by  RemixMark 
#1 ·
This software is made for all of those who have trouble setting up their subs. It has been developed by Andy C, also member here. It allows for automatically tweaking the settings of all subwoofers and mains, based on inroom measurements of all individual subs/speakers (multiple positions). The program can be downloaded here. If the chm file shows up empty, please read this. The help section can also be found here. Andy will continue to work on the program and add new features. Opening a .msop file (multi sub optimizer project file) created with a newer version than your own, might not work properly.

I have used it in my own DIY project in which i use 4 subs for a Geddes style multi sub setup. The room is 6x4,2m, well treated for >200Hz but low LF damping due too stiff construction. I had a real hard time getting the subs to play along with each other. All subs have their own dsp channel and amplifier. Just too many degrees of freedom :eek: (gain, delay, high/low pass settings, parametric EQs). Spent countless hours without satisfying result.



After entering all values into my Hypex DSPs, i did a measurement to check the accuracy of the simulation and it turned out quite accurate.

Main listening position simulated and measured (had to move mic in between):



Position 5 (left mic standing at same spot):



I'm very pleased with the results, it worked better for me than doing it by trial and error myself. The LF sounds well controlled now and when needed powerful. And there's much less variation when you walk through the room.

The attached image (multisub_optimizer) shows the amplitude response by the red trace at the main listening position. The four other blue traces are the secondary and tertiary positions :).
 

Attachments

See less See more
11
#2 · (Edited)
When I first saw that plot of the main listening position, I thought, "Aargh! Something's wrong!". Then I realized it was 1 dB/div :). I took your plot that has all 5 positions on it, then reduced the lower limit of the graph until I got 5 dB/div. Then I put trace offsets on all but the main listening position (I assume that's position 1?). These offsets were in 10 dB increments to set them apart. I ended up with this graph:



Since you have four channels in which there are filters with variable parameters, you can get away with four listening positions, maybe eliminating position 5. I haven't tried this yet with your project, as I'm working on fixing some bugs, and adding the all-pass filter capability.

Edit: I am a little confused about which are the subs in the picture, or if all of them are visible. If they are stacked on top of one another, I'm surprised that this technique doesn't just bomb due to them being too close together to be considered in acoustically unique positions.

Edit 2: I tried deleting the 5th measurement position (green), and re-running the optimization without any changes to filter constraints etc. I did change the trace offsets to 15 dB increments to spread out the traces a bit more. Here's the latest result:

 

Attachments

#4 · (Edited)
I made a thread of my attempt to EQ 16 of my subs.
I put one beefy sub at the LP and walked a UMIK mic around the room at the various placement options I had available to me (including their existing positions); with the DSP disabled of course...

I figured that finding the best locations were more-important than finding the best EQ filters for any given sub, or group of subs. So I started there...

Those locations looked like this:




Basically I discovered that the locations I had the existing 16 subs in, that I selected by ear, turned out to be the best options for a multi-location configuration. (I have pretty anal hearing... so it didn't surprise me too-much.) It is always best to trust your instruments and science (especially if you are flying in an airplane at high speed in the dark around mountains... LOL!)

The loudest placement was directly behind the golden-seat with the cone firing directly into the back of my head at a distance of
 
#9 ·
I put one beefy sub at the LP and walked a UMIK mic around the room at the various placement options I had available to me (including their existing positions); with the DSP disabled of course...
I thought doing the subwoofer crawl with UMIK instead of squeezing my head into all those tight spots between the furniture was my original idea!;)

And how are others managing their multi sub setup?
I posted a simple/budget subs position study of my living room:

http://www.avsforum.com/forum/113-s...16010-one-vs-two-subwoofers.html#post36991714

So far I have settled on placement but the level, phase, EQ, and integration are still awaiting finalized acoustic treatments. At this point my absorbers are all temporary while I climb the learning curve and I have not given much thought to diffusion.

As a music-only guy, I'm constantly amazed at some of the subwoofer setups used by home theater buffs, especially those in the DIY sub and speaker forum here. :)
All my favorite music mixes are 5.1 now. What does a 'music-only guy' listen to?

There's a post by Matt Grant on multiple-subwoofer setup here that's worth reading.
Thanks, I will look into that.
 
#5 · (Edited)
Just too many degrees of freedom :eek: (gain, delay, high/low pass settings, parametric EQs).
I know, me too! I have 11 discrete bass DSP channels for my subs, that all have those options. (For both all-inputs and all-outputs: I use 3 DCX2496's) :eek:
and then a zillion location placement options.

To add additional confusion, they are different brands and box volumes and wattage and performance-capabilities, at different distances, and some of them are stacked/grouped in pairs, and some are individual. (Yeah Yeah I know, I like to torture myself... :D)

That said, even with all of those variables, the red line I get without EQ doesn't look too bad. They say that once you hit 4 subs that the room-impacted response is basically: "as good as it's gonna get".
Based on my experience I would tend to agree with that.
There are always exceptions of course, like what Jag may have encountered above with his 4 subs, some people have limited placement options and/or haven't found the optimal-locations prior to applying EQ; or they have-found the locations but they don't work with that room layout / Feng Shui. It is what it is, you can only do so much... EQ is a last resort saving grace.
 
#6 · (Edited)
It is what it is, you can only do so much... EQ is a last resort saving grace.
The software doesn't require that one use EQ at all. For instance, one could decide to only use adjustable delay and gain/attenuation for each sub individually. So in your case, you could define 11 sub "filter" channels in the software, and only put one delay and one gain/attenuation in each channel, for a total of 22 adjustable parameters. The software will then adjust these 22 parameters to optimize response flatness at multiple listening positions. You can weight the errors at, say, the MLP higher than at other positions.
 
#11 · (Edited)
I've uploaded a new update of Multi-Sub Optimizer. It can be downloaded here. There's a new graph trace type for showing and tracing target (house) curves. There were some bug fixes too, including:

1) The optimization algorithm was performing unnecessary calculations at frequencies above those used for the actual optimization. This didn't affect optimization results, only efficiency.

2) When the house (target) curve is computed for the optimization, the curve used internally is offset so that its value at the highest frequency used for optimization is 0 dB.

3) In the optimization options dialog, when the automatic limits options are chosen for reference and optimization frequency ranges via the checkboxes, the actual automatic limits computed by the software are now displayed in the corresponding edit controls. If all needed measurements have not yet been imported at the time the dialog is launched, these may not be the final values used in automatic mode.

4) Minor updates to the .chm (help) file. I have noticed that clicking some of the links can cause the MS Windows HTML help viewer software to give error messages :-(.
 
#12 · (Edited)
I've uploaded a new update of Multi-Sub Optimizer.
Wow. Thanks for this! This is exactly what I'd envisioned after reviewing Geddes' materials and discussing the software he uses, as well as reviewing the Harman SFM stuff. I'd envisioned it as more of a manual tool than automatic optimization, but it looks like this works both ways. You even included the listening position weighting I'd envisioned as well as some things I hadn't like making sure the smaller subs in the array won't be over-gained. I'd intended to modify some of the FRD Consortium tools into this someday, though that day was likely to be when I retired LOL.

Now I just need to hurry up and build my subs so I can implement it!
 
#17 ·
You're welcome! When I get around to doing an installer program, this problem will go away. The program for creating installer programs is itself a PITA, so I've been putting that off.

Also, I just now noticed that pressing F1 causes an error message in the help system :eek:. Just found a a fix for that and will be posting an update when I gather a few more requests.
 
#18 ·
Andy,

I use a Denon DN-AV500 (no individual analog channel input for center channel) as a pre/pro, with a minidsp on the back end managing two subwoofer clusters.

I am planning to use a Dirac Live enabled nanoAVR before it, so I won't have an EQ'ed LCR when I measure for MSO (in fact, I'll only be measuring with a loopback through the individual speaker amps most likely).

Can I use MSO for the sub out only for optimal delay/gains and maybe a few PEQ cuts without having to measure a sattelite/main (LCR) channel, so that I can measure/setup with Dirac afterward? Dirac will likely correct the center channel affecting the response, which MSO would not have been privy to before running DL.

Thanks for such a great piece of software, is there a place we can donate to in order to further fund development?



Thanks,


JSS
 
#19 · (Edited)
Andy,

I use a Denon DN-AV500 (no individual analog channel input for center channel) as a pre/pro, with a minidsp on the back end managing two subwoofer clusters.

I am planning to use a Dirac Live enabled nanoAVR before it, so I won't have an EQ'ed LCR when I measure for MSO (in fact, I'll only be measuring with a loopback through the individual speaker amps most likely).

Can I use MSO for the sub out only for optimal delay/gains and maybe a few PEQ cuts without having to measure a sattelite/main (LCR) channel, so that I can measure/setup with Dirac afterward? Dirac will likely correct the center channel affecting the response, which MSO would not have been privy to before running DL.
MSO will give an error message if an optimization is attempted with no mains measurements defined. In optimizing the frequency response flatness, it first calculates the reference level by taking the average in dB over frequency of the combined mains/subs response at each listening position and for each (of potentially millions) of the EQ/gain/delay combinations attempted. This occurs in the frequency range defined as the "reference frequency range" in the optimization options dialog. The reference frequency range should be chosen where the response is nominally flat, starting somewhat above crossover and extending to, say, 200 Hz or so. Without mains measurements, this can't work properly.

This gets to a broader issue of how to use MSO in conjunction with room correction systems. Unfortunately, these systems will tend to "fight" each other. On one hand, if one runs room correction before MSO, then suckouts might be present in the combined subwoofer output (because they haven't been optimized yet). These would be much better fixed by using MSO before room correction to adjust how the subs interact with each other to "fill in" the suckouts rather than boosting them with room correction. On the other hand, if you run room correction after MSO, it will apply filtering to both mains and subs, but without regard to how they interact with one another in the frequency domain in the crossover region. Unless you're very lucky, running the correction will degrade the integration.

The simplest way to fix this up after running room correction might be to just apply pink periodic noise in REW and tweak the sub distance in the AVR to get the best integration using the RTA. I should mention that I am not at all familiar with Dirac. I'm a two-channel guy in the "dont EQ above Schroeder" camp. If Dirac changes the crossover frequency to something different from what was used when running MSO (as Audyssey might do), then all bets are off as far as MSO optimization.

Thanks for such a great piece of software, is there a place we can donate to in order to further fund development?
I don't have anything like that set up, but thanks for the thought!
 
#23 ·
You might also be able to tweak the high end of the optimization frequency range to avoid some of the bad areas. IOW, the high end of the optimization frequency range might be made a little lower (say, 150 Hz) than the high end of the reference frequency range (say, 200 Hz).
 
#25 ·
Dirac Live does not take into account bass management. That is one of its drawbacks; you must manually compensate for the crossover phase shift.

The multisub program is Matlab? Is it possible to get the source code?
 
#26 · (Edited)
The multisub program is Matlab? Is it possible to get the source code?
It's a standalone native Windows GUI executable written in C++, compiled with the Visual C++ portion of Visual Studio 2015 Community Edition. I had to modify the source code of this MFC graphics library for some of the features I needed and I'm not authorized to redistribute that modification. I don't think I'd redistribute the source code anyway.

This page has the download link.
 
#28 ·
Got it, thanks. Something was in Matlab, I'm sure... :p

On the EQ, I agree, but with Dirac Live you have to manually deal with the crossover in the processor because DL does not. As I understand DL, it treats the sub and speakers independently and full-range, without regard to the crossover in the AVR. So, whatever phase shift the AVR's crossover introduces is not compensated by DL.
 
#29 ·
I've uploaded a new version today. It can be downloaded here. It adds support for miniDSP-compatible biquad text format in the filter reports, so you can copy and paste this information into the miniDSP software directly without having to enter individual filter parameters manually. To enable it, choose Tools, Application Options, Hardware. Check the box labeled "Include biquad information in filter reports" and choose the sample rate. Then, when a filter report is generated, you'll get the biquad text. Here's a simple example of just a single PEQ filter:

DSP Filter Channel Information:
Sample frequency 48000 Hz
Sub Channel 1:
biquad1,
b0=0.998587755842349,
b1=-1.995698264655141,
b2=0.997281499773885,
a1=1.995698264655141,
a2=-0.995869255616234,
biquad2,
b0=1.000000000000000,
b1=0.000000000000000,
b2=0.000000000000000,
a1=-0.000000000000000,
a2=-0.000000000000000,
biquad3,
b0=1.000000000000000,
b1=0.000000000000000,
b2=0.000000000000000,
a1=-0.000000000000000,
a2=-0.000000000000000,
biquad4,
b0=1.000000000000000,
b1=0.000000000000000,
b2=0.000000000000000,
a1=-0.000000000000000,
a2=-0.000000000000000,
biquad5,
b0=1.000000000000000,
b1=0.000000000000000,
b2=0.000000000000000,
a1=-0.000000000000000,
a2=-0.000000000000000,
biquad6,
b0=1.000000000000000,
b1=0.000000000000000,
b2=0.000000000000000,
a1=-0.000000000000000,
a2=-0.000000000000000
 
#32 · (Edited)
That's awesome!
Thanks for the kind words guys. Here's a bit more info. If the given filter channel has less than 6 biquads, the software fills in the missing remainder with "through connection" biquad elements with b0 = 1 and the rest of the coefficients = 0. If the filter channel has more than 6 biquads, it will show the coefficients of all of them, but the result won't be compatible with the miniDSP PEQ biquads and a warning is displayed. One can, I think, load up to 8 biquads in the crossover section of a miniDSP for a grand total of 14 biquads per channel. I'll need to check their documentation again to refresh my memory on the details of this, as I don't have a miniDSP myself.

One thing I thought about but did not implement is to modify the filter report so that it shows which biquads implement which filters (something like FL7: biquad3, biquad4). I was careful to arrange the more complex filters like high-order Butterworth so that the biquads are ordered by increasing Q of the second-order factors in the corresponding analog filter. This is because e.g. Butterworth filters are a combination of second-order factors with considerable "droop" combined with others having peakiing. You want the biquads having frequency response droop to be before the ones with peaking to prevent internal digital overload.
 
#35 · (Edited)
There's a new version of MSO up. Download link is here. It adds the capability of saving graphs as PNG files without having to use a third-party screen capture program. Also, filter biquad reports have been modified so that filters are associated with biquads as follows:

Sub Channel 1:
FL3: LPF Linkwitz-Riley 24 dB/oct (biquad1, biquad2)
FL4: Parametric EQ (biquad3)
FL5: Parametric EQ (biquad4)
FL6: Parametric EQ (biquad5)
FL7: Parametric EQ (biquad6)
biquad1,
b0=0.000061216865655,
b1=0.000122433731309,
b2=0.000061216865655,
a1=1.977747949570286,
a2=-0.977992817032904,biquad2,
[...etc...]

In addition, new graphs default to manual mode 20 Hz - 200 Hz for x-axis limits.

I'd like to change directions a bit and provide a tutorial with detailed procedures, screen shots and so on. So that's my focus for now.

I'd also be interested in inputs from users who wish to use MSO to optimize just their subs without measuring main speakers. Currently this isn't possible, but I have some ideas of how to implement this. I'd especially be interested in hearing from those using Dirac for system EQ.
 
#38 ·
I'd also be interested in inputs from users who wish to use MSO to optimize just their subs without measuring main speakers. Currently this isn't possible, but I have some ideas of how to implement this.
What is the challenge in not having a main channel? Algorithmically I mean.

My thought was to use something like a 2-300Hz Butterworth high pass as the source of an frd for the mains btw. Would this be a feasible way to trick it into playing nicely?
 
#36 ·
I've been writing up a tutorial that walks you through all the steps needed to create a project and gain a good understanding of the software and its user interface. The current documentation is too general in nature and has no screen shots, as I was trying to get something out quickly when I originally wrote it up. It will take at least another week to finish up the tutorial, which to start with will be in PDF form only.

However, when writing it up, I found a bug in the software causing an error message to be generated when you try to import more than about 15 FRD files at one time. There's no crash or instability, but not all the files will import and it requires importing the missing ones on a second pass.

I've uploaded a new version that fixes this problem. I highly recommend that older versions not be used. You can download the new version here.
 
#37 ·
I've been writing up a tutorial that walks you through all the steps needed to create a project and gain a good understanding of the software and its user interface. The current documentation is too general in nature and has no screen shots, as I was trying to get something out quickly when I originally wrote it up. It will take at least another week to finish up the tutorial, which to start with will be in PDF form only.

However, when writing it up, I found a bug in the software causing an error message to be generated when you try to import more than about 15 FRD files at one time. There's no crash or instability, but not all the files will import and it requires importing the missing ones on a second pass.

I've uploaded a new version that fixes this problem. I highly recommend that older versions not be used. You can download the new version here.
Do you have sample files to play with by any chance? I'd like to try this out, but lack a mic with loopback timing.
 
#42 ·
I just put a new version up again. It can be downloaded here. While working on the tutorial, I found some usability issues and minor bugs that I've put in fixes for. These are the changes:

  • Changed the maximum allowable Q for PEQ filters from 16 (as recommended by Welti and Devantier) to 30. The default maximum is 25, and I don't recommend going higher than that, as it can lead to "spiky" frequency responses. But there are improvements to be had going from 16 to 25.
  • For large projects, too many nodes in the tree views were being expanded when the project was loaded from disk. I tried to only expand the nodes that are most often used (e.g the ones that represent the filters and allow you to modify them). Also, tree views scroll to the top after reading in a project.
  • Pressing Cancel in the Add Measurement Group dialog caused an empty group to be created instead of canceling out of the operation altogether. Now fixed.

The tutorial is coming along, but it's taking a bit longer than I expected, as I've been interrupting doing it with minor bug fixes.
 
#47 ·
I switched to using Matlab's more extensive optimization routines although Mathcad has some addons that are pretty good. I found Mathcad support tapered off after PTC bought them, and the upgrade price skyrocketed so I haven't upgraded my old Mathcad (v14). Matlab did the same thing years ago (took my upgrade from $300 to $1300 one year) but I recently noticed they offer a "home" version so I picked one up a few weeks ago. Now to take all my Mathcad files, converted from Matlab, back into Matlab again...

I think the Matlab optimization package (toolbox) has JADE but am not sure. Didn't buy that toolbox (so far).

I may just stick it all in Python.
 
#53 ·
There is an installer now. The new version of mso.zip (download here) contains only install_mso.exe, which is the new installer. This should get rid of the problem with the CHM file showing up as blank and needing to "unblock" it.

I thought I'd just give a quick overview of the example in the tutorial. It uses data provided by Jag768, in which he uses a Geddes-style configuration. This configuration is as follows:
  • No high-pass on the mains
  • An LR4 low-pass for each sub, but with different cutoff frequencies allowed for each one
  • Separate delay for each sub
  • Separate gain for each sub
  • Four PEQ filters per sub

Once the project is set up and configured to display the combined response of main speakers and all subs at each listening position, you get the following result before optimization. The plots use offsets to separate the traces. The top trace has no offset, while the next three have offsets of -15 dB, -30 dB and -45 dB respectively.



This room is problematic, with lots of peaks and dips in the responses, especially at listening position 3. Then the optimization is run, and the following result is obtained.



There's good improvements, not only in the response at the MLP, but also with seat-to-seat variation. The responses of the sub channels, which have the PEQs constrained to only cut, not boost, are shown below.



Strange looking responses! If your goal is to maximize output, the gains would have to be constrained to not vary as much, but this would probably result in worse flatness of the responses after optimization.

The response at the MLP could be further flattened using the shared filters on the subs if desired.
 

Attachments

#58 ·
I thought I'd just give a quick overview of the example in the tutorial. It uses data provided by Jag768, in which he uses a Geddes-style configuration. [...] the following result is obtained. [...]
Pretty good results! How far are the positions apart?
 
#54 ·
The tutorial looks good, as well as the help file :cool:.

I changed my setup to a more Floyd-style-like placement, having one sub on each side of the main listening positions/couch and the others on the opposite wall. This reduces the influence of the first mode. I also made a target curve which is a somewhat downsloping curve (about 6dB down at 100Hz compared to 20Hz). Otherwise it sounded to thin to me :).

I can recommend everybody who has interest in multi sub setups, to read the tutorial and help file on the website of andy.
 
Top