1
$\begingroup$

I have an unstable system that doesn't have a useable output when open-loop excitation is applied.

Subsequently I've used a controller to control its output. I want to use the system identification tool on MATLAB, but don't know how to calculate the open-loop input to the plant for a closed-loop system.

All the reading material is advanced and theoretical and has largely gone over my head. Can anyone explain how this open-loop plant input can be derived from known parameters of the controller and the plant output?

$\endgroup$
6
  • $\begingroup$ The "open loop" input $u$ should usually just be the output of the controller (assuming there are no disturbances). So you could simulate the closed loop system and take $u$ as open loop input and the output $y$ to estimate a model, just as if there was no controller. But without more information, it is hard to tell. $\endgroup$
    – SampleTime
    May 1, 2019 at 9:46
  • $\begingroup$ @SampleTime That's what I thought. In a closed-loop system though, u is constantly changing. I'm assuming that's fine. I wasn't sure if I'd missed something, because everything I've read refers to excitation through step input. $\endgroup$
    – el16a2t
    May 1, 2019 at 9:46
  • $\begingroup$ Yes, that should be fine, as for an unstable system you can't just use the standard excitation signals. What you can do however, is to apply some extra step-"disturbance" on the control input (just small enough such that the controller can still stabilize the system). Then you get something like $u = u_{stabilizing} + u_{step}$, which is often just as good as a pure step (this works of course in principle for any excitation signal, not just steps). $\endgroup$
    – SampleTime
    May 1, 2019 at 9:58
  • $\begingroup$ I currently do not have the time to write an answer, but you could do a closed loop frequency response measurement. $\endgroup$ May 3, 2019 at 10:15
  • $\begingroup$ @KwinvanderVeen This link can not be access by anon person $\endgroup$ Oct 30, 2023 at 9:44

1 Answer 1

1
$\begingroup$

Assuming you have a single input and single output system you can use the following method. I assume that the transfer function of the controller is given by $C(s)$ and the transfer function of the plan is given by $G(s)$. Assume a reference signal $r(s)$ and an output $y(s)$. The transfer function from the reference to the output is given by

$$F(s)=\dfrac{G(s)C(s)}{1+G(s)C(s)}.$$

In the Laplace domain, we have

$$y(s)=F(s)r(s)$$

in the time domain we have

$$y(t) = \mathcal{L}^{-1}\left[F(s)r(s)\right].$$

Note that we can measure $y(t)$ given a specific $r(s)$, without knowing the true $F(s)$. Now, come up with different approximations $G_m(s|\theta_m)$ for the plant transfer fucntion $G(s)$, in which $m$ is the index of the approximation and $\theta_m$ is the vector of parameters of the model. And determine $F_m(s|\theta_m)$ to cacluate

$$y_m(t|\theta_m)=\mathcal{L}^{-1}\left[F_m(s|\theta_m)r(s)\right].$$

The last step is to use some reference $r(s)$ and calculate the system response $y_m(t|\theta_m)$. Then you can use the least squares approximation to minimize the sum of squared errors

$$E(\theta_m)=\sum_t [y(t)-y_m(t|\theta_m)]^2.$$

You can use this procedure for different approximations and choose the best model. This method will require you to apply a nonlinear least squares method. In order to derive the analytical inverse Laplace transform you should able to use Maple, Mathematica, Sympy (from Python) or Matlab.


As commented by @SampleTime you can do the same procedure with the $G_m(s|\theta_m)$ looking only at the output $y(t)$ and the input $u(t)$ the problem with this approach is that you need to be able to measure the control input, which might be difficult for some problems. Additionally, you might get problems as a simple reference input might lead to very complicated control inputs. But you can try both methods and see which works best.

$\endgroup$
5
  • $\begingroup$ Why include the controller into the identification process, that seems to add unnecessary complexity? I would just use $u$ calculated by the controller and determine $y(s) = G(s) u(s)$ and compare that against some $y_m(s) = G_m(s, \theta_m) u(s)$. $\endgroup$
    – SampleTime
    May 1, 2019 at 11:34
  • 1
    $\begingroup$ @SampleTime: You are right, but for me measuring the reference signal and the output is often much easier than measuring the control input. But if you have control trajectory and the output trajectory that would also be a possible way to go. $\endgroup$ May 1, 2019 at 15:38
  • $\begingroup$ Ok thanks for the answer, I was just wondering if it had another specific reason. $\endgroup$
    – SampleTime
    May 1, 2019 at 16:10
  • $\begingroup$ @SampleTime: I added some additional thoughts on the question $r(t)$ to $y(t)$ or $u(t)$ to $y(t)$ in an edit. $\endgroup$ May 1, 2019 at 16:41
  • $\begingroup$ @MachineLearner this was very helpful, do you mind sharing your sources, or know somewhere where I can read more? $\endgroup$
    – el16a2t
    May 7, 2019 at 22:25

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .