• 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

fineMen

Major Contributor
Joined
Oct 31, 2021
Messages
1,504
Likes
680
I disagree because I don't know if (or how) the SPL graph is capable of showing these "over time" effects properly? All my previous analysis posts have been working towards understanding this fundamental question I have. Let me break it down ...
I've got a degree in the field. Frequency and such were a fully covered topic in the second year. Guess what field it was? Periodicity is a more strange topic than you might expect. I cannot get into details effectively.

But, yeah, if you've got an amplitude over frequency plot and a group delay over frequency plot, you have it all.

The thing with cutting an impulse into slices and such is an afterthought that doesn't gain anything but irritation. Again, this is not the place to get into the details.

If you're happy, just go on. If you do I have to think of DIRAC, who sparked the random walk, not that forgiving.
 
OP
T

Tim Link

Addicted to Fun and Learning
Forum Donor
Joined
Apr 10, 2020
Messages
797
Likes
668
Location
Eugene, OR
A few things I've learned from all this:

1. That Harman curve really works for me!

2. Getting a tight match to the Harman curve below 200 Hz is important. Above that it's best to let narrow peaks and dips start to happen. Low Q parametric filters are fine to get the smoothed response close to the Harman curve at higher frequencies. Below 200Hz the FIR convolution filter does an excellent job. If that convolution filter "rings" I don't hear it. Maybe I will eventually learn to hear it and be disappointed. For now I'm just super happy to have no missing or booming or otherwise strange sounding bass notes. They're all nice, clear, impactful and even.

3. Don't let FIR or anything else use narrow band corrections in the treble at the listening position. That creates some serious coloration. Sounds like you're listening in a big PVC pipe. I've limited FIR convolution to 200Hz. Above that I just do the parametric thing. FIR can't seem to fix the time domain problems up there so I see no point. As long as the smoothed response stays close to the Harman curve it sounds wonderful.
 
Last edited:

neRok

Senior Member
Joined
Oct 7, 2022
Messages
304
Likes
176
Location
Australia
I followed UliBru's instructions here.
I read through that thread and the workflow seems mostly the same as OCA was doing in REW. So that's something.

Also I found some nuggets of info from user dbr there. At the end of my last post (#119) I wondered what a DBA would look like on a waterfall/spectrogram? About this, dbr said the following;
In an article from I've read by Nielsen and Celestinos, called "Low Frequency Sound Control in Rectangular Rooms using CABS (Controlled Acoustic Bass System) will also reduce sound transmission to neighbouring rooms" (2011) their experimentation with a DBA consisting of two subwoofers at the front and two at the back, with the inverted time compensated sound wave, the sound wave is completely cancelled and the resulting longitudinal echo from the back wall is removed.

Their experimentation resulted in a reduction of cumulative spectral decay between 10-100 Hz from 500ms to 100 ms . That is, the result was a very "dry" room in terms of bass.
Also he mentions in the same post that they used the simpler copy + filter + invert + delay + merge method.

About the timing of the VBA wave, dbr also mentions the following info;
I read a paper by Nils Öllerer from 2021 where he tries a frontal wave from 4 sub woofers in a VBA setup. His simulation suggested that a one room length delay worked better than two and that if seated in the middle of the room the VBA with one length delay would cancel out the variations, and essentially be almost identical to a DBA with a similar amount of drivers in terms of frequency response and SPL. In his presentation the dual room length delay performed worse. I'm not sure if this was a simulation or something he tried in his set up.

Those articles/papers may yield further info. My research continues...
 

fineMen

Major Contributor
Joined
Oct 31, 2021
Messages
1,504
Likes
680
Those articles/papers may yield further info. My research continues...
Aha, I don't know the papers, but I know the problems with the "DBA". I re-invented it independendly. There is no way to get it 'clean', whatever that means, with just 4 drivers. Ironically you have to maintain a plain 'waverfront' amplitude and phase wise only as to then after cancelling it. If its not plain, you won't kill it. Its simple physics (not that advanced, but beyond college grade by a long strech).

What about a compromise as with nearly everthing in human existence? Let there be some peaks and dips, because the human hearing is a tolerant, if not to say sloppy, in this range, because humans are used to especially low tuned resonances, because in the evolutionary process humans got accustomed to first rocky caves, then houses, then acoustically treated man caves again, because augmented reality is just the big thing.

Have +/- 5dB? Fine, congrats!

If not, one or two additional woofers would groom the room if positioned tactically and fed with a filtered signal, without that comb filter you are speculating about.
 

neRok

Senior Member
Joined
Oct 7, 2022
Messages
304
Likes
176
Location
Australia
If its not plain, you won't kill it.
I get that, also when you mentioned "different propagation vectors" in a previous post. But it's still worth a shot IMO, because it will do more than nothing, and so the result might be better.

What about a compromise as with nearly everthing in human existence? Let there be some peaks and dips, because the human hearing is a tolerant, if not to say sloppy, in this range
"Nothing" is what I've done for years, and it has problems. Before I had a measurement mic or researched anything, the loudspeakers in my lounge room would get "honky" in the bass at loud volumes. Now that I know about room modes, I'm guessing that was the issue. I pretty much only listen to heavy metal, so there is a lot of sound all the time. I think the problem was certain frequencies caused by the likes of a double bass drum being played right on to a room mode. So instead of hearing individual thump-thump-thump, it ends up just sounding like "brrrrrr", because the energy never manages to dissipate between notes.

Now on my PC with my near-field system I feel the bass isn't as tactile as I've felt before. Possibly this is also due to a peaking room mode, but it may also be the fault of a null right where the important notes are falling.

This is what has me interested in DBA and now VBA, to see if I can get more out of the components I have now.
 

OCA

Addicted to Fun and Learning
Forum Donor
Joined
Feb 2, 2020
Messages
690
Likes
515
Location
Germany
Sorry OCA this is incorrect. He is using minimum phase. I realize that my post is quite information dense and you may have missed it, but here it is in Point #3:

3. Create the filter. Here, we are only correcting to 150Hz.
- Generate-Crossover. Butterworth, 150Hz, 4th order. Load XO1L and XO2L into curves 1 and 2.
- Then apply to XO1L and XO1R TD Functions-Phase Extraction. Minphase, start 20, end 400 into Curve 3 and 4.
He's taking minimum phase version of the low pass filter here. REW creates lpf filter minimum phase anyway. The new addition I was talking is generating minimum phase of the Dirac-LPF operation which is the VBA filter applied to the speaker response.

I am not familiar with Acourate operations so correct me please if I misunderstood.
 

OCA

Addicted to Fun and Learning
Forum Donor
Joined
Feb 2, 2020
Messages
690
Likes
515
Location
Germany
Today I spent a bit more time trying to refine the VBA. With VBA, there are two major variables that have to align for it to work:

1. The amount of delay. This is calculated from room size (as mentioned in previous posts)
2. The amount of attenuation.

So today I spent some time trying to find the correct delay. I generated four filters with different assumptions (and therefore different delays):

- VBA1: Measured sub delay + 7m room length. However, the measured sub delay is suspiciously long, 630 samples = 13ms of delay, or 4.5m distance. The subs are only 1.5m behind the main speakers.
- VBA2: Assuming that the above sub delay is incorrect, I took the first negative deflection as the peak (assuming the possibility that the polarity of the sub could be inverted). This gave 300 samples, or 6.5ms of delay, or distance of 2.2m. Seems more realistic.
- VBA3: The room might be 7m long, but the subs are pushed about 1m into the room. So this filter assumes that the sub has 6.5ms of delay, and the room is 6m long.
- VBA4: Sub delay not accounted for at all, and room length assumed to be 7m.

Outcome: of all the filters, VBA3 was the clear winner. It produced the flattest frequency response, and evened out the bass at other listening positions. The message seems clear to me: when calculating the delay, the distance that should be accounted for is not the length of the room, but the length from the subwoofer to the rear wall, multiplied by 2.

So let's take a closer look at VBA3.

image.png.fec1bdf25ed6d58e236976be10e03cf4.png


Comparing the VBA3 filter to the uncorrected room response, we can see that it is a relatively good match. There are peaks in the filter where there are dips in the room response, and vice-versa (not everywhere though!). Given that bass frequencies and the filter are both minimal phase systems, just looking at this comparison should help us predict where the peaks and dips will be after correction.

image.png.981c8791f37b4a84f0e8166452e12e22.png


So let us take a look at the measured response. This is a comparison of the control (no VBA, overall room EQ only), the measured room response of VBA3, and the VBA3 filter. It should be apparent that the outcome is not perfect. The VBA3 filter produces a more lumpy response at the main listening position (MLP), corresponding to dips in the filter at 50Hz and 80Hz.

image.png.59377d5c5e07f1d4d3b523cf8bbbff83.png


However, if we move to the left sofa, we can see that all the other filters fail to produce an even bass response ... except VBA3. So clearly VBA3 is working as intended - the bass response is more even in the listening room and not only in the MLP.

I confirmed this with subjective listening. VBA3 gives a noticeably smoother bass tone and variation in bass tone around the room is much less lumpy than the control.

Now that I know roughly which calculation I should be using to generate the delay, the next step is to really hone in on calculating the correct delay by applying several other assumptions to the calculation and measuring to see which gives the best response. Most notably, I have dipole subs and the rough calculation is from the centre of the sub. Obviously the rear facing subwoofer is going to radiate towards the front wall, bounce back, and travel the length of the room and back again so there is scope for additional refinements to the filter.

I also measured a waterfall with REW. Every VBA iteration worsened the waterfall. I am not worried, because this tells me that the attenuation has not been correctly set. If the cancellation signal is too high in amplitude, and with the delay incorrect, it contributes to ringing instead of removing it.

CONCLUSION FOR THE DAY
When Uli wrote his instructions for calculating room distance for a VBA, he said this:



I have bold typed the part that I missed the first time I read it - or at least, I did not realize its significance. In his instructions, Uli tells you to double the room length to obtain the transition time, and then subtract the measured delay of the subwoofer. This assumes that the speaker is flush against the wall.

My experiments today have demonstrated that the actual distance that should be calculated is the distance from the subwoofer to the rear wall and back and not the length of the room. Uli does say this, but I think most casual readers will miss its significance.

Most importantly, my experiments have demonstrated that the calculation works. My next iteration will take into account the fact that I have push-pull subs, with one driver firing forwards into the room, and the other firing rearwards into the front wall, reflecting down the length of the room, and then back. After this, I will work on finding the correct attenuation for the filter.
I see you are already deep into to the VBA abysm :)

