Interfacing function
eng


DEMODPSK_f

File content


//DEMODPSK_f Scicos demodulator MPSK block
//Classical interface function ver1.0 - scilab-3
//25 octobre 2003 Author : - IRCOM GROUP - A.Layec
function [x,y,typ]=DEMODPSK_f(job,arg1,arg2)
x=[];y=[];typ=[]
select job
case 'plot' then
  nb=arg1.model.ipar;
  standard_draw(arg1)
case 'getinputs' then
  [x,y,typ]=standard_inputs(arg1)
case 'getoutputs' then
  [x,y,typ]=standard_outputs(arg1)
case 'getorigin' then
  [x,y]=standard_origin(arg1)
case 'set' then
   x=arg1;
   graphics=arg1.graphics;model=arg1.model;
   exprs=graphics.exprs;

   while %t do
      [ok,nb,herit,exprs]=getvalue('Set M-ary Phase Shift Keying demodulator block',...
             ['Number of states';'Inherit (no:0, yes:1)'],...
             list('vec',-1,'vec',1),exprs);

      if ~ok then break,end;
      //teste si le nombre d'état est entier
      if ~is_int(nb) then
         message('The number of states must be integer.')
         ok=%F
      end
      nu=size(nb,'*')

      if ok then
         if herit==1 then
           model.dep_ut=[%t %f]
           [model,graphics,ok]=check_io(model,graphics,[nu;nu],nu,[],[])
         else
           model.dep_ut=[%t %f]
           [model,graphics,ok]=check_io(model,graphics,[nu;nu],nu,1,[])
         end
         graphics.exprs=exprs;
         model.ipar=nb(:);
         gr_i=get_gr_i();
         if size(nb,'*')<>1 then
           gr_i(50)='txt=[''    M - PSK'';''Demodulator'']';
         else
           gr_i(50)='txt=[''    '+string(evstr(nb(1)))+' - PSK'';''Demodulator'']';
         end
         graphics.gr_i(1)=gr_i;
         x.graphics=graphics; x.model=model;
         break;
      end
   end

case 'define' then
  nb=4
  nu=1
  herit=1

  model=scicos_model()
  model.sim=list('demodpsk',4)
  model.in=[nu;nu]
  model.out=nu
  model.evtin=[]
  model.evtout=[]
  model.dstate=[]
  model.rpar=[]
  model.ipar=nb
  model.blocktype='d'
  model.firing=[]
  model.dep_ut=[%t %f]
  gr_i=get_gr_i();
  exprs=[sci2exp(nb),string(herit)]
  x=standard_define([2 2],model,exprs,gr_i)
end
endfunction

//X est une matrice de réels
//tt est un boolean
function tt=is_int(X)
 Y=matrix(X,size(X,'*'),1);
 Z=int(X);
 tt=%t;
 for i=1:size(Y,1)
    if (Z(i)-Y(i))<>0 then
      tt=tt&%f;
    else
     tt=tt&%t;
   end
 end
endfunction

function txt=get_gr_i()
   txt=['thick=xget(''thickness'')'
        'pat=xget(''pattern'')'
        'fnt=xget(''font'')'
        'ln_st=xget(""line style"")'
        'sz1=0.86*sz(1);sz2=0.86*sz(2)'
        'xxs=orig(1)+sz(1)/2';
        'yys=orig(2)+sz(2)/2';
        'if nb(1)<16 then'
        '  ww=0.14*sz(1)'
        '  hh=0.14*sz(2)'
        '  eps_deg=10'
        'elseif nb(1)>=32 then'
        '  ww=0.06*sz(1)'
        '  hh=0.06*sz(2)'
        '  eps_deg=4'
        'else'
        '  ww=0.1*sz(1)'
        '  hh=0.1*sz(2)'
        '  eps_deg=7'
        'end'
        'aa1=0'
        'aa2=64*360'
        'xset(""line style"",2)'
        'for ii=1:nb(1)'
        '  phi(ii)=%pi*((2*(ii-1)+1)/nb(1))'
        'end'
        'phi_deg=phi*180/%pi'
        'for ii=1:nb(1)'
        '  phi_b=phi_deg(ii)'
        '  if ii<nb(1) then'
        '    phi_e=phi_deg(ii+1)'
        '  else'
        '    phi_e=phi_deg(1)+360'
        '  end'
        '  phi_d=phi_e-phi_b'
        '  xarc(xxs-sz1/2,yys+sz2/2,sz1,sz2,(phi_b+eps_deg)*64,(phi_d-2*eps_deg)*64)'
        'end'
        'xset(""line style"",ln_st)'
        'clear phi'
        'for ii=1:nb(1)'
        '   phi=%pi*((2*(ii-1)+1)/nb(1))'
        '   aa=cos(phi);bb=sin(phi)'
        '   xxx=xxs+sz1/2*aa-ww/2'
        '   yyy=yys+sz2/2*bb+hh/2'
        '   xfarc(xxx,yyy,ww,hh,aa1,aa2)'
        'end'
        'xpoly([xxs;xxs],[orig(2);orig(2)+sz(2)],""lines"")'
        'xpoly([orig(1);orig(1)+sz(2)],[yys;yys],""lines"")'
        'xset(''font'',5,0)'
        'txt=[''    M - PSK'';''Demodulator''];'
        'style=5;'
        'rectstr=stringbox(txt,orig(1),orig(2),0,style,1);'
        'w=(rectstr(1,3)-rectstr(1,2))*%zoom;'
        'h=(rectstr(2,2)-rectstr(2,4))*%zoom;'
        'xstringb(orig(1)+sz(1)/2-w/2,orig(2)-h-4,txt,w,h,''fill'');'
        'e=gce();'
        'e.font_style=style;'
        'xset(''thickness'',thick)'
        'xset(''pattern'',pat)'
        'xset(''font'',fnt(1),fnt(2))']
endfunction