我有一个data file(Sample_Eye_1.txt
),它是从ADS是德科技的模拟图获得的。它具有3个字段-"Index", "Time" and "Voltage"
。现在眼图将为voltage vs time
。同一时间只能以不同的指标存在不同的电压。因此,索引可以看作是数据过滤器字段或类似的字段。 ADS仿真中的图如下所示
您可以看到绘制的线图就像叠加在不同的线上一样。
现在,当我在MATLAB voltage vs time
中绘制数据时,它不会以某种方式叠加。这是我的matlab代码生成的图,它只是简单的xy图。
我的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)。如果我截断数据,则无法完全理解该问题。
答案 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)')