我正在尝试找到一种方法来很好地绘制数字信号的测量数据。
所以我有从安捷伦示波器导出的 csv 和 mat 文件形式的数据。我不只是拍摄示波器屏幕的屏幕截图的原因是我需要更加灵活(用一组数据绘制几张图,只显示一些线条)。此外,我需要能够在一两个月内更改绘图,因此我唯一的选择是使用计算机根据数据创建绘图。
我想要实现的目标类似于这张图片: 该图片中唯一缺少的是带有 0 和 1 行的 y 轴。
我的第一次尝试是用 Matlab 制作类似的图。这是我得到的:
绝对缺少的是信号名称紧邻实际线路以及 y 轴上的 0 和 1 刻度。
我什至不确定 Matlab 是否是正确的工具,我希望你们能给我一些关于如何制作绘图的提示/解决方案:-)
这是我的 Matlab 代码:
clear;
close all;
clc;
MD.RAW = load('Daten/UVLOT1 debounced 0.mat'); % get MeasurementData
MD.N(1) = {'INIT\_DONE'};
MD.N(2) = {'CONF\_DONE'};
MD.N(3) = {'NSDN'};
MD.N(4) = {'NRST'};
MD.N(5) = {'1V2GD'};
MD.N(6) = {'2V5GD'};
MD.N(7) = {'3V3GD'};
MD.N(8) = {'5VGD'};
MD.N(9) = {'NERR'};
MD.N(10) = {'PGD'};
MD.N(11) = {'FGD'};
MD.N(12) = {'IGAGD'};
MD.N(13) = {'GT1'};
MD.N(14) = {'NERRA'};
MD.N(15) = {'GT1D'};
MD.N(16) = {'GB1D'};
% concat vectors into one matrix
MD.D = [MD.RAW.Trace_D0, MD.RAW.Trace_D1(:,2), MD.RAW.Trace_D2(:,2), MD.RAW.Trace_D3(:,2), ...
MD.RAW.Trace_D4(:,2), MD.RAW.Trace_D5(:,2), MD.RAW.Trace_D6(:,2), MD.RAW.Trace_D7(:,2), ...
MD.RAW.Trace_D8(:,2), MD.RAW.Trace_D9(:,2), MD.RAW.Trace_D10(:,2), MD.RAW.Trace_D11(:,2), ...
MD.RAW.Trace_D12(:,2), MD.RAW.Trace_D13(:,2), MD.RAW.Trace_D14(:,2), MD.RAW.Trace_D15(:,2)];
cm = hsv(size(MD.D,2)); % make colormap for plot
figure;
hold on;
% change timebase to ns
MD.D(:,1) = MD.D(:,1) * 1e9;
% plot lines
for i=2:1:size(MD.D,2)
plot(MD.D(:,1), MD.D(:,i)+(i-2)*1.5, 'color', cm(i-1,:));
end
hold off;
legend(MD.N, 'Location', 'EastOutside');
xlabel('Zeit [ns]'); % x axis label
title('Messwerte'); % title
set(gca, 'ytick', []); % hide y axis
谢谢各位的帮助! 丹
编辑: 这是我基本上想要的图片。我通过文本添加了信号名称,现在唯一缺少的是 0、1 刻度。它们对于 init done 信号来说是正确的。现在我只需要重复它们而不是 y 轴上的其他数字(抱歉,有点难以解释:-)
最佳答案
正如我对这个问题的评论中所写的那样。为了将名称附加到每个信号,我建议搜索 documentation of how to append text to graph 。在那里你可以找到许多不同的方法来做到这一点。您可以更改位置(上方、下方)和数据的确切点。作为示例,您可以使用:
text(x_data, y_data, Var_Name,'VerticalAlignment','top');
此处 (x_data, y_data)
是您要附加文本的数据点,Var_Name
是您要附加的名称。
关于如何获取每个信号包含 0
和 1
值的 y 数据的第二个问题。我会通过创建信号的方式来做到这一点,即第一个信号的值为 0
和 1
。下一个信号的绘制高度约为 2
。因此它从 2
更改为 3
等等。这样,当您打开 y 轴(网格打开
)时,您将获得每个整数的值(显然,如果您希望两个信号之间的距离更短,您可以将其更改为其他值)。然后您可以使用 documentation of axes 重新标记 y 轴(检查最后一部分,因为文档很长)和 set()
函数:
set(gca, 'YTick',0:1:last_entry, 'YTickLabel',new_y_label(0:1:last_entry))
这里last_entry
是2*No_Signals-1
,new_y_label
是一个由0,1,0构成的数组, 1,0,...
。
关于几个数字信号的 Matlab 绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24360865/