No BSD License  

Highlights from
Fundamentals of Signals and Systems Using the Web and MATLAB

Fundamentals of Signals and Systems Using the Web and MATLAB

by

Bonnie Heck

 

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);
[Ad,Bd,Cd,Dd]=tf2ss(Nd,Dd);

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);
[ndr,ndc] = size(Ad);
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);
  xd = Ad*xdk + Bd*ek;
  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);
  xd = Ad*xdk + Bd*ek;
  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







Contact us