• 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

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.
Quick follow-up after trying your suggestion to leave TDC on with the Safe preset.

I reran the same 2.2 stereo music branch with DecayCore upstream of my Flex HTx.

This pass was v1.1.7, Basic, 48 kHz, 16384 taps, Minimum Phase, Harman6, correction 150–8000 Hz, max boost 0.5 dB, TDC Safe on, HPF off, bass integration off.

The summary looks pretty conservative: score about 82L/80R, target match 90.6%/86.5%, confidence 91.7%/92.5%. TDC was active but modest, with peak TDC reduction of 0.65 dB at 102.5 Hz left and 0.13 dB at 149.4 Hz right. Final boost was basically negligible, under 0.2 dB. Main change seems to be a right-channel upper-bass/lower-mid cut.

Subjectively, it is still subtle, but this pass sounds more meaningful than my first 250–8000 Hz / no-TDC attempt.

I attached the generated summary only.
 

Attachments

Quick follow-up after trying your suggestion to leave TDC on with the Safe preset.

I reran the same 2.2 stereo music branch with DecayCore upstream of my Flex HTx.

This pass was v1.1.7, Basic, 48 kHz, 16384 taps, Minimum Phase, Harman6, correction 150–8000 Hz, max boost 0.5 dB, TDC Safe on, HPF off, bass integration off.

The summary looks pretty conservative: score about 82L/80R, target match 90.6%/86.5%, confidence 91.7%/92.5%. TDC was active but modest, with peak TDC reduction of 0.65 dB at 102.5 Hz left and 0.13 dB at 149.4 Hz right. Final boost was basically negligible, under 0.2 dB. Main change seems to be a right-channel upper-bass/lower-mid cut.

Subjectively, it is still subtle, but this pass sounds more meaningful than my first 250–8000 Hz / no-TDC attempt.

I attached the generated summary only.
Raise your phase correction limit (Advanced mode) :

=== PHASE CORRECTION LIMIT (REALIZED) ===
Configured phase_limit: 400.0 Hz

Magnitude and phase have different limits.
 
Raise your phase correction limit (Advanced mode) :

=== PHASE CORRECTION LIMIT (REALIZED) ===
Configured phase_limit: 400.0 Hz

Magnitude and phase have different limits.
Thank you.

I reran the same 2.2 stereo branch in Advanced mode with phase correction limit raised from 400 Hz to 800 Hz.

Settings were:

Advanced mode, 48 kHz, 16384 taps, Minimum Phase, Harman6, mag correction 150–8000 Hz, max boost 0.5 dB, TDC on at 35%, HPF off, XO phase model off, bass integration off, phase_limit 800 Hz.

This run looks meaningfully stronger than the 400 Hz phase-limit pass:

Acoustic score improved from about 82L/80R to 84.5L/81.5R.
Target match improved from 90.6%/86.5% to 95.0%/89.3%.
Confidence stayed high at 92.1%/92.6%.
GD-gradient max improved to 9.39/6.29 ms/oct.
Phase correction limit now shows realized 800 Hz on both channels.
TDC itself became very small: 0.10 dB at 55.7 Hz left, 0.00 dB right.
Boost stayed safely clamped, with net boost effectively 0 dB after gain/headroom.

I moved it into my active Pi -> CamillaDSP -> Flex HTx music chain for now, while keeping the previous 400 Hz phase-limit version as rollback.

I attached the new summary.
 

Attachments

Last edited:
Thank you again for pointing out the phase correction limit. After listening more, the 800 Hz phase limit version sounds cleaner than the 400 Hz version. It is not a dramatic tonal change or an obvious EQ effect. It is more like lower-mid and presence-region cleanup. Bass still sounds like my existing Flex HTx calibration, which is what I wanted.

One thing I find impressive is that DecayCore seems able to separate different kinds of problems instead of just trying to flatten everything. The summary is useful because it gives clues about what is resonance, what is reflection, what is probably structural, and what the software decided not to force. In my room, the recurring problems seem to be around 55 to 60 Hz, around 90 to 110 Hz, and then a stubborn lower-mid transition region around 190 to 300 Hz.

