Code covered by the BSD License  

Highlights from
Logiciels temps réel

Logiciels temps réel

by

 

Real-time software concerning the domains of the signal processing, feedback and regulation

trace_bode_mc.m
function trace_bode_mc(courbes,~,br_puls,val_max,val_min,nb_pt,~,nom_systeme,~,NUM,DEN,type_de_filtre,FA,FP,Amax,Amin,nb_simul,serie,A0_s,FT_s,S_s,VCC_s,RID_s,RS_s)


couleur=['b','k','r','g','m','c'];
grille='k';
mini=str2num(val_min);
maxi=str2num(val_max);
nb=str2num(nb_pt);
if br_puls
	w=logspace(log10(mini),log10(maxi),nb);
else
	w=logspace(log10(2*pi*mini),log10(2*pi*maxi),nb);

end;
set_param(nom_systeme,'SolverPrmCheckMsg','none')
switch serie
    case 2
        precision=0.2;
    case 3
        precision=0.1;
    case 4
        precision=0.05;
    case 5
        precision=0.02;
    case 6
        precision=0.01;
end;        
n=find_system(gcs,'findall','on');
k=find(strcmp(get_param(n,'type'),'block'));
b=n(k);
s='etage_numero_';
longs=length(s);
k=find(strncmp(get_param(b,'name'),s,longs));
etage=b(k);
val_init=cell(size(etage));
val_init=get_param(etage,'MaskValueString');
s_ao= ['|',A0_s,'|',FT_s,'|',S_s,'|',VCC_s,'|',RID_s,'|',RS_s];
if size(etage)==[1 1]
      sss=char(val_init);
      ss=[];
       kt=1;
     while ~strcmp(sss(kt:end),s_ao)
        ss=[ss,sss(kt)];
        kt=kt+1;
     end;
     val_init=ss;
else     
    l_val_init=length(val_init);
    for k_init=1:1:l_val_init
        sss=char(val_init(k_init));
        ss=[];
         kt=1;
         while ~strcmp(sss(kt:end),s_ao)
             ss=[ss,sss(kt)];
            kt=kt+1;
        end;
     val_init(k_init)=cellstr(ss);
    end;  
end;    
for nouvelle_simul=1:1:nb_simul
    nouvelle_simulc=mod(nouvelle_simul,6)+1;
    rand('state', sum(100*clock));
    if size(etage)==[1 1]
        sss=char(val_init);
        barre=find(sss=='|');
         debut=1;
         kbarre=1;
          salea=[];
            while kbarre<=length(barre)
                valn=str2num(sss(debut:barre(kbarre)-1));
                val=num2str(valn*(1+(2*rand-1)*precision));
                debut=barre(kbarre)+1;
                kbarre=kbarre+1;
                salea=[salea,val,'|'];
            end;
             valn=str2num(sss(debut:end));
            val=num2str(valn*(1+(2*rand-1)*precision));
            salea=[salea,val,'|'];
            salea=[salea,s_ao(2:end)];
            set_param(etage,'MaskValueString',salea);
    else        
        for k_alea=1:1:l_val_init
            sss=char(val_init(k_alea));
            barre=find(sss=='|');
            debut=1;
            kbarre=1;
            salea=[];
            while kbarre<=length(barre)
                valn=str2num(sss(debut:barre(kbarre)-1));
                val=num2str(valn*(1+(2*rand-1)*precision));
                debut=barre(kbarre)+1;
                kbarre=kbarre+1;
                salea=[salea,val,'|'];
            end;
             valn=str2num(sss(debut:end));
            val=num2str(valn*(1+(2*rand-1)*precision));
            salea=[salea,val,'|'];
            salea=[salea,s_ao(2:end)];
            set_param(etage(k_alea),'MaskValueString',salea);
        end;
    end        
%***********************************************************
%           Test : y a-t-il un bloc AOp_SimPower ?
%***********************************************************
liste=get_param(nom_systeme,'blocks');
listestr=char(liste);
[nl,nc]=size(listestr);
for kbloc=1:1:nl
    test=findstr(listestr(kbloc,:),'AOp_SimPower');
    if test
        nom_systeme_bloc=deblank(listestr(kbloc,:));
        nom_systeme_bloc=[nom_systeme,'/',nom_systeme_bloc];
        set_param(nom_systeme_bloc,'LinkStatus','inactive')
    end;
