Multi-Sub Optimizer Tutorial (page 10)

Making a New Configuration with Shared Filters

So far in this tutorial, we've created configurations either by running the Configuration Wizard (in the case of the Iteration 1 configuration) or by cloning an existing configuration (a technique we used to create Iteration 2 by cloning Iteration 1). In the case of the Configuration Wizard, we were only able to specify the number of PEQs per sub (the output filters in miniDSP hardware), but not the shared filters (the input filters in miniDSP hardware). In this section, we'll explore the use of such shared filters.

After we cloned Iteration 1 to create Iteration 2, we also added two PEQs per sub to Iteration 2 by right-clicking on a Filters node in the Config View and choosing a filter type to add from the context menu. We then made a copy of this newly-created filter by selecting it and pressing Ctrl+C. Next, we pasted this copied filter into the various sub channels (using Ctrl+V) until we got six PEQs in each sub channel.

After this change, we invoked the Optimization Options property sheet dialog and had a look at the PEQ Parameter Limits property page. We observed that we now had a mix of PEQ parameter limit values. Some of these limits had been established earlier by setting them on the PEQ Parameter Limits property page, while other limit values were the defaults for new filters. These latter parameter limits were the result of having created new filters using the context menu described above. We then used the PEQ Parameter Limits property page of the Optimization Options property sheet to set all the PEQ parameter limits back to what we had originally specified. We reasoned that if we had only added new PEQ filters by copying and pasting existing ones (rather than creating new ones using the context menu), this problem would have been avoided. We'll use this technique in the steps that follow, and verify that adding PEQs only by copying and pasting existing ones does not lead to the situation of mixed PEQ parameter limit values that we encountered earlier.

Cloning Iteration 2 to Make Iteration 3

Now we'll create the new configuration. Perform the following steps.

You'll be presented with the Clone Configuration dialog box. Select Iteration 2 in the Choose configuratio to clone list box, and enter Iteration 3 for the new configuration name. The dialog box should look like the figure below.

Clone Iteration 2 to Make Iteration 3
Clone Iteration 2 to Make Iteration 3

Click OK, then click on the Data View tab at the lower left of the MSO main window. It should look as follows:

Data View After Creating Iteration 3
Data View After Creating Iteration 3

As with previous cloning steps, we ended up with some auto-generated graph names. They are:

As before, we can rename these graphs by selecting them, pressing F2, and entering new text. Change their names to the following:

The Data View should now look as below.

Data View After Renaming Iteration 3 Graphs
Data View After Renaming Iteration 3 Graphs

Select the Iteration 3 vs. Baseline graph, right-click on it, and choose Show Graph. This graph should look as below.

Graph of Newly-Cloned Iteration 3 vs. Baseline
Graph of Newly-Cloned Iteration 3 vs. Baseline

Of course, this looks exactly like the corresponding plot of Iteration 2 vs. Baseline, since it is a clone and we haven't changed or added any filters yet.

Adding Shared Filters

Now we're ready to add some shared filters. We'll try six shared PEQs in this experiment. To add them, perform the following steps.

After performing these steps, we can see the new filters in the shared channel. This is shown below.

Iteration 3 After Adding Shared Filters
Iteration 3 After Adding Shared Filters

The Iteration 3 vs. Baseline graph has now changed, since we just pasted six PEQs into the shared filter channel. These PEQs all have the same parameter values and limits as FL1. The FL1 parameter values are not the default ones that result in a flat response for FL1, so the resulting response has some strange quirks. This doesn't matter, because we will set all the filter parameters back to their default values anyway before running an optimization. The Iteration 3 vs. Baseline graph now looks like the one below.

Graph of Iteration 3 vs. Baseline After Adding Shared Filters
Graph of Iteration 3 vs. Baseline After Adding Shared Filters

Let's set all the filter parameters of Iteration 3 back to their default values. From the main menu, choose Config, Reset All Filter Parameter Values. Choose the Iteration 3 configuration and press OK. After making sure you actually chose Iteration 3 to reset, answer Yes to the prompt asking you if really want to reset the filters. After the reset, the Iteration 3 vs. Baseline graph should look like the figure below.

Graph of Iteration 3 vs. Baseline After Resetting All Filters
Graph of Iteration 3 vs. Baseline After Resetting All Filters

Let's do one final check to make sure our PEQ parameter limits are okay before optimizing. Right-click the Iteration 3 node in the Config View and choose Optimization Options. After the Optimization Options property sheet launches, choose PEQ Parameter Limits. This property page should appear as below.

PEQ Parameter Limits are Okay
PEQ Parameter Limits are Okay

The trick of copying and pasting an existing filter into the shared filters worked. There is no mixture of different parameter limits, and they are all what we want them to be. That is, the PEQ center frequency limits are from 15 Hz to 190 Hz, their maximum cut is 26 dB, and their maximum boost is 3 dB. Click Cancel to dismiss the dialog.

Optimizing Iteration 3

Now we're ready to optimize the configuration. But before doing that, save the project as tutorial-new-5.msop. Then click the Run button on the toolbar to run the optimization. Make sure to choose Iteration 3 for the configuration to optimize.

After running the optimization for 30 minutes on a machine supporting eight concurrent threads, the plot below was obtained. These results were saved in tutorial-new-6.msop.

Graph of Iteration 3 After Optimization
Graph of Iteration 3 After Optimization

Using the Configuration Performance Metrics Dialog to Compare Results

We can now use the Configuration Performance Metrics dialog to compare the errors of Iteration 1, Iteration 2 and Iteration 3. Choose Config, Performance Metrics from the main menu. For each of the configurations Iteration 1, Iteration 2 and Iteration 3, specify a custom frequency range, and set Minimum freq, Hz and Maximum freq, Hz to 15.0 Hz and 190.0 Hz respectively. If doing so activates the Recalculate button on any property page after making the change, click it to keep the calculations up to date. We obtain the results below.

Configuration MLP target error Seat-to-seat variation Final error
Iteration 1 2.17 dB 1.31 dB 1.57 dB
Iteration 2 0.84 dB 0.79 dB 0.80 dB
Iteration 3 0.45 dB 0.72 dB 0.66 dB

Errors of Iteration 1, Iteration 2 and Iteration 3, 15 Hz - 190 Hz

Press Escape or click the Close button to dismiss the Configuration Performance Metrics dialog.

The data above show that Iteration 3 has given us a good improvement to the MLP response flatness, and a minor improvement to the seat-to-seat response variation when compared to Iteration 2. At first glance, it seems like this should be our final iteration.

Now is a good time to look at how to get the filter, delay and gain data into a DSP device. In the process of doing this in the next section, we'll run into a glitch and see how to resolve it.