A convolution based alternative to electrical loudspeaker correction networks

No, mostly just some dips and a bit of gain in the bottom octave. This is the predicted response for the listening position using the speaker filter + baffle step compensation (I would want to extend the bass response a bit for listening).
 

Attachments

  • room response with quasi-anechoic & baffle step filters.jpg
    room response with quasi-anechoic & baffle step filters.jpg
    112.1 KB · Views: 405
Here is the response from the listening position with no filter, and also with EQ using cuts only (notice the dips are still intact). I used a sloping target with the low freq cutoff set to 100Hz, then added a 12dB 50Hz shelf boost. The speakers "disappear" a bit more with this method.
 

Attachments

  • uncorrected room responses.jpg
    uncorrected room responses.jpg
    107.8 KB · Views: 405
  • corrected room responses.jpg
    corrected room responses.jpg
    102.9 KB · Views: 395
I've experimented a bit more with further minimizing the amount of "room correction" in order to achieve a response more like that of accurate speakers in a well behaved room - while still using a single listening position measurement. Here's an attempt using DRC and a slightly modified version of the custom configuration file (uncorrected and corrected responses are shown below). What's different about this config file is that PLMaxGain has been reduced from 2.0 to 0.7 - reducing the amount of dip correction to a pretty minimal amount (notice the response in the modal region is hardly changed), and the target freq response has a tilt of 1dB/oct. I think I've found that as the amount of boost decreases, my preference for a downward tilting target increases (I like the corrected tilted response shown), and the sound gets closer to a speaker-only correction.

I'm hoping this approach could work better for people who have not gotten great sounding results from DRC in the past - particularly people with untreated rooms whose speakers are not far from wall/floor boundaries. Maybe this is a better approach for a typical domestic listening environment where the sound just needs a bit of "taming".

Theaspin, if you're around, perhaps you wouldn't mind trying this out since you seemed to have pretty good luck with the custom config file. Just make the following edits: PLMaxGain = 0.7 and PSPointsFile = tilt.txt. Also, edit the tilt.txt file to something more like a 1dB/oct slope (0 at 20Hz and -10 at 22050Hz). I've only tested this with the min phase filter so far.
 

Attachments

  • room response.jpg
    room response.jpg
    108.7 KB · Views: 368
Thanks for checking it out. Target freq response can be a funny thing. With my setup, the dip filling seemed to add '"weight" to the sound, and the flat target (or maybe 0.5dB/oct tilt) kept things more balanced, but now the steeper tilt works. I guess results will vary depending on speaker type/position etc. Anyway, I'm curious as to whether or not this will work better for you long term.
 
How much pre-ringing are you willing to accept? I think the easiest way to do it would be to start with the custom script and make the following edits:

EPLowerWindow = 35280
EPUpperWindow = 35
EPFinalWindow = 35280
PLMaxGain = 0.1

This will flatten the phase response with minimal impact on the freq response. Pre-ringing will be limited to 4 cycles (which is a lot). If excessive pre-ringing is an issue for your particular application, change the values of RTLowerWindow and RTUpperWindow to 8820 and 9, or 4410 and 4 respectively.
 
How much pre-ringing are you willing to accept? I think the easiest way to do it would be to start with the custom script and make the following edits:

EPLowerWindow = 35280
EPUpperWindow = 35
EPFinalWindow = 35280
PLMaxGain = 0.1

This will flatten the phase response with minimal impact on the freq response. Pre-ringing will be limited to 4 cycles (which is a lot). If excessive pre-ringing is an issue for your particular application, change the values of RTLowerWindow and RTUpperWindow to 8820 and 9, or 4410 and 4 respectively.

ok thanks. i will give that a try. I found that I can do it in rephase with good results. It would be interesting to compare to drc
 
How much pre-ringing are you willing to accept? I think the easiest way to do it would be to start with the custom script and make the following edits:

EPLowerWindow = 35280
EPUpperWindow = 35
EPFinalWindow = 35280
PLMaxGain = 0.1

This will flatten the phase response with minimal impact on the freq response. Pre-ringing will be limited to 4 cycles (which is a lot). If excessive pre-ringing is an issue for your particular application, change the values of RTLowerWindow and RTUpperWindow to 8820 and 9, or 4410 and 4 respectively.

hey, thanks. the PLMaxGain=0.1 worked quite well. it changed the response a tiny bit but not much. maybe plmaxgain=0 would work(edit:0.0 was a no go. 0.01 worked well. only the tiniest bit of cut)

now I'll be able to pretty much directly compare it to rephase.

here is the correction filter in blue, and the original in red, AND the original convolved with the correction filter in green.

attachment.php



I havent listened to it but I did watch a movie earlier tonight with

