Earlier in this thread, there was support for doing subwoofer integration to main speakers as a base layer, followed by DecayCore on top of that base layer. I'm wondering what can and cannot be changed after DecayCore. With DC-derived FIR active, is it defensible to adjust some delays to achieve time and phase alignment between channels for low frequency (LF) content? [main question of this post, everything below has to do with this question]
I have some doubt about this, thus the question, but I believe the answer is 'yes' based on measurement and analysis. The reason I ask is because some low frequency (LF) time alignment between channels that I set in the sub integration stage became misaligned following DecayCore (through no fault of DC which only takes in speaker pairs, there is no cross-channel coordination say between L-R and center).
Measurements for input into DecayCore have the subwoofer integrated with the other speakers in a 7.1 speaker system. By "sub integration" I mean that I have:
1) determined crossover frequency for each channel sending LF content to the subwoofer
2) adjusted subwoofer gain to level match front L and front R in the context of my chosen target curve (Harman 6dB or Harman 8dB)
3) time aligned the subwoofer to L+R (sub polarity determined at this step as well)
4) time aligned low frequency (LF) content from center, surround, and LFE channels (XO for center and surrounds, no XO for LFE), to arrive at the sub the same time as LF content from L+R. This is needed because front, center, and surrounds are different speakers with different crossover frequencies. This in turn impacts the timing of arrival of LF content to the sub.
(Steps 3 and 4 described in detail:
https://www.audiosciencereview.com/...ubwoofer-s-to-mains-how-to.15269/post-2662112)
Once I have done steps 1-4 and all of that is active, I take measurements for DecayCore, one speaker pair at a time. So I do 5 separate DC runs for: L-R, Center-Center, SL-SR, BL-BR, LFE-LFE. LFE-LFE and Center-Center go in as identical twins just because DC expects a pair. I leave bass management in DC off because my sub is already integrated: when I take a measurement of "L" in REW for input into DC, both my front L and sub make sound. The XO tab has the sub crossover frequency plus the within-speaker crossover(s), except for the LFE channel which has the XO tab blank. All of this is consistent with the plan to have sub integration as a base layer, and then DC on top of that base layer.
After DC and with FIR and IIR outputs from DC active (summaries included here), I repeated my sweeps to check for phase alignment. For step 3 above, in REW, I take two sweeps, both driven by "L+R": Sweep 1) with L and R speakers off, the sub on, crossover active, and Sweep 2) with L and R speakers on, the sub off, crossover active. Before DC, I had found a 17ms delay to L and R speakers would result in impulse and phase alignment at the 40 hz crossover, and just slightly different following DC, close to natural variance with replicate experiments. This makes sense to me because the same DC-based FIR is applied to both HF and LF content together before my crossover split. Step 4 was a different story. In Step 4, I take the sub only driven by L+R (Sweep #1 above) and align to sub only driven by Center, Surround, and LFE. In these cases time alignment was completely off, which makes sense to me because FIR for each channel was derived by DC independent of any other channel set. Unlike step 3, in step 4 the alignment tool in REW is comparing a pair of channels that each have a different FIR set applied. I believe step 4 is important for overall 7.1 system coherence in LF content.
Figures 1 and 2 below show phase relationships following DC:
Figure 1 after DecayCore, a 17.19ms delay on L+R (delay_mains, dark blue, sub off) results in phase alignment at 40hz (XO) with sub driven by L+R (red).
No delay (0 ms delay_mains, light blue) on L+R shown for comparison.
Figure 2. After DC, phase curves for sub only (driven by L+R, red, same as in Figure 1) are mis-aligned with those for sub only driven by Center (light blue), Surround L (green), and LFE (black). They were phase-aligned before DC, by adjusting time of arrival of LF content from these channels to the sub. Alignment is done at 25hz which is far from the crossover frequencies of 40hz (L-R), 110hz (Center), and 100hz (surrounds).
What is the risk if I do steps 3 (to make a small adjustment to delay of mains to phase align with sub) and 4 (delay LF content derived from different channels to arrive at the sub at the same time) again after DC, that I will invalidate the FIR filters generated in DC? After DC is it ok and desired to phase align the sub with main speakers for a second time (Figure 3) and phase align all of the LF content from each channel destined for the subwoofer for a second time(Figure 4)?
Although I perceive a risk of invalidating FIR filters by changing timing, I think that it is needed for overall 7.1 system LF coherence, which DC cannot address given that it deals with pairs of speakers and not the system as a whole. So I proceed with a second round of time alignment for subwoofer, following DC.
Figures 3 and 4 below show phase relationships following DC and a second round of time aligning:
Figure 3 after DecayCore and a second round aligning L&R speakers with sub (both driven by L+R), a 19.83ms delay on L+R (delay_mains, dark blue, sub off) results in phase alignment with sub driven by L+R (red). The delay in Figure 1 was 17.19ms, and that is the case here too, the remaining difference here is to deal with time aligning LF content going to sub from different channels. If I only had a sub and L and R speakers, the delay would be 17.19ms here. Alignment is done at 40hz, the L-R crossover to sub.
Figure 4. After DC and a second round of sub-bus time alignment, phase curves for sub only (driven by L+R, red, same as in Figure 3) are aligned with those for sub only driven by Center (light blue), Surround L (green), and LFE (black). This alignment is accomplished by adjusting time of arrival of LF content from these channels to the sub (delay_sub_C, delay_sub_surrounds, delay_sub_LFE parameters). Alignment is done at 25hz which is far from the crossover frequencies.
You can see in Figure 4 that the sub, driven by 1) L+R, 2) Center speaker, 3) Surround L, or 4) LFE are in phase with matching slopes at the 25hz alignment frequency and quite close as they approach 100hz. I will do one more verification in an upcoming post.
For reference, here is my CamillaDSP pipeline (delay_sub is zero; time alignment of sub with main speakers done through delay_mains):
pipeline:
# Step 1: Master gain + FIR room correction (full range, before crossover split)
- type: Filter
channels: [0]
names: [master_gain, fir_FL]
- type: Filter
channels: [1]
names: [master_gain, hybrid_iir_1_FR, fir_FR]
- type: Filter
channels: [2]
names: [master_gain, hybrid_iir_1_LFE, hybrid_iir_2_LFE, fir_LFE]
- type: Filter
channels: [3]
names: [master_gain, fir_FC]
- type: Filter
channels: [4]
names: [master_gain, fir_SL]
- type: Filter
channels: [5]
names: [master_gain, fir_SR]
- type: Filter
channels: [6]
names: [master_gain, hybrid_iir_1_BL, fir_BL]
- type: Filter
channels: [7]
names: [master_gain, fir_BR]
# Step 2: Expand to 15 channels for bass management
- type: Mixer
name: expand_to_15
# Step 3: Highpass main speaker channels
- type: Filter
channels: [0, 1]
names: [hp_40hz]
- type: Filter
channels: [3]
names: [hp_110hz]
- type: Filter
channels: [4, 5, 6, 7]
names: [hp_100hz]
# Step 4: Lowpass duplicated channels (for sub) and delays for L&R, Center, surrounds, and LFE
- type: Filter
channels: [2]
names: [delay_sub_LFE]
- type: Filter
channels: [8, 9]
names: [lp_40hz, delay_sub_LR]
- type: Filter
channels: [10]
names: [lp_110hz, delay_sub_C]
- type: Filter
channels: [11, 12, 13, 14]
names: [lp_100hz, delay_sub_surr]
# Step 5: Collapse back to 8 channels
- type: Mixer
name: collapse_to_8
# Step 6: Speaker delays and level trims
- type: Filter
channels: [0]
names: [delay_mains, delay_FL, gain_FL]
- type: Filter
channels: [1]
names: [delay_mains, delay_FR, gain_FR]
- type: Filter
channels: [3]
names: [delay_mains, delay_C, gain_C]
- type: Filter
channels: [4]
names: [delay_mains, delay_SL, gain_SL]
- type: Filter
channels: [5]
names: [delay_mains, delay_SR, gain_SR]
- type: Filter
channels: [6]
names: [delay_mains, delay_BL, gain_BL]
- type: Filter
channels: [7]
names: [delay_mains, delay_BR, gain_BR]
# Step 7: Sub delay and gain
- type: Filter
channels: [2]
names: [delay_sub, gain_sub]
Parameter explanations:
master_gain: set at -6dB for safety, per DC output.
fir_FL, fir_FR, fir_C, fir_SL, fir_SR, fir_BL, fir_BR, fir_LFE: FIR derived from DC.
hybrid_iir_1_FR, etc: IIR derived from DC.
delay_FL, delay_FR, delay_C, delay_SL, delay_SR, delay_BL, delay_BR: speaker delays to time align in midrange, done before any sub integration.
gain_FL, gain_FR, gain_C, gain_SL, gain_SR, gain_BL, gain_BR: speaker gains to level match in midrange, done before any sub integration.
delay_mains: derived in my sub integration #3 way above. This is derived from L+R driven sweeps in REW, but applied to all 7 main speakers. This is to time align sub and L+R. The other main speakers have to go along for the ride so that inter-channel timing is coherent.
delay_sub_LR, delay_sub_C, delay_sub_LFE, delay_sub_surrounds: delay applied to LF content destined for subwoofer so that such content arrives at the sub at the same time and in phase. After DC, LFE was the slowest, and so that delay was set to zero and all others were delayed based on that reference and by comparing in REW alignment tool sub only (L+R driven) with sub only driven by Center, Surround, and LFE.
delay_sub: used to delay sub for alignment with L+R (set to zero)
gain_sub: subwoofer gain to level match with L and R.