使用matlab对2020版CST导出的txt画图文件处理使之适用于origin画图

所要解决的问题描述

cst仿真完成后,在originlab中导入从cst导出的画图txt文件,会导致不同的曲线被识别为同一条曲线。
使用matlab对2020版CST导出的txt画图文件处理使之适用于origin画图_第1张图片
使用matlab对2020版CST导出的txt画图文件处理使之适用于origin画图_第2张图片

显然这样的图表与我们的报告论文中的绘图要求不符,而分别导出每一条曲线的操作导出又过于繁琐。简化这一过程最直接的方法是通过联合仿真解决(我一就是这样做的),直接使用python的matplotlib进行绘图。联合仿真方法cst的帮助文档中有详尽描述。
但是由于word中插入originlab对象具有可编辑的功能,所以你的导师可能会要求你使用originlab。这就需要对cst导出的画图文件进行处理。
我们使用matlab对cst导出的txt文件进行处理。
下面展示用于处理的 matlab代码。PS. 我用的matlab版本为2021a。

filename = 'FSR.txt'; %CST导出的绘图文件的文件名
atext = readlines(filename); %读入文件
sa = atext;
index = find(atext==''); % 使用空白行分隔曲线,首先获取空白行的索引
atext(index(length(index)))=[]; % 去除最后一行空白行
ctext = [];
length1 = index(2)-index(1)+3;
for i = length(index)-1:-1:2
    disp(i);
    temp = [];
    if (index(i)-index(i-1)) ~= length1
        counter = index(i)-index(i-1);
        for j = 1:abs(length1-(index(i)-index(i-1)))
            temp = [temp;atext(index(i)-1)];
            disp(temp)
        end
    end
    ctext = [ctext,[atext(index(i-1):index(i)-1);temp]];
end   %提取从第二条曲线开始的曲线并按列排列。
temp = [];
for i = 1:3
    temp = [temp;atext(index(1)-1)]; 
end
ctext = [ctext,['';atext(1:index(1)-1);temp]];%加入第一条曲线
ctext(1,:) = [];
ctext(2,:) = [];
h = size(ctext);
ctext(h(1),:) = [];
btext = regexp(ctext, '\s{3,}', 'split');
mc = vertcat(btext{:});
mc2 = reshape(mc,length1-3,[]);
mc3 = mc2(:,h(2)*2:h(2)*3);
mc3 = [mc3(:,1) , mc3(:,end:-1:2)];%由于reshape的时候进行了倒序,因而这里也倒序恢复它本来的顺序
writematrix(mc3,'plot.xls');%写入excel表格

进行处理后将程序生成的xls文件导入originlab中进行画图。结果如下所示
使用matlab对2020版CST导出的txt画图文件处理使之适用于origin画图_第3张图片

你可能感兴趣的:(matlab,电磁学)