DecayCore is upstream of my miniDSP Flex HTx, and the Flex is already doing the main 2.2 stereo architecture. The stereo music path is Pi and CamillaDSP running DecayCore into the Flex HTx by USB. The Flex then handles routing, crossovers, delays, APFs, sub EQ, and the stereo sub matrix. L and R mains use 60 Hz LR24 high-pass. Subs use 107 Hz LR24 low-pass and 16 Hz BW12 high-pass. The stereo sub matrix is L to L sub at 0 dB, L to R sub at -6 dB, R to R sub at 0 dB, and R to L sub at -6 dB. Sub delays are L sub 1.32 ms and R sub 0.20 ms. The right sub also has APFs at 44 Hz Q 0.50 and 56 Hz Q 2.25. For playback I also use a dynamic loudness or house curve layer, but that is separate from the DecayCore measurement and the underlying Flex calibration.

The room is also difficult. It is an untreated open living room, about 24 x 30 ft total, with the actual speaker and listening area occupying roughly a 12 x 12 ft zone inside that space. There are glass patio doors, bare floors, a fireplace, an open kitchen and dining area behind the listening area, and a piano and opening on the other side. DecayCore seems to correctly pick that up in its RT60/decay summary.

I left bass integration off in DecayCore. My assumption is that the Flex should keep owning the bass management and 2.2 integration, while DecayCore should refine the already-calibrated stereo result. The 800 Hz run seems to support that. Target match and GD-gradient improved, confidence stayed high, boost stayed clamped, and TDC Safe became almost inactive. That makes me think DecayCore is mostly cleaning up phase, GD, and controlled magnitude issues. Open to suggestions, and I am looking forward to seeing how DecayCore develops. I also have an office system that I can experiment with next, so I will post that summary once I run it.
 
Thank you again for pointing out the phase correction limit. After listening more, the 800 Hz phase limit version sounds cleaner than the 400 Hz version. It is not a dramatic tonal change or an obvious EQ effect. It is more like lower-mid and presence-region cleanup. Bass still sounds like my existing Flex HTx calibration, which is what I wanted.

One thing I find impressive is that DecayCore seems able to separate different kinds of problems instead of just trying to flatten everything. The summary is useful because it gives clues about what is resonance, what is reflection, what is probably structural, and what the software decided not to force. In my room, the recurring problems seem to be around 55 to 60 Hz, around 90 to 110 Hz, and then a stubborn lower-mid transition region around 190 to 300 Hz.

DecayCore is upstream of my miniDSP Flex HTx, and the Flex is already doing the main 2.2 stereo architecture. The stereo music path is Pi and CamillaDSP running DecayCore into the Flex HTx by USB. The Flex then handles routing, crossovers, delays, APFs, sub EQ, and the stereo sub matrix. L and R mains use 60 Hz LR24 high-pass. Subs use 107 Hz LR24 low-pass and 16 Hz BW12 high-pass. The stereo sub matrix is L to L sub at 0 dB, L to R sub at -6 dB, R to R sub at 0 dB, and R to L sub at -6 dB. Sub delays are L sub 1.32 ms and R sub 0.20 ms. The right sub also has APFs at 44 Hz Q 0.50 and 56 Hz Q 2.25. For playback I also use a dynamic loudness or house curve layer, but that is separate from the DecayCore measurement and the underlying Flex calibration.

The room is also difficult. It is an untreated open living room, about 24 x 30 ft total, with the actual speaker and listening area occupying roughly a 12 x 12 ft zone inside that space. There are glass patio doors, bare floors, a fireplace, an open kitchen and dining area behind the listening area, and a piano and opening on the other side. DecayCore seems to correctly pick that up in its RT60/decay summary.

I left bass integration off in DecayCore. My assumption is that the Flex should keep owning the bass management and 2.2 integration, while DecayCore should refine the already-calibrated stereo result. The 800 Hz run seems to support that. Target match and GD-gradient improved, confidence stayed high, boost stayed clamped, and TDC Safe became almost inactive. That makes me think DecayCore is mostly cleaning up phase, GD, and controlled magnitude issues. Open to suggestions, and I am looking forward to seeing how DecayCore develops. I also have an office system that I can experiment with next, so I will post that summary once I run it.
My only suggestion at this point is : try automatic mode with preferred filter type. It's easy to test results with CamillaDSP.
 
Hi @VilhoValittu , DecayCore is a fantastic concept and so grateful that you are developing it and sharing it with the world. It caught my attention because I've been interested in going beyond what the Denon AVR does. You mentioned in your OP that you're interested in how DecayCore is being deployed in real rooms.

