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