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_sensib.m
function trace_bode_sensib(courbes,br_freq,br_puls,val_max,val_min,nb_pt,super,nom,bloc,NUM,DEN,type_de_filtre,FA,FP,Amax,Amin,sous_systeme,composant_choisi,comp_min,comp_max,pas)



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;
c_min=str2num(comp_min);
c_max=str2num(comp_max);
pas_n=str2num(pas);
set_param(nom,'SolverPrmCheckMsg','none');
comp=c_min;
nouvelle_simul=0;
  reglage=get_param(sous_systeme,'MaskPrompts');
   kreg=0;
   test_reg=0;
   while (kreg<length(reglage))&(~test_reg)
       kreg=kreg+1;
       sreg=char(reglage(kreg));
       test_reg=all(sreg(1:2)==composant_choisi);
   end;
while comp<=c_max*1.001
    nouvelle_simul=nouvelle_simul+1;
    nouvelle_simulc=mod(nouvelle_simul,6)+1;
  comps=num2str(comp);
  valeurs=get_param(sous_systeme,'MaskValues');
  valeurs(kreg)=cellstr(comps);
   set_param(sous_systeme,'MaskValues',valeurs);
%***********************************************************
%           Test : y a-t-il un bloc AOp_SimPower ?
%***********************************************************
liste=get_param(nom,'blocks');
listestr=char(liste);
[nl,nc]=size(listestr);
for kbloc=1:1:nl
    test=findstr(listestr(kbloc,:),'AOp_SimPower');
    if test
        nom_bloc=deblank(listestr(kbloc,:));
        nom_bloc=[nom,'/',nom_bloc];
        set_param(nom_bloc,'LinkStatus','inactive');
    end;
end;    
[a b c d]=linmod(nom);
%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);
if courbes(1)
	f=get(0,'chil');
	nouveau=1;
	nom_fig=[nom,' - 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)')
    if nouveau
        hold on
     
    end;
    grid on
    set(gcf,'color','w')
	zoom on
end;
if courbes(2)
	f=get(0,'chil');
	nouveau=1;
	nom_fig=[nom,' - 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,' - 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*ktx-kax);
            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;
comp=comp+pas_n;
end;

Contact us