在MATLAB中创建矩形波

时间:2015-01-06 21:41:04

标签: matlab

我有一个正弦波,在同一个图上,有一个DC波,它是没有反馈的运算放大器比较器的阈值电压。

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

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中所知道的所有内容来制作该情节,但我还是没有设法创建它。有谁知道怎么做?

3 个答案:

答案 0 :(得分:2)

另一种方法是将Signum functionsign与正弦函数结合使用。

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

这是我正在谈论的一个例子:

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 :(得分:1)

您可以执行以下操作

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

当你执行y1 >= thresh时,你将获得1的y1&gt; thresh,否则为0(然后乘以Vin)。 -Vin

会发生相反的情况

这是输出看起来的内容(虽然我在python中做了这个,但语法是相同的)叠加时。阈值设置为2

enter image description here

答案 2 :(得分: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);