2015-01-06 224 views
1

我有一个正弦波,并在同一曲线图上显示了一个直流波,它是没有反馈的运算放大器比较器的阈值电压。在MATLAB中创建一个矩形波

到目前为止,我编写的代码是:

t1 = 0:t/1000:N*t; 
y1 = Vin*sin(2*(1/t)*3.14*t1); 
subplot('position',[0.056 0.1 0.27 0.25]); 
plot(t1,y1,t1,Vth, 'r'); 
grid on; 
title('Input Signal'); 
xlabel('Time[s]'); 
ylabel('Vi'); 

我的问题是我需要另一个情节中,我有一个矩形波时,由达到阈值从Vin更改为-Vin正弦波。

这就是我要做的:

我已经试过我知道在MATLAB一切努力使该情节,但我还没有成功地创造它。有谁知道如何?

回答

2

另一种方法是通过sign结合使用Signum function一个正弦函数。

Signum function在信号处理中使用相当多,特别是在通信系统中使用Hilbert Transform。 signum函数是一个符号指示符。如果输入为正值,则输出为1,如果输入为负值,则输出为-1,如果输入为0,则输出为0.这很好地模拟了没有反馈的运算放大器。但是,您希望在达到阈值时更改符号。因此,您可以将sign应用于减去此阈值的信号。鉴于您的输入/输出由Vin缩放,则需要通过Vin的范围内规模sign输出以及输出为 -/+ 1

这里就是我说的一个例子约:

Vth = 1; %// Threshold 
Vin = 5; %// Amplitude of input/output 
fs = 10; % // Hz 
t = 0 : 0.001 : 0.5; 
y = Vin*sin(2*pi*fs*t); 
yout = Vin*sign(y - Vth); 
plot(t, y, t, yout, [0 0.5], [Vth Vth]); 

上面代码声明的1阈值时,输入为5的幅度,然后通过指定一个正弦频率,以及从0至0.5秒的0.001步骤的时间矢量。接下来,我们生成一个正弦信号,然后生成使用阈值的饱和波。我们绘制的正弦信号,饱和信号以及门槛的印记,以便你可以看到它的工作

这就是我得到:

enter image description here

正如你所看到的,饱和波改变极性一旦浪潮超过门槛。

1

你可以做以下

y2 = Vin*(y1 >= thresh) + -Vin*(y1 < thresh) 

当你做y1 >= thresh,你将有1的其中Y>脱粒,否则为0(你再乘以Vin)。相反将发生的-Vin

这是什么输出看起来(尽管我做了这个在Python中,但语法是相同的)时叠加。阈值设置为2这里

enter image description here

0

你可以这样做:

y2=y1; 
y2(y2>=Vth)=Vin 
y2(y2<Vth)=-Vin 

要绘制两种:

subplot(2, 1, 1), plot(t1, y1); 
subplot(2, 1, 2), plot(ti, y2);