• WANTED: Happy members who like to discuss audio and other topics related to our interest. Desire to learn and share knowledge of science required. 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!

Room equalization through inverse delayed and attenuated bass signals

So you're running the rear subs inverted and delayed, getting flat response but still having bad bass decay? Hmm. I could imagine it not being perfect but I'd expect it to be pretty good if the response is flat on account of setting up a reasonably well working double bass array. How big is the room and where do you have the woofers located? Can you post a REW file of your room's measurements?
I'm not running rear subs inverted nor delayed (for cancellation). I don't have terrible decay but I'd like to roll my own Dirac ART capability if I can. That's what I thought your set up was. A using phase cancellation with other speakers to reduce decay like Dirac ART.

ART was reducing bass decay by down from 350ms to 200ms.
 
I haven't got around to testing anything further, but I did post this thought the other day;



So I wonder what the impact would be with repetitive bass notes (eg fast drums) or sustained bass notes (eg electronic notes)?

I also wonder if a possible and/or better method is to have an impulse per frequency that has steep LP+HP filters either side, and then combine them in to 1 convolution file? Because OCA's method of targeting the lowest freq peak seems to leave the higher peaks less damped.

Edit: Actually there is something fundamental I'm not understanding about the impulse method. I watched a video that states "this tiny 1 sample pulse contains sinusoids of all possible frequencies representable for that sampling rate". If it contains all freq, how has delaying it by the room length not delayed a copy of all freq? I can see on REW SPL screen that it isn't, but I don't get why it is that way?
this is why I'm thinking a dedicated cancellation speaker would not impact those scenarios. Plus, if it worked, then it would not have the delay associated with an FIR filter.
 
I haven't got around to testing anything further, but I did post this thought the other day;



So I wonder what the impact would be with repetitive bass notes (eg fast drums) or sustained bass notes (eg electronic notes)?

I also wonder if a possible and/or better method is to have an impulse per frequency that has steep LP+HP filters either side, and then combine them in to 1 convolution file? Because OCA's method of targeting the lowest freq peak seems to leave the higher peaks less damped.
The added inverse signals definitely eat up some headroom on your woofers with the piled on signals, which will phase add at some frequencies. It's not as much of a problem as expected because the added signals are so low in level, or at least they were in my case. So you just have to turn the signal gain down a little to prevent potential clipping. If the spectrogram looks cleaner on a sweep and the clarity is measuring higher the fast drums and sustained notes should all sound better. The sustained notes will have the correct volume and the fast notes will have more clarity.
this is why I'm thinking a dedicated cancellation speaker would not impact those scenarios. Plus, if it worked, then it would not have the delay associated with an FIR filter.
It should work well. Bass traps can help with the higher bass frequencies.
 
The added inverse signals definitely eat up some headroom on your woofers with the piled on signals, which will phase add at some frequencies. It's not as much of a problem as expected because the added signals are so low in level, or at least they were in my case. So you just have to turn the signal gain down a little to prevent potential clipping. If the spectrogram looks cleaner on a sweep and the clarity is measuring higher the fast drums and sustained notes should all sound better. The sustained notes will have the correct volume and the fast notes will have more clarity.

It should work well. Bass traps can help with the higher bass frequencies.
I hope. I'm trying to figure out how to simulate in REW where I could create the inverse phase for the decay and the decay alone then have the subwoofer delayed and play a very diminished tone. Basically, what you're doing but with a second speaker instead of routing it through the same speaker.
 
The added inverse signals definitely eat up some headroom on your woofers with the piled on signals, which will phase add at some frequencies. It's not as much of a problem as expected because the added signals are so low in level, or at least they were in my case. So you just have to turn the signal gain down a little to prevent potential clipping. If the spectrogram looks cleaner on a sweep and the clarity is measuring higher the fast drums and sustained notes should all sound better. The sustained notes will have the correct volume and the fast notes will have more clarity.
Ah ok, that makes sense. Now I realise I was thinking about the "dynamics" side of it wrong, and it is just a headroom problem. But I'm still not 100% convinced on the timing side of it. I'm going to have to calculate and draw some examples to be certain.