I have spent too many hours with it. Forget about room length. As Uli has also mentioned, reflections quickly become chaotic and impossible to calculate.

Reverse engineering the room is one of the best ways to create a descent filter. You should calculate time delay and hence the room's resonant frequency from the first peak of the vector average of left and right speakers (or a stereo measured response).

Use 1/3 smoothing and linear frequency axis (5-200Hz) to see peaks and dips clearly and check the top of the first "audible" peak for the precise frequency (left and right speakers will both have the same peak anyway).

Let's say this is 34.45Hz

You rooom resonant frequency is 34.45/2=17.225Hz (this is the first dip)

This also means the room dimension causing the resonance is 343/(2x17.225)/2=9.956m. Many people believe this is twice the room length but it's closer to "all 3 room dimensions added" in my experience. Anyway, this is irrelevant.

Every multiple of this frequency will cause a peak and dip. In other words 17.225Hz is the first dip, 34.45Hz is the first peak, 3x17.225Hz=51.675Hz is the second dip, 4x17.225=68.90Hz is the second peak......

Impulse peak of the inverted signal should be at t=1000/2/34.45=29.0276 ms

The crossover of the low pass filter you will use will have a certain delay 5-10ms (the steeper the higher). You must take this into account when applying a time offset to the lowpass filter.

If you create the low pass in REW, it will be min phase and REW will show its reference time, too. But otherwise you should generate min phase version of the low pass.

Subtract this from a Dirac pulse (you're inverting polarity) and generate min phase of the result.

Check that first dip of the result is exactly at the first peak frequency (34.45Hz). If not, adjust the time delay of the lpf until it does.

For best results lpf crossover should start at the first peak freq (34.45Hz) and have a slope of 6dB/octave. Steep filters will have a negative effect on clarity.

Further optimizations can be done to decrease the effect of the VBA filter on the peaks while keeping its effect intact on the dips. Smoothing out the VBA filter to 1/6 is what I do. If you click "replicate data outside range" while generating minimum phase in REW, the min phase version will be permanently smoothed. This will also diminish the fluctuations of the VBA filter much earlier:

1691094716197.png
 

OCA

Addicted to Fun and Learning
Forum Donor
Joined
Feb 2, 2020
Messages
690
Likes
515
Location
Germany
This is what I noticed in my last Audacity screenshot = that the strongest cycles are delayed by 1 to 2 cycles from where they would have been.
Use "minimum phase" version of Dirac + lpf
 

neRok

Senior Member
Joined
Oct 7, 2022
Messages
304
Likes
176
Location
Australia
Use "minimum phase" version of Dirac + lpf
Good catch. This was indeed a problem with the IR's I was using from last week. So I am redoing some analysis at the moment. Also it seems like the "Filtered IR" screen does the same thing. I will report back.
 

Keith_W

Major Contributor
Joined
Jun 26, 2016
Messages
2,707
Likes
6,241
Location
Melbourne, Australia
I see you are already deep into to the VBA abysm :)

