The operation of scaling a filter changes the values of the `non-integrating' branches of the state-space graph (the filter network) but does not change the graph structure. If also the graph structure may be changed, there are more possibilities to optimize the dynamic range.
FA has several transformations to optimize the network of the filter. They are designated by the keywords do, do2 and do3 (where `do' stands for `dynamic-range optimization') and work quite differently.
do is an implementation of the dynamic-range optimization algorithm that was developed by Mullis and Roberts  and Hwang  for digital filters. This method assumes that the input-referred noise spectra for the integrators is independent of the network realization and equal for all the integrators. That this is not true in general is clear from equation (26). However, for high-Q bandpass filters, this is a reasonable assumption.
When optimizing a bandpass filter through the transformation do, this optimization should be done on the low-pass equivalent of the filter before lowpass to bandpass transformation, see Section 6.2.
Also, this optimization assumes the input signal to be a wide-band signal with the spectral properties of white noise, see Section 10.2.1.
do2 takes everything into account and therefore returns with a filter that has a dynamic range that is higher than the dynamic range of the filter do yields. This is a more complex task than do performs. Therefore, do2 is implemented as a numerical routine, whereas do is analytical and much faster.
In general, the filter structures returned by do and do2 are not very practically realizable as a real circuit. Usually no or only few of the entries of A , B and C will be zero, so that the realization has a very complex structure. The use of these routines is mainly that they show how much the dynamic range of a given realization differs from optimum.
do3 is very similar to do2. However, it restricts the transformation for quicker computation, and to obtain a less dense filter realization. For this to work properly, the state matrix A before transformation should only have zero-valued elements below the first subdiagonal. This is the case for cascade and ladder filters. If before transformation B has only one non-zero element b1 and C only has one nonzero element cn (where n is the order of the filter), do3 will keep it this way, which is beneficial for filters without finite transmission zeros.
These dynamic-range optimizers do not need the values of Ctot , Vmax and the noise factor to work. These are only needed if the dynamic range is to be evaluated.
Here is an example input file.
butterworth(3); ctot = 30e-12; umax = 1; noisefactor = 1; transform: scale; output: dr; set: optc; transform: do2; output: "optimal filter:" filter caps dr;The output is:
Output noise level: 4.334959e-05 V. Scaling is L-infinity. Maximum output level: 1.000000e+00 V. Dynamic range: 2.306827e+04 (87.26 dB). optimum at 0.09 0.13 -0.17 -0.05 -0.05 0.17 DR change is +1.180dB optimal filter: A = (3, 3) -1.091324e+00 7.175562e-01 3.558719e-01 -1.489248e-01 -3.718107e-06 5.197124e-01 -5.287917e-01 -1.372476e+00 -9.086724e-01 B = (3, 1) 1.605863e+00 -1.293019e-01 -3.333185e-01 C = (1, 3) 4.972029e-02 -6.906501e-01 5.074617e-01 D = 0.000000e+00 c1 = 6.054107e-12 c2 = 1.435668e-11 c3 = 9.589212e-12 Capacitance is divided optimally. Output noise level: 3.774110e-05 V. Scaling is L-infinity. Maximum output level: 1.000000e-00 V. Dynamic range: 2.649631e+04 (88.46 dB).So this optimization results in an improvement of the dynamic range of about 1.2dB above the dynamic range of the scaled filter. This also indicates that the maximum dynamic range attainable for the given transfer function and values of Ctot and Vmax is 88.46dB.