But if your set up is working, have you tested a continuous signal with REW tone generator, around about the impulse tuning frequency? So from OCA's screenshot in post #22, that would be 33Hz. And test it with the VBA on and off? And also at the "opposite" end of the impulse eg 50Hz in his example - does that work fine too?

I think it will help me understand if I can see a sine wave with the VBA DSP added. I wonder if the resulting affect is that the signal appears "clipped" in the time domain, as in the slopes fall quicker? I'm going to try generate it properly (I don't actually know how), but I'm wondering if it's kind of like this;
wave.png
 
I did something (not with an impulse, but with "copy and delay"), but it doesn't look like my guesstimate at all. I based my test upon 33Hz signal with 26ms delay as per OCA's video. So I exported stereo 33Hz full volume tone from REW, put that in Audacity, split stereo to mono, inverted the second track, manually delayed it ~26ms (just dragged it to the right), then "Mix" some tracks. The 3 mixes were a full volume delay, a -6dB gain, and a -6dB "amplify" effect. The 2x -6dB's look the same, but I wasn't sure if the methods worked the same (they seem to). Regardless, all mixed tracks have similar features, namely a "transition" moment (akin to a stretching of the signal at that moment), and after that it is simply a delayed and attenuated signal.

tone.png
 
I did something (not with an impulse, but with "copy and delay"), but it doesn't look like my guesstimate at all. I based my test upon 33Hz signal with 26ms delay as per OCA's video. So I exported stereo 33Hz full volume tone from REW, put that in Audacity, split stereo to mono, inverted the second track, manually delayed it ~26ms (just dragged it to the right), then "Mix" some tracks. The 3 mixes were a full volume delay, a -6dB gain, and a -6dB "amplify" effect. The 2x -6dB's look the same, but I wasn't sure if the methods worked the same (they seem to). Regardless, all mixed tracks have similar features, namely a "transition" moment (akin to a stretching of the signal at that moment), and after that it is simply a delayed and attenuated signal.

View attachment 301597
Yes, whenever you add sine waves of the same frequency together with any delay or phase shift or polarity inversion you always get some new sine wave of the same frequency, just amplified or attenuated and phase/time shifted. The fact that the attenuated and delayed signal applied to the same woofers as the original signal works as well as it does to tame a room mode is a marvel to me. I'll test the sustained tones when I get a chance but I'm pretty sure they'll just settle out the same as you see on the sweep. I say that because I've done these kinds of comparisons before. As a matter of fact, I did run pink noise today through the system with the FIR impulse filter running and it was nice and smooth, just like the sweep result. Of course pink noise is random, not a continuous tone at any one frequency.
 
I've tried again with a convolver plugin (GSi Easy Convolver) in Audacity, after recreating OCA's impulse response in REW. The effects seem to be delayed ~1second (some quirk of the plugin?), but the effect is similar (attenuated and time shift, with a strange transition period). Actually it clipped the 0dBFS signal a fair bit.
tone+ir.png

I'm going to try using some tone pulses now, instead of the continuous tone, to see what that does. I better also check the 50Hz and other multiple freq's.

Edit: As a sanity check I duplicated the above result, inverted it, delayed it 1 cycle, and mixed it together. The result was a flat line (except for in the transition period, obviously). I did this to check there was no "pulsing" effect because of the impulse.