I am trying to get rid of the abyss, not get into it ;)

I have spent too many hours with it. Forget about room length. As Uli has also mentioned, reflections quickly become chaotic and impossible to calculate.

Reverse engineering the room is one of the best ways to create a descent filter. You should calculate time delay and hence the room's resonant frequency from the first peak of the vector average of left and right speakers (or a stereo measured response).

You know, there has been a very dim lightbulb in my head thinking about this over the past few days and I think you have totally nailed it. Of course this is the best way to create a VBA filter!! It now seems so obvious now that you have mentioned it. I will go and look at it later and see if I can get it to work. Thank you!!!
 
  • Like
Reactions: OCA

neRok

Senior Member
Joined
Oct 7, 2022
Messages
304
Likes
176
Location
Australia
Use "minimum phase" version of Dirac + lpf
So as it turns out, it is critical to use/export minimum phase version. Otherwise all sorts of things happen.

Also the export should not be normalised, because that can cause clipping. This is even though the impulse does not appear full power in REW.
If any DSP/convolution engine has an option to "Normalise IR" you give it, it seems you should NOT tick that option, or else you could get clipping.

The screenshot below shows this analysis, and in summary you can see the correct results are without normalisation, and with minimum phase applied - preferrably in the measurement, but also during the export works (and stacking both doesn't hurt).

VBA IR compare.png VBA IR level.png

Now that I have the correct min-phase VBA for use in Audacity, I repeated my tests combining tones with VBA IR and then with your measured IR. This time I tried 2 cycle tone, 3 cycle tone, and a longer tone (of the same 33.7Hz -0dBFS tone).

First I used the raw (non-normalised) measured IR and normalised the quiet results, but I realised that probably isn't right. Still it is interesting, so here it is anyway;
IR Tests with Normalised Results.png

So instead I amplified the results by a common gain of +40dB. Now this is interesting.
IR Tests with Amplified Results.png

The VBA effect now seems apparent to me!
  • In the aftermath of the 2 cycle tone you can see that the valley and crest at ~0.25ms are nicely suppressed, as is every cycle after them. This suggests decreased decay to me.
  • The 3 cycle tone is very similar.
  • The long tone is interesting in another way, because with VBA you can see the tone continuously building up strength in room. The cycles also build up with VBA tone (as the previous normalised screenshot shows by effectively being zoomed in further), but they seem to start from a more controlled amplitute and then build up slower. The decay also looks improved just as well as the other tone examples.
So it seems like there is an actual improvement at these targeted frequencies! ...

But maybe only at those frequencies? Because now that I'm more familiar the "Filtered IR" screen, I have looked at the 63Hz 1/3 option (normalised). 63Hz is close to 66Hz, which is the 2x multiple of OCA's problematic ~33Hz area. So it's a quick and easy example (without having to manually bandpass the measurement).

So comparing OCA's measured L0 (before VBA), and L1 (with VBA), you can also see the improved decay time with VBA.
L0 IR@63.png L1 IR@63.png

But I also discovered you can use the Filtered IR screen with the dirac impulse, and it shows what a "perfect wave" would look like;
Dirac IR@63.png

And then I worked out that using the "Zero phase filtering" option offsets the filtered IR so that t=0 lines up with what I think should be the "central group velocity" (more on that term later). Basically I think that's the point when the direct wave has "officially" been heard. So everything after that is unnecessary and room related gains. So even though VBA has improved the back half of 63Hz, it hasn't corrected the "second peak" at all. And I haven't looked yet but I'm guessing this "second peak" relates to group delay.

But last night I was going down a rabbit hole of topics on Wikipedia, and that's where I came across the term "central group velocity", as it was mentioned on the page for Wave packets. There's a lot to understand there and I still haven't got through it all, but the following gif is illustrative;
Wavepacket1.gif
Superposition of 1D plane waves (blue) that sum to form a Gaussian wave packet (red) that propagates to the right while spreading. Blue dots follow each plane wave's phase velocity while the red line follows the central group velocity.

The pages intro is also informative;
In physics, a wave packet (or wave train or wave group) is a short burst of localized wave action that travels as a unit, outlined by an envelope.
Because I notice the use of the word envelope again.
Later it says;
Any signal of a limited width in time or space requires many frequency components around a center frequency within a bandwidth inversely proportional to that width;
So to me that's referring to even 1 cycle tones, like I was simulating in Audacity. Because for that 1 cycle to move through the air requires a wave packet. But also it applies to dirac pulse, because the next part of the sentence is;
even a gaussian function is considered a wave packet because its Fourier transform is a "packet" of waves of frequencies clustered around a central frequency.
The Gaussian function page links to "Dirac delta" page which says;
In mathematical physics, the Dirac delta distribution (δ distribution), also known as the unit impulse
It's the basically the same thing (or perhaps more correctly, a "dirac pulse" is an example of a gaussian function?).

Edit: Just to clarify the relevance of the wave packet and why there is more than 1 wave for even a 1 cycle tone - I believe it's because the air is actually being compressed and stretched by the crests and valleys of the wave being created. So when the initial crest is played (positive amplitude = high pressure), that means compressed air. But to compress that portion of air means another portion of air has to stretch, and so a weaker valley wave forms in front of the main crest wave. But that valley is still so strong that it causes an area of compressed air in front of it, thus another weaker peak wave forms ahead of it. And so on it goes until it reaches 0, and the same thing happens in reverse once the main wave passes completely, and the wave packet "dissolves".

So that's what the "filtered IR" of the dirac pulse is showing - the wave packet. And the fact our in room IR has a different wave packet is indicative of the problems the room is causing. And any energy that arrives after the direct waves energy has arrived, then that can cause additional peaks which seem to be effectively the increased group delay (it seems that way, but I haven't confirmed).

I bring up all this wave packet stuff because I think it holds the answer to the best audio. But also it shows the relevance of the result of a filtered IR, and so I think it is important to look at what OCA's VBA IR has done to other frequencies, like 50Hz (which seems to be a room null).
L0 IR@50.png L1 IR@50.png
It's actually made it somewhat worse (but not by a great deal according to the Schroeder Integral), because the delayed peak at ~150ms is far stronger with VBA. Here is a perfect 50hz wave packet, just to confirm that all that delayed peak isn't necessary;
Dirac IR@50.png

So whilst the VBA IR to date is an improvement in some areas, I don't think it's the best possible solution. Possibly we need an entirely different solution, or an overlapping solution that can fix other problematic frequencies. Also this VBA IR to date is not utilising multiple speakers/subwoofers to their full potential, but only applying 1 IR to all.
 
Last edited:

OCA