I've been working on an audio stream that goes like this: Home music server with .flac (mostly CD derived) and .dsf (DSD64) files -> Kodi -> PipeWire -> CamillaDSP ->HDMI sending 88.2khz PCM -> DenonAVR in Direct Mode.

Kodi and CamillaDSP run on a laptop with Ubuntu 26.04 LTS. The speaker layout is Front L, Front R, Center, sub, Surround L, Surround R, Back Surround L, Back Surround R, for 7.1 channels.

I took measurements with UMIK-1 (miniDSP) in REW for each of the 8 speakers. Measurements were done in 5 positions, the main listening position (MLP), and then 4 additional positions each 15cm from MLP: directly in front of MLP, directly to the left of MLP, directly to the right of MLP, and directly in back of MLP. In REW, For each speaker I did cross correlation align, followed by RMS + phase averaging, and then exported 'impulse response as WAV', for each of the 8 speakers. I then uploaded these impulse response files into DecayCore in pairs (Front L, Front R), (SL, SR), (BL, BR), and for the center channel I got it to work by submitting it as a pair (C, C). I did one set without the sub ('round 2') and then again with the sub ('round 3', I added the sub impulse response in the field directly below that for the left speaker) For round 3, I chose a balanced auto goal and auto target selection. I enabled Bass Integration and Allow channel-specific AUTO LF. I used linear phase, 88200hz, and 65k taps. I then used the .wav and .yml (as a guide) output from DecayCore in CamillaDSP. The CamillaDSP also handles sub crossover at 80hz and upmixing to back surrounds from the surround channels. The audio pipeline was successful such that I can now listen to my 2, 5, and 5.1 channel recordings on this system with 7.1 speakers (currently using round 2 results from DecayCore). Do you have any advice as far as this work flow goes, in particular did I provide the proper files from REW to DecayCore? (I didn't do the measurement in DecayCore because I couldn't get my UMIK connected to it.)

The round 3 results with the sub and bass integration came back 'marginal' or 'infeasible'. Maybe my room is difficult. I've included the DecayCore summaries here for the Front pair ("LR"), center ("C"), surrounds ("SLSR"), and back surrounds ("BLBR"). Are there other file types that would be useful to you as you develop this software, in particular for the bass integration?

Your work in developing DecayCore is super.
 

Attachments

@VilhoValittu , if I understand what you've stated here, one can generate FIR filters in DC:
1) with the sub already integrated (crossover, sub delay, polarity, and sub gain trim already defined and active when measuring), such that the user only supplies IR.wav for L and R (not LFE) or
2) without the sub already integrated, such that the user supplies IR.wav for L, R, and LFE and YES to "Enable Bass Integration v2 (Beta)"

I think you prefer #1, is that correct?

In order to do #1, one must already have parameters for crossover, sub delay, polarity, and sub gain trim. If one does not yet have those parameters, then is a good workflow to do #2 first and use the parameters generated in the Summary file under
===DSP SETTINGS TO ENTER IN YOUR DSP===
Main HPF
Sub LPF
Sub Delay
Main delay
Sub polarity
Sub gain trim
Bass allpass

in CamillaDSP, take new measurements with the sub integrated, and then use IR.wav files generated from those measurements with the sub to do #1? What is the advantage of doing this in two stages (#2 to get the sub parameters, then #1) versus doing this in one stage (just do #2)?
 
Hi, I'm looking for guidance from ASR members who have the expertise on how best to prepare impulse response .wav files in REW for each of 8 speakers in a 7.1 physical setup (L front, center, R front, L surround, R surround, L back, R back, subwoofer), as input for DecayCore. The goal is to have DecayCore generate a set of linear phase filters at 88200hz that I can use in CamillaDSP.

I've tried two different workflows to generate such files, and while DecayCore accepts those as inputs, whether one, both, or neither of the workflows are sound/correct and whether another approach would be better are the questions for which I seek some help on.

The starting point is a set of .mdat files. Each of the 8 speakers was measured in REW with UMIK-1 at 5 positions, the Main Listening Position (MLP) plus 7.5cm away from MLP in 4 directions: directly in front of MLP, directly in back of MLP, directly to the left of MLP, and directly to the right of MLP, producing a total of 40 .mdat files.

