• Welcome to ASR. There are many reviews of audio hardware and expert members to help answer your questions. Click here to have your audio equipment measured for free!

DecayCore — Free FIR room correction with temporal decay control, automatic optimization and measurement workflow

Steeper HPF always introduces more phase rotation around the cutoff frequency. A 24 dB/oct HPF at 20 Hz will produce significantly more phase shift and group delay than a 12 dB/oct HPF at the same frequency. That's simply a consequence of minimum phase hpf behavior : the sharper the amplitude transition, the greater the phase rotation. If driver protection allows it, a gentler slope generaly results in cleaner phase behavior.

FIR filter can compensate for much of this phase error, but avoiding unnecessary phase rotation in the first place is generally the better approach if driver protection allows it.
 
Steeper HPF always introduces more phase rotation around the cutoff frequency. A 24 dB/oct HPF at 20 Hz will produce significantly more phase shift and group delay than a 12 dB/oct HPF at the same frequency. That's simply a consequence of minimum phase hpf behavior : the sharper the amplitude transition, the greater the phase rotation. If driver protection allows it, a gentler slope generaly results in cleaner phase behavior.

FIR filter can compensate for much of this phase error, but avoiding unnecessary phase rotation in the first place is generally the better approach if driver protection allows it.
Is this only with DSP?

My impression with non-DSP crossovers is that LR 24dB/oct is supposed to make things easier in prevenging phase issues?
 
Is this only with DSP?

My impression with non-DSP crossovers is that LR 24dB/oct is supposed to make things easier in prevenging phase issues?
Not exactly. There are two different topics here. A steeper filter always introduces more phase rotation and group delay than a gentler one.

However, LR crossovers are specifically designed so that the low-pass and high-pass outputs remain phase-aligned at the crossover frequency, giving a flat acoustic sum. That doesn't mean each individual filter has "better" phase behavior. It means the pair works together as intended.
 
@VilhoValittu,

Hi and thanks for the software. I became interested in temporal decay control part of the system and used ChatGPT so that i can better understand the idea. From what i was able to understand, when DecayCore applies EQ filters, it takes resulting decay in consideration as well. And if reducing decay means going below the target curve, DecayCore will do this up to a certain point, so that in the end the response wil be below the target but it will also ring for less. And there is a certain math and rules to this, like caps to a reduction applied.

Would you say this is a correct understanding? Any specific psychoacoustin properties you are trying to exploit with this technique?
 
@VilhoValittu,

Hi and thanks for the software. I became interested in temporal decay control part of the system and used ChatGPT so that i can better understand the idea. From what i was able to understand, when DecayCore applies EQ filters, it takes resulting decay in consideration as well. And if reducing decay means going below the target curve, DecayCore will do this up to a certain point, so that in the end the response wil be below the target but it will also ring for less. And there is a certain math and rules to this, like caps to a reduction applied.

Would you say this is a correct understanding? Any specific psychoacoustin properties you are trying to exploit with this technique?
Yes, that's a good summary overall.

The idea is not to intentionally move the response below the target, but to recognize that in room acoustics there is often a trade off between perfectly matching the target magnitude and reducing excessive low frequency ringing.

DC allows a limited amount of under-target response when the predicted reduction in temporal decay is considered wortwhile. The amount is tightly constrained with several safeguards (maximum reduction, frequency-dependent weighting, and conservative defaults), so it is never free to sacrifice frequency response just to reduce decay.

psychoacoustic motivation is that our ears (atleast my own) are generally more sensitive to excessive bass ringing than to a small loss of steady-state level over a narrow frequency range.

In many rooms, a bass note that decays more cleanly is perceived as tighter, more articulate, and easier to follow than one that exactly matches the target SPL but continues ringing for much longer.

So the DCs optimization is really balancing two competing objectives: frequency response and temporal behavior, rather than optimizing either one in isolation.
 
It’s interesting, looking at this thread from the outside—it seems like you know a lot about acoustics and sound reproduction. However, you don't know what a spectrogram is for or how to integrate it into your program, which became clear when I asked you about it and mentioned a competing project (Cavern EQ).

A strange contradiction, don't you think?
I think there has been a misunderstanding. I know what a spectrogram is and I understand why some people like to use it for visual analysis.
My hesitation isn't about understanding it. It's about whether it adds enough value to DecayCore to justify the development time.
 
