frequency response
[ [frq,] repf]=repfreq(sys,fmin,fmax [,step])
[ [frq,] repf]=repfreq(sys [,frq])
[ frq,repf,splitf]=repfreq(sys,fmin,fmax [,step])
[ frq,repf,splitf]=repfreq(sys [,frq])
:sys syslin list : SIMO linear system : :fmin,fmax two real numbers (lower and upper frequency bounds) : :frq real vector of frequencies (Hz) : :step logarithmic discretization step : :splitf vector of indexes of critical frequencies. : :repf vector of the complex frequency response :
repfreq returns the frequency response calculation of a linear system. If sys(s) is the transfer function of Sys, repf(k) equals sys(s) evaluated at s= %i*frq(k)*2*%pi for continuous time systems and at exp(2*%i*%pi*dt*frq(k)) for discrete time systems ( dt is the sampling period).
db(k) is the magnitude of repf(k) expressed in dB i.e. db(k)=20*log10(abs(repf(k))) and phi(k) is the phase of repf(k) expressed in degrees.
If fmin,fmax,step are input parameters, the response is calculated for the vector of frequencies frq given by: frq=[10.^((log10(fmin)):step:(log10(fmax))) fmax];
If step is not given, the output parameter frq is calculated by frq=calfrq(sys,fmin,fmax).
Vector frq is split into regular parts with the split vector. frq(splitf(k):splitf(k+1)-1) has no critical frequency. sys has a pole in the range [frq(splitf(k)),frq(splitf(k)+1)] and no poles outside.
A=`diag`_([-1,-2]);B=[1;1];C=[1,1];
Sys=`syslin`_('c',A,B,C);
frq=0:0.02:5;w=frq*2*%pi; //frq=frequencies in Hz ;w=frequencies in rad/sec;
[frq1,rep] =repfreq(Sys,frq);
[db,phi]=`dbphi`_(rep);
Systf=`ss2tf`_(Sys) //Transfer function of Sys
x=`horner`_(Systf,w(2)*`sqrt`_(-1)) // x is Systf(s) evaluated at s = i w(2)
rep=20*`log`_(`abs`_(x))/`log`_(10) //magnitude of x in dB
db(2) // same as rep
ang=`atan`_(`imag`_(x),`real`_(x)); //in rad.
ang=ang*180/%pi //in degrees
phi(2)
repf=repfreq(Sys,frq);
repf(2)-x