Matlab繪圖——基於CST導出數據(CST圖片Matlab實現)


為什么要導出數據到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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM