The method I mentioned at the end of my last post about creating cancel tones in Audacity is proving fruitful. Because what I've come to realise is that VBA as we are doing it boils down to adding up impulse responses at the listening position. Because presuming that the speaker can output the cancel tone (which means ignoring the changes that can happen when you mix a cancel tone in to the source), that's what will happen (summed IR's), because the cancel tone is basically just another tone that will travel around the room in exactly the same way as the main tone, and we will experience its effects at the LP. So adding IR's together is basically what we are doing - the VBA wave being different due to any amplitude or phase changes desired.
This seems an important step in designing VBA like DL-ART is doing because it also allows simulating one speaker or subwoofer countering another. If L is cancelling R, L cancel impulse at the LP will be slightly different than if R output that same cancel signal.
Additionally I came to realised that a full cycle tone is a half cycle IR (eg start with a crest), and then the next half cycle (the valley) is just an inverted and delayed IR too. Add the 2 half cycle IR's together and it's the same as doing the IR of the full cycle tone. So I've taken to using half cycle only in the very first stages of trial and error, because it seems less "noisy".
So just to set the baseline for the discussion, below is 33Hz 1x full cycle tests.
The 1st row isn't the test tone, I just put it there to see the subtle phase shift on the following results.
The 2nd row is the tone passed through the in room IR, and then normalised (made to full volume). The orange lines are the rough shape of a pure tone, and everything after the orange lines is un-decayed tone.
The 3rd row is the tone passed through the VBA IR, then the in room IR. I amplified this tone so that the second crest at ~30ms was the same amplitude as the previous result. This means the 3rd crest is quieter, because the VBA has volume shifted it. It has reduced the 4th crest but possibly by too much, improved the 5th crests, and reduced the decay thus improving it.
Next I begin my tests with a half cycle tone put through the in room IR (row 1). Then I duplicated it, and modified the duplicate as I wanted (row 2). I delayed it so that a peak of choice aligned with another peak of choice, and then row2 was inverted as required so that they cancelled. Then I mixed the 2 together to get row 3.
The first attempt was not very successful. Lots of decay still.
The second attempt I adjusted the delay and inverted it. Some of the decay side is improved. Where the cursor line is (~150msec) you can see the IR's added up to make decay noise. But I could see that if I shifted the cancel tone to the left slightly, they would sum - to +.
Third attempt improved the cursor position, but the rest isn't great.
Last attempt for this post, and I delayed it quite a bit. This seems a good result! The cancellation in the decay area seems good.
So I took that attempt and fleshed it out fully (with a full cycle tone), so that I could compare it with the previous VBA. So I just manually place the 2 tones, mix them, then IR the mix. Here it is;
Next screenshot is the same thing but normalised. What would the actual in room SPL be, I'm not sure? Maybe the first or second peak should be volume matched. So normalising probably isn't proper, but also maybe it is when volume matched in room.
So that's a decent result! The decay seems improved versus the old VBA example. The other big difference to me is that the 4th crest is a bit stronger, which I think is better, because in the first screenshot you can see it would fall below the orange line.
The VBA as OCA did it would probably achieve the same result if it was delayed/amplified the same, but this method seems easier to line everything and see the decay, instead of doing it in REW and only seeing the SPL result. But also, I haven't even got to trialling multiple VBA tones of different frequencies yet, with 1 of them possibly being a weak inverted tone ahead of the main tone.
Anyway, this is not a production ready workflow, but I think it shows promise, because this is letting me work out the optimal delay and amplitude of the VBA tone. AND this workflow will be good for speaker A cancelling speaker B.
This seems an important step in designing VBA like DL-ART is doing because it also allows simulating one speaker or subwoofer countering another. If L is cancelling R, L cancel impulse at the LP will be slightly different than if R output that same cancel signal.
Additionally I came to realised that a full cycle tone is a half cycle IR (eg start with a crest), and then the next half cycle (the valley) is just an inverted and delayed IR too. Add the 2 half cycle IR's together and it's the same as doing the IR of the full cycle tone. So I've taken to using half cycle only in the very first stages of trial and error, because it seems less "noisy".
So just to set the baseline for the discussion, below is 33Hz 1x full cycle tests.
The 1st row isn't the test tone, I just put it there to see the subtle phase shift on the following results.
The 2nd row is the tone passed through the in room IR, and then normalised (made to full volume). The orange lines are the rough shape of a pure tone, and everything after the orange lines is un-decayed tone.
The 3rd row is the tone passed through the VBA IR, then the in room IR. I amplified this tone so that the second crest at ~30ms was the same amplitude as the previous result. This means the 3rd crest is quieter, because the VBA has volume shifted it. It has reduced the 4th crest but possibly by too much, improved the 5th crests, and reduced the decay thus improving it.
Next I begin my tests with a half cycle tone put through the in room IR (row 1). Then I duplicated it, and modified the duplicate as I wanted (row 2). I delayed it so that a peak of choice aligned with another peak of choice, and then row2 was inverted as required so that they cancelled. Then I mixed the 2 together to get row 3.
The first attempt was not very successful. Lots of decay still.
The second attempt I adjusted the delay and inverted it. Some of the decay side is improved. Where the cursor line is (~150msec) you can see the IR's added up to make decay noise. But I could see that if I shifted the cancel tone to the left slightly, they would sum - to +.
Third attempt improved the cursor position, but the rest isn't great.
Last attempt for this post, and I delayed it quite a bit. This seems a good result! The cancellation in the decay area seems good.
So I took that attempt and fleshed it out fully (with a full cycle tone), so that I could compare it with the previous VBA. So I just manually place the 2 tones, mix them, then IR the mix. Here it is;
Next screenshot is the same thing but normalised. What would the actual in room SPL be, I'm not sure? Maybe the first or second peak should be volume matched. So normalising probably isn't proper, but also maybe it is when volume matched in room.
So that's a decent result! The decay seems improved versus the old VBA example. The other big difference to me is that the 4th crest is a bit stronger, which I think is better, because in the first screenshot you can see it would fall below the orange line.
The VBA as OCA did it would probably achieve the same result if it was delayed/amplified the same, but this method seems easier to line everything and see the decay, instead of doing it in REW and only seeing the SPL result. But also, I haven't even got to trialling multiple VBA tones of different frequencies yet, with 1 of them possibly being a weak inverted tone ahead of the main tone.
Anyway, this is not a production ready workflow, but I think it shows promise, because this is letting me work out the optimal delay and amplitude of the VBA tone. AND this workflow will be good for speaker A cancelling speaker B.
Last edited: