【问题标题】:Create a rectangular wave in MATLAB在 MATLAB 中创建矩形波
【发布时间】:2015-01-06 21:41:03
【问题描述】:

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

目前我写的代码是:

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

【问题讨论】:

    标签: matlab


    【解决方案1】:

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

    Signum function 大量用于信号处理,尤其是在带有Hilbert Transform 的通信系统中。 signum 函数是一个符号指示符。如果函数的输入为正,则输出为 1,如果输入为负,则输出为 -1,如果输入为 0,则输出为 0。这很好地模拟了没有反馈的运算放大器。但是,您希望在达到阈值时更改符号。因此,您将在减去此阈值的信号上应用sign。鉴于您的输入/输出按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。接下来,我们生成一个正弦信号,然后生成具有使用阈值的饱和波。我们绘制了正弦信号、饱和信号以及阈值标记,以便您可以看到它的工作情况

    这是我得到的:

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

    【讨论】:

      【解决方案2】:

      您可以执行以下操作

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

      当您执行y1 &gt;= thresh 时,您将得到 1,其中 y1 > thresh,否则为 0(然后您将其乘以 Vin)。 -Vin 则相反

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

      【讨论】:

        【解决方案3】:

        你可以这样做:

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

        绘制两者:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-05
          • 1970-01-01
          • 1970-01-01
          • 2016-03-08
          • 2010-12-17
          • 1970-01-01
          相关资源
          最近更新 更多