从矢量输入绘制复数并将绘图更改为 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 了解更多详细信息。


实施两种方法:

因此,如果您在绘图时将 realvddz 向量一起使用,即 real(vddz),即

plot(vddx,real(vddz),'g-'); 

或者如果您关闭警告(或不关闭),您将得到(您已经得到的):

既然你认为上面的情节是不正确的。因此很明显,您可能希望使用其他一些标准来比较复数。将 absvddz 一起使用对您有用,正如您在 中确认的那样,即

plot(vddx,abs(vddz),'g-');

给出:

P.S与对数刻度无关