为什么要导出数据到Matlab来画,不多此一举么?
显而易见,CST自带的结果查看和后处理局限性太大——直角坐标系字体难调节,图片线条、线型少,图片标注比例难控制等等。
直接copy的图片用在毕业论文或者小论文里面就显得那么没档次,很难看,也很不符合要求。
自然地,就有了利用Matlab来获取更好看更符合要求的CST结果图片的想法。
Matlab广为科研狗熟知,大家基本都有一定的Matlab基础;Matlab数据处理功能强大;科学绘图的简便易用更是首屈一指。
本着懒人的终极目标:为了留出能够偷懒的时间,把手头和将来的工作用最短的时间解决!
为避免将来写大小论文时因为图片编辑耗费大量工时,我在此把数据导出和图片编辑的m文件提前整理好,并分享给大家。
本懒人拥有的Matlab基础相当薄弱,期望与大家相互交流学习!
基于CST导出数据的Matlab绘图的基本流程
CST仿真得到结果→Post-Processing导出结果数据(包括1D Results、2D/3DResults、Farfields等)为txt—
→Matlab导入数据到矩阵→根据矩阵内的数据绘图
CST 1D Results→Matlab绘图
CST原图 Matlab绘图
%% 数据导入 %CST导出数据分布 %列 1 2 3 4 5 %"Frequency / GHz" "S1,1 (21) [Mag]" "S1,1 (21) [Pha in deg.]" "Ref.Imp. [Mag]" "Ref.Imp. [Pha in deg.]" clc;clear; S11=import_spar_mp(\'F:\OneDrive\cnblog\S11.txt\',[4,1004]); %Matlab主页→导入数据 可以很方便地生成数据输入脚本或函数 S21=import_spar_mp(\'F:\OneDrive\cnblog\S21.txt\',[4,1004]); %% 图片绘制 S11mag=20*log10(S11(:,2)); %CST导出时设置了Magnitude/Phase输出,此处取dB值绘图 S21mag=20*log10(S21(:,2)); axisx=4:2/1000:6; %定义横坐标范围 plot(axisx,S11mag,\'r-\',\'LineWidth\',1); hold on plot(axisx,S21mag,\'g-\',\'LineWidth\',1); %两条曲线画在一张图中 hold off %% 图片信息标注 xlabel(\'Frequency/GHz\',\'Fontsize\',10.5,\'FontName\',\'Times New Roman\'); %坐标轴信息 ylabel(\'Sparameter/dB\',\'Fontsize\',10.5,\'FontName\',\'Times New Roman\'); set(gca,\'FontName\',\'Times New Roman\',\'Fontsize\',10.5,\'XLim\',[4 6],\'XTick\',[4 4.5 5 5.5 6],\'YLim\',[-40 0],\'YTick\',[-40 -30 -20 -10 0]); %对坐标轴的其他一些设置 % title(\'S参数\'); legend(\'S11\',\'S21\',\'Fontsize\',10.5,\'FontName\',\'Times New Roman\'); %图例
CST Farfields 1D Polar→Matlab绘图
CST原图 Matlab绘图
%平面直角坐标or极坐标方向图 %CST导出数据分布 % 1 2 3 4 5 6 7 8 %Theta [deg.] Phi [deg.] Abs(Gain)[dBi] Abs(Theta)[dBi] Phase(Theta)[deg.] Abs(Phi)[dBi] Phase(Phi)[deg.] Ax.Ratio[dB] clc;clear; %% 数据导入 Farfield=import_field(\'F:\OneDrive\cnblog\Gain.txt\'); Farfield(length(Farfield)+1,:)=Farfield(1,:); %补齐最后一行,首位相连,不然极坐标下会有一个空 Farfield(length(Farfield),1)=180; Gain=Farfield(:,3); axist=deg2rad(-180:180); %设置坐标轴范围 角度转为弧度 figure %启用一张新画布 polarplot(axist,Gain); %% 极坐标图区域设置 axp=gca; %将坐标区域属性赋给axp,和直接用set(gca,...)相同 axp.ThetaZeroLocation=\'top\'; %调整theta=0轴的位置,使其朝上,和CST中相同 axp.ThetaLim=[-180 180]; axp.ThetaTick=[-180 -135 -90 -45 0 45 90 135 180]; axp.FontName=\'Times New Roman\'; axp.FontSize=10.5; axp.RAxisLocation=-90; %r轴标注信息的位置,设为横向 axp.RLim=[-30 10]; axp.RTick=[-30 -20 -10 0]; %% 直角坐标系绘制 figure axist=rad2deg(axist); %弧度转回角度 plot(axist,Gain); %平面直角坐标系各种属性设置同上 axc=gca;
CST Farfields 3D Plot→Matlab绘图
CST原图
Matlab绘图
%三维远场方向图 %CST导出数据分布 % 1 2 3 4 5 6 7 8 %Theta [deg.] Phi[deg.] Abs(Dir.)[dBi] Abs(Left)[dBi] Phase(Left)[deg.] Abs(Right)[dBi] Phase(Right)[deg.] Ax.Ratio[dB] clc;clear; %% 数据导入 Farfield=import_field(\'F:\OneDrive\cnblogs\Farfield.txt\'); theta=reshape(Farfield(:,1),[360,181]); %坐标位置信息重排 phi=reshape(Farfield(:,2),[360,181]); Gain=reshape(Farfield(:,3),[360,181]); %结果信息重排 Gain=Gain+34; %增益值有大量负值,直接画图形对不上 x=Gain.*sind(theta).*cosd(phi); %按坐标系转换,注意Matlab有球坐标直角坐标系转换函数sph2cart,但是其角度对应关系和习惯有所出入 y=Gain.*sind(theta).*sind(phi); %sind 角度为单位的三角函数 z=Gain.*cosd(theta); figure surf(x,y,z); shading flat; %设置颜色着色属性,和CST绘图更加接近 axis equal; %设置坐标轴综合比相当 colormap(\'jet\'); %选择颜色图 jet深红至深蓝最合适 colorbar; %显示颜色标尺
参考链接
https://bbs.rfeda.cn/read.php?tid=107972
https://blog.csdn.net/weixin_42613572/article/details/113581043
请发表评论