Edit2: This post was wrong, see my next post (#50).
 
Last edited:
I've tried again with a convolver plugin (GSi Easy Convolver) in Audacity, after recreating OCA's impulse response in REW. The effects seem to be delayed ~1second (some quirk of the plugin?), but the effect is similar (attenuated and time shift, with a strange transition period). Actually it clipped the 0dBFS signal a fair bit.
View attachment 301600

I'm going to try using some tone pulses now, instead of the continuous tone, to see what that does. I better also check the 50Hz and other multiple freq's.
I get that 1 second delay too. FIR filters can get significant latency, so unless I can figure that out I can't use the FIR filter for room correction with movies or games.
 
OMG I was totally doing it wrong in Audactiy lol. I get the reason for a delay with convolution when doing real time playback (because it needs to work so many samples in to the "future" so that it can process the entire length of the desired impulse response), but it seemed strange that the the delay was manifesting in my processed audio signal, because the impulse should get "baked in" to the whole audio stream. I tried another free convolution plugin and the results were the same with the same settings (after accounting for the second plugin applying -3dB automatically).

I eventually twigged that it was because the plugin had a "mix" setting that was described as "wet" or "dry", and it was defaulted at 0.5 (50%). I tested 0.0 which looked like the "difference" of the impulse, and 1.0 was the source stream unaffected, and adding them together gave the same result as processing at the default 0.5. I figured the default 0.5 must therefore be correct. But actually, it's just mixing the source stream with the processed stream at a certain ratio, but for what I am doing I want to see just the processed stream entirely. So to sum the problem up, mix=0 isn't the "difference", it's the "result". Doh!

Now it's all come together. Because I was also mucking around with the "IR Window" settings in REW, because these can (and seemingly should) be applied to the exported IR. It seems by default REW has windows Left = 100ms and Right = 500ms, but without ticking "Apply IR Window before Export" it exports a wav with Left ~1 seconds and Right ~4 seconds, hence the huge "delay". So I tried a few different settings like a token amount left and sufficient right (10,120), no left and sufficient right (0,100), and 1 cycle left and 4 cycles right (at 33Hz that's 30.3,121.2). Here's the result of those convolutions;
proper conv.png

All responses look the same from the moment of the "dirac pulse" as OCA calls it (actually it just seems to be called an impulse). I think it makes sense to have the impulse at 0, because the impulse contains all frequencies and we want all frequencies to be output immediately (because effectively the impulse is the original source). The right window needs to be sufficient to contain the delayed low pass filter, and looking at the Impulse graph on dBFS it is pretty obvious when the LPF has blended back in to the noise, so the right window needs to be a bit beyond that.

So in that convolved response (of a continuous 33Hz 0dBFS tone), the initial peak is -4dBFS, which seemingly coincides with the +4dB offset that OCA chose in his video. The repetitive peaks are about -8.5dBFS. When I try to rationalise what I'm seeing, it looks like it starts of with a single cycle at "high" volume, and then settles in to a phase shifted signal at "low". But also the "high" volume cycle is volume reduced. I guess the initial "high" cycle is to build up the energy in the room quickly, but not so fast that it becomes "boomy". Then the phase shift kind of tempers the energy build up due to the initial cycle, and then it settles in to a reduced volume that possibly sounds as loud as it is meant to once the room modes are at full power.

So apart from the initial 1.5cycles, isn't the signal basically the same as a -8.5dB PEQ? Because actually this VBA impulse response does not seem to do anything to tame room decay (beyond what a PEQ could do), unlike an actual DBA that outputs a cancellation signal. The first cycle is the difference to a PEQ, and maybe it is a good thing?! I reckon the louder first cycle would help give the impression of "fast bass", because the energy in the room would build up quicker than it would with PEQ only method.

Whilst I was writing this post I realised there were some similarities between the manual "delay and invert" I started with, and the convolved response. I have highlighted the similar points in the following image.
- 1 and 2 are the "high" peaks of the first cycle.
- 3 is the phase change point
- 4 is the first peak of the "low" signal, but it may not be the same as the following peaks due to its proximity to the "transition" zone
- 5 and 6 are when the "low" signal has settled in.
poi.png

Tomorrow I will have a go at convolving different frequencies and tone pulses with the same IR, like I said I would in a previous post.
 
Last edited:
Just to fundamentally understand this on my end. You are delaying one frequency band and reversing the phase of that to clean up the other frequencies?
 
I'm using HDMI out from my Mac Mini into a 5.1 reciever. I'm not using cancellation woofers. I'm just running delayed and inverted signals through the same woofers. It's a virtual bass array.
Today I've been experimenting with OCA's method of using REW to create an impulse file to feed into an FIR filter. No EQ parameters, just a single impulse file. His method is very powerful and this is unquestionably better in terms of technical accuracy. I'm blown away listening to my system now nearly perfeclty matching the Harman target curve at my listening position. The impact, clarity, everything is just out of this world. Unfortunately I've got a 1 second latency with this method so I can't use it for games or movies. Maybe movies if I could delay the video.
Something that can help a lot with latency:
The latency is directly proportional to the number of samples in the IR file.

