Room Correction

Acourate is already equipped with a number of Macros to make things easier for room correction.

We start with Macro 1.

Psychoacoustic Response : There are a number of options

1. PSY1: Quick psychoacoustic
2. PSY1: Long psuchoacoustic
3. Sliding 1/12 Octave analysis

Which one to choose, here is the response from Uli.

“The psychoacoustic calculation takes its time. When I have started with its development it even took some days to finish.

So I have applied as much tricks as possible to get down the calculation time. The quick calculation works with some compromise whereas the long psychoacoustic should be more accurate with the penalty of a longer calculation. As the correction result is also influenced by the target curve design it is IMO also acceptable to run the quick psychoacoustic. I do so in most cases.

The 1/12 octave analysis is a more conventional way. You can find that e.g. with lower frequencies this leads to deeper dips compared to the psychoacoustic calculation. This leads to more boosting by the necessary inversion for correction.

You can simply compute the different curves, save them with different names and then load them together for visual comparison.”

High Frequency Treatment

Typically at the top frequency range a measurement does not show the reality but the behaviour of the brickwall filter. The high frequency treatment takes away the brickwall filter and produces a curve end with a smaller slope. Thus the target design is easier (HF rolloff) and the inversion process is less critical.

Frequency Dependent Window

Load an unsmoothed pulse response and compute the minphase extraction. Then run a FDW with 3/3, 10/10 and 50/50 for example. Compare the results. You will see that 3/3 gives the smoothest result. The parameters for FDW simply define a window width by a cycle number. The left value gives the number of cycles for low frequencies. E.g. with 20 Hz and 5 cycles the window is 50 ms * 5 = 250 ms. The right value is for the high frequency. So a parameter value of 10 means a window size @ 20 kHz of 0.5 ms.

The higher the parameter value = the wider the window = the more oscillations on the frequency response.

“In general there is a connection between signal length and smoothness of the frequency response.

So if a signal/filter is very short the frequency response will look pretty smooth especially at lower frequencies whereas with long signals/filters a frequency response can look quite weird.

So the magnitude response of measurements in a room with a length of e.g. a second looks indeed very jagged. If we correct the complete response then of course this is only valid at a nailed position. At another position the response is different and our correction filter may even do the opposite and boost wrong frequencies.

Thus it is common and well known today to use only smooth corrections. Which concentrates to a correction cloase around to the first sound arrival. The keyword is windowing and indeed Acourate is applying a frequency dependent windowing.

In combination with another calculation, the psychoacoustic frequency response, the correction is thus achieved in a way that we have a mild correction. And so far there is thus no problem to use this correction all over the room, it is listenable without problems. An old style correction which heavily boosts a dip at the listening position will create a boom at another position.

But there are still methods to do several measurements in a room and to mix them into a correction. Yes, that’s possible. Also with Acourate you can take different measurements, calculate an envelope for some given frequency responses and compute a correction. But I must admit that I have never tried by myself. As the normal correction has no problems. And my listening position is fixed. The strength of the correction is easily defined by the FDW parameters. You can apply from very soft to very strong if you like.

Please note, this has nothing to do with pre-ringing which is a different question.”

Typically, a value of 15/15 can be used.

The following message is a contribution from an Acourate member – Vali
(You can find his original message on Acourate news group)

Actually, if I may contribute, in my humble opinion I think I did find a correlation between defining the right FDW and the actual reverberation times each room presents after measuring. The idea came to me after reading “furiously” a few documents and webpages regarding psychoacoustics and time window definitions as well as about the large variety of windows which exist.

