# Fundamentals of Signals and Systems Using the Web and MATLAB

### Bonnie Heck (view profile)

19 Aug 2002 (Updated )

Companion Software

hybrid(Np,Dp,Nd,Dd,T,t,U);
```function [Y,UD] = hybrid(Np,Dp,Nd,Dd,T,t,U);
%HYBRID     [Y,UD]= hybrid(Np,Dp,Nd,Dd,T,t,U);
%
%           HYBRID returns the output vector Y and the control vector UC
%           of a hybrid system which is defined by Np, Dp, Nd and Dd.
%           The transfer function of the continuous time plant is stored
%           in Np and Dp.  Nd and Dd are the numerator and denominators
%           of the transfer function of a discrete time controller.
%           T is the sampling period of the digital controller.
%           t is a row vector of the times at which the inputs in U appear
%           and U is a row vector of the system input.
%           The increment in t must be chosen so that T is an integer multiple
%           of the increment, i.e., t=a:b:c then b=T/m where m>1 is an integer.
%           Note that the system has only one input.
%

[Ac,Bc,Cc,Dc]=tf2ss(Np,Dp);

nsam = T/(t(2)-t(1));    % number of integration pts per sample

% initialize
Y = 0;
UD = 0;
[ncr,ncc] = size(Ac);
xc0 = zeros(ncr,1);
xdk = zeros(ndr,1);

kmax = fix(t(length(t))/T);  % # of complete samples in t
for k = 0:kmax-1

% calculate control and output of zoh
ek = U(k*nsam+1) - Y(k*nsam+1);
zoh = Cd*xdk + Dd*ek;
xdk = xd;

% integrate continuous-time plant with input of zoh for T seconds
udi = zoh*ones(nsam+1,1);
ti = t(k*nsam+1:(k+1)*nsam+1);
[yi,xi] = lsim(Ac,Bc,Cc,Dc,udi,ti,xc0);
xc0 = xi(nsam+1,:);

% augment vectors
Y = [Y;yi(2:nsam+1)];
UD = [UD;udi(2:nsam+1)];
end

if(kmax*nsam+1 < length(t))
% compute tail of simulation from t(kmax*nsam) to t_end
k = kmax;

% calculate control and output of zoh
ek = U(k*nsam+1) - Y(k*nsam+1);
zoh = Cd*xdk + Dd*ek;

% integrate continuous-time plant with input of zoh
ti = t(k*nsam+1:length(t));
udi = zoh*ones(length(ti),1);
[yi,xi] = lsim(Ac,Bc,Cc,Dc,udi,ti,xc0);

% augment vectors
Y = [Y;yi(2:length(yi))];
UD = [UD;udi(2:length(udi))];
end

```