• 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

Actually I think that nonlinear effects happening in the room would be a substantial contributor to the altered waveform. Room shape, furniture, openings, etc. would scatter the sound so it would arrive back with substantial waveform distortion.
I'm probably misunderstanding what you mean, but when I think of changing a waveform I understand that to mean adding or changing the balance of harmonics in the sound. Scattered sound would manifest as unpredictable phase distortion / delay but it doesn't add anything to H2 for example.

When it comes to dirac ART or similar, I assume they have some more sophisticated way of decomposing direct and reflected signals so their cancellation signal can do more. But I don't really know much about it.

I wonder if anyone has recorded dry vs. processed output from an ART system so we could see what it does. Run it through Deltawave and reverse engineer...
 
Geez, the more I learn about Dirac the more I think they use marketing buzzwords to deceive people into thinking they have something new. I mean, DLBC sounds like it works just like MSO (Dirac's "genetic algorithm" is another word for "brute force optimisation" isn't it? @andyc56 ?)...

MSO has been described many times as using a "brute force optimization" approach, but that is not true. There is a specific meaning to that term. It describes a technique where you're trying to optimize a small number of parameters, each of which can only take on a discrete set of values. It would be implemented as the equivalent of a nested loop in software, where the depth of nesting of the loop is the number of parameters to be evaluated. The error to be minimized is evaluated by exhaustively testing every possible discrete value of every parameter and choosing the best combination.

The use of brute-force optimization for multiple subwoofers is discussed by Todd Welti in his 2003 AES article "In-Room Low Frequency Optimization", which was the predecessor of his more familiar 2006 article "Low-Frequency Optimization Using Multiple Subwoofers". The latter article describes SFM. SFM is the only multiple-sub optimization software that I know of that uses brute-force optimization. It can do this because it's only using a single PEQ per sub, having discrete allowable Q and CF cut values. Then there are per-sub attenuators and delays, each of which can only take on a discrete set of values. I'm pretty sure it finds the PEQ center frequency using a conventional search to find the frequency for which the seat-to-seat variation is worst, obtained from measurements. Once it has that information, the remainder of the parameters (Q and cut of the PEQ, per-sub attenuation and per-sub delay) can take on only discrete values. Brute-force optimization is then used for all parameters except the PEQ center frequency, which at that point has already been evaluated.

An optimization approach that can only use a discrete set of values for the parameters to be optimized is called combinatorial optimization. Brute-force optimization refers to a subset of combinatorial optimization for which all possible values of all parameters can be exhaustively evaluated.

What about MSO? A fully stuffed miniDSP 2x4 HD using a PEQ in every open slot has around 250 parameters to adjust, all of which interact with each other, and all of which take on a value from a continuous range of allowable values. It can't use combinatorial optimization, because the allowable parameter values don't come from a discrete set of values. Because of this, it's also not possible to exhaustively evaluate all possible parameter values either. So brute-force optimization can't be used for this problem.

MSO uses a variant of an open-source technique called Differential Evolution. It's described in this book. You'll find my review of the book on that page, written back when I was first starting out with MSO in 2013. MSO uses some enhancements to the algorithm described in the Acknowledgements section of the MSO home page. Differential evolution is a so-called population-based algorithm, meaning that instead of a "current guess" that gets moved around, there is a collection of "current guesses" (in my case 100) that wander around the solution space like ants searching for the best food. When a lucky ant finds the best food so far, his buddies wander over there - but they may find better food on the way. As an algorithm, this can be described as new guesses being generated (ants moving around) based on the family of existing guesses (ant locations).

Genetic algorithms are population based and very similar to this, except that the guesses can only take on discrete values, and the method for generating new guesses from the family of existing ones is different. Each parameter within a guess vector takes on discrete values y according to this formula:

y = m * i + b

Here, i is an integer, and m and b are floating-point numbers. There's a pretty good article about the approach here.

Here is a diagram showing a taxonomy of optimization techniques.

opt_types.png



Edit: As if this post weren't already long enough, I should add that genetic algorithms should be considered a sibling of Differential Evolution in the diagram above (both population-based), but with genetic algorithms originating from the right-side branch of combinatorial algorithms rather than continuous as does DE. DE can be made combinatorial, but it takes a shoehorn to do so, and convergence problems can result.
 
Last edited:
At
Geez, the more I learn about Dirac the more I think they use marketing buzzwords to deceive people into thinking they have something new. I mean, DLBC sounds like it works just like MSO (Dirac's "genetic algorithm" is another word for "brute force optimisation" isn't it? @andyc56 ?), and ART sounds like a VBA. I have read what I could about DLBC and ART and I don't see how it is any different, yet people insist it is different. Yet nobody can explain "how" it is different beyond "it's a MIMO".
If you read about DLBC it certainly does not work in all circumstances including mine. For me it can do OK with FR but there are known timing and group delay issues and for me the sub to main timing is inconsistent and wildly inaccurate. I am sure under some ideal conditions it works but the slow roll out and large number of problems reported and no solutions being offered in over a year shows that just because something is an appealing idea does not mean it will work. For me DLBC has been a complete waste of $500. ART increases by orders of magnitude all the difficulties of trying to get DLBC to work and I would be surprised if it ever works for a wide range of rooms and systems. Your "DSP Market" thread shows that many experienced experts have difficulty working out proper "mains to sub" timing even using professional tools and knowing the room size and speaker layout. Imagine how complicated it would be to automate this process with only inherently dodgy "in-room" measurements to base it on. Which to me explains why DLBC only works for some people and some systems.