end;    
[a b c d]=linmod(nom_systeme);
%ret=retard;
[m p w]=bode(a,b,c,d,1,w);
[npt nout]=size(m);
ktx=floor(nb/nout);
g=20*log10(m);
T=polyval(NUM,i*w)./polyval(DEN,i*w);
G=20*log10(abs(T));
Gmin=min(G);
PHI=dephasage_continu(angle(T)*180/pi);
delta_phi=p(1)-PHI(1);
while abs(delta_phi)>180
    PHI=PHI+360*sign(delta_phi);
    delta_phi=p(1)-PHI(1);
end;
if courbes(1)
	f=get(0,'chil');
	nouveau=1;
	nom_fig=[nom_systeme,' - GAIN'];
	ki=1;
	while ((nouveau) & (ki<=length(f)))
		if strcmp(get(f(ki),'name'),nom_fig)
			nouveau=0;
			fig=f(ki);
		end;
	ki=ki+1;
	end;
	if nouveau
		fig=figure('name',nom_fig);		
	end;
	set(0,'currentf',fig);
	hold on
	for k=1:1:nout
		if br_puls
			semilogx(w,20*log10(m(:,k)),couleur(nouvelle_simulc))
			xleg='\omega (en rad/s)';
			xtx=w(k);
		else
			semilogx(w/(2*pi),20*log10(m(:,k)),couleur(nouvelle_simulc))
			xleg='F (en Hz)';
			xtx=w(k)/(2*pi);
		end;
		ytx=20*log10(m(k,k));
		if ~(nout==1)
			text(xtx,ytx,num2str(k),'color',couleur(nouvelle_simulc));
		end;
		hold on
	end;
	set(gca,'xlim',[min(w)/(2*pi*(~br_puls)+br_puls),max(w)/(2*pi*(~br_puls)+br_puls)],'xgrid','on','xcolor',grille,'xscale','log',...
	     'ygrid','on','ycolor',grille)
	xlabel(xleg)
	ylabel('gain (en dB)')
    v=axis;
    if nouveau
               hold on
        if br_puls
            FGP=2*pi*FP;
            FGA=2*pi*FA;
        else
            FGP=FP;
            FGA=FA;
        end;
        switch type_de_filtre
    case 'PL'
    semilogx([v(1),FGP],[Amax,Amax],'r','linewidth',2)
    semilogx([FGP,FGP],[v(3),Amax],'r','linewidth',2)
    semilogx([FGA,v(2)],[Amin,Amin],'r','linewidth',2)
    semilogx([FGA,FGA],[v(4),Amin],'r','linewidth',2)
    loc='NorthEast';
      case 'PH'
    semilogx([v(2),FGP],[Amax,Amax],'r','linewidth',2)
    semilogx([FGP,FGP],[v(3),Amax],'r','linewidth',2)
    semilogx([FGA,v(1)],[Amin,Amin],'r','linewidth',2)
    semilogx([FGA,FGA],[v(4),Amin],'r','linewidth',2)
    loc='NorthWest';
            case 'PB'
        semilogx([FGP(1),FGP(2)],[Amax,Amax],'r','linewidth',2)
    semilogx([FGP(1),FGP(1)],[v(3),Amax],'r','linewidth',2)
    semilogx([FGP(2),FGP(2)],[v(3),Amax],'r','linewidth',2)
    semilogx([FGA(2),v(2)],[Amin,Amin],'r','linewidth',2)
     semilogx([FGA(1),v(1)],[Amin,Amin],'r','linewidth',2)
    semilogx([FGA(1),FGA(1)],[v(4),Amin],'r','linewidth',2)
    semilogx([FGA(2),FGA(2)],[v(4),Amin],'r','linewidth',2)
    loc='NorthEast';          
        end;
        %legend('SIMULATION','COURBE THEORIQUE','GABARIT','location',loc)
     
    end;
	zoom on
    grid on
    set(gcf,'color','w')
