简介:面向射频微波工程与电磁材料测试人员,这份Smith参数提取与NRW反演工具包用于从S11、S21的幅度和相位数据中反演相对介电常数与磁导率。压缩包共3个文件,包括一个MATLAB脚本以及两个txt格式的示例数据文件(s_arg.txt、s_mag.txt),包体仅18KB,脚本可直接调用数据验证NRW反演流程,适合需要快速计算材料电磁参数的工程师和研究者。已有625人浏览学习,说明该工具在实际问题中具有一定参考价值。通过运行脚本,用户可以对照S参数数据得到磁导率、介电常数的提取结果,同时借助示例数据检查算法正确性,从而更好地理解材料对电磁波的响应。对于天线、滤波器、传输线设计以及射频材料表征等场景,这套小工具提供了简洁的入门实现。
1. 从S11/S21到磁导率:先搞清NRW反演在算什么
你手里有一台矢量网络分析仪,刚把一块铁氧体或吸波涂层样品夹进同轴测试夹具,扫完S11和S21,导出一份带频率、幅值和相位的表格。下一步呢?多数团队会拿出一个叫“Smith参数提取”的脚本,跑NRW反演,把两根散射参数曲线变成复磁导率和复介电常数随频率变化的曲线。这套流程是射频材料表征的标准动作:从散射参数到界面反射系数,再到材料电磁参数。NRW这个名字来自Nicolson、Ross和Weir三位研究者,七十年代就定型的算法,今天仍是提取介电常数和磁导率最主流的做法。本文顺着这条路径,把公式推导、可复现脚本、Smith圆图判读和坑位一次讲透,适合做吸波材料、铁氧体、超材料、PCB基材介电测试的工程师和研究生直接照做。
2. NRW反演公式拆解:反射系数、传输因子与两个物理解
2.1 从S参数到反射系数Γ与传输因子T:两个关键中间量
NRW反演的第一步,是把频率相关的S11和S21转化为两个中间量:空气-样品界面的反射系数Γ,以及电磁波穿过样品后的传输因子T。网上很多脚本把这步写成黑匣子,其实核心是两条代数关系,推导思路不复杂。
先构造两个组合量:V1 = S21 + S11,V2 = S21 - S11。设样品为均匀各向同性介质,厚度为d,嵌入在空气填充的同轴线或自由空间中。测量面上的S11是样品前后两个界面多重反射叠加的结果,S21是直透波加上多次内部反射的叠加。把这两个闭式解联立,消去T之后,反射系数Γ满足一个二次方程,解为:
Γ = X ± sqrt(X² - 1)
其中X = (V1² - V2²) / (2V1),等价于 X = (1 - S11² + S21²) / (2S11)。这里出现第一个要选的分支:物理上无源材料的界面反射系数模值必须小于等于1,所以取|Γ| ≤ 1的那个根。多数实现直接用Γ = X - sqrt(X² - 1),但数值上当X远大于1时两个接近的数相减会损失有效数字,更稳的写法是Γ = 1 / (X + sqrt(X² - 1)),这两个形式数学上完全等价,后者在X较大时误差小得多。
求到Γ之后,传输因子T由下式给出:
T = (V1 - Γ) / (1 - V1Γ)
T对应电磁波在样品内部往返一次后的衰减和相移,数学上T = exp(-γd),γ是样品内的复传播常数。如果样品是低损耗材料,|T|接近1而相位随频率线性累积;如果样品有损耗,|T|明显小于1,相位累积速度也会变慢一点。NRW反演流程中,S11和S21的品质直接决定Γ和T的质量,所以测量时校准一定要做扎实,校准面不干净后面所有步骤都会跟着脏。
| 步骤 | 公式 | 说明 |
|---|---|---|
| 构造组合量 | V1 = S21 + S11,V2 = S21 - S11 | 为消去多重反射作准备 |
| 计算中间量X | X = (1 - S11² + S21²) / (2S11) | S11接近0时该式发散,需要注意 |
| 求反射系数 | Γ = 1 / (X + sqrt(X² - 1)),取 | Γ |
| 求传输因子 | T = (V1 - Γ) / (1 - V1Γ) | T = exp(-γd) |
2.2 复折射率与归一化阻抗:提取磁导率和介电常数
有了Γ和T,剩下的工作就是解两个“物理解”。第一个物理量是复折射率 n = sqrt(μr·εr),它决定了波在样品里的传播速度与损耗,直接和T挂钩。第二个是归一化波阻抗 Z = sqrt(μr / εr),它决定界面的反射强弱,直接和Γ挂钩。所以只需要把n和Z分别求出来,再乘除一下就得到磁导率和介电常数。
复折射率从T推。T = exp(-γd) = exp(-j·k0·n·d),其中k0 = 2πf/c0是自由空间波数。取对数:
ln(T) = -j·k0·n·d n = j·c0·ln(T) / (2π·f·d)
这里ln(T)必须取“正确的分支”——因为复对数多值,相位部分可以加减任意整数倍2π。下一小节专门讲这个。归一化阻抗则直接在反射系数上做一次史密斯变换:
Z = (1 + Γ) / (1 - Γ)
这个式子大家在Smith圆图里天天见,反射系数和归一化阻抗互为映射。拿到n和Z之后:
μr = n · Z εr = n / Z
两点注意:一是这组公式对应无截止波导结构,同轴空气线和自由空间法都适用;矩形波导夹具存在截止波数,需要在传播常数里加kc²修正,工程上先按同轴法或自由空间法理解NRW,波导法再查Weir 1974原文补修正项。二是提取出来的是复值,实部对应储能特性,虚部对应损耗,虚部的符号由无源条件锁定:介电常数和磁导率的虚部必须非负,符号反了基本可以断定分支选错或样品有源。
2.3 三个物理约束:无源、因果、连续性如何帮我们选分支
NRW反演最容易翻车的地方,不是公式记不住,而是分支选择。反射系数Γ有正负两个根,复对数ln(T)有无数个分支,选错了,介电常数和磁导率曲线就会出现莫名其妙的跳变、负虚部、甚至完全偏离物理区间。选分支靠三个约束。
第一个约束是无源性:|Γ|必须小于等于1,同时εr和μr的虚部必须大于等于0。|Γ|>1的解直接丢弃。虚部为负时,基本能断定相位分支选错,或者S参数校准误差大到离谱。第二个约束是因果性:对于无源介质,εr、μr的实部和虚部满足Kramers-Kronig关系,频域上不能独立变化。实用中不用真的去做希尔伯特变换,只要看到虚部出现损耗峰而实部完全平滑无任何色散,就要怀疑提取结果。第三个约束是连续性:材料的电磁参数在足够小的频率步进下不会突变,相邻两个频点的相位差不会超过π。这正是相位展开(unwrap)的数学依据。
相位分支的本质,要看清它对哪个物理量起作用。T的相位arg(T)落在(-π, π]内是主值,实际相位可能是主值加上2πm,m是整数。代入n的公式,这2πm会给n的实部带来一个偏移量Δn = -m·c0/(f·d),注意不改变虚部。换句话说,分支选择影响的只是折射率实部,虚部早就被|T|决定了。很多人误以为选分支是让虚部为正,其实虚部的正负和分支无关,那是由损耗和校准误差决定的。所以正确做法是:先用频率连续性把相位展开,再用实部的物理范围做最终确认——比如PTFE这类材料,Re(n)在1.4到1.5之间,如果展开后跑到3.0,说明m选错了。
3. 用Python跑通NRW反演:最小脚本与分支选择的两个参数
3.1 输入S参数:VNA导出文件的格式与读取
不同品牌矢量网络分析仪导出S参数的格式差异很大,Keysight常见的是dB和角度两列,R&S喜欢实部和虚部,Anritsu的Touchstone文件里既有dB也有实虚。为了让脚本通用,我通常直接在读取阶段做两种格式兼容,dB/角度和实部/虚部都认,不足为奇,但省大量手工转换时间。
import numpy as np import pandas as pd # 支持两种常见导出格式: # 格式A:freq_Hz, S11_dB, S11_deg, S21_dB, S21_deg # 格式B:freq_Hz, S11_real, S11_imag, S21_real, S21_imag def load_s_params(csv_path): df = pd.read_csv(csv_path) f = df.iloc[:, 0].to_numpy(dtype=float) if "S11_dB" in df.columns: s11 = 10 ** (df["S11_dB"] / 20) * np.exp(1j * np.deg2rad(df["S11_deg"])) s21 = 10 ** (df["S21_dB"] / 20) * np.exp(1j * np.deg2rad(df["S21_deg"])) else: s11 = df["S11_real"].to_numpy(dtype=float) + 1j * df["S11_imag"].to_numpy(dtype=float) s21 = df["S21_real"].to_numpy(dtype=float) + 1j * df["S21_imag"].to_numpy(dtype=float) return f, s11, s21这个函数把文件读取统一成f、s11、s21三个numpy数组,后续所有计算都基于复数S参数。如果手里是.s2p Touchstone文件,更省事的做法是直接用scikit-rf的rf.Network("measured.s2p"),它会自动完成单位换算和参数整理。但手写读取有它的好处:你能清楚看到数据长什么样,遇到单位错误(比如角度用了弧度、dB值没转线性)时能一眼发现。VNA导出数据的常见毛病是频率单位不统一——有的文件是MHz有的是Hz,读取后第一件事就是确认f的单位,再决定后面公式里c0直接除还是先换算。
3.2 核心反演代码:从CSV到εr、μr全流程
下面这段代码是完整的NRW反演主体,输入上一节读到的S参数和样品厚度,输出复介电常数和复磁导率。代码按“中间量 → Γ → T → n → Z → μr/εr”的步骤走,每个关键位置都留了检查和保护。
def nrw_inversion(f, s11, s21, thickness_m, c0=299792458.0): # 基础保护:频率必须为正,S11不能小到让公式发散 valid = (f > 0) & (np.abs(s11) > 1e-6) f = f[valid] s11 = s11[valid] s21 = s21[valid] # ---- 第一步:中间量 X ---- V1 = s21 + s11 V2 = s21 - s11 X = (V1**2 - V2**2) / (2 * V1) # ---- 第二步:反射系数 Gamma,取模值小于1的分支 ---- sqrt_term = np.sqrt(X**2 - 1) Gamma = 1.0 / (X + sqrt_term) # 数值稳定的写法 bad = np.abs(Gamma) > 1.0 Gamma[bad] = X[bad] + sqrt_term[bad] # 换到另一个分支 # ---- 第三步:传输因子 T ---- T = (V1 - Gamma) / (1 - V1 * Gamma) # ---- 第四步:复折射率 n ---- # 分支选择:先对相位做连续展开 T_phase = np.unwrap(np.angle(T)) # 关键参数1:unwrap的判据 T_abs = np.minimum(np.abs(T), 1.0) # 数值噪声导致的|T|>1要压住 lnT = np.log(T_abs + 1e-30) + 1j * T_phase n = 1j * c0 * lnT / (2 * np.pi * f * thickness_m) # ---- 第五步:归一化阻抗与电磁参数 ---- Z = (1 + Gamma) / (1 - Gamma) mu_r = n * Z eps_r = n / Z return f, mu_r, eps_r, Gamma, T代码里最关键的一行是Gamma = 1.0 / (X + sqrt_term)。前面说过它和X - sqrt_term在数学上等价,但实际运算中,当样品匹配良好、S11很小时X会变得很大,两个接近的大数相减会把有效数字吃光,得到一堆噪声。用倒数形式后,分母是两个同号大数相加,不会出现抵消。这是NRW数值实现里最值得改的一处,很多老脚本沿用原始公式,在高频段提取结果毛刺重,换成倒数形式立刻干净。
np.minimum(np.abs(T), 1.0)是第二道保护。校准误差可能让无源样品的|T|略超1,这会导致ln|T|为正,进而让n的虚部变负,破坏无源约束。把它压到1以下,相当于承认样品无源,同时保留相位信息。如果处理后虚部仍然明显为负,那就要回去查校准和样品,而不是靠罚函数硬掰。
3.3 相位展开与分支选择:两个必调参数
上一节的np.unwrap(np.angle(T))是分支选择的自动化实现。np.unwrap的工作方式很简单:沿频率轴逐点比较相邻相位差,如果差值超过discont阈值(默认π),就自动加减2π把跳变拉平。对于大多数样品,只要频率步进小于样品内介质波长的十分之一,默认阈值就够用。两个参数值得手动调。
第一个参数是discont。当样品厚度较大或介电常数较高时,相位随频率变化很陡,相邻频点相位差可能超过π但确实是连续变化,unwrap会误判成跳变并错加2π。经验做法是先粗算一下:如果样品在最高频点的电厚度超过λ/4,就把频率步进加密到原来的1/5再测,或者把discont调大到2π试试。注意discont的物理含义是“相邻相位差超过多少算跳变”,不是越大越安全,设得过大,真正的2π跳变就漏了过去,曲线会在跨周期处错位。
第二个参数是分支的实部范围校验。unwrap是纯数学操作,不保证结果符合材料物理。我在实际处理时会再写一个小检查:
# 分支检查:Re(n) 应该在合理区间,比如 0.5~5.0 re_n = np.real(n) if np.any(re_n < 0.5) or np.any(re_n > 5.0): print("警告:折射率实部超出常见无源材料范围,检查 unwrap 是否正确")对于PTFE、氧化铝陶瓷、常见铁氧体,Re(n)不会低于0.5也不会高于5.0,如果超了,几乎可以肯定中间某段相位展开错了。此时先看Smith圆图上S11轨迹是否在某频点突然跳向另一侧,再回到数据把该频点附近的angle(T)手动检查一遍。多值分支的m影响的是n的实部偏移,偏移步长是c0/(f·d),所以同样厚度下样品越厚、频率越高,分支选错的后果越剧烈。这套代码跑出来的μr和εr是复数数组,后续画图、求损耗角正切、做Smith圆图分析都直接用它们。
4. 把提取结果放回Smith圆图:阻抗轨迹、盲区与交叉验证
4.1 Smith圆图上的S11轨迹:平滑、绕圈与跳变分别意味着什么
NRW反演得到的是εr和μr,但这些复参数是否可靠,直接看曲线不够直观,我习惯把原始S11和反演后重算的S11同时投到Smith圆图上。Smith圆图本质上是反射系数Γ的复平面变形,图中每个点同时对应一个归一化阻抗Z = (1+Γ)/(1-Γ),所以它天生就是NRW算法的可视化载体:反演第一步求Γ,第四步求Z,中间每一步都能在圆图上找到位置。
测量得到的S11轨迹能直接反映样品的基本性质。低损耗材料(PTFE、石英)的轨迹沿等电阻圆弧旋转,每转一圈,对应电磁波在样品内部累积了半个波长的电长度。有耗材料(铁氧体、吸波涂层)的轨迹是向内收缩的螺旋,收缩速度取决于损耗大小。如果轨迹在某频点突然出现一个向外弹的尖角,通常对应两条路:一是相位展开在该点跳变,二是样品夹具在该频点附近有结构谐振。先看圆图,再回查反演公式,能省掉一半无头苍蝇式的排查时间。
绕圈的圈数本身也是一个验证量。样品厚度d已知,介电常数大致量级已知,就能估算最大频率下轨迹应该转几圈。粗略公式是圈数 ≈ 2·d·Re(n)·f_max/c0。如果Smith图上实际转的圈数比估算少一圈,说明unwrap少加了2π,反演结果整体偏移,这个检查比盯着εr曲线肉眼找跳变要快得多。
4.2 圆心附近的反演盲区:匹配太好反而提不准
Smith圆图上最危险的区域不是边缘,而是圆心。圆心对应Γ = 0,也就是S11完全匹配、样品无反射的状态。反向看NRW的公式,X = (1 - S11² + S21²) / (2S11),S11趋近0时X发散,Γ几乎完全由S21决定,而S21在这个频段接近1,两个接近1的复数相减再取对数,数值噪声被放大几倍。这导致一个反直觉结论:样品做得好、反射低,NRW反而提不准介电常数。
实际表现是,在S11幅度小于-25dB的频段,提取出的εr曲线出现明显抖动,μr虚部甚至会冒出负值。这不是材料真的这样,是反演模型在低反射区域的固有病态。处理办法不是删数据,而是把该频段的权重降低或直接截断。我一般会设一个阈值:|S11| < -30dB的频点只保留μr不取εr,30到40dB之间打个标记,让后续拟合程序知道这些点不可靠。还有个特殊情况要警惕:某些频点Γ恰好经过零点,此时X和1/(X+sqrt)都会产生极大值,但相邻频点又恢复正常,表现在εr曲线上是单个窄尖峰。这种情况连同相位跳变一起排查,先确认是不是unwrap的锅,不是的话再怀疑夹具谐振。
4.3 画一个带频率色标的Smith图对照测量与重算
把测量S11和反演结果重算的S11画在同一个Smith圆图上,是验证提取结果最快的方法。下面的代码用matplotlib画简化版Smith圆图网格,用颜色表示频率从低到高,两条轨迹越贴近,说明提取的εr、μr与测量数据自洽。
import matplotlib.pyplot as plt def plot_smith_with_recalc(f, s11_meas, s11_recalc): fig, ax = plt.subplots(figsize=(6, 6)) # 画单位圆 cir = plt.Circle((0, 0), 1, fill=False, color="black", lw=1.2) ax.add_patch(cir) # 画等电阻圆:r = 0, 0.2, 0.5, 1, 2, 5 for r in [0, 0.2, 0.5, 1, 2, 5]: ax.add_patch(plt.Circle((r/(r+1), 0), 1/(r+1), fill=False, color="blue", lw=0.4)) # 画等电抗圆:x = 0.5, 1, 2, 5 for x in [0.5, 1, 2, 5]: ax.add_patch(plt.Circle((1, 1/x), 1/x, fill=False, color="red", lw=0.4)) ax.add_patch(plt.Circle((1, -1/x), 1/x, fill=False, color="red", lw=0.4)) # 频率色标:颜色越红频率越高 colors = plt.cm.viridis(np.linspace(0, 1, len(f))) ax.scatter(s11_meas.real, s11_meas.imag, c=colors, s=6, label="measured") ax.scatter(s11_recalc.real, s11_recalc.imag, c=colors, s=6, marker="x", label="recalculated") ax.set_xlim(-1.08, 1.08) ax.set_ylim(-1.08, 1.08) ax.set_aspect("equal") ax.legend() plt.show()等电阻圆与等电抗圆的圆心半径公式来自Γ和z的映射关系,这些网格线足够判断轨迹形状和位置。测量点用圆点、重算点用叉号,颜色随频率渐变。重点看两处:低频点是否都落在圆图右侧靠近Z=1的位置;高频点轨迹走向是否一致。如果测量轨迹平滑而重算轨迹在某些频段偏离,说明该频段的提取结果和S参数不自洽,先查分支,再查空气隙。这个图比单纯看εr、μr曲线多出一个维度,因为它同时包含了反射和相位信息,任何一方的错误都会直接把轨迹拉偏。实际工程中,这份图也是给客户或导师看的最直观的交付物,比一堆复数曲线容易解释得多。
5. NRW反演避坑指南:空气隙、半波长样品与五个真实翻车点
5.1 空气隙:高介电常数样品偏移最严重
现象:同一块氧化铝陶瓷,标称εr约9.8,用同轴夹具测完NRW反演出来只有8.5,而且频率越高偏低越明显;换一块尺寸配合更好的样品,数值又回到9.5以上。原因:样品外径比夹具外导体内径略小、内径比内导体外径略大,这个环形空气隙等效为一个串联电容,叠加在样品电容上,把总电容拉低。介电常数越高,空气隙的相对影响越大,因为空气的εr是1,和样品εr差距越大分压越厉害。解决:样品加工公差控制在±0.02mm以内,测试前实际测量样品内外径,不要信标称值。如果精度上不去,至少保证同轴夹具内外导体有弹性接触结构,或者换用填充导电弹性体的夹具。极端情况下可以做空气隙修正,把空气隙的几何尺寸代入等效电路模型反推,但那是最后手段,修正模型本身也有误差。
5.2 厚度接近半波长:相位模糊让结果跳变
现象:提取的εr或μr在某频率处突然冲高,形成一个窄尖峰,过了尖峰又回落到正常值,尖峰位置随样品厚度不同而移动。原因:样品厚度接近介质内半波长的整数倍时,T的相位跨越2π边界,unwrap在该频点附近选错了分支。如果频率步进不够细,相邻频点的相位差直接超过π,unwrap会漏掉真实跳变。解决:换更薄或更厚的样品让问题频点移出测试频段;把频率扫描步进加密到样品内介质波长的1/10以下;实在不行,用3.3节的分支检查脚本手动修正。注意这个现象和“半波谐振”本身无关,材料在厚度等于半波长时没有任何物理突变,突变完全来自相位展开算法。如果在Smith圆图上看到轨迹在该频点突然跳到圆图对侧,基本可以确诊。
5.3 薄样品与低损耗样品:计算病态的兜底手段
现象:样品厚度不足1mm,测试频率低于1GHz,提取的εr虚部在零点上下剧烈震荡,μr实部出现超过10的离谱值。原因:T接近1,ln(T)接近0,复折射率n = j·c0·ln(T)/(2πfd)变成两个小量相除,S参数的微小测量误差被放大百倍。低损耗样品更糟,|T|几乎是1,ln|T|的噪点直接变成虚部误差。解决:让样品电厚度至少达到介质波长的1/50,比如测1GHz以下介质,厚度至少2到3mm;做不到就降低最高测试频率或者改用谐振法测低损耗材料。这是我交过学费的地方:曾经为了省材料把样品磨到0.8mm想测到6GHz,结果3GHz以上全是毛刺,后来老老实实做了一块2.5mm的,一条干净曲线跑出来。薄样品的另一个兜底办法是改进校准:用TRL校准把参考面精确移到样品端面,能减少一部分系统误差,但治标不治本。
5.4 校准面与样品端面不重合:必须先做去嵌入
现象:提取结果带有周期性波纹,波纹周期对应的电长度正好是校准参考面到样品端面的空气线长度。原因:VNA校准在连接器参考面完成,但样品装在夹具中间,电磁波先经过一段空气线才到达样品,这段空气线贡献了额外的相移和微小的损耗,没有被NRW模型计入。解决:用VNA的Port Extension功能把参考面物理延长到样品端面,或者用去嵌入算法从S参数中扣除这段空气线。Port Extension操作起来最快:先测一个直通校准件,把延时刻度调到补偿值,再测样品。去嵌入更严谨但需要知道空气线的精确长度和特性阻抗,适合对精度要求高的场景。判断是否需要去嵌入的简单办法:把空夹具的S11测出来,如果显著偏离理想0dB无反射,说明夹具内还有未抵消的传输线段,必须处理。
5.5 频率间隔太粗和机械重复性差:两个隐性坑
现象一:同样的样品和脚本,在不同电脑或不同版本numpy上跑出来,个别频点的分支选择结果居然不同。原因:频率间隔太粗,相位展开在跳变点附近对浮点噪声敏感,阈值附近朝左朝右都可能。解决:重测加密频点,或改用逐点分支搜索,让程序对每个频点在m的候选值里选与上一频点Re(n)最接近的那个。现象二:同一块样品反复测量,εr曲线整体一致但某些频点抖动,重复测量对不上。原因:夹具锁紧力矩不同,或样品在夹具中位置轻微移动,空气隙尺寸变化。解决:夹具用定力矩扳手锁紧,样品装到位后用定位工装固定,至少测三次取中位数曲线。机械重复性看似与算法无关,但NRW对相位极敏感,零点几毫米的位移在高频段就是几度相位差,足以让分支选择跳变。这类问题在绝缘材料和气动夹具上尤其明显,别忽略。
6. 用三种独立手段验证提取结果:已知样品、色散关系与往返一致性
6.1 已知样品闭环:PTFE是天然标样
第一件事永远是测已知材料。PTFE块料是同轴夹具最容易加工也最容易买到的标样,εr在2.03到2.08之间,损耗角正切0.0002到0.001,基本无磁性。挤塑成型的PTFE各向同性,随便哪个方向切都能测。测完看提取的εr实部是否落在2.03到2.08区间,虚部是否在10MHz到10GHz范围内保持正且平坦。氧化铝陶瓷(99%含量)用作高介电标样,εr约9.6到10.2,损耗角正切约0.0001。如果这两个标样都测不准,先别急着测新材料,回头查校准、空气隙和分支。这个闭环验证每次测试前做一次,能挡住八成无效测量。
6.2 Kramers-Kronig一致性:虚部和实部互相牵制
第二件事是用色散关系做体检。因果性要求εr和μr的实部与虚部满足Kramers-Kronig积分关系,通俗说就是虚部出现损耗峰的位置,实部必然伴随一个S形下降,这是同一物理过程的正反两面。NRW提取结果如果虚部有个漂亮峰,但实部在对应频段却是一条平线,两者互相矛盾,结果肯定有错。实际操作不需要真的算积分,把实部曲线和虚部曲线叠在一张图上看相对趋势即可。以常见的德拜弛豫为例,虚部峰的中心频率附近,实部应该有明显的下降台阶,台阶宽度与峰的宽度同量级。磁导率同理,铁氧体的磁损耗峰必然伴随μr实部的色散下降。如果实部曲线平坦得不自然,就要回头怀疑空气隙或相位分支。
6.3 往返验证:用提取值重算S参数再比对测量曲线
我现在每次做完NRW提取,第一件事不是盯着εr、μr曲线看它多漂亮,而是把提取结果代回正向散射模型,重算S11和S21,再和实测S参数画在同一张图上比对。这个往返验证能一次性把分支错误、空气隙、去嵌入问题全暴露出来:对不上就说明反演过程和测量过程不自洽。正向计算的代码很短,前面已经写过calc_s_params的核心公式,直接复用即可。
def calc_s_params(f, thickness_m, mu_r, eps_r, c0=299792458.0): k0 = 2 * np.pi * f / c0 n = np.sqrt(mu_r * eps_r) Z = np.sqrt(mu_r / eps_r) Gamma_face = (Z - 1) / (Z + 1) T = np.exp(-1j * k0 * n * thickness_m) s11 = Gamma_face * (1 - T**2) / (1 - Gamma_face**2 * T**2) s21 = T * (1 - Gamma_face**2) / (1 - Gamma_face**2 * T**2) return s11, s21把重算的S11幅值和相位分别与实测的S11幅值相位画在一起,低频段对不齐是校准问题,高频段整体偏移是去嵌入或空气隙,某个窄带内对不上是分支问题。这些年积累下来的习惯是:测量数据存档时把原始S参数、提取的εr/μr、重算S参数三个文件放同一个目录,方便以后追溯。同样的提取脚本换了样品厚度必须重测,不要拿旧的S参数硬套。希望这些方法和踩过的坑,能帮你少走几步弯路。
本文还有配套的精品资源,点击获取