在 MATLAB 中创建矩形波

Create a rectangular wave in MATLAB

我有一个正弦波,在同一个图上有一个直流波,它是没有反馈的 Op-Amp 比较器的阈值电压。

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

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 中所知道的一切来制作该图,但我仍然无法创建它。有人知道怎么做吗?

您可以执行以下操作

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

当您执行 y1 >= thresh 时,您将在 y1 > thresh 处得到 1,否则为 0(然后乘以 Vin)。 -Vin

会发生相反的情况

这是叠加时的输出结果(尽管我在 python 中这样做,但语法相同)。此处阈值设置为 2

你可以这样做:

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

绘制两者:

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

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

Signum function is used quite heavily in signal processing, especially in communication systems with the Hilbert Transform。 signum 函数是一个符号指示器。如果函数的输入为正,则输出为 1,如果输入为负,则输出为 -1,如果输入为 0,则输出为 0。这很好地模拟了没有反馈的运算放大器。但是,您希望它在达到阈值时改变符号。因此,您可以对用此阈值减去的信号应用 sign。鉴于您的 input/output 缩放了 Vin,您需要将 sign 的输出缩放 Vin 并且输出在 -/+ 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。接下来,我们生成一个正弦信号,然后生成使用阈值的饱和波。我们绘制了正弦信号、饱和信号以及阈值标记,因此您可以看到它的工作原理

这是我得到的:

如您所见,一旦波超过阈值,饱和波就会改变极性。