Interfacing function
eng


MODQAM_f

File content


//MODQAM_f Scicos MQAM Modulator block
//Classical interface function ver1.0 - scilab-3.0
//5 janvier 2005 - IRCOM GROUP - Author : A.Layec
function [x,y,typ]=MODQAM_f(job,arg1,arg2)
x=[];y=[];typ=[]
select job
case 'plot' then
  nb=2^(arg1.model.ipar);
//pause
  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 Quadrature Amplitude Modulation modulator block',...
      ['Number of states';'Inherit (no:0, yes:1)'],...
      list('vec',-1,'vec',1),exprs);

      if ~ok then break,end;

      //Calcule le nombre de bit correspondant au(x) nombre(s) d'états
      ipar=log(nb)/log(2)
      ipar=ipar(:)
      //Teste la parité du nombre de bit
      for i=1:size(ipar,'*')
       if (ipar(i)/2)<>int(ipar(i)/2) then
        message('The number of states must be correctly selected.')
        ok=%F
        break 
       end
      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=ipar(:);
         gr_i=get_gr_i()
         if size(nb,'*')<>1 then
           gr_i(42)='txt=['' M - QAM'';''Modulator'']';
         else
           gr_i(42)='txt=[''  '+string(evstr(nb(1)))+' - QAM'';''Modulator'']';
         end
         graphics.gr_i(1)=gr_i
         x.graphics=graphics; x.model=model;
         break;
     end
   end


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

  model=scicos_model()
  model.sim=list('modqam',4)
  model.in=nu
  model.out=[nu;nu]
  model.evtin=[]
  model.evtout=[]
  model.dstate=[]
  model.rpar=[]
  model.ipar=log(nb)/log(2)
  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

//tt est une chaine texte
//X est une matrice d'entier
function tt=dec2bin(X)
if X==0 then 
  tt="0"
  return
end;
tt_t=""
while X<>0
 res=int(X/2)
 if (X-2*res)==1 then
   tt_t=tt_t+"1"
 else
   tt_t=tt_t+"0"
 end
 X=res
end
tt=""
for i=length(tt_t):-1:1
 tt=tt+part(tt_t,i)
end
endfunction

function tt=adjust_binsize(tt,n)
l_tt=length(tt)
 if n<>l_tt then
  for j=l_tt:n-1
    tt="0"+tt;
  end
 end
endfunction

function [tt_a,tt_b]=cut_bin(tt,n)
tt_a="";
tt_b="";
for j=1:length(tt)
 if j>n then
  tt_b=tt_b+part(tt,j);
 else
  tt_a=tt_a+part(tt,j);
 end
end
endfunction

function X=bin2dec(tt)
X=0;
for j=0:length(tt)-1
if part(tt,j+1)=="1" then
 X=X+2^(length(tt)-j-1)
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.75*sz(1);sz2=0.75*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'
        'l_tt=length(dec2bin(nb(1)-1))'
        'for i=1:nb(1)'
        ' tt(i)=dec2bin(i-1)'
        ' tt(i)=adjust_binsize(tt(i),l_tt)'
        ' [tt_a(i),tt_b(i)]=cut_bin(tt(i),l_tt/2)'
        ' a(i)=bin2dec(tt_a(i))'
        ' b(i)=bin2dec(tt_b(i))'
        'end'
        'a=(a/max(a)-0.5)*2'
        'b=(b/max(b)-0.5)*2'
        'for ii=1:nb(1)'
        '   aa=a(ii);bb=b(ii)'
        '   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 - QAM'';''Modulator''];'
        '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