為什么要匯出資料到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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/271863.html
標籤:其他
上一篇:大廠的面試官,是如何挑選自己心儀人才的?你需要知道一下!
下一篇:機器人性能測驗系統