I did enjoy reading about your VBA experience, thank you for posting it.
 
I wonder if anyone has recorded dry vs. processed output from an ART system so we could see what it does.

Can't comment on ART. I do have Dirac RC, and have briefly played with measuring what it does on a pair of full-range left & right speakers.
By measuring what it does, I was more interested in the electrical filter Dirac was producing, than the acoustic results. I figure that's the way to look under the hood.
So I let Dirac make full-range corrections.

The speakers were DIY synergy horns on top of dual-18" reflex subs. On one end of a long wall in a big room, right speaker in the corner. No room correction/PEQs of any kind were applied to speakers. Speakers were tuned as best quasi-anechoic as possible and left alone.

Ok, here's left speaker.
Blue is the speaker at listening position.
Red is the electrical filter Dirac generated.
Green is the speaker's corrected acoustic response.


1748720773679.png


Here's right speaker.
Purple is the acoustic response pre-dirac.
Red is the dirac electrical filter.
Seems I didn't bother to save right's corrected acoustic response. It was the electrical filter made that I wanted to see.....
1748721193282.png
 
To my mind, a VBA is basically just an alternative scheme for addressing a single modal resonance using some appropriately delayed signal. Calling something like ART, based on what is known, a VBA seems entirely wrong to me. It would be like calling mso a peq.

Are we in agreement that it works by using speakers to cancel the sound of other speakers?

I think you are missing the point. I am not aware of any other tool that attempts to do what art says it attempts to do. I don't even recall seeing people doing this manually let alone in any remotely automated way to be used in any room. Hence the differentiation is surely in the filter design algorithm.

I'll concede that point. VBA's have been kicking around for almost 15 years, but all of them have been DIY. I don't know of any automated "VBA designer" either.
 
I hinted in one of my earlier posts that the right VBA does not behave the same as the left. If you look at the room configuration you might see why - the right subwoofer is blocked by the sofa, and the right rear corner of the room is open to a staircase and the adjoining dining room. So the pattern of reflections is going to be quite different.

Delays

VBA-Delays L.gif
VBA-Delays R.gif


Left VBA on the left, right VBA on the right. Apologies for not making them the same scale, I only realised that when I uploaded the image. We can see the same pattern when different delays are added to the VBA. On the left it improves from -4ms, is at its best at 0ms, and then gets worse again after that. The pattern on the right is the same - it gets better then worse again, but the pattern where peaks and dips form is more chaotic and unpredictable.

Gains
VBA-Gains L.gif
VBA-Gains R.gif


Again left VBA on the left, and right VBA on the right. This one was really strange and I could not figure it out. The left VBA behaves as expected - increase the gain of the cancellation wave, and the curve changes exactly as you would expect. On the right, the 1x gain is the outlier and is much worse than all the other gain settings. But what is really odd is that I can increase the gain of the cancellation wave by 3x and it looks hardly different to the 0.5x.

1748759122040.png
1748759170481.png
1748759224836.png


And here are the spectros for control, gain 0.5x and gain 3x. As you can see, there is barely any difference. I simply could not believe that I could pump 3x more energy into the cancellation wave and not observe any difference in the spectro and hardly any difference in the freq response.

1748759979956.png


The obvious explanation was that I was re-measuring the same filter over and over, so I looked over that carefully - I opened each filter and examined it. I can confirm that I am indeed measuring different filters. Anyway, it's a real head scratcher. I don't know where all that energy is going - it's not making things better, it's not making things worse ... it's as if all that sound has simply disappeared as if there's some kind of Bermuda Triangle in my room. Must be my audiophile cables ;)
 
Mystery solved! After I made the previous post, I had my curves open and looked at it again. Then I had a :facepalm: moment.

1748763173697.png
1748763051476.png


These two look the same - impulse display for the left and right VBA's with different gains.

1748763135102.png
1748763075468.png


These two look different - frequency response for the left and right VBA's.

I made a mistake when I was adjusting the gains for the left and right. For the left, I increased the gain of the peak, and then added it to the Dirac pulse. This is the correct way. For the right, I must have taken the peak which was added to the Dirac pulse, and increased the gain. This little oversight resulted in different filters. Acourate simply chops down the increased gain during the correction process, and since I was keeping an eye on the impulse response display (and not the frequency response display), I missed my mistake.
 
