经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » MATLAB » 查看文章
Matlab绘图——基于CST导出数据(CST图片Matlab实现)
来源:cnblogs  作者:minigxf  时间:2021/4/6 9:35:33  对本文有异议

为什么要导出数据到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绘图          

 

  1. %% 数据导入
  2. %CST导出数据分布
  3. %列 1   2    3    4    5
  4. %"Frequency / GHz" "S1,1 (21) [Mag]" "S1,1 (21) [Pha in deg.]" "Ref.Imp. [Mag]" "Ref.Imp. [Pha in deg.]"
  5. clc;clear;
  6. S11=import_spar_mp('F:\OneDrive\cnblog\S11.txt',[4,1004]); %Matlab主页→导入数据 可以很方便地生成数据输入脚本或函数
  7. S21=import_spar_mp('F:\OneDrive\cnblog\S21.txt',[4,1004]);
  8. %% 图片绘制
  9. S11mag=20*log10(S11(:,2)); %CST导出时设置了Magnitude/Phase输出,此处取dB值绘图
  10. S21mag=20*log10(S21(:,2));
  11. axisx=4:2/1000:6; %定义横坐标范围
  12. plot(axisx,S11mag,'r-','LineWidth',1);
  13. hold on
  14. plot(axisx,S21mag,'g-','LineWidth',1); %两条曲线画在一张图中
  15. hold off
  16. %% 图片信息标注
  17. xlabel('Frequency/GHz','Fontsize',10.5,'FontName','Times New Roman'); %坐标轴信息
  18. ylabel('Sparameter/dB','Fontsize',10.5,'FontName','Times New Roman');
  19. 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]); %对坐标轴的其他一些设置
  20. % title('S参数');
  21. legend('S11','S21','Fontsize',10.5,'FontName','Times New Roman'); %图例

CST Farfields 1D Polar→Matlab绘图

          CST原图                                 Matlab绘图

 

  1. %平面直角坐标or极坐标方向图
  2. %CST导出数据分布
  3. % 1 2 3 4 5 6 7 8
  4. %Theta [deg.] Phi [deg.] Abs(Gain)[dBi] Abs(Theta)[dBi] Phase(Theta)[deg.] Abs(Phi)[dBi] Phase(Phi)[deg.] Ax.Ratio[dB]
  5. clc;clear;
  6. %% 数据导入
  7. Farfield=import_field('F:\OneDrive\cnblog\Gain.txt');
  8. Farfield(length(Farfield)+1,:)=Farfield(1,:); %补齐最后一行,首位相连,不然极坐标下会有一个空
  9. Farfield(length(Farfield),1)=180;
  10. Gain=Farfield(:,3);
  11. axist=deg2rad(-180:180); %设置坐标轴范围 角度转为弧度
  12. figure %启用一张新画布
  13. polarplot(axist,Gain);
  14. %% 极坐标图区域设置
  15. axp=gca; %将坐标区域属性赋给axp,和直接用set(gca,...)相同
  16. axp.ThetaZeroLocation='top'; %调整theta=0轴的位置,使其朝上,和CST中相同
  17. axp.ThetaLim=[-180 180];
  18. axp.ThetaTick=[-180 -135 -90 -45 0 45 90 135 180];
  19. axp.FontName='Times New Roman';
  20. axp.FontSize=10.5;
  21. axp.RAxisLocation=-90; %r轴标注信息的位置,设为横向
  22. axp.RLim=[-30 10];
  23. axp.RTick=[-30 -20 -10 0];
  24. %% 直角坐标系绘制
  25. figure
  26. axist=rad2deg(axist); %弧度转回角度
  27. plot(axist,Gain); %平面直角坐标系各种属性设置同上
  28. axc=gca;

 

CST Farfields 3D Plot→Matlab绘图

                CST原图

               Matlab绘图

  

  1. %三维远场方向图
  2. %CST导出数据分布
  3. % 1 2 3 4 5 6 7 8
  4. %Theta [deg.] Phi[deg.] Abs(Dir.)[dBi] Abs(Left)[dBi] Phase(Left)[deg.] Abs(Right)[dBi] Phase(Right)[deg.] Ax.Ratio[dB]
  5. clc;clear;
  6. %% 数据导入
  7. Farfield=import_field('F:\OneDrive\cnblogs\Farfield.txt');
  8. theta=reshape(Farfield(:,1),[360,181]); %坐标位置信息重排
  9. phi=reshape(Farfield(:,2),[360,181]);
  10. Gain=reshape(Farfield(:,3),[360,181]); %结果信息重排
  11. Gain=Gain+34; %增益值有大量负值,直接画图形对不上
  12. x=Gain.*sind(theta).*cosd(phi); %按坐标系转换,注意Matlab有球坐标直角坐标系转换函数sph2cart,但是其角度对应关系和习惯有所出入
  13. y=Gain.*sind(theta).*sind(phi); %sind 角度为单位的三角函数
  14. z=Gain.*cosd(theta);
  15. figure
  16. surf(x,y,z);
  17. shading flat; %设置颜色着色属性,和CST绘图更加接近
  18. axis equal; %设置坐标轴综合比相当
  19. colormap('jet'); %选择颜色图 jet深红至深蓝最合适
  20. colorbar; %显示颜色标尺

参考链接

https://bbs.rfeda.cn/read.php?tid=107972

https://blog.csdn.net/weixin_42613572/article/details/113581043

 

原文链接:http://www.cnblogs.com/ProximaB/p/CST_Matlab_plot1.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号