【问题标题】:Matlab plot of several digital signals几个数字信号的Matlab图
【发布时间】:2014-06-23 17:12:26
【问题描述】:

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

所以我的数据以 csv 和 mat 文件的形式提供,从安捷伦示波器导出。我不只是截取示波器屏幕的屏幕截图的原因是我需要更加灵活(用一组数据制作多个图,只显示一些线)。此外,我需要能够在一两个月内更改绘图,所以我唯一的选择是使用计算机从数据中创建绘图。

我想要实现的是类似于这张图片的东西: 那张照片上唯一缺少的是一个 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 done 信号是正确的。现在我只需要重复它们而不是 y 轴上的其他数字(抱歉,有点难以解释 :-)

【问题讨论】:

  • 嘿,我不明白 y 轴上的 0,1 刻度是什么意思。我看到的是,不同线条内的“跳跃”与给定图表不在同一位置。对于标签检查documentation about adding text to graph
  • 您好,感谢您的评论。使用 0, 1 刻度我的意思是当信号的“高电平”在 y 轴上有 1 并且“低电平”在 y 轴上有 0 时。所以y轴上会有几个0和1。以最底部的信号为例。你无法真正知道它有什么价值。这就是为什么在 y 轴上应该说 0 和稍高一点的 1。
  • 这很容易实现。如果您想打开 y 轴(打开网格)并为自己定义一个新的 y 轴。这是通过使用“axes”和set() 函数来完成的。我会发布一个解决方案。给我一点时间。
  • 如果你有 DSP 系统工具箱,你可以尝试使用 dsp.LogicAnalyzer 范围。

标签: matlab graph plot


【解决方案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(检查最后一部分,因为文档很长)和set()函数重新标记y轴:

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,... 构成的数组。

【讨论】:

  • 谢谢! 'YTickLabel' 设置是我需要的。结合文本命令,我得到了我想要的绘图/图表 :-) 再次感谢!
【解决方案2】:

要查看 y 轴,您可以打开 grid('on') 选项。但是,除非您在 matlab 图中调整图例的大小,否则您无法更改图例的显示方式。如果您真的想要,您可以使用 insert ->Textbox 选项在每个信号图下方插入单独的文本框,然后将文本框的属性(线型)更改为 none 以获得与上面完全相同的图。

【讨论】:

  • 网格是个好主意,我忘了!文本框是一个选项,但我希望有更自动化的东西。
【解决方案3】:

这是最终结果和我所有的代码,以防其他人想使用旧的 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]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 2015-07-28
    • 2011-10-26
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    相关资源
    最近更新 更多