Workflow 1
1 Open in REW the 5 .mdat files for one speaker, such that the measurements at the five different positions are now seen in REW.
2 Click "All SPL" button in the horizontal button bar near the top of the REW window.
3 In Actions -> press "Cross Correlate Align" followed by "RMS + phase avg"
4 Under Export, Export impulse response as WAV, which opens a menu of options
5 In this menu of options, choose Mono, 32-bit float, Export measured IR, 88.2khz sample rate, 64k samples.
6 Save as a .wav file.
7 Repeat 1-6 for the other 7 speakers to result in 8 impulse response .wav files, one for each speaker. Use these as 8 files as input for DecayCore.

Workflow 2
1 Open in REW the 5 .mdat files for one speaker, such that the measurements at the five different positions are now seen in REW.
2 Click "All SPL" button in the horizontal button bar near the top of the REW window.
3 Click on "IR Windows" above the horizontal button bar described in 2 above, a box pops up. In the box, check "Add FDW" for 15 cycles and then press "Apply to All SPL Selections".
4 In the "All SPL" tab again, go to Actions -> press "RMS average", causing a 6th graph to show up called "RMS Average 1".
5 For the RMS Average graph, press the "SPL & Phase" button on the horizontal button bar.
6 Under Actions -> press "Generate minumum phase", and press "Generate".
7 Under Export, Export impulse response as WAV, which opens a menu of options
8 In this menu of options, choose Mono, 32-bit float, Export measured IR, 88.2khz sample rate, 64k samples
9 Save as a .wav file
10 Repeat 1-9 for the other 7 speakers to result in 8 impulse response .wav files, one for each speaker. Use these as input files for DecayCore.

Is workflow 1 correct, is workflow 2 correct? Would you recommend a different approach to generate impulse response .wav files to use as input for DecayCore?

Thanks in advance for considering.
 
no issue loaded on raspberry pi with windows chrome to access GUI
 
IIRC, the app binds to the default web browser for UI duties so there is some target variability there (ie local host dependant). This could cause unexpected corner case issues that would be difficult, if not impossible, to anticipate on the development side. One PD work-around is to temporarily change the default OS browser setting to see if the UI issue goes away (been there done that).
 
If you have encountered a problem with DecayCore, please provide the DecayCore version, operating system, browser, exact steps to reproduce the issue, a screenshot of the error.

Testing with an up-to-date version of Chrome or Edge in a private window, with browser extensions disabled, would also help isolate the cause.

With reproducible details, the issue can be properly investigated and any defect can be fixed.

If DecayCore is behaving unexpectedly, you can also try resetting its local caches and configuration. The maintenance scripts are available here:

https://github.com/VilhoValittu/DecayCore/tree/main/config_delete

Use the approriate delete_decaycore_data_*.* script for your operating system. These scripts are also included with the packaged releases. Please note that they reset DC’s configuration, but do not remove saved measurements or exported filters.

When running DecayCore directly from the Python source, the corresponding delete_pycache_*.* script can also be used to remove Python’s local bytecode caches.
 
Thanks to VilhoValittu's nice and improving software, I've done several runs of DecayCore and here's my current workflow:

The starting point is a set of .mdat files. Each of the 8 speakers (includes one subwoofer) was measured in REW with UMIK-1 at 5 positions, the Main Listening Position (MLP) plus 7.5cm away from MLP in 4 directions: directly in front of MLP, directly in back of MLP, directly to the left of MLP, and directly to the right of MLP, producing a total of 40 .mdat files. Each of the 7 (non-sub) speakers is measured with the sub already integrated (sub delay, sub gain, sub polarity, crossover set) and with the sub on. The subwoofer is also measured separately by itself.

Workflow:
1 Open in REW the 5 .mdat files for one speaker, such that the measurements at the five different positions are now seen in REW.
2 Click "All SPL" button in the horizontal button bar near the top of the REW window.
3 In Actions -> press "Cross Correlate Align" followed by "Vector avg"
4 Under Export, Export impulse response as WAV, which opens a menu of options
5 In this menu of options, choose Mono, 32-bit float, Export measured IR, 88.2khz sample rate, 64k samples.
6 Save as a .wav file.
7 Repeat 1-6 for the other 7 speakers to result in 8 impulse response .wav files, one for each speaker. Use these as 8 files as input for DecayCore.

8 In DecayCore, I don't run bass integration (sub already integrated) and generate linear phase FIR. Under the XO tab, include the built-in crossovers for each speaker, and also an XO at 80hz (except when doing sub only) because the sub and crossover are active for each speaker measurement. When running the sub, set the leveling and gain setting under menu 4 target to 20hz to 200hz. Because DC expects a speaker pair, I just run Center, Center and sub, sub.

