//VCO_c Scicos VCO with Frequency divider Event block //Classical interface function ver1.0 - scilab-4.1 //14 mars 2006 - INRIA - Author : A.Layec function [x,y,typ]=VCO_c(job,arg1,arg2) x=[];y=[];typ=[] select job case 'plot' then tt1='VCO' tt2=[] tt3=[] if arg1.model.ipar(1)==1 then if arg1.model.ipar(3)==0 then tt2=['%N']; else tt1=' VCO' if arg1.graphics.flip then tt2=['%N %M']; else tt2=['%N %M']; end end else if arg1.model.ipar(3)==0 then tt2=[]; else if arg1.graphics.flip then tt1=' VCO' tt2=[' %M']; else tt1=' VCO' tt2= ['%M ']; end end end txt=[tt1;tt2]; 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; exprs1=graphics.exprs(1:9) exprs2=graphics.exprs(10:12) exprs3=graphics.exprs(13:14) while %t do [ok,pulsation,kv,pas,cross_1,dyn_input,fnl,typ_noise,sratio,pnoise,exprs1]=... getvalue('Scicos VCO with Frequency divider Event block',... ['Pulsation [rad/s]';'Sensitivity [rad/V]';'Integration step [s]';... 'Angular position of crossing [rad]';'Dynamical Value (0:no, 1:yes)';... 'Use input nonlinearity (0:no, 1:yes)';'White Noise (0:no, 1:yes)';... 'Use second integer frequency divider (0:no or Value)'; 'Phase noise on last input (0:no, 1:yes)'],... list('vec',-1,'vec',-1,'vec',1,'vec',1,'vec',1,'vec',1,'vec',1,'vec',1,'vec',1),exprs1); if ~ok then break,end; if (size(pulsation)==size(kv)) then Nu = prod(size(pulsation)); if (dyn_input==1)&(pnoise==1) then if sratio<>0 then [model,graphics,ok]=check_io(model,graphics,[Nu;Nu;Nu],Nu,1,[1;1]) else [model,graphics,ok]=check_io(model,graphics,[Nu;Nu;Nu],Nu,1,1) end model.in=[1;1;1] elseif (dyn_input==1)|(pnoise==1) then if sratio<>0 then [model,graphics,ok]=check_io(model,graphics,[Nu;Nu],Nu,1,[1;1]) else [model,graphics,ok]=check_io(model,graphics,[Nu;Nu],Nu,1,1) end model.in=[1;1] else if sratio<>0 then [model,graphics,ok]=check_io(model,graphics,[Nu],Nu,1,[1;1]) else [model,graphics,ok]=check_io(model,graphics,Nu,Nu,1,1) end model.in=1 end if ok then /// if fnl==1 then while %t do ok2=%f; [ok2,gain,coef,plot_tanh,exprs2]=getvalue('Set Hyperbolic Tangent function',... ['Gain';'Coefficient';'Plot nonlinearity (0:no, or winid)'],... list('vec',1,'vec',1,'vec',1),exprs2); if ~ok2 then exprs2=graphics.exprs(10:12); //pourquoi cela? break end; if ok2 then if plot_tanh<>0 then win=xget("window") xset("window",int(plot_tanh)) xset("wdim",300,200) xbasc() i=1:12 Fo=pulsation/(2*%pi) plot2d(i,Fo+gain/(2*%pi)*tanh(coef*(i)),2); xgrid(0); xset("window",win); end break; end end else gain=evstr(exprs2(1)) coef=evstr(exprs2(2)) end /// /// if typ_noise==1 then while %t do ok3=%f; [ok3,m,sig,exprs3]=getvalue('Set White Noise on input command',... ['Mean [rad/v]';'Variance [rad/v]'],... list('vec',1,'vec',1),exprs3); if ~ok3 then exprs3=graphics.exprs(13:14); //pourquoi cela? break end; if ok3 then break end end else m=evstr(exprs3(1)) sig=evstr(exprs3(2)) end /// if sratio<>0 then model.firing=[0;0] cross_2 = sratio sratio = 1 else model.firing=[0] cross_2 = 0 end ipar=[dyn_input;fnl;sratio;typ_noise;pnoise] rpar=[pas;pulsation;cross_1;cross_2;kv;gain;coef;m;sig] exprs=[exprs1(:)',exprs2(:)',exprs3(:)'] graphics.exprs=exprs model.rpar=rpar(:) model.ipar=ipar(:) model.sim=list('vcoblk',4) model.dep_ut=[%f %f] x.graphics=graphics x.model=model break; end else message('Vector Pulsation and Vector Sensibilité must have the same size'); end end case 'define' then Nu=1; pulsation=2*%pi kv=2*%pi*1e3 pas=0.1 cross_1=2*%pi cross_2=2*%pi ci=zeros(10,1) dyn_input=0 //choix rapport de division dynamique fnl=0 //choix non linéarité typ_noise=0 //choix du bruit sratio=0 //deuxième diviseur de fréquence à rapport entier pnoise=0 gain=1 coef=1 plot_tanh=0 m=0 sig=0 ipar=[dyn_input;fnl;sratio;typ_noise;pnoise] rpar=[pas;pulsation;cross_1;cross_2;kv;gain;coef;m;sig] model=scicos_model() model.sim=list('vcoblk',4) model.in=Nu model.out=Nu model.evtin=1 model.evtout=1 model.dstate=ci(:) model.rpar=rpar(:) model.ipar=ipar(:) model.blocktype='d' model.firing=[0] model.dep_ut=[%f %f] gr_i=['xstringb(orig(1),orig(2),txt,sz(1),sz(2),''fill'');'] exprs1=['2*%pi','2*%pi*1e3',sci2exp(pas),... '2*%pi',string(dyn_input),string(fnl),... string(typ_noise),string(sratio),string(pnoise)]; exprs2=[sci2exp(gain),sci2exp(coef),string(plot_tanh)] exprs3=[string(m),string(sig)] exprs=[exprs1,exprs2,exprs3] x=standard_define([2.5 2],model,exprs,gr_i) end endfunction