【问题标题】:Octave/MATLAB plotting digital signalsOctave/MATLAB 绘制数字信号
【发布时间】:2015-11-30 10:51:12
【问题描述】:

给定这样的数据:

>> x = [0,3.0001,7,9];
>> y = [0 1 0 1];
>> plot(x, y);

我需要图表看起来像一个数字信号,而不是像线性插值(见灰线和蓝线)。

为什么? (你真的不需要读这个):

我正在绘制传感器给出的事件,所以我必须绘制传感器的当前状态与时间的关系。事件不会以给定的频率刷新。我只是有传感器状态发生变化的时候。我的数据集是这样的:

传感器 1 开启时间 0

传感器 2 开启时间 0.05

传感器 1 关闭时间 1.15

传感器 2 关闭时间 1.55

...

我不知道 MATLAB 或 Octave 是否适合绘制此类信号。

【问题讨论】:

    标签: matlab plot octave


    【解决方案1】:

    使用楼梯

    figure;
    stairs(x,y);
    

    或者

    x = [0,3,7,9];
    y = [0 1 0 1]; % Input
    

    在绘图前添加此代码:

    x1(1) = x(1);
    j = 2;
    for i=2:numel(x)
        x1(j) = x(i);
        j =j+1;
        x1(j) = x(i);
        j=j+1;
    end
    x1
    
    j = 1;
    for i=1:numel(y)-1
      y1(j) = y(i);
      j =j+1;
      y1(j) = y(i);
      j=j+1;
    end
    y1(j) = y(end);
    y1
    

    结果:

    x1 = [0, 3, 3, 7, 7, 9, 9]
    y1 = [0, 0, 1, 1, 0, 0, 1]
    
    plot(x1, y1);
    

    【讨论】:

    • x=[0,3.0001,7,9]; y=[0 1 0 1];图;楼梯(x,y)
    • stairs 是 matlab 绘图。你可以直接使用它。不需要任何额外的代码。
    • stairs 是一个很好的解决方案。您可以将其编辑到您上面的帖子中。
    • 为什么在这个 MATLAB 程序中使用显式循环?难道没有办法用向量和/或矩阵来表达吗?
    【解决方案2】:

    我不知道MATLAB中是否有这种情节。但是你可以把这个情节从段中联系起来。

    x=[0,3.0001,7,9];
    y=[0 1 0 1];
    ax = axes;
    for iSegment = 1:numel(x)-1
        jump = y(iSegment)+1 - y(iSegment);
        line([x(iSegment) x(iSegment+1)], [y(iSegment), y(iSegment)]);
        if jump < 0
            line([x(iSegment) x(iSegment)], [y(iSegment), y(iSegment+1)]);
        elseif jump > 0
            line([x(iSegment+1) x(iSegment+1)], [y(iSegment), y(iSegment+1)]);
        end
    end
    

    【讨论】:

      【解决方案3】:

      基本上,您的采样频率太低,无法显示信号中的急剧电平变化。您可以通过定义具有更高采样频率的x 值向量来缓解此问题,并根据您的传感器开/关时间进行适当的修改。示例:

      Ns = 1000; % number of points to use
      x = linspace(0, 12, Ns);
      y = zeros(1,Ns); %// initialize to all zeros
      y( x >= 3 & x <= 7 ) = 1; %// signal high when x in range [3,7]
      y( x > 9 ) = 1; %// signal high when x greater than 9
      
      figure;
      plot(x, y);
      

      【讨论】:

        猜你喜欢
        • 2015-06-12
        • 2022-01-25
        • 2012-03-07
        • 1970-01-01
        • 2012-11-24
        • 2015-02-17
        • 2021-04-11
        • 2020-07-16
        • 2013-05-20
        相关资源
        最近更新 更多