Addicted to Fun and Learning
Forum Donor
Joined
Feb 2, 2020
Messages
690
Likes
515
Location
Germany
So as it turns out, it is critical to use/export minimum phase version. Otherwise all sorts of things happen.

Also the export should not be normalised, because that can cause clipping. This is even though the impulse does not appear full power in REW.
If any DSP/convolution engine has an option to "Normalise IR" you give it, it seems you should NOT tick that option, or else you could get clipping.

The screenshot below shows this analysis, and in summary you can see the correct results are without normalisation, and with minimum phase applied - preferrably in the measurement, but also during the export works (and stacking both doesn't hurt).

View attachment 303217 View attachment 303218

Now that I have the correct min-phase VBA for use in Audacity, I repeated my tests combining tones with VBA IR and then with your measured IR. This time I tried 2 cycle tone, 3 cycle tone, and a longer tone (of the same 33.7Hz -0dBFS tone).

First I used the raw (non-normalised) measured IR and normalised the quiet results, but I realised that probably isn't right. Still it is interesting, so here it is anyway;
View attachment 303219

So instead I amplified the results by a common gain of +40dB. Now this is interesting.
View attachment 303220

The VBA effect now seems apparent to me!
  • In the aftermath of the 2 cycle tone you can see that the valley and crest at ~0.25ms are nicely suppressed, as is every cycle after them. This suggests decreased decay to me.
  • The 3 cycle tone is very similar.
  • The long tone is interesting in another way, because with VBA you can see the tone continuously building up strength in room. The cycles also build up with VBA tone (as the previous normalised screenshot shows by effectively being zoomed in further), but they seem to start from a more controlled amplitute and then build up slower. The decay also looks improved just as well as the other tone examples.
So it seems like there is an actual improvement at these targeted frequencies! ...

But maybe only at those frequencies? Because now that I'm more familiar the "Filtered IR" screen, I have looked at the 63Hz 1/3 option (normalised). 63Hz is close to 66Hz, which is the 2x multiple of OCA's problematic ~33Hz area. So it's a quick and easy example (without having to manually bandpass the measurement).

So comparing OCA's measured L0 (before VBA), and L1 (with VBA), you can also see the improved decay time with VBA.
View attachment 303226 View attachment 303227

But I also discovered you can use the Filtered IR screen with the dirac impulse, and it shows what a "perfect wave" would look like;
View attachment 303228

And then I worked out that using the "Zero phase filtering" option offsets the filtered IR so that t=0 lines up with what I think should be the "central group velocity" (more on that term later). Basically I think that's the point when the direct wave has "officially" been heard. So everything after that is unnecessary and room related gains. So even though VBA has improved the back half of 63Hz, it hasn't corrected the "second peak" at all. And I haven't looked yet but I'm guessing this "second peak" relates to group delay.

But last night I was going down a rabbit hole of topics on Wikipedia, and that's where I came across the term "central group velocity", as it was mentioned on the page for Wave packets. There's a lot to understand there and I still haven't got through it all, but the following gif is illustrative;
Superposition of 1D plane waves (blue) that sum to form a Gaussian wave packet (red) that propagates to the right while spreading. Blue dots follow each plane wave's phase velocity while the red line follows the central group velocity.

The pages intro is also informative;
In physics, a wave packet (or wave train or wave group) is a short burst of localized wave action that travels as a unit, outlined by an envelope.
Because I notice the use of the word envelope again.
Later it says;
Any signal of a limited width in time or space requires many frequency components around a center frequency within a bandwidth inversely proportional to that width;
So to me that's referring to even 1 cycle tones, like I was simulating in Audacity. Because for that 1 cycle to move through the air requires a wave packet. But also it applies to dirac pulse, because the next part of the sentence is;
even a gaussian function is considered a wave packet because its Fourier transform is a "packet" of waves of frequencies clustered around a central frequency.
The Gaussian function page links to "Dirac delta" page which says;
In mathematical physics, the Dirac delta distribution (δ distribution), also known as the unit impulse
It's the basically the same thing (or perhaps more correctly, a "dirac pulse" is an example of a gaussian function?).

Edit: Just to clarify the relevance of the wave packet and why there is more than 1 wave for even a 1 cycle tone - I believe it's because the air is actually being compressed and stretched by the crests and valleys of the wave being created. So when the initial crest is played (positive amplitude = high pressure), that means compressed air. But to compress that portion of air means another portion of air has to stretch, and so a weaker valley wave forms in front of the main crest wave. But that valley is still so strong that it causes an area of compressed air in front of it, thus another weaker peak wave forms ahead of it. And so on it goes until it reaches 0, and the same thing happens in reverse once the main wave passes completely, and the wave packet "dissolves".

So that's what the "filtered IR" of the dirac pulse is showing - the wave packet. And the fact our in room IR has a different wave packet is indicative of the problems the room is causing. And any energy that arrives after the direct waves energy has arrived, then that can cause additional peaks which seem to be effectively the increased group delay (it seems that way, but I haven't confirmed).

I bring up all this wave packet stuff because I think it holds the answer to the best audio. But also it shows the relevance of the result of a filtered IR, and so I think it is important to look at what OCA's VBA IR has done to other frequencies, like 50Hz (which seems to be a room null).
View attachment 303233 View attachment 303234
It's actually made it somewhat worse (but not by a great deal according to the Schroeder Integral), because the delayed peak at ~150ms is far stronger with VBA. Here is a perfect 50hz wave packet, just to confirm that all that delayed peak isn't necessary;
View attachment 303238

So whilst the VBA IR to date is an improvement in some areas, I don't think it's the best possible solution. Possibly we need an entirely different solution, or an overlapping solution that can fix other problematic frequencies. Also this VBA IR to date is not utilising multiple speakers/subwoofers to their full potential, but only applying 1 IR to all.
Ignore anything around 50Hz in my mdat files. It's the AC ground loop inherent to the flat, there are also strong effetcs at 100Hz and 250Hz and I learned to ignore it the hard way! All graphs will change with every measurement at these frequencies depending on the AC cycle.

Roon automatically applies +3dB to most convolution filters and +6dB to some others. This is apparent in repeating measurements with very simple convolution files on & off. I guess it's normalizing them in its own way. If I remember correctly, equalizer APO also did something similar.