Anyways, to accomplish this, one would need to use both the TD-Functions Reverberation time calculations with 1/24th octave resolution and the excellent STransform wrote by Uli again with 1/24th octave. In both, one would need to look up to reverberation times in general but mostly in the 20-200Hz bass range as well as 1000Hz. While TD-Functions will give a general idea it is actually the STransform which will reveal all the information needed to make the judgement. It is well known that in smaller to medium rooms RT60 is not the right tool to judge the reverberation tim e and more like RT30 or even 20 would be closer to reality. Based on this in STransform one could actually change the view to show from the font where the -30db “sits” in the general picture. Knowing that a pulse’s 20Hz frequency has a 50 ms cycle and for instance a 100Hz has a 10ms cycle one can actually define the proper FDW windows for both bass region and mid-highs based on the actual reverberation times. For example in my case picking the 100Hz frequency, STransform shows that I have a decay time of about 80ms for a -30db figure (RT30) which in turn means that my optimum window in time would be 8 for bass(8×10=80ms). 1000Hz has aprox. a 3ms decay so here the window would be 3. To further confirm I generated a set of filters with 15/15 to which I listened to and one with 8/3. The 15/15 filters while presented me with a good sound as Uli has said created a too much dependency on the listening position not to mention the amount of dynamic range cut which was in the range of 6db. However, by far most annoyingly the sound was too reverberant, with too much echo which for sure was not representative of the original recording. Also, all IACCs reported a decrease which is a clear sign of correcting something else than the direct sound. Soon as I switched to the 8/3 filters all was good, the sound was incredible, IACCs increased with the exception of the last one which Uli advised is normal to decrease as we get further away from the direct sound.

So, here it is my theory, feel free to experiment but I truly believe into the above based on objective data reported by Acourate and subjective listening.


At the end of Macro 1, you should get 2 files as shown

Macro 2

Typical steps in setting up target curve