seems like you could get MSO to do that gain/delay trial and error for you couldn't you? i.e. add the low pass filter, lock it, add delay & gain blocks with appropriate ranges, set some target, run it for a bit and see what happens
 
seems like you could get MSO to do that gain/delay trial and error for you couldn't you? i.e. add the low pass filter, lock it, add delay & gain blocks with appropriate ranges, set some target, run it for a bit and see what happens

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.
 
Working VBA filter is possible but not in my old ways which were merely fancy combinations of PEQ filter bands. This is how I do a VBA filter lately:
1748780523998.png


Why I picked only these reflections? Because first two (floor and ceiling) were common in both speakers. Peaks in the first ms are speaker boundary reflections and driver time differences and can be safely corrected with non-minimum phase filters (you can only correct excess phase of the speaker, not the room). But VBA filter needs to be minimum phase and can be generated by inverting minimum phase response reflection peaks.

And you get a minimal but worthy improvement at the end if all goes well:

1748780924189.png


Any small error in the size of the impulse peaks, number of them, timing of them etc., lots of things can go wrong and can have very interesting side effects i.e. some of them love to repeat themselves in the impulse response due to circular nature of the fft. So good luck to Dirac with ART.
 
That is very curious, isn't it? I wouldn't say i'm a measurements guru (or even a REW guru), so maybe there's some kind of display in REW which is more appropriate. I am using the Fourier display with default Gaussian windowing. Sometimes the windowing function can hide things (after all, the job of a window is to suppress side-lobes). But I don't know enough about windowing functions to know if there is something more appropriate. And I don't know enough about the non-Fourier spectro displays like "Wavelet" or "Airy CWT" to know what they mean.

Try using the Wavelet (Spectrogram) diagram with these settings:

1748931515772.png


It might show you more noticeable difference - in my experience, this will provide a more microscopic view on the low-end temporal information
 
Thanks Peter. I just tried your exact settings.

1748932835499.png
1748932863705.png


Control on the left, VBA on the right. For some reason it won't show data <40Hz even though it's definitely there.

That small red peak at 2.82 seconds does seem a bit smaller. This whole exercise feels like I am trying to squeeze water out of stone! Here is the .MDAT if you want to have a play.
 

Attachments

For some reason it won't show data <40Hz even though it's definitely there.

Check what happens if you reduce the Ref Time (ms) in IR Windows by allowing REW to estimate IR delay to a smaller number...


There's some pre- and post-ringing or "time smear" in my spectrogram view settings post VBA filtering:
1748937112108.png 1748937115442.png
 
Last edited:
the ringing in VBA L is a bit crazy, it's like you struck a tuning fork to go alongside the measurement :)

1748937182709.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.
I'll try to find some old VBA related measurements and, if I can, will give it a go
 
Thanks Peter. I just tried your exact settings.

View attachment 455101View attachment 455102

Control on the left, VBA on the right. For some reason it won't show data <40Hz even though it's definitely there.

That small red peak at 2.82 seconds does seem a bit smaller. This whole exercise feels like I am trying to squeeze water out of stone! Here is the .MDAT if you want to have a play.

I do have data below 40Hz

Control L vs VBA L

1748940155335.png
1748940181547.png


Pretty negligible difference

What I find strange is that your impulse peak is not at 0ms but at around 2787ms - I have never seen anything like that
Below 40Hz you have a peak energy delay of about 33ms - that is OK (especially that it starts below 40Hz only)

Maybe a dummy question: since you have two subs, have you tried simply manually aligning them (and the rest of the speakers) with the good old Acoustic timing reference method in REW? To me personally that method works the best, both objectively and subjectively + it is repeatable
 
What I find strange is that your impulse peak is not at 0ms but at around 2787ms - I have never seen anything like that

That is because I am using a loopback timing reference and not an acoustic timing reference. So 2787ms is the cumulative delay of everything in the loopback circuit, which includes the convolver - this is the greatest source of delay.

@3ll3d00d all that ringing is starting to make me doubt whether I posted the correct MDAT or not! As you can see from the step response, there is no ringing. I'll have to check later if I grabbed the correct one, it would be pretty embarrassing if I posted the wrong one :facepalm:

Maybe a dummy question: since you have two subs, have you tried simply manually aligning them (and the rest of the speakers) with the good old Acoustic timing reference method in REW? To me personally that method works the best, both objectively and subjectively + it is repeatable

The subs have already been carefully time aligned to the woofers :D
 
The subs have already been carefully time aligned to the woofers :D
So basically (provided that you did attach the correct file :) ) what we see on the Control L-R measurements is 'just' the subs and mains correctly time aligned acoustically vs. the VBA L-R measurements that have the VBA method on top of that (or instead)?

If that is the case then I fully agree with you that this is indeed about squeezing water out of stone ;)
 
Control on the left, VBA on the right. For some reason it won't show data <40Hz even though it's definitely there.
Use 1/6 octave. Here are some other views of the Control L then VBA L.

Control-L.png



VBA-L.png
 
Back
Top Bottom