Open the IR file in a wave editor as floating point. Boost the gain by 60 dB.
Look at the end of the waveform for where it fades to zero. Delete the silence at the end. Restore the gain to zero. Save the result with a different filename.

Not every IR file needs to be a million samples. Most fade to zero by 128K samples, unless you are capturing reverb in a parking ramp or similar.
 
Just to fundamentally understand this on my end. You are delaying one frequency band and reversing the phase of that to clean up the other frequencies?
I was delaying the woofer signal, which in my case was from about 25 Hz to 300Hz. I was mostly focusing on a single frequency with any given delay. It worked that frequency and didn't seem to cause any problems for any other frequencies in the band.
 
Something that can help a lot with latency:
The latency is directly proportional to the number of samples in the IR file.

Open the IR file in a wave editor as floating point. Boost the gain by 60 dB.
Look at the end of the waveform for where it fades to zero. Delete the silence at the end. Restore the gain to zero. Save the result with a different filename.

Not every IR file needs to be a million samples. Most fade to zero by 128K samples, unless you are capturing reverb in a parking ramp or similar.
Thanks! I trimmed off the silence on both ends of the impulse and the latency is now a non-issue! Less that 0.1 seconds. I can live with that.
 
As per your questions:

1. VBA will remove "half" of the first and the largest dip inevitable in every room which is not possible with EQ and that's an audible improvement. It will boost and extend bass below the first peak although in your case that may not be audible since your system can already produce bass down to the limits of human hearing.

2. Yes because EQ only decreases the volume of the problem frequency at the source, VBA doesn't intervene at the source but wipes out its reflection permanently.

3. That's only the long wall axial mode formula and is good for double bass arrays as they have no choice but place a second sub on the opposite wall. The formula involving the sum of all three room dimensions gives a good approximation for the room resonant frequency:
f = c / (2 * (L + W + H))
There're more precise and a lot more complex methods. "Sabine formula" to calculate from the volume of the room is one of them if you're interested:

Some follow-up questions:
To 2. EQ decreases volume at the listening position, so does VBA. However, the time signature would be different, right? Without EQ the room mode would be excited to a lesser
extent, whereas with VBA the first wave-front might be at full volume, but decay faster due to cancellation.
In practice, that could have the same benefit as non-ported designs have over ported ones, resulting in a punchier, less wobbly sound.
Is that right and are there measurements?

To 1. I do understand, that it's working well for the lowest mode. How about higher up in frequency >100Hz? You will have plenty of reflections of the initial sound and the anti-sound of the VBA.

To 3. Can you combine VBA with FIR?
Which software/setup is capable to do the calculation besides DIRAC ART on VBAs and also optimizes excess-phase and step-response? Math becomes quite complex if you plan to correct in the time-domain with multiple sources. I understand, that it's easy to delay the anti-sound by a fixed time w.r.t. to the main signal, but that might screw up the time response.
Acourate can't do that and in order not destroy the phase/excess-phase correction, it would be FIR filter working across all speakers.
 
Thanks! I trimmed off the silence on both ends of the impulse and the latency is now a non-issue! Less that 0.1 seconds. I can live with that.
I believe that can be done in REW as well. OCA covers it in his last video (I think)
 
Unfortunately, it's not that simple. There are 6 reflections (floor, ceiling, left side wall, right side wall, front wall, rear wall) from two speakers and their first, second, third bounces are all in action to add up or cancel out each other in a chaotic fashion. Furthermore, depending on the frequency affected by the time delay of the bounced wave, the signal origination source will switch i.e. first floor reflection might cause a dip at 210Hz which will be from woofer or at 280Hz which will be from the midrange driver which is located at a different height to floor than the woofer. And this is all if you have flat surfaces with identical reflective properties all around the room which is never the case.

As per your questions:

1. VBA will remove "half" of the first and the largest dip inevitable in every room which is not possible with EQ and that's an audible improvement. It will boost and extend bass below the first peak although in your case that may not be audible since your system can already produce bass down to the limits of human hearing.