EPLowerWindow = 2200
EPUpperWindow = 88
EPFinalWindow = 2200

It sounded pretty good. what does the much larger EPLowerWindow do?


btw, here is the before and after with the 2200 EPLowerWindow I had previously used. I was happy with the reduction in room impact.

attachment.php
 

Attachments

  • plmaxgain 0.1.jpg
    plmaxgain 0.1.jpg
    60.6 KB · Views: 388
  • impulse stock vs drc.jpg
    impulse stock vs drc.jpg
    58.7 KB · Views: 387
Last edited:
The EP window settings determine the number of cycles used for excess phase removal. You can translate them back to actual cycles.

It looks like Gmad suggested 8 cycles of excess phase removal. That's a lot! :eek:

That would mean you'd use a 400 ms time window at 20 Hz. And a 0.4 ms window at 20.000 Hz. Provided we use 44100 as sample rate.

Your settings:
88 (at 20000 Hz?) would be 20 cycles at 20.000 Hz. Corresponding to a 1 ms window at that frequency
2200 (at 20 Hz?) would be about half a cycle at 20 Hz. Which is 25 ms at 20 Hz. (2205 would be exactly half a cycle)

Again, if you use 44100 sample rate.
 
Last edited:
It looks like Gmad suggested 8 cycles of excess phase removal. That's a lot! :eek:

.

I have to ask, and this is an honest question - why is 8 cycles a lot?
especially in the bass range? I know in the high frequencies you don't want to over correct on spot in time, but if we are already using an averaged impulse response, doesn't that minimize the point-in-space specific anomalies?

ie, if I use an average of 32 measurements to generate my filter(which getting a good filter is regarded by Denis Sbragion as the most important thing) if you have an anomaly that only occurs in 1 measurement wouldn't that be reduced to only 1/32 of the original size in the final average.

so if that's the case, would it really matter the cycle length that gets used?
 
here is a quick follow up. last night I created some filters with gmad's settings and compared them with the rephase filters. both sets of filters were created with the same impulse responses.

at first I felt the rephase filters sounded better. more in your face and more full. the DRC filters sounded "clearer" for want of a better term.

then I noticed that the drc filters sounded quieter. Im not adding or removing gain so why is it quieter.? anyhow I added about 1 db of gain to the drc filters to make them subjectively equal and then it seemed like I liked the drc filters better. the presence of the rephase filters but more clarity into the recording. Norah Jones don't know why piano sounded effing fantastic like I could almost see into the space.

the only conclusion I can make is that drc may be reducing the echo a bit more, which means there is less sound in the room and that makes it subjectively quieter even at the same levels.

Im still doing a lot of testing and will continue updating.
 
I have to ask, and this is an honest question - why is 8 cycles a lot?
especially in the bass range? I know in the high frequencies you don't want to over correct on spot in time, but if we are already using an averaged impulse response, doesn't that minimize the point-in-space specific anomalies?

ie, if I use an average of 32 measurements to generate my filter(which getting a good filter is regarded by Denis Sbragion as the most important thing) if you have an anomaly that only occurs in 1 measurement wouldn't that be reduced to only 1/32 of the original size in the final average.

so if that's the case, would it really matter the cycle length that gets used?

In your case you're absolutely right. Averaging the responses like that diminishes the chance of over correcting something specific. I haven't used that method yet but will sometime soon. Just to compare.

As my system is full range without crossovers I only remove excess phase below 500 Hz. The rest is corrected by the minimum phase filter that corrects the frequency response.
But all that is based on single point measurements. My excess phase routine has about 3 cycles. In a way, my multiple speaker array works a lot like those multiple measurements as they do the averaging. Each speaker is at a slightly different position and does 1/25 of the job. This makes it only sensitive for vertical planes, which is where my absorption panels are.
That's the prime reason I can get clean results in a plain looking living room.

here is a quick follow up. last night I created some filters with gmad's settings and compared them with the rephase filters. both sets of filters were created with the same impulse responses.

at first I felt the rephase filters sounded better. more in your face and more full. the DRC filters sounded "clearer" for want of a better term.

then I noticed that the drc filters sounded quieter. Im not adding or removing gain so why is it quieter.? anyhow I added about 1 db of gain to the drc filters to make them subjectively equal and then it seemed like I liked the drc filters better. the presence of the rephase filters but more clarity into the recording. Norah Jones don't know why piano sounded effing fantastic like I could almost see into the space.

the only conclusion I can make is that drc may be reducing the echo a bit more, which means there is less sound in the room and that makes it subjectively quieter even at the same levels.

Im still doing a lot of testing and will continue updating.