You should always export IR normalized to increase filter accuracy (John Mulcahy's own words!) and that will introduce clipping but if you also apply proper windowing (short enough to decrease number of taps but long enough to keep the frequency and phase response of the IR intact at least throughout the audible band), "no" volume headroom will be required by that filter.

My complex filter with VBA, IIR, crossover and box phase correction, excess phase inversion, inverted allpass peak energy phase corrections all bundled into one requires -13dB headroom to "not" clip 1 minute 34 seconds into the great (not!) track Californication. That same filter requires 0dB headroom when exported with 83/250ms left/right windows and normalized.
 

neRok

Senior Member
Joined
Oct 7, 2022
Messages
304
Likes
176
Location
Australia
Ignore anything around 50Hz in my mdat files. It's the AC ground loop inherent to the flat, there are also strong effetcs at 100Hz and 250Hz and I learned to ignore it the hard way! All graphs will change with every measurement at these frequencies depending on the AC cycle.
I've had a ground loop in my sub and it caused a constant hum. That hum will sum with any music content at that frequency, and that could be constructive (+dB) or destructive (-dB) depending upon the relative phase shift. But it doesn't relate to the "wave packet" that the filtered IR is showing. I'm confident that's the room.

You have 33Hz room mode gain problem, where the 33Hz reflects on the back wall, reflection causes a phase flip, and thus the returning reflection boosts the incoming wave.
33Hz in time is 1000msec / 33Hz = 30.30...msec for a full cycle (crest and valley), or 15.15...msec for a half cycle (just the crest or valley).
Converting that to length, speed of sound 343m/sec / 1000msec * 15.15msec = 5.2m room length.

Now lets presume that 1/3rd the distance in to the room there is a wave node (overlapping zero point of a tones cycle) like discussed here and here. This means the remaining 2/3rd is a half cycle of the same frequency. So 5.2m / 3 * 2 = 3.47m half cycle length.
The time for sound to travel that distance is 1000msec / 343 m/sec * 3.47m = 10.12msec. Double for full cycle = 20.23msec.
The frequency of a tone that long is 1000msec / 20.23msec = 49.4 Hz!

I do not think it is a coincidence! Wiki has gifs of "stagnant" wave nodes, but I'm thinking your 50Hz problem is actually like this;
3qtr cycle.png

Edit: My calcs above took the long road, but really it's just 33*1.5 = 49.5Hz.

Roon automatically applies +3dB to most convolution filters and +6dB to some others. This is apparent in repeating measurements with very simple convolution files on & off. I guess it's normalizing them in its own way. If I remember correctly, equalizer APO also did something similar.

You should always export IR normalized to increase filter accuracy (John Mulcahy's own words!) and that will introduce clipping but if you also apply proper windowing (short enough to decrease number of taps but long enough to keep the frequency and phase response of the IR intact at least throughout the audible band), "no" volume headroom will be required by that filter.
I would be careful. You may be fine if the actual song doesn't reach 0dBFS, and there's a good chance of being under 0dBFS if you are using replay gain, but the potential is there for a 0dBFS signal to clip with the VBA FIR applied.

Also I think the way you made the VBA IR means it doesn't need to be full strength, because the way you summed the full power dirac impulse with the filtered impulse, the way those 2 things ad up when min phase gives a full power result at this frequency. But as I'm typing this, I'm wondering about frequencies outside that zone? Turns out they are volume reduced, which means normalisation should be used somewhere in the chain, but this means some frequencies in the range of the VBA IR will clip.
high freq tones.png
Edit: BTW, I exported your VBA IR with what I feel is sufficient windowing of 0ms left and 100ms right.

But much earlier in the thread I linked a video that was from a series discussing DSP program design, and it mentioned that best practice is for the DSP engine to use 32bit instead of 16bit for overhead when doing calculations. Even Audacity seems to do this because when I zoom out on a clipped area, the amplitude Y scale goes from +/-1 to +/-2, and the full signal is displayed. So the clipped wave isn't "lost", but it is outside the normal playback area.
 
Last edited:

OCA

Addicted to Fun and Learning
Forum Donor
Joined
Feb 2, 2020
Messages
690
Likes
515
Location
Germany
You have 33Hz room mode gain problem, where the 33Hz reflects on the back wall, reflection causes a phase flip, and thus the returning reflection boosts the incoming wave.
33Hz in time is 1000msec / 33Hz = 30.30...msec for a full cycle (crest and valley), or 15.15...msec for a half cycle (just the crest or valley).
Converting that to length, speed of sound 343m/sec / 1000msec * 15.15msec = 5.2m room length.
ok now you asked for it :)

Here's a different approach for you to the basics of which I tend to be more convinced at the moment.

I believe 33Hz comes from my room width rather than length. No objection for the 30.30ms wave period and 5.2m half wave length.

However,

While 1 full wavelength delay causes doubling of the peaks and dips of the wave, 1/2 wavelength is a null (0dB at all times) so has no effect. On the other hand 1/4, 1/8, 1/16....
wavelengths all progressively add up to peaks and dips (though not at the same exact time with the source wave hence the shape of the leaks in waterfall graphs).

My room has a reasonably uniform width of 3.44m.

It's logical to assume all possible reflective distances in the room except for the 1/2 wavelength will contribute to the peak frequency. So;

1691148854387.png


When you add up all possible distances contributing to the peak up to infinity ignoring the 1/2 wavelength which has null effect, you get 5.16m. This is much closer to the 5.2m you have found. My room length is 5.45m and there's an opening at the rear wall (size about one third of the whole surface) and the next rear wall is more than 9m away. So, a quite complicated case but it can under no circumstances be expected to contribute to peaks with even less than 5.45m! I think the peak and dip I have around 14/15Hz is more like its effect.
 
Last edited:

neRok

Senior Member
Joined
Oct 7, 2022
Messages
304
Likes
176
Location
Australia
I believe 33Hz comes from my room width rather than length.
Yes you might be right, but I will have to think about it some more.

But instead of doing that thinking, I had the idea to simulate the 50Hz tone in Audacity with the in-room IR (no VBA). I figure that if there is a "moving" room mode, you should see a pulsing in the convolved output of a long tone, and you do!
50hz long tone + full IR.png
You can see at ~32ms that there crest has higher amplitude, and 3 cycles later at ~38ms there is another raised crest.

Next I analysed short tones of 1, 2, and 3 cycles;
50hz short tones + full IR.png
The difference in effect is interesting. The 1 cycle tone shows 2 strong cycles, which isn't good. Similarily, the 2 cycle tone shows 3 strong crests, which isn't particularly good either. But then the 3 cycle tone only has 1 strong cycle, because the others seem to get nulled. 3 cycle tone looks shorter and weaker than 1 cycle tone! Amazing.

So then I thought, if it's a certain reflection, then I should be able to aggressively window the right side of the IR in REW, and that should eliminate the effect of the problematic reflection from the results. So I set the window to 29.6ms (there is a major reflection at ~30ms) and repeated the previous convolutions;
50hz tones + windowed IR right=29.6.png
The results are decent enough, showing no pulsing in the long tone, and the short tones are relatively correct. So this suggests the problem reflection is arriving some time after ~30ms, and it may be the one at ~30ms. I will have to steadily increase the right side window to find the culprit peak in the IR, which I haven't done yet.

But if it is the ~30ms IR peak (= 10.3m distance travelled), I think there is a simple way to test if it is back or side wall reflection. If you move the mic forward by 0.5m or so and test again, the distance to the back wall would increase, and thus the peak would be delayed further. But if it was a side wall or similar "front side" reflection, the distance would have decreased by moving forward, and thus the IR peak would move forward in time.
 

OCA

Addicted to Fun and Learning
Forum Donor
Joined
Feb 2, 2020
Messages
690
Likes
515
Location
Germany
If you move the mic forward by 0.5m or so and test again, the distance to the back wall would increase, and thus the peak would be delayed further.
Standing waves are by definition independent of the speaker or LP position. In fact I have completely rearranged speaker and LP positions yesterday and the same peaks and dips are all there. I can share the mdat if you like.

I have a solid ~45Hz dip which is a natural result of the ~15Hz room resonant frequency along with the 30Hz-ish peak. But the 50Hz peak (and sometimes dip depending on the AC cycle during measurement) is really ground loop related. First of all it disappears with a notch filter which would normally not be anywhere near enough to cut a standing wave peak. Secondly, it repeats at its exact harmonics and none of those decay. They are flat leaks in the waterfall graph.

And I know you like spectrograms and you will see that it (and all its harmonics) doesn't look anything like a standing wave:

1691216608987.png
 
Last edited:

neRok

Senior Member
Joined
Oct 7, 2022
Messages
304
Likes
176
Location
Australia
Standing waves are by definition independent of the speaker or LP position.
That's not how I've understood it. They are defined by the room, but their effect is relative to the listening position. Below is an image I pinched from this article on standing waves;
wave.jpg
Nulls = nodes and boosts = antinodes. Both are in a fixed position with regards to the walls. The white line I added is representative of the +0dB level, and as you can see there is no point in the room you could sit where you will experience +0dB of all these frequencies. The head position I drew wouldn't be too bad for red and green waves (but move a little forward or back and one will drop off), and meanwhile blue is boosted near max.

But in real life the effect isn't as potent because the reflected wave is weaker than the new wave, so the cancellation isn't perfect (so a node still has sound). The reason the reflection is weaker is because it has travelled further and the act of being reflected also takes energy. Also in a typical room you will eventually hear all sorts of other reflections, and these will sum with the standing wave, and the resulting effect will be dependent on their phase at time of arrival (their phase will be offset because of their delay due to their distance travelled and reflections experienced).

I did some simulations with Audacity before for some room modes. I did it by offsetting 2 waves in steps and summing an area in the middle to represent a room. I believe this simulation worked for the 1 cycle test wave, because all nodes stayed in their positions and the antinodes were boosted. So I did the same thing with a 0.75 wave cycle, and the nodes also didn't move. So in my previous post where I wondered if the node moved back and forth, well it doesn't seem to.

So I still think there is some sort "pulsing" in the IR. If it's not "moving nodes" it must just be late and later reflections, and their phase shift will be whatever, and that will sum with the standing wave at the LP.

During this process I went and put your room dims in to REW Room Sim, with a central sub listening position, and listening position 2/3rds back in to the room. I think at this sort of speaker to LP to back wall ratio, the reflected wave has more impact because not much time has passed since it was heard as a direct wave (compared to listening in the near field / ~1/3rd room length, the direct wave is very soon in that scenario, and the back wave is comparatively late).

Anyway, with 0.1 sound absorption on all end and side walls, there is a big null at 50Hz, which happens to align with the rooms width (green bar).
listen 0.66, ends 0.1, side 0.1.jpg
But if I increase the side wall absorption to max (0.9), the result barely changes, suggesting the side walls aren't the main problem at this listening position;
listen 0.66, ends 0.1, side 0.9.jpg
So then I reset the side walls and instead increased the end wall absorptions, and now it's basically fixed!
listen 0.66, ends 0.9, side 0.1.jpg
But interestingly, 100Hz is revealed to be a side wall issue, because it is still peaking. So if the side wall absorption is increased too, it disappears;
listen 0.66, ends 0.9, side 0.9.jpg

It's interesting that the front and rear wall absorption is so relevant to that 50Hz node. Actually it seems the rear wall absorption does this most. Additionally, it basically confirms the viability of SBA and DBA, because SBA is passive rear wall absorption, and DBA is active rear wall absorption.

But next I wondered, if the 50Hz isn't actually side wall related, what is it related to then? Well the room sim is suggesting it's to do with the listening position. Moving the LP forward decreases the nulls frequency, and moving further back increases it's frequency;
listen 0.60, ends 0.1, side 0.9.jpg listen 0.70, ends 0.1, side 0.9.jpg

Now the room sim has the same "flaw" as the SPL tab, in that it doesn't reveal the over time sounds heard. You can create a measurement of the room sim, and that measurement has group delay data simulated, which does show problem frequencies. I need to look in to that tab more...

Just to finish off the above room sim train of thought, I figured I better offset the speaker and do a few checks. It doesn't make much difference to these low frequencies;
listen 0.66, ends 0.1, side 0.1 - OFFSET.jpg listen 0.66, ends 0.1, side 0.9 - OFFSET.jpg listen 0.66, ends 0.9, side 0.1 - OFFSET.jpg

And I think that whatever is going on with the LP:back-wall relationship IS revealing itself on the spectrogram, and I think it's to do with the "pits" that appear at irregular intervals. I can't get over these pits - they mean something. They were ~52Hz on your old measurements, and now they are ~47Hz. If you've moved your LP, and thus the relationship to the back wall is different, then it makes sense.
pits.jpg
So I still wonder what these pits are. Are the pits the standing wave at the LP? Why do some of them disappear, like purple 5 and 7? I wonder if it's because reflections arrive at that time and which are in phase with the pits? And what about the red numbered pits? Are these pits caused by the same issue, or are they different ones that are weak and only appear when the reflections get weak? OR are those red pits actually between every purple pit already, but they are "in phase" and so appear as "good sound" on the spectrogram? I have NFI at this stage.

On another topic, yesterday I was trying to come up with different IR's to help the ~52Hz issue in your old measurements. I found it quite cumbersome to iterate quickly in REW. But today I had the idea to simulate the desired affects of an IR in Audacity, and I think it will be much easier. My idea is to have the 1 cycle tone in track 1, and then another track with the tone to merge in. Then I can manipulate that 2nd track easily (invert its phase, amp it, time adjust it, etc), mix the 2nd with the 1st tone, and then convolve it with the in room IR. I think this workflow will be quicker than jumping around tabs in REW and ticking Filtered IR on and off. Also in the secondary track I can put whatever "anti-signal" I want without it having to be possible to create with an IR. So in this way I might be able to find a productive solution quicker, and after that I can set about trying to create a matching IR. Who knows, but maybe the answer is to use something like a noise gate that only creates a half cycle burst of anti-signal no matter how many cycles of tone are received? Maybe it needs a short burst of anti-signal before and after the main tone? I don't imagine you can do anything like that with just an IR.
 
Last edited:

OCA

Addicted to Fun and Learning
Forum Donor
Joined
Feb 2, 2020
Messages
690
Likes
515
Location
Germany
That's not how I've understood it. They are defined by the room, but their effect is relative to the listening position. Below is an image I pinched from this article on standing waves;
View attachment 303563
Nulls = nodes and boosts = antinodes. Both are in a fixed position with regards to the walls. The white line I added is representative of the +0dB level, and as you can see there is no point in the room you could sit where you will experience +0dB of all these frequencies. The head position I drew wouldn't be too bad for red and green waves (but move a little forward or back and one will drop off), and meanwhile blue is boosted near max.

But in real life the effect isn't as potent because the reflected wave is weaker than the new wave, so the cancellation isn't perfect (so a node still has sound). The reason the reflection is weaker is because it has travelled further and the act of being reflected also takes energy. Also in a typical room you will eventually hear all sorts of other reflections, and these will sum with the standing wave, and the resulting effect will be dependent on their phase at time of arrival (their phase will be offset because of their delay due to their distance travelled and reflections experienced).

I did some simulations with Audacity before for some room modes. I did it by offsetting 2 waves in steps and summing an area in the middle to represent a room. I believe this simulation worked for the 1 cycle test wave, because all nodes stayed in their positions and the antinodes were boosted. So I did the same thing with a 0.75 wave cycle, and the nodes also didn't move. So in my previous post where I wondered if the node moved back and forth, well it doesn't seem to.

So I still think there is some sort "pulsing" in the IR. If it's not "moving nodes" it must just be late and later reflections, and their phase shift will be whatever, and that will sum with the standing wave at the LP.

During this process I went and put your room dims in to REW Room Sim, with a central sub listening position, and listening position 2/3rds back in to the room. I think at this sort of speaker to LP to back wall ratio, the reflected wave has more impact because not much time has passed since it was heard as a direct wave (compared to listening in the near field / ~1/3rd room length, the direct wave is very soon in that scenario, and the back wave is comparatively late).

Anyway, with 0.1 sound absorption on all end and side walls, there is a big null at 50Hz, which happens to align with the rooms width (green bar).
View attachment 303581
But if I increase the side wall absorption to max (0.9), the result barely changes, suggesting the side walls aren't the main problem at this listening position;
View attachment 303582
So then I reset the side walls and instead increased the end wall absorptions, and now it's basically fixed!
View attachment 303583
But interestingly, 100Hz is revealed to be a side wall issue, because it is still peaking. So if the side wall absorption is increased too, it disappears;
View attachment 303585

It's interesting that the front and rear wall absorption is so relevant to that 50Hz node. Actually it seems the rear wall absorption does this most. Additionally, it basically confirms the viability of SBA and DBA, because SBA is passive rear wall absorption, and DBA is active rear wall absorption.

But next I wondered, if the 50Hz isn't actually side wall related, what is it related to then? Well the room sim is suggesting it's to do with the listening position. Moving the LP forward decreases the nulls frequency, and moving further back increases it's frequency;
View attachment 303587 View attachment 303588

Now the room sim has the same "flaw" as the SPL tab, in that it doesn't reveal the over time sounds heard. You can create a measurement of the room sim, and that measurement has group delay data simulated, which does show problem frequencies. I need to look in to that tab more...

Just to finish off the above room sim train of thought, I figured I better offset the speaker and do a few checks. It doesn't make much difference to these low frequencies;
View attachment 303590 View attachment 303591 View attachment 303592

And I think that whatever is going on with the LP:back-wall relationship IS revealing itself on the spectrogram, and I think it's to do with the "pits" that appear at irregular intervals. I can't get over these pits - they mean something. They were ~52Hz on your old measurements, and now they are ~47Hz. If you've moved your LP, and thus the relationship to the back wall is different, then it makes sense.
View attachment 303595
So I still wonder what these pits are. Are the pits the standing wave at the LP? Why do some of them disappear, like purple 5 and 7? I wonder if it's because reflections arrive at that time and which are in phase with the pits? And what about the red numbered pits? Are these pits caused by the same issue, or are they different ones that are weak and only appear when the reflections get weak? OR are those red pits actually between every purple pit already, but they are "in phase" and so appear as "good sound" on the spectrogram? I have NFI at this stage.

On another topic, yesterday I was trying to come up with different IR's to help the ~52Hz issue in your old measurements. I found it quite cumbersome to iterate quickly in REW. But today I had the idea to simulate the desired affects of an IR in Audacity, and I think it will be much easier. My idea is to have the 1 cycle tone in track 1, and then another track with the tone to merge in. Then I can manipulate that 2nd track easily (invert its phase, amp it, time adjust it, etc), mix the 2nd with the 1st tone, and then convolve it with the in room IR. I think this workflow will be quicker than jumping around tabs in REW and ticking Filtered IR on and off. Also in the secondary track I can put whatever "anti-signal" I want without it having to be possible to create with an IR. So in this way I might be able to find a productive solution quicker, and after that I can set about trying to create a matching IR. Who knows, but maybe the answer is to use something like a noise gate that only creates a half cycle burst of anti-signal no matter how many cycles of tone are received? Maybe it needs a short burst of anti-signal before and after the main tone? I don't imagine you can do anything like that with just an IR.
Room modes aka standing waves are different to position dependent reflection dips and peaks. There will be positions they're less audible but they will always be there because they're determined by the room dimensions only. Slight differences in freq between different positions are due to varying room dimensions at locations. This is not my idea or open to debate.
 

Keith_W

Major Contributor
Joined
Jun 26, 2016
Messages
2,707
Likes
6,241
Location
Melbourne, Australia
I see you are already deep into to the VBA abysm :)

