从矢量输入绘制复数并将绘图更改为 MATLAB 中的滞后尺度
Plotting complex numbers from vector input and change the plot to lagscale in MATLAB
我有一个包含 Target1、Target2 和 VDD.There 的数据的 csv 文件是每个数据的 x 值和 y 值。 X 值是定标值或实值,但 Y 是复值。对于 Target1 和 Target2,没有复数,因为它们是图上的直线。但是VDD的Y值是复数。在 csv 数据中,Y 有实部和复部两部分。 VDD 的那些 Y 值与复数(实部和虚部)部分的两列实值分开。
因此 Target1、Target2 和 VDD 的绘图将是二维的,所有 3 个参数的 x 轴点都相同。我尝试绘制,但 VDD 没有按应有的方式绘制,因为 VDD y 部分的 csv 文件中的值在图中不匹配,因为它应该是这样,并且有一条警告消息显示我无法解决。
后面我也把logscle中的数据进行了转换
有没有人可以帮助我?这是 CSV data。下面给出了我的 MATLAB 代码和警告。
MATLAB 代码:
% open data file
fid = fopen('parametric_Test-Copy.csv');
% Read data in from csv file
%readHeader = textscan(fid,'%s %s','Headerlines',0,'Delimiter',',');
readData = textscan(fid,'%f %f %f %f %f %f %f %f %f','Headerlines',1,'Delimiter',',');
% Extract data from readData
target1x = readData{1,1}(:,1);
target1y = readData{1,2}(:,1);
target2x = readData{1,4}(:,1);
target2y = readData{1,5}(:,1);
vddx = readData{1,7}(:,1);
vddy_Re = readData{1,8}(:,1);
vddy_Im = readData{1,9}(:,1);
vddz = complex(vddy_Re, vddy_Im);
% Plot Data
f1 = figure(1);
cla; hold on; grid on;
plot(target1x,target1y,'r-');
hold on;
plot(target2x,target2y,'b-');
hold on;
plot(vddx,vddz,'g-');
%set(gca,'yscale','log');
%set(gca,'xscale','log');
%xlim([0 3*10^9])
警告:
Warning: Imaginary parts of complex X and/or Y arguments ignored
In parametric_Test (line 26)
您需要为复数定义一个大于或小于另一个的标准。一种方法是忽略虚部(MATLAB 默认情况下这样做)。或者您可以使用 abs
获取 modulus/complex 星等。另一种方法是使用字典顺序。
阅读 this post from math.stackexchange.com 以获得更多见解。
如果您想使用第一种方法(即忽略虚部),请使用 real
以避免警告消息。在我看来,完全关闭警告消息不是一个好主意,但您可以使用:
warning('off','MATLAB:plot:IgnoreImaginaryXYPart');
您可以通过以下方式再次开启它:
warning('on','MATLAB:plot:IgnoreImaginaryXYPart');
从文档中阅读 Suppress Warnings 了解更多详细信息。
实施两种方法:
因此,如果您在绘图时将 real
与 vddz
向量一起使用,即 real(vddz)
,即
plot(vddx,real(vddz),'g-');
或者如果您关闭警告(或不关闭),您将得到(您已经得到的):
既然你认为上面的情节是不正确的。因此很明显,您可能希望使用其他一些标准来比较复数。将 abs
与 vddz
一起使用对您有用,正如您在 中确认的那样,即
plot(vddx,abs(vddz),'g-');
给出:
P.S与对数刻度无关
我有一个包含 Target1、Target2 和 VDD.There 的数据的 csv 文件是每个数据的 x 值和 y 值。 X 值是定标值或实值,但 Y 是复值。对于 Target1 和 Target2,没有复数,因为它们是图上的直线。但是VDD的Y值是复数。在 csv 数据中,Y 有实部和复部两部分。 VDD 的那些 Y 值与复数(实部和虚部)部分的两列实值分开。
因此 Target1、Target2 和 VDD 的绘图将是二维的,所有 3 个参数的 x 轴点都相同。我尝试绘制,但 VDD 没有按应有的方式绘制,因为 VDD y 部分的 csv 文件中的值在图中不匹配,因为它应该是这样,并且有一条警告消息显示我无法解决。
后面我也把logscle中的数据进行了转换
有没有人可以帮助我?这是 CSV data。下面给出了我的 MATLAB 代码和警告。
MATLAB 代码:
% open data file
fid = fopen('parametric_Test-Copy.csv');
% Read data in from csv file
%readHeader = textscan(fid,'%s %s','Headerlines',0,'Delimiter',',');
readData = textscan(fid,'%f %f %f %f %f %f %f %f %f','Headerlines',1,'Delimiter',',');
% Extract data from readData
target1x = readData{1,1}(:,1);
target1y = readData{1,2}(:,1);
target2x = readData{1,4}(:,1);
target2y = readData{1,5}(:,1);
vddx = readData{1,7}(:,1);
vddy_Re = readData{1,8}(:,1);
vddy_Im = readData{1,9}(:,1);
vddz = complex(vddy_Re, vddy_Im);
% Plot Data
f1 = figure(1);
cla; hold on; grid on;
plot(target1x,target1y,'r-');
hold on;
plot(target2x,target2y,'b-');
hold on;
plot(vddx,vddz,'g-');
%set(gca,'yscale','log');
%set(gca,'xscale','log');
%xlim([0 3*10^9])
警告:
Warning: Imaginary parts of complex X and/or Y arguments ignored In parametric_Test (line 26)
您需要为复数定义一个大于或小于另一个的标准。一种方法是忽略虚部(MATLAB 默认情况下这样做)。或者您可以使用 abs
获取 modulus/complex 星等。另一种方法是使用字典顺序。
阅读 this post from math.stackexchange.com 以获得更多见解。
如果您想使用第一种方法(即忽略虚部),请使用 real
以避免警告消息。在我看来,完全关闭警告消息不是一个好主意,但您可以使用:
warning('off','MATLAB:plot:IgnoreImaginaryXYPart');
您可以通过以下方式再次开启它:
warning('on','MATLAB:plot:IgnoreImaginaryXYPart');
从文档中阅读 Suppress Warnings 了解更多详细信息。
实施两种方法:
因此,如果您在绘图时将 real
与 vddz
向量一起使用,即 real(vddz)
,即
plot(vddx,real(vddz),'g-');
或者如果您关闭警告(或不关闭),您将得到(您已经得到的):
既然你认为上面的情节是不正确的。因此很明显,您可能希望使用其他一些标准来比较复数。将 abs
与 vddz
一起使用对您有用,正如您在
plot(vddx,abs(vddz),'g-');
给出:
P.S与对数刻度无关