1
votes

I used system identification tool to obtain a state space (order 2) and a process model (2 inputs, 1 output, 2nd order transfer function + delay each) of some data. The models show very nice fit to experimental data in the system identification model output window [Figure 1] but when I use the idmodel block in simulink to simulate the same data it does not look at all like it was on the tool.

I have used exactly the same block diagram with both fitted models. With the state-space fitted model the results are coherent with the system identification tool [Figures 2-3], meanwhile the process model it's totally different [Figures 4-5].

The state-space model only works well with certain experimental conditions, while the process model gives a good fit for all my experiments, that's the reason why I try to use it. The pictures below correspond to only 1 experiment.

I think the problem resides in that I can't set initial conditions to the idmodel block when using a process model instead of a state space model. I can get the initial conditions for the process model using findstates(model, data), but I don't know how to apply them. Any hints on how to set initial conditions for identified transfer function/process models in simulink? Maybe a possible workaround without simulink? I'm open to any solution or ideas.

Thank you.

Figure 1. System identification tool output for both state-space and process model System identification tool output for both state-space and process model

Figure 2. Simulink output of state-space model Simulink output of state-space model

Figure 3. idmodel block with state-space model: initial conditions parameter available idmodel block with state-space model: initial conditions parameter available

Figure 4. idmodel block with process model: initial conditions parameter NOT available idmodel block with process model: initial conditions parameter NOT available

Figure 5. Simulink output of state-space model Simulink output of state-space model

1

1 Answers

0
votes

After reaching matlab central and pointing me in the right direction I came up with a solution. Thanks to Rajiv Singh.

I first needed to convert the process model from idproc to idss using idss() instead of ss() -See this article-, then use compare() instead of findstates() to obtain the initial conditions and feed the initial conditions to the idmodel block in simulink. Graphically:

model=idss(T3s_2d);
[y,fit,x0]=compare(run_data_s{8}, model);
%T3s_2d is the identified process model (idproc) from system identification toolbox
%run_data_s is the iddata object with the experimental runs

enter image description here enter image description here