2. Yes because EQ only decreases the volume of the problem frequency at the source, VBA doesn't intervene at the source but wipes out its reflection permanently.

3. That's only the long wall axial mode formula and is good for double bass arrays as they have no choice but place a second sub on the opposite wall. The formula involving the sum of all three room dimensions gives a good approximation for the room resonant frequency:
f = c / (2 * (L + W + H))
There're more precise and a lot more complex methods. "Sabine formula" to calculate from the volume of the room is one of them if you're interested:
Can VBA be applied to multiple subs that are summed as one sub? Or should it be applied to each individual sub then sub the sums? Seems like the former?
 
Just to fundamentally understand this on my end. You are delaying one frequency band and reversing the phase of that to clean up the other frequencies?
To clean up the same frequencies, which are the peaking room modes.

A single/double bass array has sub(s) arranged in such a way on the front wall that are meant to output a "plane wave". This plane wave kind of negates all the early reflections (side walls and floor/ceiling), but when the plane wave gets to the back wall, it would reflect and you would still have a room mode issue. To fix that, single bass arrays have lots of absorption on the back wall to diminish the reflection, and double bass arrays have more sub(s) on the back wall to output a cancellation wave. In this way the rooms bass decay is greatly improved because the room modes that reinforce the bass (the ones that cause it double up/peak, as opposed to ones that cancel themselves ie nulls) are "disabled". When you look on a waterfall, these peaking room modes are often the strongest and longest decay areas.

