• Welcome to ASR. There are many reviews of audio hardware and expert members to help answer your questions. Click here to have your audio equipment measured for free!

A better VBA

@JohnPM How do you do that?
A little something I've been working on. I had a couple of mind-numbing weeks extracting REW UI text into properties files to allow translation. To escape the monotony I decided to have a go at coding a 3D surface viewer. Not the sort of thing I've played with since the 80's, but it's going OK :)
 
View attachment 454456

The subs are placed in the corners, and the room is rectangular, but with openings. The furniture is placed asymmetrically, most notably there is a sofa in front of the right sub. This is why I was concerned that my model would not work. But it did work quite nicely. The MLP sofa was removed for all measurements.

The right sub measurements are a bit screwy though, e.g. I was surprised that I could increase the gain of the cancellation wave with minimal noticeable effects (or side effects!!) which made me think that I was re-measuring the same filters over and over. But no ... I checked those filters and they were definitely different. It's something for me to look at and try to understand.

Very interesting thread, big resepct for your curiosity, and knowledge. Your conclusion seem to confirm that “good ol’ physics’ still works.

Looking at your room, did you consider Neumann’s Planar Wave Bass Array? a.k.a place 3-4 subs in regular distances across the front wall and bass manage them as one.
 
Last edited:
Looking at your room, did you consider Neumann’s Planar Wave Bass Array? a.k.a place 3-4 subs in regular distances across the front wall and bass manage them as one.

I had to Google it to see what it is. It's basically a VBA but with enough subwoofers to create a planar wave, and using Neumann's subs and their DSP. I don't want that - the struggle is most of the fun. A more automated system suits a certain type of consumer or professionals who are time poor, but as a hobbyist I see it as a learning opportunity. The more difficult the challenge, the better.
 
I had to Google it to see what it is. It's basically a VBA but with enough subwoofers to create a planar wave, and using Neumann's subs and their DSP. I don't want that - the struggle is most of the fun. A more automated system suits a certain type of consumer or professionals who are time poor, but as a hobbyist I see it as a learning opportunity. The more difficult the challenge, the better.

Nobody forces you to use Neumann subs or automated calibration. You can still DIY your subs and develop your own filters.
Is more about following the science and acknowledging, that best shape for a wheel is still a circle.

There is no shame in looking for inspiration elsewhere, as, probably, lot of really smart people have asked the same questions and already have the answers. But do not get me wrong - also having fun and spend lot of time and effort and still get suboptimal results is also not a bad thing. With “having fun” being only important thing here, as in every hobby.

EDIT: my personal experience, is that nothing beats proper placement and count of subs. These are enablers for everything else.
 
Last edited:
Nobody forces you to use Neumann subs or automated calibration. You can still DIY your subs and develop your own filters.
Is more about following the science and acknowledging, that best shape for a wheel is still a circle.

A torus actually, but I know what you mean :D

EDIT: my personal experience, is that nothing beats proper placement and count of subs. These are enablers for everything else.

Yeah nobody would disagree with you there.
 
BTW looking at your mdat - I think you are at 95% of what is possible and your results are better than 90% of “high-end” 2Ch installations out there. Nothing really sticking out as real audible issue. Just enjoy what you have.
 
REW Beta 86 with 3D graphs is out:
1749987843379.png


 
I didn't think of that. And even after you mentioned it, I didn't know it was possible. Do you want to try that experiment? I can't say I know MSO well enough to see if it would work
Really interesting thread - thanks for posting.

Yah, MSO can do this - gave this a quick shot on my machine and will see if I have time to post later. You just simply need to copy your raw sub measurements to a separate set of virtual sub measurements, then upload to raw + virtual sub measurements, and then apply the polarity change, delay and gain filters to the virtual subs and target for flat reponse around 6-10dB lower than the peaks and let 'er rip. In a few seconds MSO will spit out delays and gains for virtual subs.

That said, no idea how this would measure or sound real world and suspect as you found it may cause more problems that it solves as you are technically adding in temporal distortion into the signal.
 
Really interesting thread - thanks for posting.

Yah, MSO can do this - gave this a quick shot on my machine and will see if I have time to post later. You just simply need to copy your raw sub measurements to a separate set of virtual sub measurements, then upload to raw + virtual sub measurements, and then apply the polarity change, delay and gain filters to the virtual subs and target for flat reponse around 6-10dB lower than the peaks and let 'er rip. In a few seconds MSO will spit out delays and gains for virtual subs.

That said, no idea how this would measure or sound real world and suspect as you found it may cause more problems that it solves as you are technically adding in temporal distortion into the signal.

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.
 
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?
It just knows the distance from a.target for a given set of parameter values then tries different values to see if they produce a shorter distance (lower error). Precise algorithm is more complex but fundamentally that's what it does.
 
It just knows the distance from a.target for a given set of parameter values then tries different values to see if they produce a shorter distance (lower error). Precise algorithm is more complex but fundamentally that's what it does.

@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.
 
My point was that it doesn't matter that it's a vba, it doesn't care (and the details of the algorithm don't really matter either), it's just trying different values to find the sum that produces the least error (best summation).
 
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:

1756490432261.png


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:
1756490551897.png



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:
1756490773716.png



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.

1756490949456.png


1756491041137.png


1756491151372.png



Here is the result of this first Optimization - note now that all the phase plots are very closely aligned to each other.

1756490972958.png



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.
1756491965138.png


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.
 
Last edited:
That is certainly a new concept and it's totally different to the method I described in my first few posts. It would be interesting to see real world measurements of the result.
 
interesting approach, seems conceptually like how you might imagine art or waveforming to be implemented though? whereas a VBA as described here is an entirely synthetic signal intended to counteract the effect of specific modal resonances so it's more like how I imagine something like a bagend etrap is implemented
 
Why you don't set subs on rear wall, with invert polarity and delayed as DBA, but with your main speakers?
 
Back
Top Bottom