我有一个正弦波,在同一个图上,有一个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中所知道的所有内容来制作该情节,但我还是没有设法创建它。有谁知道怎么做?
答案 0 :(得分:2)
另一种方法是将Signum function到sign
与正弦函数结合使用。
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。接下来,我们生成正弦信号,然后生成具有使用阈值的饱和波。我们绘制正弦信号,饱和信号以及阈值标记,以便您可以看到它正常工作
这就是我得到的:
如您所见,一旦波超过阈值,饱和波就会改变极性。
答案 1 :(得分:1)
您可以执行以下操作
y2 = Vin*(y1 >= thresh) + -Vin*(y1 < thresh)
当你执行y1 >= thresh
时,你将获得1的y1&gt; thresh,否则为0(然后乘以Vin
)。 -Vin
这是输出看起来的内容(虽然我在python中做了这个,但语法是相同的)叠加时。阈值设置为2
答案 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);