Octave/MATLAB 绘制数字信号

Octave/MATLAB plotting digital signals

给出这样的数据:

>> 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 是否适合绘制此类信号。

使用楼梯:

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);

不知道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

本质上,您的采样频率太低,无法显示信号中的急剧电平变化。您可以通过定义具有更高采样频率的 x 值的向量并针对您的传感器适当地修改它 on/off 次来缓解该问题。示例:

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);