[From Bruce Abbott (950328.1915 EST)]
Bill Powers (950328.0815 MST) --
What you are seeing here, somewhat dimly, is (as you guessed) called the
"frequency response" of the control system. It would be even clearer if
you picked one value of k such as 0.14 and ran the model with all the
various frequencies of disturbance.
The average k across all runs was close to 0.13, so I used this figure:
Period k rms sd rms hi/lo rms r sd r
1200 0.13 3.5 0.4 1.4 0.997 0.001
600 0.13 4.0 0.2 1.4 0.996 0.001
300 0.13 7.1 0.7 1.3 0.987 0.003
150 0.13 12.7 0.8 1.2 0.959 0.004
75 0.13 34.3 7.1 1.6 0.702 0.115
The change in k from "optimal" made only slight differences in the fit. For
example, the largest change in k, from .28 to .13 in the case of one run at
a period of 75, changed rms error from 28.7 to 30.3 pixels. Would we need
more frequencies to make anything of this or does the above pattern lend
itself to analysis? Can we, for example, infer the loop gain changes from
the variation in rms error? Or the bandwidth? I doesn't look like the
amplitude of my response was decreasing yet, but as I mentioned, I found
myself having to rely on a different strategy to maintain control at the
75/60th period -- or at least it seemed so. It's clear that 75 is close to
my upper-frequency limit; you can see that in the order-of-magnitude higher
rms error at 75 than at 600.
When you use pure sine-waves as disturbances, you're doing a "frequency-
domain" analysis. When you use step-disturbances, you're doing a "time-
domain" analysis.
There's entirely too much mind reading going on here. CTRACK1 already
contains a step disturbance function. I was planning to investigate that next.
Thanks, Bill, for the tutorial on frequency and time domain analyses. I'm
glad to see that my intuitive speculations aren't too far off the mark. I'll
have to give some thought to your suggestions for modeling the lower-level
systems; at the moment I'm not completely clear on how they would be
implemented.
Before your post arrived, I did try modifying the one-level control model to
look something like this:
delta := delta - k*error;
handle := handle + delta;
rather than
handle := handle - k*error;
Delta is initialized at zero. To my surpise the iteration procedure came up
with a k-value not too far from the earlier one and produced a fit that was
only slightly worse than the original. But the model handle's curve was
decidedly different, in fact it is rather difficult to describe. Sometimes
it lags the sine-wave and then suddenly catches up, producing little wiggles
that look something like my own over-compensating corrections. Delta is the
change in position of the handle, i.e. velocity. By applying the
integrating error function to delta I am using the error to adjust the
velocity; if you think of the error as a "force" being exerted on the handle
then k is the inverse of the "mass," and k*error is analogous to force/mass
= acceleration, if my reasoning is correct. When k is set very small (high
"mass"), the handle lags the "driving" sine wave disturbance and the
amplitude is reduced. At the right value of k you get a strongly amplified
model handle excursion (resonance?). It's fun to experiment with, but I
have a feeling it's not quite what you have in mind, since there are no
separate position and velocity control systems.
Regards,
Bruce