function G=trfcont(th,nnu,w)
%TRFCONT Computes the continuous time transfer function of a model.
%	A recommended newer variant to use is TH2FF(THD2THC(TH))
%	G = trfcont(TH)
%
%	TH: A matrix defining a model, as described in HELP THETA
%
%	G is returned as the transfer function of a continuous time counter-
%	part of the model TH. This functions is of the standard frequency
%	function format (see HELP FREQFUNC). Note that no automatic compu-
%	tation of the noise spectrum is offered.
%	
%	If the model TH has several inputs, G will be returned as the transfer
%	functions of selected inputs # j1 j2 .. jk by 
%	G = trfcont(TH,[j1 j2 ... jk])  [default is all inputs]
%	The functions are computed at 128 logarithmically spaced frequency-values
%	going about a decade above the Nyquist frequency. The functions can be
%	computed at arbitrary frequencies w (a row vector, generated e.g. by 
%	LOGSPACE) by G = trfcont(TH,ku,w).
%	The transfer function can be plotted by BODEPLOT. bodeplot(trfcont(TH))
%	is a possible construction.
%	See also TRF and TRFSD.

%	L. Ljung 7-7-87
%	Copyright (c) 1986-95 by the MathWorks, Inc.
%	$Revision: 1.2 $  $Date: 1995/01/24 00:54:03 $
 
T=th(1,2); nu=th(1,3);

% *** Set up default values ***
wdef=logspace(log10(pi/T/100),log10(10*pi/T),128);
if nargin<3, w=wdef;,end
if nargin<2 , nnu=1:th(1,3);end
if length(w)==1, if w<0, w=wdef;end,end
if length(nnu)==1, if nnu<0, nnu=1:th(1,3);end,end

%  *** Transform to continuous time (remove delays)***

[bc,fc]=contin(th,nnu,1);

nk=th(1,2*nu+7:3*nu+6);   % The delays

[nrb,ncb]=size(bc);[nrf,ncf]=size(fc);
nm=max(ncb,ncf);
   i=sqrt(-1);


% *** Compute the transfer function(s) GC=bc/fc ***
nrc=length(w)+1;
sc=1;
for k=nnu
    G(1,sc:sc+2)=[100+k,k,20+k];	
    G(2:nrc,sc)=w';
    GC=polyval(bc(k,:),i*w)./polyval(fc(k,:),i*w);
    G(2:nrc,sc+1)=abs(GC');
    G(2:nrc,sc+2)=(phase(GC)'-w'*T*max(0,(nk(k)-1)))*180/pi; % Add the delays
    sc=sc+3;
end

