Interesting. To be clear, is MSO determining the correct timing to inject the cancellation pulse? How does it know when to do that, since it does not know the dimensions of your room?
Anyway, I would love to see your results, and maybe you can explain what you are doing in more detail. It will help a lot of people i'm sure.
@andyc56 already explained how MSO works in
this post. Way too much programming geekery for my small brain to absorb. By default, it does not produce a VBA. Apparently it can be manipulated into doing so.
I don't see why it shouldn't be possible with MSO. After all, a VBA is causal and this VBA that I designed does not require any special property of FIR filters. All it needs is delay, invert polarity, and attenuation - something that should be possible with IIR's.
I messed around with this a bit last night again. Here's the high level points and results:
- MSO at its very essence is a tool that takes raw speaker (usually just subwoofer) measurements, including magnitude and phase information, from multiple subs at multiple seating locations and calculates the response at those seating locations when you combine the subwoofers together and layer on various PEQ, XOVER, All Pass filters and such
- you can then tell MSO to target a specific outcome by it iteratively varying filter parameters (i.e. something like "target a flat response at the Main Listening Position MLP of 85dB between 15 and 200Hz" or "combine all the subwoofers together such that the total output is maximized between 10 and 50Hz") and it will iterate through 1000s of possible solutions by varying the filter parameters and using a clever differential evolution machine learning algorithm to find an optimum set of settings
I believe a VBA (or SBA or DBA) can be reasonably simulated in MSO by doing the following:
1. Measure subs and upload
Measure all subs in their desired room locations at 3 or more locations all equidistant from the front wall and export and upload these measurements into MSO. For a VBA, create a copy of the set of measurements to simulate a virtual subwoofer sitting at the same location as the real subwoofer (so for 2 front subs in VBA, you upload 4 separate sets subwoofer files, 2 of which are copies of the other 2) - MSO Import wizard example below:
This is summarized in the Freq Response plot below which shows the combined FR at three positions (MLP, Left Seat and Right Seat). Note that the phase plots are not aligned with each other yet which means the front subs are not acting in unison to create a planar wave:
2. Calculate target modes to cancel with VBA:
Calculate the expected frequency of the first longitudinal front to rear wall mode (1124 ft/s / (front to rear dimension) / 2) - for my room its (1124 ft/s) / (27 ft) / (2) = 20.8Hz. Below is a view of all of the raw sub measurements - you can see the peak at 20.7Hz and also at around 41.4Hz (the 1st and 2nd order longitudinal modes) as well as a mode at about 16Hz which is caused by the width of the basement which we will ignore for this process. The Red lines are the Front Right Sub at 3 locations, the Black lines are the Front Left Sub at the 3 locations:
3. Create Planar Wave:
Determine the front subwoofer delay settings that will result in as close as possible a planar wave arriving at the measurement locations at the same time. MSO can do this by using the Maximize SPL using only delays and all-pass filters Optimization Option for this step. Optimize SPL in the range between the first and second order modes - so in my case I optimize between 15Hz and 50Hz.
The only filters I included were a delay to one Front sub, and in my case because my 2 subs are not exactly the same, 2 very low Q (under 0.3) All-Pass filters.
Here is the result of this first Optimization - note now that all the phase plots are very closely aligned to each other.
4. Lock all "real" sub filter settings and clone to new Config
Once the ideal delay and all-pass filter settings are found in previous step, lock these filter settings in MSO and clone the config to a new one.
5. Add filters to Virtual Subs:
Now you add a delay and gain filter to the virtual subs and a Polarity Inversion. I set the range for the delay to be from 20ms to 60ms on both virtual subs, and the gain to be -6 to -15dB. Then you change the optimization type to "Minimize STSV and flatten MLP Response" and set the target to a value a bit lower than the lowest MLP response in the target range (15-50Hz in my case). By doing this, MSO will try different gain and delay settings on the filter on the Virtual Subs only to try to bring the FR down to the target level - the only scenario that can do this is if the delay is just right to cancel out the worst of the peaks. This should result in a delay that is roughly equal to the time it take for a sound wave to propagate from the front to the rear of the room and then back to the front, and theoretically the peaks at 20.7Hz and 41.4Hz will be knocked down. I used a gain of -6dB to simulate the expected reduction in SPL of a planar wave propagating to the back wall and back to the front.
Here's the resulting response (Dark Blue is new response after applying VBA, Dotted Blue is measurements of the quasi Planar Wave from the previous step. The light Red and Black lines are for the Right and Left seats respectively.
Interestingly, it does in fact result in a drop of 5.1dB (105.2dB to 100.1dB) at 20.7Hz, and a smaller drop at 41.4Hz (can be seen above as the original dotted blue vs the new dark blue line), but the VBA is resulting in an increase in dB between 25Hz and 37Hz due to the interaction of the VBA with other frequencies!!
The delays MSO finds are in the range of 45ms to 52ms, which corresponds to a room length of 25.3ft to 29.2ft which is close to the actual length of 28ft.
I don't have the gear to try this and measure the results so would be interesting to see if it really did substantially kill the decay at 20.7Hz along with the peak, but I am not convinced that the other artifacts would not over shadow the result and introduce other weird temporal distortion. Interesting intellectual / research exercise by IMO simple PEQ likely does the job a lot better that VBA. DBA or Wave Forming is another matter - and especially with more subs.
My 2 cents.