The idea of VBA (as I see it) is to output a delayed cancellation signal to try and tame the same peaks. Imagine a bass note that matches your rooms length mode is played and decays very quickly in the recording, but in your room the sounds bounces around for a long time (far longer than other notes that aren't related to room modes) which could sound boomy or muddy. The idea of VBA is to output a cancellation tone to stop those bounces, thus improving the clarity of the bass. By cancelling the freq in the room sooner, the perceived loudness will be less, because the energy in the room exists for less time. So in that way, it improves the frequency response too by bringing those peaks down to normal levels.

From you posts in this thread it sounds like you have a "traditional" multi sub setup. The idea of that setup is that each sub has a particular relationship with the room and listening position, and each one should cause peaks and nulls at different frequencies, and then hopefully it all balances out at the listening position. Hopefully this gives a rather flat response across different listening positions, but it might not help the decay times (bounce times). If you could magically fix the decay times at the freq they are bad, I guess the SPL would also drop too?! So then they would need boosting back up (but perhaps they were already EQ'd down).

If you want to do VBA with multi sub setup, then you're in uncharted waters. I guess it is possible for each sub to output its own personal cancellation freq's, or for them to all output the same cancellations, or even for 1 sub to be dedicated to just cancellations. But configuring each of those options would require some effort. Alternatively, if your subs all the same you could try double bass array. Or if you can move 2 to the front+middle, you could try the inverted cardioid stack that I theorised here. If you add a third sub to the stack it could be dedicated to cancellation. I only have 1 sub atm so can't test it.

Without EQ the room mode would be excited to a lesser extent, whereas with VBA the first wave-front might be at full volume, but decay faster due to cancellation.
This is what I was testing above in Audacity, and the answer is no. Without EQ it would excite so much more. With VBA (as per OCA's design) it has a -4dB initial burst followed by a -8.5dB sustained tone. Possibly that is the same as a -4dB or -8.5dB EQ, but someone will have to test. But "sustained tone" is only 1 possibility, I haven't looked at "burst tone" yet. Maybe the cancellation is more effective in that regard?!

before and after.png
 
To clean up the same frequencies, which are the peaking room modes.

A single/double bass array has sub(s) arranged in such a way on the front wall that are meant to output a "plane wave". This plane wave kind of negates all the early reflections (side walls and floor/ceiling), but when the plane wave gets to the back wall, it would reflect and you would still have a room mode issue. To fix that, single bass arrays have lots of absorption on the back wall to diminish the reflection, and double bass arrays have more sub(s) on the back wall to output a cancellation wave. In this way the rooms bass decay is greatly improved because the room modes that reinforce the bass (the ones that cause it double up/peak, as opposed to ones that cancel themselves ie nulls) are "disabled". When you look on a waterfall, these peaking room modes are often the strongest and longest decay areas.

The idea of VBA (as I see it) is to output a delayed cancellation signal to try and tame the same peaks. Imagine a bass note that matches your rooms length mode is played and decays very quickly in the recording, but in your room the sounds bounces around for a long time (far longer than other notes that aren't related to room modes) which could sound boomy or muddy. The idea of VBA is to output a cancellation tone to stop those bounces, thus improving the clarity of the bass. By cancelling the freq in the room sooner, the perceived loudness will be less, because the energy in the room exists for less time. So in that way, it improves the frequency response too by bringing those peaks down to normal levels.

From you posts in this thread it sounds like you have a "traditional" multi sub setup. The idea of that setup is that each sub has a particular relationship with the room and listening position, and each one should cause peaks and nulls at different frequencies, and then hopefully it all balances out at the listening position. Hopefully this gives a rather flat response across different listening positions, but it might not help the decay times (bounce times). If you could magically fix the decay times at the freq they are bad, I guess the SPL would also drop too?! So then they would need boosting back up (but perhaps they were already EQ'd down).

If you want to do VBA with multi sub setup, then you're in uncharted waters. I guess it is possible for each sub to output its own personal cancellation freq's, or for them to all output the same cancellations, or even for 1 sub to be dedicated to just cancellations. But configuring each of those options would require some effort. Alternatively, if your subs all the same you could try double bass array. Or if you can move 2 to the front+middle, you could try the inverted cardioid stack that I theorised here. If you add a third sub to the stack it could be dedicated to cancellation. I only have 1 sub atm so can't test it.


This is what I was testing above in Audacity, and the answer is no. Without EQ it would excite so much more. With VBA (as per OCA's design) it has a -4dB initial burst followed by a -8.5dB sustained tone. Possibly that is the same as a -4dB or -8.5dB EQ, but someone will have to test. But "sustained tone" is only 1 possibility, I haven't looked at "burst tone" yet. Maybe the cancellation is more effective in that regard?!

View attachment 301763
This is very helpful. Decay time is definitely what I’m looking to improve.
 
I've just tried out a few other continuous tones with OCA's IR and found some oddities.

Firstly I've only just noticed that his method has caused the t=0 impulse to be -4dB (~63%), which is a result of the 4dB he adds to the LP. You can see this on the impulse graph below when unticking the "Normalised" setting. So when I said before it's -4 then -8, if it was volume matched it be more like 0 then -4 at 33Hz?

Second thing I've noticed is the ~30ms delayed impulse appears in basically all frequencies. In the REW SPL graph you can see the LP cuts off the effect (the squiggle approaches 0), but at ~198Hz it is meant to be close to zero, and at 2kHz it reports as zero. But zooming in in Audacity reveals the delayed IR peak shows up at these freq too. I guess in effect it is "noise".

ir bad.png
Edit: It seems the forum automatically scaled this large screenshot, so it's a bit hard to see.

Next I tried some short repeating tones (0dBFS, 500ms tone, 200ms silence, repeating) at different frequencies, starting at 33Hz (the first -EQ valley), and iterating towards 50Hz (the first +EQ peak). Here are those results;

repeating.png

It's evident that even with the main impulse being -4dB, these frequencies are really getting boosted as REW suggests they were, and this is causing the signal to clip.

Also of interest is how I have now included some silence at the end, so that it can calculate the "run off", which doesn't look good. At 33Hz (full -EQ) it seems to gain power at the end. I guess this is because the main impulse has moved in to silence, but the "cancellation impulse" is still at full power? Meanwhile at 50Hz (full +EQ) it loses power once the time aligned signal+delay becomes delay only.

In the next image I have zoomed in on the 33Hz runoff, and time aligned a normal 33Hz signal above it. You can see there is a small phase shift, but it is not shifted enough to be an actual "cancellation" wave.
post IR.png


Now I'm no expert, so I don't know if what I've done is even technically valid, but it doesn't look good. It kind of seems like this IR method is just a dynamic (in time and frequency) EQ.
 
Last edited:
Back
Top Bottom