I have spent too many hours with it. Forget about room length. As Uli has also mentioned, reflections quickly become chaotic and impossible to calculate.

Reverse engineering the room is one of the best ways to create a descent filter. You should calculate time delay and hence the room's resonant frequency from the first peak of the vector average of left and right speakers (or a stereo measured response).

Use 1/3 smoothing and linear frequency axis (5-200Hz) to see peaks and dips clearly and check the top of the first "audible" peak for the precise frequency (left and right speakers will both have the same peak anyway).

Let's say this is 34.45Hz

You rooom resonant frequency is 34.45/2=17.225Hz (this is the first dip)

This also means the room dimension causing the resonance is 343/(2x17.225)/2=9.956m. Many people believe this is twice the room length but it's closer to "all 3 room dimensions added" in my experience. Anyway, this is irrelevant.

Every multiple of this frequency will cause a peak and dip. In other words 17.225Hz is the first dip, 34.45Hz is the first peak, 3x17.225Hz=51.675Hz is the second dip, 4x17.225=68.90Hz is the second peak......

Impulse peak of the inverted signal should be at t=1000/2/34.45=29.0276 ms

The crossover of the low pass filter you will use will have a certain delay 5-10ms (the steeper the higher). You must take this into account when applying a time offset to the lowpass filter.

