我有一个数据文件 (Sample_Eye_1.txt),它是从ADS的模拟图中得到的。它有三个字段- "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)')有人能帮我生成像广告模拟情节那样的情节吗?
注意:数据很大(约2.7MB)。如果我截断数据,问题就无法完全理解。
发布于 2018-08-17 15:51:50
您的代码很好,问题在于您绘制数据的方式。
plot(xData,yData,'r-');将所有点与线段连接起来,这意味着眼睛图的“洞”在线交叉时是“闭合的”。
只需将“行”更改为“点”,就可以获得预期的地块。
plot(xData,yData,'r.')如果您想要一个与参考点更“相似”的图,您可以用相同的索引来识别输入点--循环中的一个图(同样,用“点”),在这个循环中,您可以在每次迭代中更改点的colot。
在下面的代码中,您可以找到一个更新的代码节,其中使用循环来绘制数据。
编辑回复评论
通常,您可以通过设置color属性来指定标记的颜色,方法是指定颜色的“名称”或它的RGB (参考有关细节的“绘图”函数文档。)。
在您的例子中,“唯一”索引是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)')

https://stackoverflow.com/questions/51897413
复制相似问题