How can I convert an output delay of a state-space model (ss) into an internal delay?

2 views (last 30 days)
I want to write a function that can approximate a state space model with delays by a state space model without delays. I'm aware of the pade function, however it does not suit my purpose well.
In order to treat state space model in a generalized way, it would be helpful to only have one type of delay, i.e. in this case the most general one, the internal delay. When I have an ss model with internal delays it can be reversibly rewritten in an explicit form by getDelayModel. setDelayModel returns the original form, given the output of getDelayModel as input. This however does not work anymore, if I have input or output delays in my model. Example
s = tf('s'); % create base transfer function
ss_1 = ss(exp(-s)); % very simple state space model with output delay
ss_2 = ss(1/(1+exp(-s))); % very simple state space model with internal delay
[A,B1,B2,C1,C2,D11,D12,D21,D22,E,tau] = getDelayModel(ss_1); % expand ss_1
ss_1_check = setDelayModel(A,B1,B2,C1,C2,D11,D12,D21,D22,tau); % collapse again
% Now ss_1 and ss_1_check should be the same, but they are not: ss_1_check
% lost the output delay!
[A,B1,B2,C1,C2,D11,D12,D21,D22,E,tau] = getDelayModel(ss_2); % expand ss_2
ss_2_check = setDelayModel(A,B1,B2,C1,C2,D11,D12,D21,D22,tau); % collapse again
% Now ss_2 and ss_2_check should be the same, and they are. Everything is
% fine.
Since getDelayModel and setDelayModel can handle internal delays, but apparently not output delays, I figured, it would be great if I could convert a ss model with output delay to one with internal delay. Is that possible, and is there a function for it, or will I have to write one?
Two remarks:
  1. It is not my goal to convert the model back and forth, the backwards conversion with setDelayModel merely serves the purpose to prove the point that information is lost. It would be most helpful to me, if I could incorporate the information about the output delay (and input delay, for that matter) in the output matrices of getDelayModel.
  2. I'm aware, that the backwards transformation with setDelayModel does not use all information provided by getDelayModel (the descriptor matrix E is not used!), but I don't think that solves the matter, since in both examples E is empty, i.e. it is treated as unit matrix.

Answers (0)

Categories

Find more on MATLAB in Help Center and File Exchange

Products


Release

R2017b

Community Treasure Hunt

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

Start Hunting!