使用MATLAB进行不精确的绘图

时间:2011-06-12 20:28:48

标签: matlab plot

我需要对电整流器进行建模,并使用MATLAB绘制输入和输出信号。整流器由RC电路构成,其电压随电压的增加而增加,但放电速度较慢,因此输出信号或多或少是平坦的。看起来应该是这样的:

rectifier from wikipedia

我试着在MATLAB上编码,我得到了这个(我的电路整流负电压但原理相同): my figure

为了获得与维基百科中相同的数字,我试图计算下降exp曲线(红色)和上升窦曲线(蓝色)之间的交点,所以我只需要添加一条sin曲线和一条向下的exp曲线at正确的间隔来获得输出信号。 这是我的代码:

f=@(x)sin(2*pi*250000*x+pi/2);%oscillateur de référence
f1=@(x)sin(2*pi*250000*x);
g=@(x)exp(-x*10^4);%décharge du détecteur de crête
h=@(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);

但为什么我的数字曲线之间存在差距?

1 个答案:

答案 0 :(得分:1)

你真的不需要找到交叉点。您可以使用一系列嵌套的max()调用和逻辑运算来重现相同的曲线。这是一个例子:

f=@(x)sin(2*pi*250000*x);
discharge=1e-6; %# quarter period when discharge begins
g=@(x)exp(-rem(x-discharge,(1e-5)/2.5)*10^5); %#modulo over the period to repeat. 
h=@(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