– switch off the subsonic filter to get a horizontal flat target
– pull the target up/down (left marker point) until it crosses the measurement curves
– pull the target down with the right marker point until the slope follows the (natural) slope of the measurements
– repeat both steps before to get the target curve following nicely
– switch on the HF rolloff and pull the marker until the target follows nicely the measurement rolloff
– pull the target below the measurement ( is allowed to leave some deep dips crossed)
– switch on the LF rolloff and pull its marker to follow the measurement LF rolloff (it is possible to omit this step
– switch on a subsonic filter (it is also possible to omit this step)

I prefer to turn subsonic filter off

Macro 3 – Generate inverse

Macro 4

Excessphase window

in macro 4 similar to macro 1 the excessphase window defines how much cycles will be considered for excessphase correction. If the value is too high you may get preringing (you can test it with Test Convolution and step response view). Some preringing is allowed (until you notice it).

Subsonic in macro4

In the beginning there was no subsonic in macro4 but in macro2 = target designer. It still ist there and you can edit the corner frequency and switch the subsonic filter on and off to see how it behaves.

Later on I have found that the calculation quality is better if the subsonic filter is not included in the target directly but in macro4.

So please use the target designer for finding the proper corner frequency and then switch the subsonic off. Enter the value in macro4. That’s it.

Tccg = gain compensation with test convolution macro 5

I do not really know what to do with this parameter. In 99.99% of all cases it is not needed. I have thought about placing it in an ini-file but then for 100% you will not remember it when you need it. Anyway it may be changed in next versions. I’m not happy right now.

Ok, what stands Tccg for?

Imagine your measurement has an average level of 8.5 dB in the frequency response chart. By the target and the resulting correction the filter will reduce the average gain by about -6.35 dB. The test convolution will correctly show the new level at 2.15 dB.

Now you may like to load the uncorrected and the corrected frequency response and compare the differences. Usually you are more interested to see the relative differences, e.g. how a peak is reduced by the correction. It is quite difficult to see this if the frequency responses are not at the same level. Thus Acourate applies by default a compensation gain just for visual purposes.

Recently this has led to some interpretation problems with the correction of a surround system. Because the comparison of corrected frequency responses of different pairs of speakers has shown different levels. The reason: different compensation gains.

So the Tccg checkbox allows to switch off the compensation gain and the different speaker pairs are displayed at the same correct target level.

Now we know the purpose of the parameter. Simply let it checked on. It has no influence on the filter correction.

And when I get a better idea where to place the parameter I will change it (e.g. it would be possible to ask for it when you run the test convolution but I do not like nasty questions to be answered all the time. I even hate nasty message boxes with a “Don’t show again” checkbox because once you have checked it you will never find it again).


The checkbox Brick means “brickwall extension”. To see its effect simply calculate also e.g. a 96 kHz correction filter from a 48 kHz measurement. You can calculate the correction with/without brick. Then load the 96 kHz correction filters and check the behaviour above 24 kHz. With brick the correction will contain a flat response up to 48 kHz (fs/2) whereas without brick the correction will suppress this frequency range (by nature a 48 kHz measurement does not contain information above 24 kHz so also a correction does not contain it). But typically with playback of 96 kHz music we don’t want to suppress the high frequencies but we also do not have information for correction (even in case of 96 kHz logsweep recordings most microphones do not measure well up to 48 kHz). Anyway the brick option simply lets pass all frequencies above 24 kHz.

The calculation of a filter for 96 kHz samplerate from a 44.1 kHz measurement requires a samplerate conversion. This should be clear.

Now there is no information above 22050 Hz. And a SRC typically leads to a stopband above 22050 Hz. This would mean that the 96 kHz filter simply stops all frequencies above 22050 Hz but what about the music content in the 96 kHz recording?

Acourate applies a method called brickwall extension. Roughly spoken the filter will contain a passband and let pass all frequencies above 20 kHz at the same level at 20 kHz. As there is no information available there is nothing to correct. But the passband is anyway better than the stopband. And we do not get a bad influence by a brickwall filter inside of the correction filter.

So simply let the Brick checkbox checked on.

But you can inspect the calculated filters also with no brickwall extension and you will see the difference. If you notice the difference by listening you have to test by yourself.

Correction filters generation

At Macro 4, Acourate can also automatically generate the necessary filters. But it is important to ensure that the XO4L44 etc filters are already in the workspace. Please also ensure that the filters are the linearised ones. macro4 combines the calculated correction (based on linearized xo measurement) and the linearized XO to the new correction to be used

Pre-ringing compensation

Since Acourate 1.8, Pre-ringing compensation is a new features to remove pre-ringing in the impulse response. So that higher number can be used in the excessphase window screen. Typically, 6/6 can be used without problem.

Reverbation Time

The most important physical quantity used to describe the acoustical properties of a room is its reverberation time. It is a measure for the reverberance of a room, and is defined as the length of time required for the sound level in a room to drop by 60 dB. The duration of the reverberation time in a given room mainly depends on the sound absorption properties of its walls, floors and ceilings, and its furnishings as well as on the volume of the room. The reverberation time is frequency-dependent since stones, wood, carpets or textiles absorb sound to a different extent at varying frequencies.

The reverberation time best suited for a certain room mainly depends on its volume and usage. These factors are also taken into account in DIN 18041 and ÖNORM B 8115-3. Both standards set optimum reverberation times and corresponding tolerance ranges for different rooms. (More information here)

If you have a look at the reverbration time calculated with the size of your room, you see a plot of your reverbration time over the frequency. It should sit well in the range which this tool calculates for your room. At first glance you see where your reverbration time is. If it is more to the bottom, your room sounds dry; more to the top is the opposite.

If you double click on the chart, you can get the raw data which you can export for further analysis.

Reverbation time actually gives a lot of useful information about your room with respect to different frequencies.

In the graph above (Thanks to Heiner, before room correction), you can see that the reverb time for around 82Hz is very long for both the left and right speakers. Heiner noticed that there is a boost at this particular frequency so he placed the speaker at a position to make use of the Allison effect to lower the peak. He was able to lower the peak but at an expense of increasing RT60. The speaker is placed in a room of 4.15m wide and 340/4.15 = 82Hz is the bass mode of the 1st order. The speaker is placed at 4.15/4 = 1.04m from the boundary.

Generating 131072 filters?

One quick and dirty way of generating 131072 filters is to edit the Acourate.ini file in \%user%\Documents\Acourate and add a line in he section [Roommacro4]


Then restart Acourate and run macro 4 again. Acourate calculates in 131072 tabs and reduced to 65535 taps in the last step. The above undocumented setup will avoid the conversion.

Pre-Ringing Compensation

The most update of Acourate 1.7 contains a very special add-on called Pre-inging compensation. It is something that Uli has put in alot of effort to make it happen. So it is well deserve to cost a little extra. Well worth it! The following information are excerpt from Uli’s handout about PRC.

The amount of ohase correction is defined in macro 4 by the parameter ‘Excessphase Window’. Dependent on a given situation by room and speakers these parameters may be difficult to find. Sometimes there is nearly no parameter setting that avoids the occurence of preringing in the step response.

Several iterations with macro4 and testconvolution are required but still the result is not satisfying. In most cases only smaller values and thus less phase correction will help. The behaviour is not predictable, it is changing from room to room and from speaker to speaker.

The PRC option helps to improve the behaviour. The test convolution also displays the group delay. The chart displays additional input and output vectors (vecinL, vecinR, vecoutL, vecoutR). The input vectors show the situation before the preringing compensation. Typically shown are bell shaped peaks with different frequencies, height and width causing the preringing.

The example shows a single peak for left and right channel, left side with a higher frequency. The step response confirms these peaks.

Now with the option PRC in Acourate the number of peaks for each channel can be entered in macro4.

The result is shown after macro4 calculation and test convolution:

Clearly the preringing behaviour has improved.

Furthermore it has been found that a subsonic filter specified in the target curve designer hs some negative effect on the PRC result. The function is still implemented to view the target curve including the subsonic filter during the target design. Please switch off the subsonic filter before saving the target !!

The desired subsonic frequency kann now be entered in macro4:

Final remark:

Sometimes less is more. It is recommended, not to define a very high parameter for the excessphase window in macro4 and then to suppress the peaks by PRC.

But anyway at the end the listening result is the only valid criteria !!

Conversion to short linear phase filter

Sometimes, a short linear phase filter is beneficial in reducing delay esp in the case of lipsync. Here are the steps proposed by Uli about how short the filter can be.

A good method to check for the required minimal filter length is:

– create the crossover filters as usual
– load the filters and switch to RMSLog display in the time chart
– define a lowest signal amplitude you like to keep, e.g. -200 dB
– zoom into the chart and find the left and right marker position
– apply a peaksymmetric CutNWindow accordingly

Example: create a 3-way Bessel XO of order 10. Load the filters. A -200 dB (pretty low) limit shows a range of +-1024 samples around the peak. Cut 2048 peaksymmetric samples for each filter. The filter delay then is 1024/44100 = 23 ms. You can add the filters and check for the quality of the filters as well as the sum in the time domain (step response) and frequency domain charts.

If yo define the lowest signal amplitude e.g. at -60 dB you can even get shorter filters but then you will worsen the crossover filters.

Here is some more info by Uli on subwoofer and main integration

I’ve been quite busy the last days with some other stuff.

1. Macro4 has the parameters for excessphase windowing. So for example let’s assume that the parameter is set to 6. This means that Acourate takes the actual phase of a frequency for 6 frequency cycles. Thus the correction covers a region where the signal is in a transient stage. It is not in steady state yet. You can simply check this. Create a sinewave of a desired frequency and convolve it with the pulse response. Then check the first 10 cycles.

And it should become clear that selecting a different value like 3 or 10 will result in a different phase correction and thus the correction filter will also change accordingly.

2. please keep in mind that the logsweep signal can be considered as a signal from DC up to fs/2 but filtered by a passband filter with corner frequencies sweep start and sweep end. So the resulting pulse response of the sweep also shows the behaviour like a linearphase filter with some ringing dependent on the start and end frequency.

And yes, it sometimes creates problems to interprete a pulse response correctly

3. the procedure I have demo’ed once to Michael goes as follows (example main speaker + subwoofer separated by an Acourate XO @ 100 Hz)

a) always use the same start and end frequencies for the recording, the sweep range has to cover both sub and main speaker

