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