2011-06-12 6 views
0

Je dois modéliser un redresseur électrique et tracer les signaux d'entrée et de sortie avec MATLAB. Le redresseur est constitué d'un circuit RC qui se charge aussi vite que la tension augmente mais se décharge beaucoup plus lentement, de sorte que le signal de sortie est plus ou moins plat. Il est censé ressembler à ça:Tracé imprécis avec MATLAB

rectifier from wikipedia. J'ai essayé de le coder sur MATLAB et j'ai obtenu ceci (mon circuit rectifie la tension négative mais le même principe): my figure. Pour obtenir le même chiffre que celui de wikipedia, j'ai essayé de calculer l'intersection entre la courbe de descente exp (rouge) et la courbe sinusale montante (bleu), donc je devais juste ajouter une courbe de sinus et une courbe exp. à intervalles réguliers pour obtenir le signal de sortie. Voici mon code:

[email protected](x)sin(2*pi*250000*x+pi/2);%oscillateur de référence 
[email protected](x)sin(2*pi*250000*x); 
[email protected](x)exp(-x*10^4);%décharge du détecteur de crête 
[email protected](x)f(x)-g(x);%intersection des deux fonctions 

format long; 
inter=fzero(h,[3.82*10^-6,3.90*10^-6]); 

y1=g(0:10^-12:inter); 
y2=f(inter:10^-12:4*10^-6); 
y3=sin(2*pi*250000*(0:10^-12:1*10^-6)); 

y=-[y3 y1 y2 y1 y2]; 

y4=-f1(linspace(0,8*10^-6,length(y))); 

x=linspace(0,10*10^-6,length(y));%abscisse 

plot(x,y,x,y4); 

Mais pourquoi est-il un écart entre les courbes sur ma figure?

Répondre

1

Vous avez vraiment pas besoin de trouver les points d'intersection. Vous pouvez reproduire la même courbe avec une série d'appels max() imbriqués et d'opérations logiques. Voici un exemple:

[email protected](x)sin(2*pi*250000*x); 
discharge=1e-6; %# quarter period when discharge begins 
[email protected](x)exp(-rem(x-discharge,(1e-5)/2.5)*10^5); %#modulo over the period to repeat. 
[email protected](x)max(f(x).*(x<discharge),max(f(x),g(x)).*(x>=discharge)); %# the rectified signal 

y=linspace(0,1e-5,1e4); 
plot(y,f(y),y,h(y)) 

enter image description here

+0

merci beaucoup yoda! – snickers