反演介電常數(shù):從仿真設(shè)置到MATLAB實(shí)現(xiàn))
簡介面向微波工程、射頻電路與材料測試相關(guān)學(xué)習(xí)者這份壓縮包提供基于 HFSS 仿真結(jié)果反演介電常數(shù)的完整 MATLAB 處理方案。腳本圍繞 S 參數(shù)S11、S21、S12、S22自動導(dǎo)入與解析結(jié)合復(fù)折射率換算提取介電常數(shù)實(shí)部、虛部系統(tǒng)覆蓋從散射參數(shù)到材料電磁參數(shù)的完整換算流程可有效彌補(bǔ)手動處理仿真數(shù)據(jù)的繁瑣。壓縮包共 2 個文件均為 .m 腳本整體僅 1KB輕量而完整可直接讀取 HFSS 導(dǎo)出的 ASCII 格式數(shù)據(jù)運(yùn)行也可根據(jù)具體模型修改參數(shù)。已有 1881 人學(xué)習(xí)適合科研工程師、研究生與高年級本科生在天線、濾波器、微波器件設(shè)計(jì)中快速評估材料電磁特性。借助該方案還能基于 Debye、Cole-Cole 等模型完成隨頻率變化的介電常數(shù)擬合為微波器件仿真、信號完整性分析與損耗評估提供可靠參數(shù)輸入。1. 為什么用S參數(shù)反演介電常數(shù)用HFSS的S參數(shù)反演介電常數(shù)是射頻材料測試中最實(shí)用的方法之一。介電常數(shù)并不能像電阻那樣用萬用表直接觸碰尤其是毫米波頻段網(wǎng)絡(luò)分析儀探頭接觸本身就引入誤差。常規(guī)做法是把待測介質(zhì)做成特定厚度的薄片放入仿真軟件建立的傳輸線夾具中用HFSS掃出S11、S21再借助MATLAB腳本把S參數(shù)還原成復(fù)介電常數(shù)。這個思路同時覆蓋兩個場景驗(yàn)證PCB板材來料一致性把介質(zhì)損耗參數(shù)填回濾波器或天線仿真。適合負(fù)責(zé)板材選型、介質(zhì)諧振器設(shè)計(jì)以及耦合線帶通濾波器調(diào)試的工程師也能用來校對實(shí)測夾具的誤差預(yù)算。2. HFSS中S參數(shù)提取的結(jié)構(gòu)與端口設(shè)置要讓反演結(jié)果落在5%誤差以內(nèi)仿真階段必須先答對三個問題用什么傳輸線結(jié)構(gòu)激勵端口怎么設(shè)導(dǎo)出的S參數(shù)用什么格式。許多教程直接給公式忽略了HFSS輸出數(shù)據(jù)本身的質(zhì)量。端口參考面沒校準(zhǔn)、掃頻點(diǎn)太稀都會讓后續(xù)MATLAB里算出帶振蕩的損耗正切。2.1 選擇適合反演的傳輸線結(jié)構(gòu)最常用的夾具是微帶線和帶狀線。微帶線的上方是空氣電磁場分布并不完全集中在介質(zhì)內(nèi)用S參數(shù)直接反演得到的是有效介電常數(shù)后續(xù)還要做保角校正才能換回材料真實(shí)值誤差鏈比較長。帶狀線把樣品夾在上下地平面之間除了邊緣場外場基本集中在被測介質(zhì)中反演關(guān)系更直接。如果樣品能壓成薄片我一般會優(yōu)先選帶狀線或者用帶地孔的差分線結(jié)構(gòu)這與hfss多端口帶狀線設(shè)計(jì)里的經(jīng)驗(yàn)一致。多端口結(jié)構(gòu)還能順便提取材料的各向異性但端口數(shù)量增加后交叉耦合會讓S21在低頻段出現(xiàn)非預(yù)期波紋。無論哪種結(jié)構(gòu)夾具模型的尺寸必須精確尤其是介質(zhì)厚度h和導(dǎo)體寬度w。加工公差0.02mm在18GHz時就會讓損耗正切出現(xiàn)可觀的偏差。建模型時不要把“理想薄片”填成0厚度那會讓波阻抗計(jì)算在數(shù)值上失效。2.2 wave port、deembed與參考面HFSS中饋電方式應(yīng)選wave port而不是lumped port。wave port能唯一確定模式特性尤其適合帶狀線主模。但wave port的參考阻抗不是默認(rèn)50Ω而是由端口尺寸間接決定的特性阻抗。反演過程只依賴S參數(shù)的幅度和相位理論上參考阻抗不影響介質(zhì)參數(shù)結(jié)果但如果之后的MATLAB腳本里有歸一化到50Ω的操作就得先在HFSS里執(zhí)行一次端口阻抗重歸一化。wave port與樣品端面之間一般要保留一小段直通傳輸線用于消除高次模。這段線在反演中相當(dāng)于延長了樣品所以必須在HFSS里用波端口的deembed功能把參考面平移回樣品邊緣。deembed的距離就是直通段長度正負(fù)號按照端口法向方向確認(rèn)。漏掉這一步時S21相位會附加與頻率成正比的線性項(xiàng)反演出的ε虛部會隨頻率抬升容易被人誤判成材料損耗。hfss波端口的deem功能在操作面板上叫“Deembed”設(shè)定好距離后再看S11相位理想情況下在截止頻率以下應(yīng)近似線性且延遲量等于該段長度。2.3 掃頻參數(shù)與邊界條件對于完全封閉的帶狀線用理想導(dǎo)體邊界即可不需要輻射邊界。微帶線模型里則需要空氣盒并在HFSS中使用自動生成輻射邊界把盒頂高度設(shè)置在最高頻率波長的四分之一以上。輻射邊界不會顯著影響S參數(shù)幅度但會影響高頻端的S11相位尤其是介質(zhì)損耗較小時更明顯。掃頻類型建議用離散列表步進(jìn)不要超過樣品厚度對應(yīng)相移的限制。下表是我處理2-18GHz頻段常用的一組參數(shù)。參數(shù)推薦值說明材料樣品厚度0.2-1.0 mm太薄對相位分辨差太厚出現(xiàn)半波諧振頻率范圍2-18 GHz受制于夾具尺寸和波導(dǎo)截止掃頻點(diǎn)數(shù)200-400點(diǎn)數(shù)過少會導(dǎo)致分支選擇困難求解頻率1.5倍中心頻率兼顧網(wǎng)格精度和計(jì)算時間導(dǎo)出數(shù)據(jù)格式Real/Imag避免在MATLAB里做度到弧度轉(zhuǎn)換“hfss的掃描角是什么意思”和這里的掃頻不同那是指far field掃描角用于天線方向圖。材料反演不需要設(shè)置掃描角只關(guān)注頻率掃點(diǎn)即可。掃頻點(diǎn)越密后續(xù)相位展開越容易但仿真時間也線性增長。一般200個點(diǎn)足夠。2.4 導(dǎo)出S參數(shù)的格式要求仿真完成后在HFSS結(jié)果右鍵導(dǎo)出矩陣選擇ASCII格式并保存為.s2p。建議在導(dǎo)出設(shè)置里選中復(fù)數(shù)R/I格式而不是Magnitude/Angle或dB。R/I格式直接給出實(shí)部和虛部MATLAB讀取后無需角度展開。Touchstone文件頭部會有類似# HZ S RI R 50的標(biāo)記其中RI表示實(shí)部虛部。若導(dǎo)出為MA幅度角度角度單位是度需要在腳本里換算成弧度。文件內(nèi)容通常是第一列頻率后面依次是S11實(shí)部、虛部、S21實(shí)部、虛部、S12實(shí)部、虛部、S22實(shí)部、虛部。要注意端口排列順序不要誤把S21和S12位置搞混對于互易網(wǎng)絡(luò)兩者應(yīng)相等但若差值超過1e-9說明仿真網(wǎng)格或端口設(shè)置不對稱。3. MATLAB讀取HFSS S參數(shù)腳本怎么寫壓縮包里的Untitled.m和Untitled1.m常見分工是前者負(fù)責(zé)讀取和顯示原始S參數(shù)后者實(shí)現(xiàn)反演。讀取腳本最忌諱寫死格式因?yàn)镠FSS不同版本導(dǎo)出的文件列數(shù)、注釋行數(shù)量都有差異。我通常寫一個可復(fù)用函數(shù)先識別頭部標(biāo)記再自動分配數(shù)據(jù)列。3.1 解析Touchstone/ASCII文件HFSS導(dǎo)出的.s2p文件雖然是行業(yè)標(biāo)準(zhǔn)但有時保存為.rtdata時會在數(shù)據(jù)段之前多出幾行功率和端口信息。無論哪種格式文件前半部分都包含以#開頭的選項(xiàng)行以及以!或%開頭的注釋。數(shù)據(jù)段則是一行一個頻點(diǎn)列數(shù)固定。讀取時的第一個關(guān)鍵決定是“先讀滿整行再拆數(shù)”。不能直接用textscan跳過否則遇到可變數(shù)量的空白或換行會導(dǎo)致錯位。我習(xí)慣逐行讀取判斷行首字符再從數(shù)據(jù)行中解析浮點(diǎn)數(shù)。3.2 讀取函數(shù)read_hfss_s2p下面這段MATLAB代碼可以處理HFSS導(dǎo)出的RI和MA兩種常見格式。function [f, S11, S21] read_hfss_s2p(filename) fid fopen(filename, r); if fid -1 error(cannot open file: %s, filename); end fmt RI; % 默認(rèn)RI格式 data []; while ~feof(fid) line fgetl(fid); if isempty(line) continue; end if line(1) # % 選項(xiàng)行例如 # HZ S RI R 50 tokens regexp(line, #\s*\S\s\S\s(\w), tokens); if ~isempty(tokens) fmt tokens{1}{1}; end continue; elseif line(1) ! || line(1) % continue; % 注釋行 end vals sscanf(line, %f).; if isempty(vals) continue; end if length(vals) 9 % 2端口數(shù)據(jù)至少9列 data [data; vals(1:9)]; end end fclose(fid); if isempty(data) error(no data parsed); end f data(:,1); switch upper(fmt) case RI S11 data(:,2) 1i * data(:,3); S21 data(:,4) 1i * data(:,5); case MA mag11 data(:,2); ang11_deg data(:,3); S11 mag11 .* exp(1i * ang11_deg * pi/180); mag21 data(:,4); ang21_deg data(:,5); S21 mag21 .* exp(1i * ang21_deg * pi/180); otherwise error(unsupported format %s, fmt); end end這段代碼的可復(fù)用點(diǎn)在于底部用fmt決定S參數(shù)構(gòu)造方式而不是每種格式寫一套循環(huán)。line(1) #判斷頭部sscanf對整行解析vals(1:9)只取前9列避免少數(shù)文件中出現(xiàn)額外的歸一化功率列。如果您的文件只有6列單端口或非標(biāo)準(zhǔn)需要把判斷條件改為length(vals) 5并調(diào)整列索引。這個函數(shù)返回的S11和S21已經(jīng)是復(fù)數(shù)向量相位單位是弧度后續(xù)可直接用于反演。3.3 數(shù)據(jù)清洗與插值HFSS離散掃頻得到的頻點(diǎn)本身是均勻的但若使用插值掃頻頻點(diǎn)間隔可能變化反演公式中對頻率求導(dǎo)或做相位展開時會不夠平滑。此時需要對f網(wǎng)格做一次線性插值。在插值前先把S11幅度大于1的異常值限幅到0.9999防止在后續(xù)開根號時出現(xiàn)負(fù)數(shù)判別式。S11(abs(S11) 1) 0.9999 .* exp(1i * angle(S11(abs(S11) 1)));限幅不會影響正常頻段但能避免少數(shù)邊界頻點(diǎn)上HFSS數(shù)值振蕩導(dǎo)致復(fù)數(shù)開方分支突變。隨后檢查S21的相位是否在相鄰頻點(diǎn)內(nèi)連續(xù)移動。如果出現(xiàn)明顯的跳變先不要插值回到HFSS確認(rèn)deembed距離。這個工作放在讀取腳本中很合適我一般會把Untitled.m寫成先調(diào)用讀取函數(shù)然后繪制S11和S21的幅度相位圖快速判斷數(shù)據(jù)是否可信。3.4 用Untitled.m和Untitled1.m劃分任務(wù)如果只有兩個腳本我會把讀取、檢查、插值放在Untitled.m把第四章的反演算法放在Untitled1.m。這樣跑通一個已知材料案例后換新材料只需改文件路徑不必重新審查算法代碼。Untitled1.m的入口參數(shù)至少應(yīng)包括S11、S21、頻點(diǎn)向量、樣品厚度d。不要把文件名路徑寫死在算法腳本里否則交接給同事時會不斷改動主程序。4. S參數(shù)反演介電常數(shù)的公式與代碼這一章是整個流程的核心。反演的基本思路是先把S參數(shù)轉(zhuǎn)換成均勻介質(zhì)段的傳播常數(shù)γ和歸一化波阻抗Z再由Z和γ反推復(fù)介電常數(shù)。整個過程可以用一條鏈路表示S參數(shù)到ABCD矩陣ABCD到γ和Z最后到ε。4.1 由S參數(shù)到復(fù)折射率和波阻抗假設(shè)樣品是均勻無磁材料厚度為d嵌入在傳輸線中間。此時二端口網(wǎng)絡(luò)是對稱互易的S11等于S22S21等于S12。根據(jù)S參數(shù)到ABCD矩陣的轉(zhuǎn)換關(guān)系A(chǔ) (1 - S11^2 S21^2) / (2 S21) B ((1 S11)^2 - S21^2) / (2 S21) C ((1 - S11)^2 - S21^2) / (2 S21)對于均勻傳輸線段A等于cosh(γd)歸一化波阻抗Z等于sqrt(B/C)。于是有γ d acosh(A) Z sqrt(B/C)自由空間波數(shù)k0 2πf/c0復(fù)折射率n與γ的關(guān)系為γ j k0 n。MATLAB中j表示虛數(shù)單位因此n -jγ/k0。在μr1的假設(shè)下介電常數(shù)由ε n / Z得到。這里的除法是逐元素復(fù)數(shù)除法不是矩陣求逆。我提供一個可直接運(yùn)行的核心循環(huán)function [epsilon, n, gamma] extract_dk(f, S11, S21, d) c0 2.99792458e8; S11 S11(:); S21 S21(:); f f(:); N length(f); n zeros(N,1); gamma zeros(N,1); epsilon zeros(N,1); for idx 1:N k0 2*pi*f(idx)/c0; % ABCD參數(shù)注意S21可能在某頻點(diǎn)接近0 A (1 - S11(idx)^2 S21(idx)^2) / (2*S21(idx)); B ((1 S11(idx))^2 - S21(idx)^2) / (2*S21(idx)); C ((1 - S11(idx))^2 - S21(idx)^2) / (2*S21(idx)); % 主分支gamma和Z gamma0 acosh(A) / d; Z0 sqrt(B / C); % 物理上取實(shí)部為正的阻抗分支 if real(Z0) 0 Z0 -Z0; end n0 -1i * gamma0 / k0; % 按前一個頻點(diǎn)選擇折射率實(shí)部最近的分支 if idx 1 m_best 0; else m_candidates -4:4; n_cand n0 - m_candidates * c0 / (f(idx) * d); [~, m_best] min(abs(real(n_cand) - real(n(idx-1)))); end n(idx) n0 - m_candidates(m_best) * c0 / (f(idx) * d); % 與候選分支對應(yīng)的gamma gamma(idx) -1i * k0 * n(idx); epsilon(idx) n(idx) / Z0; end end這段代碼的關(guān)鍵在于分支選擇。acosh返回的是主值對應(yīng)的γd可能在虛部上相差2π的整數(shù)倍但實(shí)際傳播常數(shù)的虛部應(yīng)按物理連續(xù)性變化。代碼中通過候選m值構(gòu)造n的多個可能值用“與上一頻點(diǎn)折射率實(shí)部最接近”作為判據(jù)這就是在頻域內(nèi)做相位展開。如果頻點(diǎn)間隔太大相鄰點(diǎn)的實(shí)部差異仍會超過一個分支周期此時應(yīng)當(dāng)減小掃頻步進(jìn)而不是依賴算法去尋找。Z0的符號也有講究。對于無源介質(zhì)歸一化波阻抗的實(shí)部應(yīng)為正。如果開根號后實(shí)部為負(fù)就取相反數(shù)。虛部符號會根據(jù)S參數(shù)方向約定自然給出不要人為翻轉(zhuǎn)。4.2 多值性來源與掃頻點(diǎn)選擇多值性來源于復(fù)對數(shù)函數(shù)。由于T exp(-γd)在γd上加2πi的整數(shù)倍后T不變S參數(shù)無法區(qū)分這些分支。換句話說樣品厚度d內(nèi)每經(jīng)過一個完整波長相位就多一圈但S參數(shù)相同。因此掃頻點(diǎn)越密相鄰頻點(diǎn)之間的折射率變化越小分支選擇就越可靠。下表總結(jié)了典型情況下的分支周期頻率樣品厚度有效折射率約為3相鄰分支間隔GHz10GHz1mm310/(3*1) 3.3GHz18GHz0.5mm418/(4*0.5) 9GHz當(dāng)分支間隔大于掃頻帶寬時整個頻段沒有歧義可以不做分支選擇。但多數(shù)寬帶測試的帶寬遠(yuǎn)大于該間隔所以分支處理不能省略。4.3 損耗與Debye模型擬合反演得到的是每個頻點(diǎn)的復(fù)介電常數(shù)實(shí)部是儲能能力虛部包含材料損耗。有時虛部會被參考面誤差污染表現(xiàn)為隨頻率線性下降或上升。為了提取真正的弛豫參數(shù)我會用一個簡單的Debye模型擬合復(fù)介電常數(shù)ε(f) ε∞ (εs - ε∞) / (1 j f / f_relax)在MATLAB中可以用lsqcurvefit擬合。雖然這不是反演必需步驟但擬合后的εs和f_relax更適合作為HFSS仿真模型的輸入。擬合時要排除頻帶兩端各3個點(diǎn)因?yàn)槟切c(diǎn)受數(shù)值噪聲影響最大。4.4 對厚度和參考面誤差的敏感性反演公式中厚度d出現(xiàn)在γ的分母所以d的誤差直接影響折射率。厚度誤差1%折射率實(shí)部大約也偏差1%但介電常數(shù)通過n^2形式影響時會放大到2%左右。所以樣品厚度需要用千分尺測量而不是依賴標(biāo)稱值。參考面誤差會讓S21相位偏離理想線性表現(xiàn)為ε虛部出現(xiàn)與頻率相關(guān)的斜率。檢查方法先看折射率實(shí)部是否平滑再看虛部是否有明顯的線性趨勢。如果線性趨勢與頻率強(qiáng)相關(guān)則大概率是deembed距離不準(zhǔn)而不是材料本身損耗。順便說一句hfss中場計(jì)算器計(jì)算電壓的用途在這里幫不上忙反演不需要電場積分老老實(shí)實(shí)用S參數(shù)最省事。5. 工程驗(yàn)證與幾個實(shí)用坑最后的落地環(huán)節(jié)重點(diǎn)討論如何確認(rèn)反演結(jié)果不是“算對了但數(shù)據(jù)錯”。這套方法最容易被質(zhì)疑的地方是仿真S參數(shù)來自HFSS反演腳本又來自MATLAB兩者單獨(dú)看不出錯合在一起必須用一個已知材料閉環(huán)。5.1 已知材料自校驗(yàn)流程先在HFSS中建立PTFE介質(zhì)模型把介電常數(shù)設(shè)為2.08損耗正切設(shè)為0.001跑相同的掃頻和導(dǎo)出流程再調(diào)用第四章腳本反演。如果反演結(jié)果落在2.05-2.11之間說明整個鏈路可信。我還習(xí)慣在HFSS里同時掃一個空氣腔模型理論上反演ε應(yīng)為1.0。若空氣腔結(jié)果偏離明顯多半是波端口deembed設(shè)置問題。5.2 與網(wǎng)絡(luò)分析儀實(shí)測S參數(shù)對比網(wǎng)絡(luò)分析儀測量差分線s參數(shù)時需要用四端口校準(zhǔn)或外接balun過程比仿真麻煩得多。但實(shí)測數(shù)據(jù)反而更容易暴露夾具問題。實(shí)測S參數(shù)中包含接頭、焊盤、過渡段的寄生網(wǎng)絡(luò)直接反演會得到明顯偏大的損耗。我一般會先做TRL校準(zhǔn)再用去嵌入方法把參考面移到介質(zhì)段兩端。如果實(shí)測與仿真的S21相位在2GHz處偏差超過5度反演出來的介電常數(shù)就不具備參考價值。5.3 反演結(jié)果異常的排查如果ε實(shí)部小于1或虛部為負(fù)可按以下順序檢查現(xiàn)象排查步驟ε實(shí)部小于1檢查S11是否被限幅過度檢查Z0分支符號虛部隨頻率線性增大deembed距離設(shè)置偏大或偏小曲線抖動劇烈掃頻點(diǎn)數(shù)太少分支選擇miss高頻端發(fā)散樣品厚度接近多個半波長縮小頻率范圍與已知值偏移固定比例厚度尺寸輸入錯誤單位換算問題最后一個有效技巧是在反演前先對S21做群延遲檢查。群延遲為相位對頻率的導(dǎo)數(shù)如果群延遲在帶內(nèi)出現(xiàn)劇烈波動說明HFSS掃頻步長太大或部分頻點(diǎn)求解未收斂。此時直接反演會發(fā)現(xiàn)折射率虛部出現(xiàn)尖刺。先把掃頻點(diǎn)數(shù)加密再做反演會比任何數(shù)學(xué)平滑都有效。這樣處理后的結(jié)果基本可以直接用于HFSS材料庫更新不需要額外修正。本文還有配套的精品資源點(diǎn)擊獲取