几个数字信号的Matlab图

时间:2014-06-23 07:49:15

标签: matlab graph plot

我试图找到一种方法来很好地绘制我的数字信号测量数据。

因此,我将数据作为csv和mat文件提供,从Agilent示波器导出。我之所以不只是拍摄示波器屏幕的屏幕截图,是因为我需要更加灵活(用一组数据制作几个图,只显示一些线条)。此外,我需要能够在一两个月内更改绘图,因此我唯一的选择是使用计算机从数据创建绘图。

我想要实现的目标与此相似: Goal 该图片中唯一缺少的是带有0和1行的yaxis。

我的第一次尝试是用Matlab制作类似的情节。这是我得到的: What I have so far

确实缺少的是信号名称紧邻实际行,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轴上的其他数字(对不起,有点难以解释:-) Almost what I want

3 个答案:

答案 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是您要追加的名称。

关于如何获得包含每个信号的01值的y数据的第二个问题。我会通过创建信号来实现,您的第一个信号的值为01。下一个信号的高度为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_entry2*No_Signals-1new_y_label是由0,1,0,1,0,...构成的数组。

答案 2 :(得分:0)

这是最终结果和我的所有代码,万一其他人想要使用好的旧ctrl-v; - )

Result

代码:

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