If you create the low pass in REW, it will be min phase and REW will show its reference time, too. But otherwise you should generate min phase version of the low pass.

Subtract this from a Dirac pulse (you're inverting polarity) and generate min phase of the result.

Check that first dip of the result is exactly at the first peak frequency (34.45Hz). If not, adjust the time delay of the lpf until it does.

For best results lpf crossover should start at the first peak freq (34.45Hz) and have a slope of 6dB/octave. Steep filters will have a negative effect on clarity.

Further optimizations can be done to decrease the effect of the VBA filter on the peaks while keeping its effect intact on the dips. Smoothing out the VBA filter to 1/6 is what I do. If you click "replicate data outside range" while generating minimum phase in REW, the min phase version will be permanently smoothed. This will also diminish the fluctuations of the VBA filter much earlier:

View attachment 303156

I had some time over a weekend so I took your suggestion to reverse-engineer the room.

image.png.77ae313f9abd1aedd80e22e621ba58f1.png


I started by analysing the uncorrected frequency sweep. 25Hz is the first peak. This means that this is a second order mode, therefore the first dip is predicted to be at 12.5Hz. Sure enough, there is a dip at 12.5Hz. The next predicted dip should be at 37.5H, and sure enough there is a dip there. Then there should be a peak at 50Hz. Above 50Hz, the model falls apart and the peaks and dips no longer follow predictions. Nonetheless, it is a good place to start with the VBA.

25Hz has a wavelength of 13.72m, or slightly less than twice the length of my room (7m). So far the model is holding up. So we do some maths to convert this into 48kHz samples: (13.72/343 * 1000) = 40ms transit time. And 40ms is (40 * 48) = 1920 samples. Now we subtract the delays of the subwoofer, which I have previously determined to be 207 and 198 samples for left and right subs respectively, and we have a calculated delay of 1713 samples for the left sub, and 1722 for the right.

We then generate the filter:
1. Generate-filter, Butterworth, 4th order. Load XO1L and XO1R into curves 1 and 2. Apply TD-Functions-Minphase 20-200 for both into Curves 3 and 4.
2. Curve 3: rotate 1713, gain factor 0.7, invert polarity. Curve 4: rotate 1722, gain factor 0.7, invert polarity.
3. Into Curves 1 and 2, Generate-Testfilter 65536 samples, start 0, sample 1.
4. TD-Functions-Addition Curves 1+3 and 2+4 into 5 and 6. Save 5 as PrefilVBAL, and 6 as PrefilVBAR.

Load the filters and compare with the uncorrected curve:

image.png.cf272feb0d03eea84afd7995dec0d416.png


Looks like an excellent fit! Much closer than any of my previous efforts.

So the next thing to do is to use the Prefilters in Macro 0 of Acourate, and generate some filters with the VBA convolved in. Then crack out REW and do some measurements:

image.png.a5212b57583ec954f1a54d5348eec8d2.png


Main listening position, left channel. Hmm, the difference is quite subtle.

image.png.cef020c8443de49c6783d50543b59e0b.png


Main listening position, right channel. At least there is a bit more of a difference here.

signal-2023-08-06-010952_002.gif


signal-2023-08-06-010952_003.gif


And here are a couple of waterfall graphs showing the effect of the VBA. It does have an effect, it's just more of a sideways move than a clearly beneficial move.

This is at least an improvement over my previous efforts, all of which clearly worsened the waterfall graph. This means I am getting closer!
 

OCA

Addicted to Fun and Learning
Forum Donor
Joined
Feb 2, 2020
Messages
690
Likes
515
Location
Germany
I had some time over a weekend so I took your suggestion to reverse-engineer the room.

image.png.77ae313f9abd1aedd80e22e621ba58f1.png


I started by analysing the uncorrected frequency sweep. 25Hz is the first peak. This means that this is a second order mode, therefore the first dip is predicted to be at 12.5Hz. Sure enough, there is a dip at 12.5Hz. The next predicted dip should be at 37.5H, and sure enough there is a dip there. Then there should be a peak at 50Hz. Above 50Hz, the model falls apart and the peaks and dips no longer follow predictions. Nonetheless, it is a good place to start with the VBA.

25Hz has a wavelength of 13.72m, or slightly less than twice the length of my room (7m). So far the model is holding up. So we do some maths to convert this into 48kHz samples: (13.72/343 * 1000) = 40ms transit time. And 40ms is (40 * 48) = 1920 samples. Now we subtract the delays of the subwoofer, which I have previously determined to be 207 and 198 samples for left and right subs respectively, and we have a calculated delay of 1713 samples for the left sub, and 1722 for the right.

We then generate the filter:
1. Generate-filter, Butterworth, 4th order. Load XO1L and XO1R into curves 1 and 2. Apply TD-Functions-Minphase 20-200 for both into Curves 3 and 4.
2. Curve 3: rotate 1713, gain factor 0.7, invert polarity. Curve 4: rotate 1722, gain factor 0.7, invert polarity.
3. Into Curves 1 and 2, Generate-Testfilter 65536 samples, start 0, sample 1.
4. TD-Functions-Addition Curves 1+3 and 2+4 into 5 and 6. Save 5 as PrefilVBAL, and 6 as PrefilVBAR.

Load the filters and compare with the uncorrected curve:

image.png.cf272feb0d03eea84afd7995dec0d416.png


Looks like an excellent fit! Much closer than any of my previous efforts.

So the next thing to do is to use the Prefilters in Macro 0 of Acourate, and generate some filters with the VBA convolved in. Then crack out REW and do some measurements:

image.png.a5212b57583ec954f1a54d5348eec8d2.png


Main listening position, left channel. Hmm, the difference is quite subtle.

image.png.cef020c8443de49c6783d50543b59e0b.png


Main listening position, right channel. At least there is a bit more of a difference here.

View attachment 303725

View attachment 303726

And here are a couple of waterfall graphs showing the effect of the VBA. It does have an effect, it's just more of a sideways move than a clearly beneficial move.

This is at least an improvement over my previous efforts, all of which clearly worsened the waterfall graph. This means I am getting closer!
Congrats! I also get quite similar results to your. The first peak and dip is improved but the rest is kind of hit and miss. You can manipulate it further by multiplying with a low shelf filter then things might improve beyond the first dip.
 
Top Bottom