b) record the main speaker with applied crossovers but with subwoofer switched off.

c) create a new workspace and a new 3-way crossover with corner frequencies 100 Hz and 4 kHz. Rename XO3 to XO2 and use it instead of the normal XO

d) record the main speaker and subwoofer together with the XO from c) Thus the subwoofer will play followed by silence and then by the high frequency .

e) load both recordings of b) and d) because of the high frequency content both pulse responses get the same time alignment treatment by Acourate, so they should match

f) create a sinewave at the corner frequency 100 Hz and convolve both recorded pulse responses with the sinewave

now the interesting but also mind-boggling game starts:

the convolution results are both time aligned in reference to the tweeter. And the question is: what additional time shift is necessary to get both sinewaves summed up in best way? There are some criteria you can focus on: you may check for the equal start. You may check for the best sum in the transient stage. You may check for the maximum sum in the steady state area.

So you can use TD-Function – Rotation and try to align the sine waves accordingly (by simulation). Also calculate the sum of them for inspection.
I promise you: it WILL BE mind-boggling :)

Tip: it really makes sense to learn a little before starting with real world pulses. So you can start the game with the 2-way crossover, using XO1 and XO2 as filters, convolving them with the 100 Hz sinewave and studying the result.

Later you will find that the real world can be very different.

At the end when you believe to have found the best “rotation” parameter you can apply it with your crossover XO1.

You will learn a lot. Have fun