Optimization Example - Flatten MLP Response
Flattening the MLP Response
Downloading the User Guide Examples: The data for this demonstration are available as getting_started_user_guide.zip. To get results that match the examples, please download and unzip this file before beginning if you haven't already.
So far, we have a configuration with eight output PEQs per sub and eight input PEQs, but we haven't used any of them yet. The SPL optimization prevents any PEQ parameter values from being adjusted, only allowing adjustment of delay and all-pass filter parameter values. Now we'll look at an optimization type - Flatten MLP response using only shared (input) filters - that modifies the input PEQs (but leaves the output PEQs untouched).
Determining the Reference Level
One piece of information we'll be asked for in the Optimization Options property sheet will be the reference level. But before discussing the reference level, we'll introduce a concept called the preliminary reference level. The preliminary reference level is not an optimization option per se, but its determination is a crucial intermediate step prior to choosing the reference level, the maximum shared PEQ cut, and the start and stop optimization frequencies specified in the Optimization Options dialog.
In order to choose the preliminary reference level, we need to have MLP data that isn't contaminated with phase-related cancellation in the highest octave. We can do this in two ways.
- Run an SPL-only optimization as we just did. This keeps the subs as close as possible to being acoustically in phase. The SPL-only optimization doesn't require a reference level.
- Use a "natural response" MLP plot, which mathematically forces all subs to be acoustically in phase with one another over all frequencies.
We'll use the natural response approach below, but either one is okay as long as SPL optimization gives a result for which the MLP response is close to the natural response. If it is not, it could indicate a need to use all-pass filters on the subs, or it could indicate that the polarity of one or more subs has been inadvertently swapped.
Explaining the preliminary reference level is best done graphically as shown below.
Picture using PEQs to equalize this response using only cuts and no boost. These PEQs will "squash" the response to either a fixed level or a prescribed target curve. In the case of a fixed level, this is the preliminary reference level. The preliminary reference level should be calculated as the deepest trough of the lowest "normal" response value as shown above. Some judgment is needed to determine what is "normal" when specifying it. In the graph above, we've chosen the lowest "normal" point to be at 126.0 Hz, where its value is 83.8 dB.
Paradoxically, the reference level you specify in the Optimization Options dialog is not critical at all. That's because MSO uses a shared sub gain block, which can shift the reference level (which is the final target level) to a wide range of convenient values. It is used as an optimization aid to getting the most accurate possible equalization, as described in detail in the topic titled The Shared Gain Block: A Special Kind of "Filter". After optimization, its value is discarded in the filter report. However, if you were to delete this gain block before optimizing, you would hamper MSO's ability to get the most accurate equalization possible. The reference level specified in the Optimization Options dialog would then become a kind of "magic reference level", which would need to be determined by multiple experiments. With a shared gain block present, this "magic level" is just an internal calculation that gets performed automatically by the optimizer, and you don't need to worry about it.
To make a long story short, we just pick the reference level for the Optimization Options dialog in a simple way. After determining the preliminary reference level per the figure above, we just choose for the final reference level a position on the graph that's close to the preliminary one. The preliminary reference level in this case is 83.8 dB, so the final one could be 80 or 85 dB. We'll just pick 80 dB.
Although the final reference level is not critical, the preliminary reference level is. That's because it's used in the computation of the maximum shared PEQ cut and the optimization start and stop frequencies as will be discussed below.
Determining How Much PEQ Attenuation Is Needed
With the preliminary reference level chosen to be 83.8 dB, we can now figure out the maximum PEQ attenuation we need. We can see from the graph above that at 24.1 Hz, the un-equalized response peaks at 110.9 dB. This means we need 27.1 dB of attenuation to knock the response down to 83.8 dB at that frequency. To simplify the discussion, we'll round this to 30 dB. This is quite a bit of attenuation. Will this have a bad effect on the system?
Having that big un-equalized response peak at low frequencies turns out to help efforts to get low-distortion output rather than hinder them. The room mode is boosting the acoustical output in a frequency range where the subs would ordinarily struggle, taking the load off the amps and subs in that frequency region. Needing 30 dB of attenuation at 24 Hz means that, at that frequency, the amplifier power required to get 80 dB SPL is a factor of 1000 less than what would be needed if the un-equalized response were flat at 80 dB. That also means that the peak cone displacement needed to get 80 dB SPL is a factor of sqrt(1000) or 31.6x less than it would be if the un-equalized response were flat at 80 dB.
To properly take advantage of this situation, any large attenuation that we use must be provided by shared (input) PEQs as described in an earlier discussion, and not output PEQs. In this particular case, we're using the Flatten MLP response using only shared (input) filters optimization option, which disables output PEQs as part of the optimization itself. This means we're automatically covered in this example.
Determining The Optimization Frequency Range
A good way to figure out the optimization frequency range is to find the intersections of the horizontal line at the preliminary reference level with the MLP natural response curve (or an MLP response optimized for SPL). To use this approach with the MLP curve shown above, press Ctrl+J to activate the graph's data cursor, and drag the cursor to the upper and lower frequencies where the curve reads 83.8 dB. Then press Ctrl+H to hide the data cursor. Using this technique, we obtain a lower limit of 10.8 Hz and an upper limit of 179.4 Hz. That's a good range if we want to be strict about it. But earlier in the examples, we were using 15 Hz and 190 Hz for some calculations. For consistency with earlier examples, we'll use 15 Hz to 190 Hz instead of the more rigorous 10.8 Hz to 179.4 Hz range.
Setting The Optimization Options
Armed with the information we found above, we're ready to set all the optimization options.
Launch the Optimization Options property sheet as we've been doing.
Specifying the Optimization Type
On the Optimization Type property page, choose the Flatten MLP response using only shared (input) filters optimization option as shown below.
Setting the General Options
On the left side of the property sheet, choose General Options. Under Frequency range to optimize response, uncheck Auto and enter 15 for the lower frequency limit and 190 for the upper one. Next to Use a fixed reference level of:, enter 80 into the edit control.
You'll see that a number of options are disabled on this property page. UI controls are selectively enabled or disabled based on the optimization type chosen earlier on the Optimization Type property page. If a UI control is disabled, its contents are ignored for the optimization type you chose.
When done, the General Options page should look as below.
Specifying the Optimization Duration
Select Durations: Single-stage on the left side of the property sheet. Only the controls in the MLP Flatness-Only Optimization Duration group should be enabled. Select the Specify as a count of radio button and enter 8000 into its edit control. The result should look as below.
Setting the Input PEQ Parameter Limits
All that remains before optimizing is to set the PEQ parameter limits. We specifically want to set only the parameter limits of the input PEQs, as those are the only ones used for this type of optimization. The Sub General PEQ Limits contains a radio button that allows you to choose between setting the parameter limits for all PEQs (both input and output) or setting only the output PEQ parameter limits. Neither of these options is what we want, so we'll skip that page. Instead, choose the Sub Input PEQ Limits option on the left.
Make sure the Use this page to set only input PEQ parameter limits radio button is selected.
Earlier we determined that we needed to cut the response peak by 30 dB. Let's allow individual PEQs to have a 30 dB cut, while letting the cumulative cut (which can't be less than this) reach 31 dB. Under Maximum cut, dB, uncheck Keep existing limit and enter a value of 30. Under Maximum total cut, dB, enter a value of 31.
Best practice is to set the minimum and maximum PEQ center frequency limits to be the same as the minimum and maximum optimization frequencies respectively. Under Minimum center freq, Hz, uncheck Keep existing limit and enter 15 for this value. Under Maximum center freq, Hz, uncheck Keep existing limit and enter 190. All other controls can be kept as-is. When done, this property page should look as below.
Click OK to save the options. Before optimizing, make sure all the traces on the graph are visible using the technique described earlier.
Running The Optimization
Now we're ready to optimize the configuration. Right-click on the configuration in the Config View, then choose Optimize Configuration. When the optimization is complete, choose Yes when prompted to save the results, then save the project as user-guide-3.msop.
This is a somewhat disappointing result, both in terms of MLP flatness and STSV. Using the Performance Metrics dialog, we obtain the following results.
Errors after optimization with maximized SPL and flattened MLP:
SPL penalty: 1.84 dB
STSV: 1.98 dB
MLP target error: 1.01 dB
In the previous example where we optimized SPL only and captured the result in the file user-guide-2.msop, we got the following results.
Errors after SPL optimization:
SPL penalty: 1.84 dB
STSV: 1.98 dB
MLP target error: 18.99 dB
As the theory predicts, the SPL penalty and STSV did not change with the flattening of the MLP. These errors aren't affected by shared PEQs. As expected, the MLP target (flatness) error was greatly improved, from 18.99 dB to 1.01 dB.
Longtime users of MSO will notice that when the traditional method of optimization is used (Minimize seat-to-seat variations (STSV) and flatten MLP response), the STSV and MLP target error are usually much better than what's shown above. But the traditional method does not control for SPL penalty. An important thing to know is how much SPL we would give up by using that method. We'll try to get some insight into that question in the next section.