我试图找到一种方法来很好地绘制我的数字信号测量数据。
因此,我将数据作为csv和mat文件提供,从Agilent示波器导出。我之所以不只是拍摄示波器屏幕的屏幕截图,是因为我需要更加灵活(用一组数据制作几个图,只显示一些线条)。此外,我需要能够在一两个月内更改绘图,因此我唯一的选择是使用计算机从数据创建绘图。
我想要实现的目标与此相似: 该图片中唯一缺少的是带有0和1行的yaxis。
我的第一次尝试是用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完成信号是正确的。现在我只需要重复它们而不是y轴上的其他数字(对不起,有点难以解释:-)
答案 0 :(得分:1)
要查看y轴,您可以转动网格(' on')选项。但是,除非你在matlab图中调整它的大小,否则你不能改变传说的出现方式。如果您真的想要,可以使用insert - > Textbox选项在每个信号图下面插入单独的文本框,然后将文本框的属性(linestyle)更改为none,以获得与上面完全相同的图。
答案 1 :(得分:1)
正如我对该问题的评论所写。为了将名称附加到每个信号,我建议您搜索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轴(grid on
)时,您将获得每个整数的值(显然,如果您希望2个信号之间的距离更小,则可以将其更改为其他值)。然后你可以使用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,...
构成的数组。
答案 2 :(得分:0)
这是最终结果和我的所有代码,万一其他人想要使用好的旧ctrl-v; - )
代码:
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)*2, 'color', cm(i-1,:));
text(MD.D(2,1), (i-2)*2+.5, MD.N(i-1));
end
hold off;
%legend(MD.N, 'Location', 'EastOutside');
xlabel('Zeit [ns]'); % x axis label
title('Messwerte'); % title
% make y axis and grid the way I want it
set(gca, 'ytick', 0:size(MD.D,2)*2-3);
grid off;
set(gca,'ygrid','on');
set(gca, 'YTickLabel', {'0'; '1'});
ylim([-1,(size(MD.D,2)-1)*2]);