It’s interesting, looking at this thread from the outside—it seems like you know a lot about acoustics and sound reproduction. However, you don't know what a spectrogram is for or how to integrate it into your program, which became clear when I asked you about it and mentioned a competing project (Cavern EQ).

A strange contradiction, don't you think?
Your posts would have more credibility if you found ways to word your comments / questions so that you did not imply critical value judgments, casting aspersions.

Complex technical discussions go easier when the conversations remain pleasant, unless you are sure you are actually trying to hammer a consensus point home to idiots or to drive away trolls.
 
Last edited:
I think there has been a misunderstanding. I know what a spectrogram is and I understand why some people like to use it for visual analysis.
My hesitation isn't about understanding it. It's about whether it adds enough value to DecayCore to justify the development time.
Here is your exact quote:
1782938999938.png

"I don't have any experience how to make that." -- is translated unambiguously and leaves no room for other interpretations.

That is why I saw a strange contradiction here when comparing it to your confident answers in the thread.
 
Here is your exact quote:
View attachment 542308
"I don't have any experience how to make that." -- is translated unambiguously and leaves no room for other interpretations.

That is why I saw a strange contradiction here when comparing it to your confident answers in the thread.
Troll allert listed.
Contribute, or leave.
 
Is native English your primary language?

Maybe you're on the spectrum (I am a bit, so empathize)

Maybe it's a cultural thing?

but IMO you're coming across as very obnoxious, and not just here. If it were my thread I'd have banned you completely.

How is it you have never even apologized ?
 
This is my first foray into FIR, so I’m just adding a datapoint from the 2.2 stereo music branch of my larger 5.2.2 system.

For stereo sources only, meaning Plexamp, Spotify Connect, and CD/HDCD, the chain is Raspberry Pi music source to a PipeWire/Pulse virtual sink, then CamillaDSP running the DecayCore FIR filter, then into the miniDSP Flex HTx USB input, then through my existing Flex HTx calibration before output to the amps, mains, and subs.

The Flex HTx remains the main system-integration layer. It handles the crossover, delays, sub EQ, APFs, output routing, and the 2.2 matrix. My stereo bass matrix is not simple summed mono. The left channel feeds the left sub at full level and the right sub at a lower level, while the right channel feeds the right sub at full level and the left sub at a lower level. The idea is to give each main stronger support from its adjacent sub while still using some crossfeed for modal coverage and seat consistency.

Because the Flex HTx already handles bass management and sub/main integration, I did not use DecayCore to redesign the bass or crossover. I used it only as a conservative upstream FIR polish layer.

Measurement was done with a UMIK-2 and its 90-degree calibration file loaded. DecayCore settings were v1.1.7, Basic mode, 48 kHz, 16384 taps, Minimum Phase, Harman6, with correction limited to 250 to 8000 Hz. TDC, HPF, and bass integration were left off. DecayCore report estimated Schroeder around 255–257 Hz.

My reasoning was that the measurement includes the full in-room 2.2 system, including mains, subs, Flex calibration, and room behavior. I did not want aggressive time-domain correction fighting the existing HTx calibration. Minimum phase and a limited correction range seemed like the safest first pass.

The result was roughly 81 acoustic score, about 90 percent target match, and about 93 percent confidence. Subjectively, it sounds a little cleaner. As a conservative post-DSP layer on top of an already-integrated manual Flex HTx calibration, it seems to work well.

Attached are the L/R result plots and recorded/IR/magnitude previews.
 

Attachments

Last edited:
Hi VilhoValittu

Thank you for giving access to your brilliant software, It is maturing super fast and it is for me doing wonders for my setup.

thcdru2k just pointed out he is using the 90 degree calibration file and presumably also measuring his multichannel system with the microphone pointed at the ceiling, and this gives me a chance to ask a few questions about the automated measurement process.

I am using your software on Arch linux CachyOS distro, and the measurement process worked well for me.
Only limitation was that on my distro the software volume wasnt working properly, and any volume adjustment for the measurements had to be done downstream on the DAC, which i had set in bypass volume mode. Quickly fixed, but initially a very loud experience using the test signal.
Maybe it could be added to the documentation that it is wise to use volume attenuation downstream during measurement process?

and in regards to the measurements:

1. I assumed that the volume for the test signal should be around listening volume, maybe slightly above. Does this matter much? Or is perhaps louder volume preferred?

2. I have a 2.0 system and I am using a Umik 1.0 microphone. I figured that pointing the microphone towards the speakers and the space straight between them was convenient, but is the 90 degree method more accurate? or is this dependent on whether you have a 2.0 or multichannel system?
 
