===== Introduction =====
This method creates a set of correction filters using n-1 stereo pairs (where n is the number of main channels in the system). A single channel is nominated as the "reference" channel and is used in each stereo pair.
The following factors may be relevant for a complete correction but are out of scope of this document;
* any basic room correction issues (what crossover to use, macro parameters, use of prefilters etc)
* subwoofer time alignment
* multisub configuration
* multiway main channels
* driver linearisation
The example provided is for a 5.1 system using JRiver for playback.
===== Setup =====
==== Select a mic position ====
There is no right answer here as it depends on the layout of your room.
In my setup I choose a position that places the mic at exactly the same distance from L and R and which is also the same distance from SL and SR, since my LCR are on wall then this places C slightly closer to the mic than L and R.
==== Record delay offsets for each main channel ====
Use the mic alignment tool and measure offsets between the reference channel and each other channel. For example, if you use L as the reference channel then you need to know the delay (in samples) for
* L-R
* L-C
* L-SL
* L-SR
Record these delays. I recommend recording them permanently and returning the mic to the same position for future measurement sessions.
==== Initialise the First Workspace ====
Create a workspace for the LR pair
Create an XO to cross LR to the subwoofer, time align and apply any other adjustments required to the XO
(Optional) Apply L-R delay adjustment to XO2R
(Optional) Add prefilters using Macro 0
Create a target curve
==== Initialise the Remaining Workspaces ====
For each of LC, LSL, LSR
* either manually initialise the workspace as above OR copy the entire LR directory and do a search and replace in the acourate.ini to replace the folder name (using scripting language of choice)
* apply delay adjustment to XO2R to account for delays found using mic alignment tool
=== unix (cygwin) script to copy workspaces ===
An example which copies LR to the 3 fresh workspaces above, run from the parent directory
for target in LC LSL LSR
do
mkdir ${target}
cp LR/XO*.dbl ${target}/
cp LR/Target.dbl ${target}/
sed -e "s/\\\LR/\\\\${target}/g;s/\\\LR\\\/\\\\${target}\\\/g" LR/Acourate.ini > ${target}/Acourate.ini
done
If using shared prefilters (e.g. for manual IIR on the subwoofer) then place these in a separate common directory.
===== Measurements =====
==== Step 1: Setting the Target Level ====
Open the LR workspace
Configure signal chain to measure LR/SW
Open the logsweep recorder
Check "freeze gain" box
Do a quick log sweep
Run macro 1
Load the target curve into slot 3
Adjust the target curve level to ensure the response is fully corrected using TD-Functions/Gain
Save the target curve as a dbl, this is your "reference" target curve
For each of LC, LSL, LSR
* open the workspace
* configure the signal chain to route channels accordingly
* do a quick log sweep
* run macro 1
* load the "reference" target curve into slot 3
* if a negative gain adjustment is required, apply the negative gain adjustment and save as a dbl overwriting your "reference" target curve
Copy the "reference" target curve file into every workspace
==== Step 2: Measure and Correct ====
For each of LR, LC, LSL, LSR
* Open the workspace
* Run a log sweep
* Run macro 1
* Run macro 3
* Compare inverse curves against pulses, run "phase extract" to avoid unnecessary boost at extremities and save phase extracted pulses over the Pulse48Linv/Pulse48Rinv as necessary
* Iterate over macro 4 & macro 5 until an acceptable result is achieved (NB: it is advisable to use the same parameters on the reference L channel in every workspace)
If there is a non zero delay between XO2L and XO2R (i.e. the mic alignment tool did not report 0 offset)
* Load Cor1L and Cor1R, find the peaks, calculate peakoffset = Cor1L-Cor1R
* Rotate Cor1R by (Cor1L-Cor1R) samples, save over Cor1R
* Rotate Cor2R by (Cor1L-Cor1R) samples, save over Cor2R
* Remember to update the Cor wav files if using (e.g. Load Cor1L into slot 1, Cor1R into slot 2, save as stereo wav and overwrite Cor1S)
* Remember to repeat for all sample rates if generating filters for multiple sample rates
Special note for surround channels…. if you find that there is a markedly different correction applied to the surround channels then it may be better to compare SL to SR rather than SL to L and SR to L. Use your eyes and ears to judge this.
==== Step 3: Correcting the LFE channel ====
The LFE channel can contain high(er) frequency content than your subwoofer is really capable of playing. It is therefore common to apply a low pass filter to the LFE input channel to avoid your subwoofer(s) making bad noises when presented with such content. 120Hz is a common option but you may choose to apply this at a higher or lower frequency as you prefer.
To implement this, just create another workspace as per the LR with the desired crossover in place. Use the resulting Cor1L filter as your LFE channel correction.
===== Configuration =====
==== Step 1: Create convolver configuration file ====
This step assumes you are using jriver for playback as this is the only known convolver aware video playback engine (and hence can cope with the high latency induced by acourate filters).
Create a named folder to hold the filters, lets call it final (and assume it has the same parent dir as LR, LC etc)
Copy files as follows (assuming 48kHz filters here, change sample rate as necessary)
copy LR\Cor1S48.wav final\Cor1S48_LR.wav
copy LR\Cor2S48.wav final\Cor2S48_LR.wav
copy LC\Cor1S48.wav final\Cor1S48_LC.wav
copy LC\Cor2S48.wav final\Cor2S48_LC.wav
copy LSL\Cor1S48.wav final\Cor1S48_LSL.wav
copy LSL\Cor2S48.wav final\Cor2S48_LSL.wav
copy LSR\Cor1S48.wav final\Cor1S48_LSR.wav
copy LSR\Cor2S48.wav final\Cor2S48_LSR.wav
Create file named acourate_5.1_48.cfg and enter the following (replace the path as appropriate)
48000 6 6 0
0 0 0 0 0 0
0 0 0 0 0 0
\Cor1S48_LR.wav
0
0.0
3.0
\Cor1S48_LR.wav
1
1.0
3.0
\Cor1S48_LC.wav
1
2.0
3.0
\Cor1S48_LSR.wav
1
3.0
3.0
\Cor1S48_LSL.wav
1
4.0
3.0
\Cor1S48_LSR.wav
1
5.0
3.0
\Cor2S48_LR.wav
0
0.0
0.0
\Cor2S48_LR.wav
1
1.0
1.0
\Cor2S48_LC.wav
1
2.0
2.0
\Cor2S48_LSL.wav
1
4.0
4.0
\Cor2S48_LSR.wav
1
5.0
5.0
==== Step 2: Gain Management and the LFE Channel ====
This configuration is summing multiple input channels into one subwoofer output channel as well as applying a +10dB gain increase to the LFE input channel. If you simply use the convolver cfg above to do this, you will digitally clip the subwoofer channel during this process. This diagram illustrates the signal chain
{{http://cdn.soundandvision.com/images/archivesart/805bass.4.jpg}}
This means there needs to be some gain adjustments performed on each channel both before and after summation to avoid clipping. In particular note that the optimal implementation is likely to require an awareness of gain structure across your signal chain as it may leverage the input sensitivity and downstream amplifiers.
One jriver centric implementation when using a 5.1 output format is;
Making Room for Summation and Adjusting the LFE channel
* move a PEQ block above the convolver
* add an "adjust the volume" option, set gain to -15 and channels to "Left, Right, Centre, SL, SR"
* add an "adjust the volume" option, set gain to -5 and channels to "sub"
Recovering Gain after Summation
* move a PEQ block below the convolver
* add an "adjust the volume" option, set gain to +15 and channels to "Left, Right, Centre, SL, SR"
* adjust downstream output gain/input sensitivity on the subwoofer signal chain to recover 15dB relative to the main channels
Note that this implementation allows headroom of 5dB (in the LFE + low passes) before digital clipping will occur. A theoretical worst case signal will require about 3dB of additional attenuation (and subsequent recovery) to pass through cleanly. This sort of signal is exceedingly rare (non existent?) so it is a decision for the user as to how much headroom to leave.