Systems identification – worse performance with more data?

Question
I have noticed when applying the transfer function estimator to my dataset is that I get better results when I use a single dataset rather than grouping datasets together. (I typically use a 2 poles 1 zero model with fixed delay – more complicated models seem to produce a worse result). The question is why does this happen, and/or what is the best estimation method for this sort of problem?
example result (y axis is target servo angle in degrees):
Background
I am trying to find the transfer function for a dynamixel servo motor (ax12+). Where the input, u(t), is the desired position and the output , y(t), is actual position. Based on other literature I am thinking that a relatively simple transfer function should be capable of modelling the dynamics of the motor although both the motor dynamics and the controller are unknown and other work typically uses motor voltage for u(t) rather than position setpoint.
Approach
Based on this Matlab tutorial: https://uk.mathworks.com/videos/series/data-driven-control-95931.html I copied the setpoint inputs for datasets - although in my case the input is desired position rather than voltage in. As a consequence, the non-linearities caused by friction and saturation are not really seen in my dataset. In this method 11 timeseries datasets are created (z1 – z11) which are split into training (ze) and validation sets (zv). I have plotted these datasets here:
The blue line represents the target angle and the orange is the actual angle. x axis is time and y axis is servo angle.
and the data files are available here: https://www.dropbox.com/sh/738b8s7zr7bjxt4/AAA5nQp24xLP_QrpkPbbIj0Ma?dl=0
Please excuse the long post!! any guidance for improving the servo model would be welcome!

2 Comments

How are you grouping the datasets? Are you simply cascading them? If so, since some of your data sets do not start and end at the same positions, the algorithm might treat the difference as an additional dynamic.
I'm using merge for this - code snippet:
zv = merge(z1,z2,z4,z5,z8); %Creating validation dataset
The example I was following used the same input dataset and it didn't seem to cause any issues there so I think this should be OK?
It seems like with a larger training dataset (with different inputs - a mixture of step inputs (with different amplitudes), ramps and sin) the dynamics are "slowed down" when compared with datasets that are just step inputs. Weirdly, the latter seems to generalise better with the validation set containing ramp and sin inputs.

Sign in to comment.

Answers (0)

Categories

Products

Release

R2017b

Asked:

on 16 Jul 2018

Commented:

on 18 Jul 2018

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!