end;
if courbes(2)
	f=get(0,'chil');
	nouveau=1;
	nom_fig=[nom_systeme,' - ARGUMENT'];
	ki=1;
	while ((nouveau) & (ki<=length(f)))
		if strcmp(get(f(ki),'name'),nom_fig)
			nouveau=0;
			fig=f(ki);
		end;
	ki=ki+1;
	end;
	if nouveau
		fig=figure('name',nom_fig);
	end;
	set(0,'currentf',fig);

		hold on

	for k=1:1:nout
		if br_puls
			semilogx(w,p(:,k),couleur(nouvelle_simulc))
			xleg='\omega (en rad/s)';
			xtx=w(k);
		else
			semilogx(w/(2*pi),p(:,k),couleur(nouvelle_simulc))
			xleg='F (en Hz)';
			xtx=w(k)/(2*pi);
		end;
		ytx=p(k,k);
		if ~(nout==1)
			text(xtx,ytx,num2str(k),'color',couleur(nouvelle_simulc))
		end;
		hold on
          % legend('SIMULATION','COURBE THEORIQUE')
	
	end;
	
	set(gca,'xlim',[min(w)/(2*pi*(~br_puls)+br_puls),max(w)/(2*pi*(~br_puls)+br_puls)],'xgrid','on','xcolor',grille,'xscale','log',...
	     'ygrid','on','ycolor',grille)
	xlabel(xleg)
	ylabel('argument (en )')
    grid on
    set(gcf,'color','w')
	zoom on
	
end;
if courbes(3)
	f=get(0,'chil');
	nouveau=1;
    	v=[min(w),max(w),Amin-20,Amax+5];

	nom_fig=[nom_systeme,' - GAIN et ARGUMENT'];
	ki=1;
	while ((nouveau) & (ki<=length(f)))
		if strcmp(get(f(ki),'name'),nom_fig)
			nouveau=0;
			fig=f(ki);
		end;
	ki=ki+1;
	end;
	if nouveau
		fig=figure('name',nom_fig);
		
	end;
	set(0,'currentf',fig);
		hold on

	subplot(2,1,1)
	
	
	for k=1:1:nout
		if br_puls
			semilogx(w,20*log10(m(:,k)),couleur(nouvelle_simulc))
			xleg='\omega (en rad/s)';
			xtx=w(k);
		else
			semilogx(w/(2*pi),20*log10(m(:,k)),couleur(nouvelle_simulc))
			xleg='F (en Hz)';
			xtx=w(k)/(2*pi);
		end;
		ytx=20*log10(m(k,k));
		if ~(nout==1)
		text(xtx,ytx,num2str(k),'color',couleur(nouvelle_simulc))
		end
		hold on
		
	end;
	
	set(gca,'xlim',[min(w)/(2*pi*(~br_puls)+br_puls),max(w)/(2*pi*(~br_puls)+br_puls)],'xgrid','on','xcolor',grille,'xscale','log',...
	     'ygrid','on','ycolor',grille)
	xlabel(xleg)
	ylabel('gain (en dB)')
    grid on
	zoom on
	subplot(2,1,2)
	
	for k=1:1:nout
		if br_puls
			semilogx(w,p(:,k),couleur(nouvelle_simulc))
			xleg='\omega (en rad/s)';		
			xtx=w(k);
		else
			semilogx(w/(2*pi),p(:,k),couleur(nouvelle_simulc))
			xleg='F (en Hz)';
			xtx=w(k)/(2*pi);
		end;
		ytx=p(k,k);
		if ~(nout==1)
		text(xtx,ytx,num2str(k),'color',couleur(nouvelle_simulc))
		end
		hold on
		
	end;
	
	set(gca,'xlim',[min(w)/(2*pi*(~br_puls)+br_puls),max(w)/(2*pi*(~br_puls)+br_puls)],'xgrid','on','xcolor',grille,'xscale','log',...
	     'ygrid','on','ycolor',grille)
	xlabel(xleg)
	ylabel('argument (en )')
    grid on
    set(gcf,'color','w')
	zoom on
end;
end;

Contact us