Still not 100% sure about step 3 in the workflow above. Choosing 'vector avg' rather than "RMS + phase avg" seemed to give better results in DC so I went with that, but if there is a math-based or physics-based reason to choose another averaging method, please explain.

Here's an overlay graph from REW measurements L with sub (red), R with sub (blue), sub only (green), with before DC in light color, and after DC in darker color. I've also included the summaries for L and R and sub.
L_R_LFE-postDC2.jpg


The reason I want to do sub only is for 5.1 audio. In that specific case I need sub only filters for the 0.1 channel. In contrast, 2.0 and 5.0 audio are fully covered by the filters produced for each speaker measured with sub.

The dips around 110hz for sub and R speaker (they are next to each other) are likely due to null in room. The dip for the sub had been at 80hz, but I re-positioned the sub and moved the dip away from 80hz crossover and it ended up the way you see it around 110hz. Fine for 2.0 and 5.0 which is crossed over at 80hz, but too bad for 0.1 channel at 110hz.

A result I get with the DC auto mode is that often different speaker pairs get a different target curve. I guess that's ok, and I suppose it's possible to fix it to one (perhaps the target curve that best fits L and R) but I haven't tried yet.

Any advice or comments on how to improve results or understanding is welcome.
 

Attachments

Last edited:
Noob here but your level of detail is very welcome, we need more discussions like this to figure this stuff out!
 
Hi,

Still not 100% sure about step 3 in the workflow above. Choosing 'vector avg' rather than "RMS + phase avg" seemed to give better results in DC so I went with that, but if there is a math-based or physics-based reason to choose another averaging method, please explain.
For step 3, I would keep the MLP measurement first, apply Cross corr align to the five measurements of the same channel, and then use Vector average. This produces a complex average with a consistent magnitude/phase relationship, which is a defensible input for phase-aware FIR generation.

RMS + phase average is not simply a safer version of vector averaging. REW calculates the RMS magnitude but takes the phase from a vector average. REW also notes that this can break the normal magnitude/phase relationship and create significant acausal content in the resulting impulse response. For that reason, I would not prefer it for Linear or Asymmetric phase correction merely because its magnitude plot looks smoother. REW’s averaging documentation

Use the measurement’s native sample rate when practical and generate DC filters at the rates required by the playback chain. An 88.2 kHz/64k export is usable, but exporting at 88.2 kHz adds no information if the original measurement was made at another rate.

8 In DecayCore, I don't run bass integration (sub already integrated) and generate linear phase FIR. Under the XO tab, include the built-in crossovers for each speaker, and also an XO at 80hz (except when doing sub only) because the sub and crossover are active for each speaker measurement. When running the sub, set the leveling and gain setting under menu 4 target to 20hz to 200hz. Because DC expects a speaker pair, I just run Center, Center and sub, sub.
The XO tab describes crossovers already present in the system so DecayCore can account for their phase contribution; it does not replace the actual bass-management crossover. Enter only crossovers whose frequency and slope are known.

A result I get with the DC auto mode is that often different speaker pairs get a different target curve. I guess that's ok, and I suppose it's possible to fix it to one (perhaps the target curve that best fits L and R) but I haven't tried yet.
Different target curves between independent auto runs are expected because auto evaluates each pair separately. For a multichannel system, I would normally use a common target shape to maintain consistent timbre and smooth pans between channels :

  1. Let Auto find a suitable target using the main L/R pair.
  2. Select that target manually with “Use selected target curve from Target page.”
  3. Rerun the other speaker pairs with the same target shape and general settings.
  4. Perform final channel-level calibration in the DSP / AVR.
Shared target should not be used to force bass extension they cannot reproduce.

Any advice or comments on how to improve results or understanding is welcome.
I would compare the Linear result with Asymmetric. Linear is valid when its latency and pre-ringing tradeoffs are acceptable, but Asymmetric is usually the more practical starting point for mixed music and movie use. In every case, verify the completed filters with new measurements—not only SPL, but also phase, group delay, impulse behaviour.

Your shared summarys was from Basic mode with Harman6.
 
For step 3, I would keep the MLP measurement first, apply Cross corr align to the five measurements of the same channel, and then use Vector average. This produces a complex average with a consistent magnitude/phase relationship, which is a defensible input for phase-aware FIR generation.