Last edited:
This is my first foray into FIR, so I’m just adding a datapoint from the 2.2 stereo music branch of my larger 5.2.2 system.

For stereo sources only, meaning Plexamp, Spotify Connect, and CD/HDCD, the chain is Raspberry Pi music source to a PipeWire/Pulse virtual sink, then CamillaDSP running the DecayCore FIR filter, then into the miniDSP Flex HTx USB input, then through my existing Flex HTx calibration before output to the amps, mains, and subs.

The Flex HTx remains the main system-integration layer. It handles the crossover, delays, sub EQ, APFs, output routing, and the 2.2 matrix. My stereo bass matrix is not simple summed mono. The left channel feeds the left sub at full level and the right sub at a lower level, while the right channel feeds the right sub at full level and the left sub at a lower level. The idea is to give each main stronger support from its adjacent sub while still using some crossfeed for modal coverage and seat consistency.

Because the Flex HTx already handles bass management and sub/main integration, I did not use DecayCore to redesign the bass or crossover. I used it only as a conservative upstream FIR polish layer.

Measurement was done with a UMIK-2 and its 90-degree calibration file loaded. DecayCore settings were v1.1.7, Basic mode, 48 kHz, 16384 taps, Minimum Phase, Harman6, with correction limited to 250 to 8000 Hz. TDC, HPF, and bass integration were left off. DecayCore report estimated Schroeder around 255–257 Hz.

My reasoning was that the measurement includes the full in-room 2.2 system, including mains, subs, Flex calibration, and room behavior. I did not want aggressive time-domain correction fighting the existing HTx calibration. Minimum phase and a limited correction range seemed like the safest first pass.

The result was roughly 81 acoustic score, about 90 percent target match, and about 93 percent confidence. Subjectively, it sounds a little cleaner. As a conservative post-DSP layer on top of an already-integrated manual Flex HTx calibration, it seems to work well.

Attached are the L/R result plots and recorded/IR/magnitude previews.
Hi,

This is interesting approach.

Phase & GD correction are heavily smoothed above Schroeder so benefits are small.
For your use case, I can see problem at DC with in this kind of use :
phase behaviour in bass area with minimum filter

I have to investigate that.

I haven't tested this kind of scenario at all, main focus of correction has been always below Schroeder.

Still nice to hear that you found somekind of improvement.
 
Maybe it could be added to the documentation that it is wise to use volume attenuation downstream during measurement process?
Noted. Signal is played -12 dBFS.

1. I assumed that the volume for the test signal should be around listening volume, maybe slightly above. Does this matter much? Or is perhaps louder volume preferred?
This is only my opinion : Louder is better because mic will not measure so much background noise.
2. I have a 2.0 system and I am using a Umik 1.0 microphone. I figured that pointing the microphone towards the speakers and the space straight between them was convenient, but is the 90 degree method more accurate? or is this dependent on whether you have a 2.0 or multichannel system?
There are several different opinions on this matter. The difference is very small in the bass range, but there are fewer reflections at higher frequencies if the microphone points directly at the speaker, in theory. It makes no difference whether it’s a 2-channel system or Atmos; the sound bounces around the room in the same way.
 
Hi,

This is interesting approach.

Phase & GD correction are heavily smoothed above Schroeder so benefits are small.
For your use case, I can see problem at DC with in this kind of use :
phase behaviour in bass area with minimum filter

I have to investigate that.

I haven't tested this kind of scenario at all, main focus of correction has been always below Schroeder.

Still nice to hear that you found somekind of improvement.
Thanks, that makes sense.

Looking at the FIR afterward, my first pass was probably too conservative to show much. With correction limited to 250–8000 Hz and Schroeder estimated around 255 Hz, DecayCore was mostly working above its main area of leverage. The FIR was almost transparent: left basically unchanged, right mostly just a cut around 270 Hz.

My next test will probably be 150–8000 Hz, minimum phase, limited boost, so DecayCore can inspect more of the transition/upper-bass region.

Your point about possible bass phase behavior in this upstream-before-Flex setup is helpful.
 
My next test will probably be 150–8000 Hz, minimum phase, limited boost, so DecayCore can inspect more of the transition/upper-bass region.
Leave TDC on with Safe preset. TDC is "bread and butter" of DC.

Program is not eager to boost without full confedence. Main focus is on cuts.
 
Back
Top Bottom