In the sweet spot it probably sounds very good. I'll warn you after catching the levels in the filtered IR you posted, At one point you might actually start missing 'some' room. I know I did. That initiated my ambience project to bring back that feel that can be very engaging. It is timed late (around 20 ms) as to not mess with the imaging part. It also fills in the cross talk problem of stereo speakers trough a separate route. Together it gives me an engaging 3D stereo scene that's hard to beat (for me anyways). A lot less genre specific and more forgiving overall.
Without loosing the charm of great imaging and the sense of "being there".
 
I haven't been doing any EP correction for a while, but I did some experimenting with 1, 2, and 4 cycles when making the custom configuration file (using a single measurement at the listening position). 4 cycles sounded amazing with certain recordings but the off-axis pre-echo was ridiculous. I settled on 1 cycle as the best compromise.

edit: The EP correction can actually end up as high as 4 cycles in the modal region (where there are potentially larger dips) due to the linear phase peak limiting.
 
Last edited:
Way less of a chance of that happening when averaging measurements over a wider area though. Which is why 1201 asked that question.

I want to try it too some day. Even though I corrected at a single position I had determined in advance what I could fix and what should not be fixed. While the stereo pair gives that awesome APL_TDA plot, each separate speaker still has some quirks left.
I'm actually planning to add subs to see if they can help there, not to be able to go louder but to have them help out each array instead of what I do now. Where the left array helps out the right one below 35 Hz and the right one fixes a left side dip at 70 Hz.
Even though I never notice that shifting of energy I'm curious of what it could do. Plus it will probably add a ton of head room.
 
In the sweet spot it probably sounds very good. I'll warn you after catching the levels in the filtered IR you posted, At one point you might actually start missing 'some' room. I know I did. That initiated my ambience project to bring back that feel that can be very engaging. It is timed late (around 20 ms) as to not mess with the imaging part. It also fills in the cross talk problem of stereo speakers trough a separate route. Together it gives me an engaging 3D stereo scene that's hard to beat (for me anyways). A lot less genre specific and more forgiving overall.
Without loosing the charm of great imaging and the sense of "being there".

you are right. a lot of material is mixed without real ambience and that may be sound dry. but listening to say an orchestral recording I think the dry sound will shine.
I was actually hoping to have better reverb control with drc but I may be asking too much. I'll keep playing around with it.

I haven't been doing any EP correction for a while, but I did some experimenting with 1, 2, and 4 cycles when making the custom configuration file (using a single measurement at the listening position). 4 cycles sounded amazing with certain recordings but the off-axis pre-echo was ridiculous. I settled on 1 cycle as the best compromise.

edit: The EP correction can actually end up as high as 4 cycles in the modal region (where there are potentially larger dips) due to the linear phase peak limiting.

so in essence you are doing iir eq? or are you still doing linear eq but just on the minimum phase data?

thanks



Way less of a chance of that happening when averaging measurements over a wider area though. Which is why 1201 asked that question.

I want to try it too some day. Even though I corrected at a single position I had determined in advance what I could fix and what should not be fixed. While the stereo pair gives that awesome APL_TDA plot, each separate speaker still has some quirks left.
I'm actually planning to add subs to see if they can help there, not to be able to go louder but to have them help out each array instead of what I do now. Where the left array helps out the right one below 35 Hz and the right one fixes a left side dip at 70 Hz.
Even though I never notice that shifting of energy I'm curious of what it could do. Plus it will probably add a ton of head room.

it would be cool for you to try it, since you have a lot of time tweaking DRC.. I want to go up to at least 16 measurements average to truly only correct the speaker and very persistent room signature and then do a very strong correction on that.

so many variables with drc though... a blessing and a curse :)
 
oh, gmad and wesayso, how many taps are you guys running?

also, I was just thinking it could be a good idea to have drc correct only the time domain without touching the frequency response that way there is only one variable to compare vs two.

I am only having drc correct the time domain. I can create magnitude filters in rephase and cascade them in brutefir.
 
Last edited:
1201,

The min phase script takes the output from the min phase filter extraction stage. This creates a filter which itself is min phase, and only corrects the min phase portion of the impulse response. The length of the filter depends on the windowing used; the custom min phase filter has a final resolution of 4 cycles, so the length is 8,820 samples.

Anyway, once you figure out exactly what you want to do regarding magnitude/phase correction, I'm sure we can accomplish it using DRC (should you wish to simplify your routine).
 
oh, gmad and wesayso, how many taps are you guys running?

also, I was just thinking it could be a good idea to have drc correct only the time domain without touching the frequency response that way there is only one variable to compare vs two.

I am only having drc correct the time domain. I can create magnitude filters in rephase and cascade them in brutefir.

65536