RMS + phase average is not simply a safer version of vector averaging. REW calculates the RMS magnitude but takes the phase from a vector average. REW also notes that this can break the normal magnitude/phase relationship and create significant acausal content in the resulting impulse response. For that reason, I would not prefer it for Linear or Asymmetric phase correction merely because its magnitude plot looks smoother. REW’s averaging documentation
First, thank you for your detailed reply. This is a great explanation, I will continue with cross correlate align + Vector avg in the workflow when I need to average measurements from different locations.

Use the measurement’s native sample rate when practical and generate DC filters at the rates required by the playback chain. An 88.2 kHz/64k export is usable, but exporting at 88.2 kHz adds no information if the original measurement was made at another rate.
The reason I prefer 88200 Hz for the impulse response files as input into DC is because I have CamillaDSP fixed to that sample rate. 94% of my collection is either 44100 Hz (CD derived) or DSD64, and 88200 Hz is an integer multiple of those rates, so I thought it made sense.

The XO tab describes crossovers already present in the system so DecayCore can account for their phase contribution; it does not replace the actual bass-management crossover. Enter only crossovers whose frequency and slope are known.
Yes, agree. I saw the discussion earlier in this thread, so realize that the XO tab is not the bass-management crossover. (It did confuse me though when I first saw it). The reason I include the 80hz crossover between the main speakers and sub under the XO tab is that when I take the measurement of a main speaker, the sub and 80hz crossover is active. I also include the other two in-speaker crossovers as well for a total of 3. You agree with this approach?

Different target curves between independent auto runs are expected because auto evaluates each pair separately. For a multichannel system, I would normally use a common target shape to maintain consistent timbre and smooth pans between channels :

  1. Let Auto find a suitable target using the main L/R pair.
  2. Select that target manually with “Use selected target curve from Target page.”
  3. Rerun the other speaker pairs with the same target shape and general settings.
  4. Perform final channel-level calibration in the DSP / AVR.
Shared target should not be used to force bass extension they cannot reproduce.
Ok, I had a feeling this would be the correct approach, but you confirm it. I will do this and report back. I think your last comment here that I shouldn't force bass extension on a speaker that can't produce it might not apply to my case where I am measuring together the main speaker plus the subwoofer with crossover active. In my case, the deep bass is carried by the subwoofer, not the main speaker.


I would compare the Linear result with Asymmetric. Linear is valid when its latency and pre-ringing tradeoffs are acceptable, but Asymmetric is usually the more practical starting point for mixed music and movie use. In every case, verify the completed filters with new measurements—not only SPL, but also phase, group delay, impulse behaviour.

Your shared summarys was from Basic mode with Harman6.
Yes, I forgot to mention why I went with Basic mode and not Automatic. With automatic, the TDC ended up low and the auto recommendation was to raise TDC. So that's why I went with Basic mode for L and R speaker. I also needed to do Basic mode for the subwoofer so that I could limit the leveling and gain setting to 20hz-200hz (leaving it default resulted in a bad DC run).

I'm going to have to learn how to generate and interpret those other curves you mentioned: phase (I got a start with sub delay determination), group delay, and impulse. What do you mean by 'group delay'? If you mean ensuring that the sound from each speaker arrives at the MLP at the same time, I have that down to around +/- 0.2 ms. The starting point for taking the measurements for DC is that speaker delays and gain trims, as well as sub integration (crossover, sub gain, sub polarity, sub delay) are all done and active for those measurements.

Again, super appreciate your work and input.
 
I could limit the leveling and gain setting to 20hz-200hz
Automatic mode includes "subwoofers" section with that exact range.

I have that down to around +/- 0.2 ms.
Group delay is different from the arrival-time alignment you described.

Group delay is frequency-dependent and is calculated from the slope of phase versus frequency. It indicates whether energy around one frequency arrives or decays later than energy at nearby frequencies. A system can have perfectly matched impulse arrival times while still showing additional group delay around a crossover or room mode.

Example: a group-delay rise around 80 Hz may come from crossover phase rotation, main/sub misalignment or modal energy storage. A sharp spike at a deep magnitude null is often a consequence of the cancellation itself and should not be “flattened” by aggressive correction.
 
Hello @VilhoValittu,
Thanks so much for putting this together and making it free!

Running measurements on Ubuntu 26.04 and getting error / notification "Impulse peak arrived unusually early. Check pre-silence length or latency settings. Detected recording clock drift from chirp spacing (+657 ppm).Applied chirp-based drift correction before sweep deconvolution."

Where to check those things?

Marko
 
Back
Top Bottom