說在前面
陣列天線與載體的一體化仿真是一個十分普遍的工程問題,機(jī)載陣列天線、艦載陣列天線、彈載陣列天線以及汽車毫米波雷達(dá)天線在復(fù)雜環(huán)境下電磁仿真都屬于這一類問題。
這些問題不僅僅困擾著工程界,也同樣令學(xué)術(shù)界十分頭疼,多少研究工作者圍繞者這個話題前赴后繼的開展的研究。這類電磁計(jì)算問題的特點(diǎn)可以概括為三點(diǎn):1)電大尺寸;2)多尺度;3)強(qiáng)耦合。
每個問題但拎出來都還好好解決,組合起來的話,問題就變得不簡單。目前三大主流的仿真軟件(CST、FEKO、HFSS)在處理這類問題時,均各有優(yōu)勢,但缺點(diǎn)也同樣十分明顯,這取決于三種軟件底層算法的優(yōu)缺點(diǎn)。
基于“場”方程的CST和HFSS計(jì)算時,需要對包含目標(biāo)的整個空間進(jìn)行剖分,“空氣盒子”的引入可以極大減小求解區(qū)域,但是對于電大尺寸的載體,空氣盒子的尺寸也會異常龐大,這一問題對于基于“頻域”方法的HFSS,簡直是災(zāi)難,對于基于“時域”方法的CST,雖然影響會小一點(diǎn),但是由于采用“正交網(wǎng)格”進(jìn)行剖分,CST在處理含有復(fù)雜精細(xì)結(jié)構(gòu)的陣列天線時,計(jì)算精度又會有所欠缺。
基于“源”方程的FEKO,僅需要對目標(biāo)區(qū)域進(jìn)行剖分,網(wǎng)格數(shù)會大幅減少,這一優(yōu)點(diǎn)對于處理電大尺寸目標(biāo)十分有利,但是對于求解含有大量復(fù)雜精細(xì)結(jié)構(gòu)的陣列天線時,就會因?yàn)椤敖鼌^(qū)網(wǎng)格”數(shù)目較多,分區(qū)質(zhì)量差、耦合強(qiáng),散射矩陣形態(tài)惡化等原因,導(dǎo)致MLFMA加速效果急劇下降,迭代求解的收斂性惡化甚至不收斂的問題。
綜上所述,針對“陣列天線+載體”的仿真仿真問題,想要做到“一招鮮,吃遍天”多少有點(diǎn)“妄想”,最好的方法就是,具體問題具體分析,針對問題的特征選擇合適的軟件和算法。
從陣列天線陣元規(guī)模和載體電尺寸大小的角度來看,可以大致做以下劃分:
陣元數(shù)目少(如數(shù)目<100),載體電尺寸較小,可以使用HFSS進(jìn)行計(jì)算的,盡量使用HFS進(jìn)行計(jì)算,計(jì)算精度高,同時由于天線通常是基于HFSS平臺進(jìn)行設(shè)計(jì),直接加載體就可進(jìn)行計(jì)算,無需移植到其他平臺,操作方便;
陣元數(shù)目少,載體電尺寸較大,HFSS已經(jīng)無法進(jìn)行計(jì)算,可以利用FEKO或CST,使用全波方法進(jìn)行計(jì)算,計(jì)算精度高,計(jì)算速度和內(nèi)存消耗均可接受;
陣元數(shù)目少,載體電尺寸非常大(如電尺寸>100倍波長),HFSS和CST均算不動,建議采用FEKO的全波算法進(jìn)行計(jì)算;
陣元數(shù)目較多(如數(shù)目介于100~500),載體電尺寸較大,F(xiàn)EKO計(jì)算出現(xiàn)收斂性較差、內(nèi)存消耗異常大,建議使用CST的全波算法進(jìn)行計(jì)算,或利用FEKO單獨(dú)計(jì)算陣列天線,并提取近場與載體進(jìn)行一體化計(jì)算;
陣元數(shù)目特別多(如數(shù)目>500),載體電尺寸也非常大,利用FEKO的近似算法獲得陣列的遠(yuǎn)場,提取遠(yuǎn)場與載體一體化計(jì)算。
上述分類,只是提供了一個大致的方向,實(shí)際工程中,還需具體問題具體分析。
除了計(jì)算方法的選擇需要關(guān)注,對于該問題,還有一個比較棘手的問題需要解決,那就是陣列天線的建模問題。大規(guī)模陣元的陣列天線單元數(shù)目多、波束掃描時,每個饋電單元的相位也要相應(yīng)的改變,單純依靠手動建模,時間成本相當(dāng)高,且人為操作,錯誤很難避免。因此,依托仿真軟件進(jìn)行二次開發(fā),實(shí)現(xiàn)快速自動建模,十分必要。
綜上所述,圍繞“陣列+載體計(jì)算”的話題,按照建模和計(jì)算兩個方面做如下展開,本文重點(diǎn)針對基于FEKO平臺,進(jìn)行二次開發(fā),進(jìn)行任意形式相控陣列(單元形式、陣面形狀)的自動建模。
正文
圍繞著陣列天線的快速建模,往期文章多有提及:
1)一種是依托FEKO自帶的應(yīng)用擴(kuò)展功能,可以快速生成任意單元形式的陣列天線,不足就是相掃功能尚不具備;
2)往期二次開發(fā)的“相控陣列天線”自動建模模塊,可以實(shí)現(xiàn)相掃功能,主要不足在于單元形式、陣面形狀以及陣元饋電形式都比較單一。
自適應(yīng)微帶相控陣天線建模模塊
基于MATLAB-FEKO-API技術(shù)的復(fù)雜結(jié)構(gòu)+相控陣天線的快速建模
作者針對著幾點(diǎn)不足進(jìn)行了改進(jìn)優(yōu)化,源代碼點(diǎn)擊文末“閱讀原文”,自行下載。
針對任意形式天線單元的優(yōu)化
往期文章中天線單元的建模通過“代碼”實(shí)現(xiàn),這種建模方式對于結(jié)構(gòu)比較復(fù)雜的天線單元十分不友好,也不利于天線單元形式的擴(kuò)展。本文的建模邏輯有所調(diào)整,天線單元可以通過CADFEKO先進(jìn)行建模,然后再利用“代碼”通過批量復(fù)制操作實(shí)現(xiàn)陣列建模。
%%模型導(dǎo)入 %形參定義(文件路徑,單元路徑,模型名稱) function ImportCFXmodel(fid,element_path,model_name) fprintf(fid,'properties = {} '); fprintf(fid,'properties.ImportGeometryEnabled = true '); fprintf(fid,'properties.ImportMeshEnabled = false '); fprintf(fid,'properties.ImportMeshRulesEnabled = true '); fprintf(fid,'properties.ImportOptimisationSearchesEnabled = false '); fprintf(fid,'properties.ImportSolutionEntitiesEnabled = false '); fprintf(fid,'properties.MergeIdenticalMediaEnabled = false '); fprintf(fid,'properties.MergeIdenticalVariablesEnabled = false '); fprintf(fid,'properties.Prefix = "" '); fprintf(fid,'CFXImporter = project.Importer.CFXModel.Settings '); fprintf(fid,'CFXImporter:SetProperties(properties) '); fprintf(fid,['project.Importer.CFXModel:Import([[',element_path,model_name,'.cfx]]) ']); end
針對任意形狀陣面的優(yōu)化
往期文章介紹的方法要求陣面的形狀為圓形,而實(shí)際工程中,天線陣面的形式則更加多樣,橢圓形、菱形、方形等等,本文以網(wǎng)格的形式提取陣面外輪廓,結(jié)合陣列參數(shù),對陣元進(jìn)行布局,可以實(shí)現(xiàn)任意陣面外形的陣列天線的建模。
clc;clear all; %% 導(dǎo)入陣面輪廓曲線網(wǎng)格以及天線尺寸參數(shù) filepath='C:Usersem.liuDesktoplbmodel';%網(wǎng)格文件位置 filename='elips.nas';%網(wǎng)格文件名稱 R=400;%天線口徑,尺寸需大于陣面尺寸,覆蓋實(shí)際陣面 p=[100,80];%單元周期[x方向周期,y方向周期] %% 創(chuàng)建單元中心的點(diǎn)陣面和單元邊緣點(diǎn)陣面 r=(sqrt(p(1)^2+p(2)^2))/2;%單元半徑 MM=floor(R/p(1));%x方向單元數(shù)(單邊) NN=floor(R/p(2));%y方向單元數(shù)(單邊) mm=12*MM; nn=12*NN; len = length(mm)*length(nn); %[x0,y0]為陣元中心坐標(biāo),原點(diǎn)位于陣面集合中心 x0=(-MM+mm-0.5)*p(1); %[x0,y0]為陣元中心坐標(biāo),原點(diǎn)位于陣面幾何中心 y0=(NN-nn+0.5)*p(2); xq = repmat(x0,length(y0),1);%形成點(diǎn)的面分布 yq = repmat(y0.',1,length(x0)); th1=abs(asin(yq./sqrt(xq.^2+yq.^2))); %計(jì)算點(diǎn)-原點(diǎn)與x軸夾角(統(tǒng)一到第一象限) xqo=xq+r*(xq./abs(xq)).*cos(th1);%計(jì)算單元邊緣的坐標(biāo) yqo=yq+r*(yq./abs(yq)).*sin(th1); plot(xqo,yqo,'bo'); hold on; plot(xq,yq,'r+'); %% 讀取陣面輪廓曲線網(wǎng)格數(shù)據(jù) unit_Length=1e-3;%網(wǎng)格單位統(tǒng)一 fid=fopen([filepath,filename]); nNode=0; while ~feof(fid) txtline=fgetl(fid); if contains(txtline,'GRID*') nNode=nNode+1; end end fclose(fid); fid=fopen([filepath,filename]); vision= fgetl(fid); % 版本消息 null = fgetl(fid); % null = fgetl(fid); % 文件名 null = fgetl(fid); % 日期 null = fgetl(fid); % null = fgetl(fid); % 線段個數(shù) ntri = fgetl(fid); % 三角形個數(shù) ntri = str2double(ntri(isstrprop(ntri,'digit'))); ncube = fgetl(fid); ntetr = fgetl(fid); Nodes = zeros(nNode,3); Triangles = zeros(ntri,3); for ii=1:nNode s1=fgetl(fid); Nodes(str2double(s1(20:24)),1:2)=[str2double(s1(40:56)),str2double(s1(57:72))]; s2=fgetl(fid); Nodes(str2double(s1(20:24)),3)=str2double(s2(9:end)); end Nodes=Nodes.'*unit_Length; fclose(fid); %% 判斷點(diǎn)的位置 p=Nodes'; xv=1000.*p(:,1);%按實(shí)際尺寸大小進(jìn)行坐標(biāo)縮放 yv=1000.*p(:,2); [in,on] = inpolygon(xqo,yqo,xv,yv);%判斷點(diǎn)陣是否在輪廓曲線內(nèi) % isunit_flg=reshape(in,2*MM,2*NN); isunit_flg=in; csvwrite('isunitflg.csv',isunit_flg); %% 繪圖 figure plot(xv,yv) % polygon axis equal hold on plot(xq(in),yq(in),'r+') % points inside plot(xq(~in),yq(~in),'bo') % points outside holdoff
針對饋電形式拓展的優(yōu)化
往期文章僅支持wire_port的批量建模和饋電,饋電形式單一,本文進(jìn)行了改進(jìn),基于導(dǎo)入模型上的線結(jié)構(gòu)或面結(jié)構(gòu),進(jìn)行饋電端口設(shè)置,擴(kuò)展了波端口形式,改進(jìn)的建模方式降低了代碼塊之間的耦合,用戶進(jìn)行饋電形式的擴(kuò)展將更加方便,從而可以根據(jù)需要,參考以下程序自行擴(kuò)展諸如edge_port,F(xiàn)EM line Port等饋電形式。
%%添加波導(dǎo)端口 %形參定義(文件路徑,端口名稱,模型名稱,端口所在面名稱,端口激勵方向,極化轉(zhuǎn)角) function AddWaveguidePort(fid,Port_name,model_name,face_name,direction,rot_angel) fprintf(fid,'-- Created port "Port1" '); fprintf(fid,'properties = cf.WaveguidePort.GetDefaultProperties() '); fprintf(fid,['properties.DirectionReversed =',direction,' ']); fprintf(fid,[model_name,'= project.Geometry["',model_name,'"] ']); fprintf(fid,[face_name,'= ',model_name,'.Faces["',face_name,'"] ']); fprintf(fid,['properties.Face =',face_name,' ']); fprintf(fid,['properties.Label = "',Port_name,'" ']); fprintf(fid,['properties.ReferenceDirectionRotation = cf.Enums.WaveguidePortReferenceDirectionRotationEnum.Rotate',rot_angel,' ']); fprintf(fid,[Port_name,'= project.Ports:AddWaveguidePort(properties) ']); end
%%批量設(shè)置波端口 %形參定義(文件路徑,陣元分布表,模型名稱,端口所在平面名稱,端口激勵方向,極化轉(zhuǎn)角) function WaveguidePort_array(fid,isunitflg,model_name,face_name,direction,rot_angle) [Ny,Nx]=size(isunitflg); kk=0; for ii=1:Ny for jj=1:Nx if isunitflg(ii,jj)~=0 kk=kk+1; %建立waveguidePort AddWaveguidePort(fid,['port_',num2str(ii),'_',num2str(jj)],... [model_name,'_',num2str(kk)],face_name,direction,rot_angle); end end end end
詳細(xì)操作步驟
step1:建立單元模型,設(shè)置材料屬性(如果有需要,也可提前設(shè)置好局部剖分尺寸),并保存為.CFX格式;
step2:在主程序中輸入API文件夾、建模腳本.lua、陣元.CFX文件的路徑以及陣元名稱;
step3:輸入陣列結(jié)構(gòu)參數(shù)、端口信息、近場源/遠(yuǎn)場源尺寸、波束性能參數(shù)及掃描范圍;
step4:運(yùn)行生成.lua文件,并將內(nèi)容拷貝至腳本編輯器script,并運(yùn)行,自動完成相控陣的建模;
step5:刪除導(dǎo)入的初始單元、初始求解項(xiàng)以及無效端口,并按照需要設(shè)置頻率、選擇算法等即可。
clear; clc; close all; %% 文件路徑 addpath('C:Usersem.liuDesktoplbFEKO_matlab_API');%接口函數(shù)路徑 filepath='C:Usersem.liuDesktoplb';%腳本文件路徑 element_path='C:/Users/em.liu/Desktop/lb/model/';%單元文件(.CFX)的路徑 model_name='Horn1';%天線單元名稱(PS:單元文件名與文件中的模型名稱須一致) %% **************************參數(shù)錄入******************************** %% 天線單元尺寸 p=[100,80]; %單元周期(單位:mm) L=[91,71]; %單元尺寸[X向尺寸,Y向尺寸](單位:mm) freq=10; %工作頻率(單位:GHz) R=400; %天線半徑(單位:mm) lambda=300/freq; %工作波長(單位:mm) %% 端口信息 %波端口 face_name='Face13';%端口所在平面名稱 direction='ture';%端口激勵方向,勾選則為ture,否則為false rot_angle='90';%端口電場極化轉(zhuǎn)角 %線端口 % wire_name='Wire29';%端口所在線名稱 %% 近場源參數(shù)設(shè)置 nearfield_R=[300,1,300]; %R方向尺寸[起始半徑,間隔,終點(diǎn)半徑],按照近場半球的尺寸設(shè)置 nearfield_theta= [0,1,90]; %thteta方向尺寸[起始theta,間隔,終點(diǎn)theta],按默認(rèn)設(shè)置 nearfield_phi=[0,4,360]; %phi方向尺寸[起始phi,間隔,終點(diǎn)phi],按默認(rèn)設(shè)置 %% 設(shè)置波束信息 nbar=4; %有nbar個等副瓣 SLL=-25; %副瓣電平 fw_th=[0,10,0];%方位面角度范圍[起始角度對應(yīng)列,列間隔,終止角度對應(yīng)列],PS:如果起始角與終止角一致,列間隔取非0的任意數(shù);取值范圍[0,180] fy_th=[0,20,20];%俯仰面角度范圍[起始角度對應(yīng)列,列間隔,終止角度對應(yīng)列],PS:如果起始角與終止角一致,列間隔取非0的任意數(shù);取值范圍[0,360] simulation_flag=1;%選擇計(jì)算類型,1代表和波束,2代表方位差(沿x方向差),3代表俯仰差(沿y方向差) %******************************************************************************************************* %% %天線結(jié)構(gòu)參數(shù)化 isunitflg=importdata('isunitflg.csv'); [Ny,Nx]=size(isunitflg);%貼片建模需在口徑以內(nèi) (Ny:陣列行數(shù),沿y方向;Nx:陣列列數(shù),沿x方向) array=ant4_Array(Nx,Ny,isunitflg,p);%利用微帶天線結(jié)構(gòu)體存儲天線結(jié)構(gòu)參數(shù) %% %幅相計(jì)算 sweep=auto_sweep(isunitflg,p,fw_th,fy_th,lambda,nbar,SLL);%不同波位下的幅相位計(jì)算,信息以結(jié)構(gòu)體形式進(jìn)行保存 %% 設(shè)置波束類型 if simulation_flag==1 fid=fopen('ant_fw_sum.lua','wt'); %和方向圖(PS:和方向圖不分方位和與俯仰和,可以通過設(shè)置fw_th控制掃描平面) elseif simulation_flag==2 fid=fopen('ant_fw_diff.lua','wt'); %方位差方向圖(沿x軸方向) else fid=fopen('ant_fy_diff.lua','wt'); %俯仰差方向圖(沿y軸方向) end GetApplication(fid); Setunit(fid,'Millimetres'); %建模單位統(tǒng)一為mm %% 組陣 ImportCFXmodel(fid,element_path,model_name);%導(dǎo)入單元模型 element_array(fid,isunitflg,array,model_name);%通過單元復(fù)制進(jìn)行組陣 WaveguidePort_array(fid,isunitflg,model_name,face_name,direction,rot_angle);%批量設(shè)置波導(dǎo)饋電端口 % WirePort_array(fid,isunitflg,model_name,wire_name);%批量設(shè)置線端口 %% 波束掃描(給不同波位進(jìn)行幅相饋電) SetSourcesPerConfiguration(fid); %每個求解項(xiàng)的饋源設(shè)置不同 %依據(jù)求解標(biāo)識,饋電的幅/相設(shè)置都不相同 if simulation_flag==1 %和波束 for th_fw=fw_th(1):fw_th(2):fw_th(3) for th_fy=fy_th(1):fy_th(2):fy_th(3) %每一個掃描角,添加一個求解項(xiàng) Addstandardconfiguration(fid,['sum_direction',num2str(th_fw),... '_',num2str(th_fy)]); %設(shè)置近場 AddNearfield(fid,['sum_direction',num2str(th_fw),'_',num2str(th_fy)],nearfield_R,nearfield_theta,... nearfield_phi,['sum_direction',num2str(th_fw),'_',num2str(th_fy)]); %設(shè)置遠(yuǎn)場 FarField2(fid,'farfield1',[-2,0.001,2],[0,90,90],[th_fy,th_fw],... ['sum_direction',num2str(th_fw),'_',num2str(th_fy)]); FarField2(fid,'farfield2',[-180,0.2,180],[0,90,90],[th_fy,th_fw],... ['sum_direction',num2str(th_fw),'_',num2str(th_fy)]); %給陣列饋電 % array_Wiresource(fid,isunitflg,sweep,th_fw,th_fy,simulation_flag);%給線端口饋電 array_Waveguidesource(fid,isunitflg,sweep,th_fw,th_fy,simulation_flag);%給波端口饋電 end end elseif simulation_flag==2 %方位差波束 for th_fw=fw_th(1):fw_th(2):fw_th(3) for th_fy=fy_th(1):fy_th(2):fy_th(3) %每一個掃描角,添加一個求解項(xiàng) Addstandardconfiguration(fid,['diff_fw_direction',num2str(th_fw),'_',num2str(th_fy)]); %設(shè)置近場 AddNearfield(fid,['diff_fw_direction',num2str(th_fw),'_',num2str(th_fy)],nearfield_R,nearfield_theta,... nearfield_phi,['diff_fw_direction',num2str(th_fw),'_',num2str(th_fy)]); %設(shè)置遠(yuǎn)場 FarField2(fid,'farfield1',[-2,0.001,2],[0,90,90],[th_fy,th_fw],['diff_fw_direction',num2str(th_fw),'_',num2str(th_fy)]); FarField2(fid,'farfield2',[-180,0.2,180],[0,90,90],[th_fy,th_fw],['diff_fw_direction',num2str(th_fw),'_',num2str(th_fy)]); %給陣列饋電 % array_Wiresource(fid,isunitflg,sweep,th_fw,th_fy,simulation_flag);%給線端口饋電 array_Waveguidesource(fid,isunitflg,sweep,th_fw,th_fy,simulation_flag);%給波端口饋電 end end else %俯仰差波束 for th_fw=fw_th(1):fw_th(2):fw_th(3) for th_fy=fy_th(1):fy_th(2):fy_th(3) %每一個掃描角,添加一個求解項(xiàng) Addstandardconfiguration(fid,['diff_fy_direction',num2str(th_fw),'_',num2str(th_fy)]); %設(shè)置近場 AddNearfield(fid,['diff_fy_direction',num2str(th_fw),'_',num2str(th_fy)],nearfield_R,nearfield_theta,... nearfield_phi,['diff_fy_direction',num2str(th_fw),'_',num2str(th_fy)]); %設(shè)置遠(yuǎn)場 FarField2(fid,'farfield1',[-2,0.001,2],[0,90,90],[th_fy,th_fw],['diff_fy_direction',num2str(th_fw),'_',num2str(th_fy)]); FarField2(fid,'farfield2',[-180,0.2,180],[0,90,90],[th_fy,th_fw],['diff_fy_direction',num2str(th_fw),'_',num2str(th_fy)]); %給陣列饋電 % array_Wiresource(fid,isunitflg,sweep,th_fw,th_fy,simulation_flag);%給線端口饋電 array_Waveguidesource(fid,isunitflg,sweep,th_fw,th_fy,simulation_flag);%給波端口饋電 end end end fclose(fid);
總結(jié)
針對目前feko軟件尚不能針對相掃陣列進(jìn)行自動建模的問題,在原本陣列天線自動建模基礎(chǔ)進(jìn)行了改進(jìn),可以實(shí)現(xiàn)任意單元形式、任意陣面外形、不同饋電形式相控陣天線的自動建模,可以方便讀者快速進(jìn)行相掃陣列天線的建模以及陣列天線+載體的仿真建模。
審核編輯:劉清
-
hfss
+關(guān)注
關(guān)注
32文章
167瀏覽量
50321 -
電磁仿真
+關(guān)注
關(guān)注
2文章
76瀏覽量
19814 -
毫米波雷達(dá)
+關(guān)注
關(guān)注
107文章
1046瀏覽量
64393 -
相控陣天線
+關(guān)注
關(guān)注
0文章
44瀏覽量
9030 -
CST
+關(guān)注
關(guān)注
7文章
63瀏覽量
17737
原文標(biāo)題:相控陣天線建模工具升級(附源代碼)
文章出處:【微信號:CloudBrain-TT,微信公眾號:云腦智庫】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論