在MATLAB中从ADS数据绘制眼图

时间:2018-08-17 14:20:35

标签: matlab plot graph curve

我有一个data fileSample_Eye_1.txt),它是从ADS是德科技的模拟图获得的。它具有3个字段-"Index", "Time" and "Voltage"。现在眼图将为voltage vs time。同一时间只能以不同的指标存在不同的电压。因此,索引可以看作是数据过滤器字段或类似的字段。 ADS仿真中的图如下所示

enter image description here

您可以看到绘制的线图就像叠加在不同的线上一样。

现在,当我在MATLAB voltage vs time中绘制数据时,它不会以某种方式叠加。这是我的matlab代码生成的图,它只是简单的xy图。

enter image description here

我的MATLAB代码:

% open data file
fid = fopen('Sample_Eye_1.txt');

% Read data in from csv file
readData = textscan(fid,'%f %f %f','Headerlines',1,'Delimiter',',');

% Extract data from readData
index_Data = readData{1,1}(:,1);
xData = readData{1,2}(:,1);
yData = readData{1,3}(:,1);

% Plot Data
f1 = figure(1);
cla; hold on; grid on;
%set(gca, 'XTick',[0 5 10 15 20 25 30]);
%set(gca,'XTick',0:0.1e-8:1e-8)
%set(gca,'XTickLabel',0:1:10)
plot(xData,yData,'r-');

title('Eye Diagram')
xlabel('Time(ns)')
ylabel('Density(V)')

有人可以帮助我生成类似ADS仿真图的图吗?

注意:数据很大(大约2.7 Mb)。如果我截断数据,则无法完全理解该问题。

1 个答案:

答案 0 :(得分:0)

您的代码很好,问题出在您绘制数据的方式上。

plot(xData,yData,'r-');

将所有点与一个线段相连,这意味着眼图的“孔”在线交叉时会“闭合”。

只需将“线条”更改为“点”,即可获得预期的绘图

plot(xData,yData,'r.')

如果您想让绘图与参考绘图更“相似”,则可以标识具有相同索引的输入点,并在循环中对它们进行绘图(同样,用“点”标记),在该循环中,每次迭代都可以可以改变点的轮廓。

在下面,您可以找到代码的更新版本,其中使用循环绘制数据。

编辑以回答评论

通常,可以通过设置颜色的“名称”或其RGB三元组(ref. to the "plot" function documentation for the details)来设置color属性来指定标记的颜色。

在您的情况下,“唯一”索引为16,而可用的颜色“名称”仅为8,因此您必须通过显式定义RGB三元组(这可能很无聊)来定义16种颜色。

请注意,您的大部分数据对应于前三个索引,因此,您可以定义三种颜色,让另一种是随机的。

在代码的更新版本中,我使用了这种方法,如下定义矩阵dot_color

dot_color=[0 0 .5
           .5 .9 .9
           0.9 .5 0
           rand(length(uni_idx-3),3)]

这意味着,我选择了前三种颜色,而其他颜色使用了随机数。

当然,您可以“手动定义其他颜色(矩阵中每个条目的值应在0到1之间)。

fid = fopen('Sample_Eye_1.txt');
% Read data in from csv file
readData = textscan(fid,'%f %f %f','Headerlines',1,'Delimiter',',');
fclose(fid)

% Extract data from readData
index_Data = readData{1,1}(:,1);
% Identify the unique indices
uni_idx=unique(index_Data);

xData = readData{1,2}(:,1);
yData = readData{1,3}(:,1);


% Plot Data
f1 = figure(1);
cla; hold on; grid on;
%set(gca, 'XTick',[0 5 10 15 20 25 30]);
%set(gca,'XTick',0:0.1e-8:1e-8)
%set(gca,'XTickLabel',0:1:10)
% plot(xData,yData,'r-');
% Loop over the indices to plot the corresponding data

% Define the color of the dots
dot_color=[0 0 .5
           .5 .9 .9
           0.9 .5 0
           rand(length(uni_idx-3),3)]
for i=1:length(uni_idx)
   idx=find(index_Data == uni_idx(i));
%    plot(readData{1,2}(idx,1),readData{1,3}(idx,1),'.')
   plot(readData{1,2}(idx,1),readData{1,3}(idx,1),'.','color',dot_color(i,:))
end


title('Eye Diagram')
xlabel('Time(ns)')
ylabel('Density(V)')

enter image description here