此文为记录ADS方形同轴线RLGC建模从报错到功能正常调用的过程,最终解决方案见文末。
我们知道ADS中只有圆柱同轴线符号,没有其他结构的同轴线,因此我们在ADS仿真时,为了达到同样的阻抗,需要使用LineCalc计算实际阻抗在ADS中的同轴尺寸。

那有没有办法不用圆柱同轴符号呢?我们可以尝试一下用RLGC电路来模拟符号的方法。
比如使用W_Element符号,该符号用于通过 RLGC 参数配置多导体输电线路。

为了使用W_Element,我们需要准备RLGC文件。

首先记住一定要打开一个workspace后再打开这个窗口,否则界面是这样的。

打开workspace后command line窗口就变成这样了。

点击Apply运行文件,点击保存按钮保存ael文件到指定位置。

由于我们准备的代码是静默生成文件,所以控制台无输出。
代码如下——
decl pi; pi = 3.14159265358979;
decl c; c = 299792458;
decl mu0; mu0 = 1.2566370614e-6;
decl eps0; eps0 = 8.854187817e-12;
decl a; a = 0.35;
decl b; b = 0.64;
decl eps_r; eps_r = 1.0006;
decl tand; tand = 0.002;
decl sigma; sigma = 5.96e7;
decl start_freq; start_freq = 1e6;
decl stop_freq; stop_freq = 150e6;
decl num_points; num_points = 150;
decl ratio; ratio = a / b;
decl Z0; Z0 = (47.086 / sqrt(eps_r)) \* (1.0 - ratio) / (0.279 + 0.721
\* ratio);
decl v; v = c / sqrt(eps_r);
decl L0; L0 = Z0 / v;
decl C0; C0 = 1.0 / (Z0 \* v);
decl df; df = (stop_freq - start_freq) / (num_points - 1);
decl fid; fid = fopen(\"square_coax.rlgc\", \"w\");
fprintf(fid, \"\* RLGC File\\n\");
fprintf(fid, \"\* Z0=%.2f\\n\", Z0);
fprintf(fid, \"\\n\");
decl Rdc; Rdc = 1.0/(sigma\*a\*a);
fprintf(fid, \"0.000000e+00 %.6e %.6e %.6e 0.000000e+00\\n\", Rdc, L0,
C0);
decl i; i = 1;
decl f;
decl Rs;
decl R;
decl G;
while(i \<= num_points)
{
f = start_freq + (i-1)\*df;
Rs = sqrt(pi \* f \* mu0 / sigma);
R = Rs \* (1.0/(2.0\*a) + 1.0/(2.0\*b));
G = 2.0 \* pi \* f \* C0 \* tand;
fprintf(fid, \"%.6e %.6e %.6e %.6e %.6e\\n\", f, R, L0, C0, G);
i = i + 1;
}
fclose(fid);
可以看到已经生成了RLGC文件。

但是在如下的电路中运行报错了。

W_Element1的设置如图所示。截图是错的,输入路径不能带双引号,否则会找不到文件。建议将rlgc文件放在项目文件夹,默认文件夹层级是“.\Megawave_wrk\data”。

为了验证RLGC文件是否正常,以及确认W_Element1是否设置错误,我们搭建这样一个电路,频率范围设置与RLGC代码中的一致。
-
新建一个 空白原理图
-
只放这 4 个元件:
-
PORT 两个
-
W-ELEMENT1 一个
-
SP1 (仿真控制器)一个
-
-
连线:
PORT1 → W-ELEMENT1 → PORT2
地线全部默认

确认一下设置有没有问题。

运行提示如图所示,依然无法读取RLGC文件。

查阅官方文档寻找原因,得出以下结论。
我现在用的是 Model_type=0(静态模型),但我的 RLGC文件是按频率分段的格式写的,这完全不匹配!
一、官方文档明确说明:两种模式的文件格式完全不同
1. Model_type=0(静态模型)
-
只能用 RLGCfile 参数
-
文件里没有频率点!
-
格式:[N] L11 L21 L22 C11 C21 C22 Rdc11 Rdc21 Rdc22 Gdc11 Gdc21
Gdc22 Rs11 Rs21 Rs22 Gd11 Gd21 Gd22 -
我的文件里写了频率、1MHz、150MHz 这些,Model_type=0 会直接当成无效数据,报读取错误。
2. Model_type=1(频率相关模型)
-
不能用 RLGCfile 参数
-
必须用 Lfile / Cfile / Rfile / Gfile 分别定义每个矩阵的文件
-
每个文件的格式才是:[点数] 频率 L11 L21 L22 ...
-
我现在的文件格式,只能给 Model_type=1 用,给 Model_type=0 用必然报错!
那我们试着把 W-Element 改成频率相关模式。因为 Model_type=1 要求每个矩阵单独一个文件,把我的RLGC 文件拆成 4 个独立文件试试。
编写一下生成四个独立文件的代码——
decl pi; pi = 3.14159265358979;
decl c; c = 299792458;
decl mu0; mu0 = 1.2566370614e-6;
decl a; a = 0.35;
decl b; b = 0.64;
decl eps_r; eps_r = 1.0006;
decl tand; tand = 0.002;
decl sigma; sigma = 5.96e7;
decl start_freq; start_freq = 1e6;
decl stop_freq; stop_freq = 150e6;
decl num_points; num_points = 150;
decl ratio; ratio = a / b;
decl Z0; Z0 = (47.086 / sqrt(eps_r)) \* (1.0 - ratio) / (0.279 + 0.721
\* ratio);
decl v; v = c / sqrt(eps_r);
decl L0; L0 = Z0 / v;
decl C0; C0 = 1.0 / (Z0 \* v);
decl df; df = (stop_freq - start_freq) / (num_points - 1);
decl fidL; fidL = fopen(\"L.rlgc\", \"w\");
decl fidC; fidC = fopen(\"C.rlgc\", \"w\");
decl fidR; fidR = fopen(\"R.rlgc\", \"w\");
decl fidG; fidG = fopen(\"G.rlgc\", \"w\");
// 写入点数(含DC点,共151个)
fprintf(fidL, \"%d\\n\", num_points + 1);
fprintf(fidC, \"%d\\n\", num_points + 1);
fprintf(fidR, \"%d\\n\", num_points + 1);
fprintf(fidG, \"%d\\n\", num_points + 1);
// DC点
decl Rdc; Rdc = 1.0/(sigma\*a\*a);
fprintf(fidL, \"%.6e %.6e\\n\", 0.0, L0);
fprintf(fidC, \"%.6e %.6e\\n\", 0.0, C0);
fprintf(fidR, \"%.6e %.6e\\n\", 0.0, Rdc);
fprintf(fidG, \"%.6e %.6e\\n\", 0.0, 0.0);
decl i; i = 1;
decl f;
decl Rs;
decl R;
decl G;
while(i \<= num_points)
{
f = start_freq + (i-1)\*df;
Rs = sqrt(pi \* f \* mu0 / sigma);
R = Rs \* (1.0/(2.0\*a) + 1.0/(2.0\*b));
G = 2.0 \* pi \* f \* C0 \* tand;
fprintf(fidL, \"%.6e %.6e\\n\", f, L0);
fprintf(fidC, \"%.6e %.6e\\n\", f, C0);
fprintf(fidR, \"%.6e %.6e\\n\", f, R);
fprintf(fidG, \"%.6e %.6e\\n\", f, G);
i = i + 1;
}
fclose(fidL);
fclose(fidC);
fclose(fidR);
fclose(fidG);
运行后,我的工程目录会生成这 4 个文件,然后 W-Element1这样设置(Model_type=1)。

然后我们发现报了这个奇怪的错误。

然后人工智能给了我提供奇怪的提示——
官方文档的隐藏要求:Model_type=1 的文件格式
我再仔细看了一遍我贴的帮助文档,里面写了关键一句:
For Model_type=1, the data consists of pairs, where each pair is formed
by a frequency value followed by the matrix entries at that frequency.
对 N=1 的传输线,L/C/R/G 都是 **1x1 矩阵**,所以每一行的数据格式是:
频率值 矩阵元素
但还有一个 **关键细节**,官方文档没写死,但 ADS 强制要求:
**频率值必须是整数,不能是科学计数法!**
ADS 的解析器对科学计数法(如
1.000000e+06)有兼容性问题,我文件里的频率用 1.000000e+06
写,它会解析失败,直接报 Error reading the W_Element data file。
我们现在将频率全部改成普通数字。
decl pi; pi = 3.14159265358979;
decl c; c = 299792458;
decl mu0; mu0 = 1.2566370614e-6;
decl a; a = 0.35;
decl b; b = 0.64;
decl eps_r; eps_r = 1.0006;
decl tand; tand = 0.002;
decl sigma; sigma = 5.96e7;
decl start_freq; start_freq = 1e6;
decl stop_freq; stop_freq = 150e6;
decl num_points; num_points = 150;
decl ratio; ratio = a / b;
decl Z0; Z0 = (47.086 / sqrt(eps_r)) \* (1.0 - ratio) / (0.279 + 0.721
\* ratio);
decl v; v = c / sqrt(eps_r);
decl L0; L0 = Z0 / v;
decl C0; C0 = 1.0 / (Z0 \* v);
decl df; df = (stop_freq - start_freq) / (num_points - 1);
decl fidL; fidL = fopen(\"L.rlgc\", \"w\");
decl fidC; fidC = fopen(\"C.rlgc\", \"w\");
decl fidR; fidR = fopen(\"R.rlgc\", \"w\");
decl fidG; fidG = fopen(\"G.rlgc\", \"w\");
fprintf(fidL, \"%d\\n\", num_points + 1);
fprintf(fidC, \"%d\\n\", num_points + 1);
fprintf(fidR, \"%d\\n\", num_points + 1);
fprintf(fidG, \"%d\\n\", num_points + 1);
decl Rdc; Rdc = 1.0/(sigma\*a\*a);
fprintf(fidL, \"0 %.6e\\n\", L0);
fprintf(fidC, \"0 %.6e\\n\", C0);
fprintf(fidR, \"0 %.6e\\n\", Rdc);
fprintf(fidG, \"0 %.6e\\n\", 0.0);
decl i; i = 1;
decl f;
decl Rs;
decl R;
decl G;
while(i \<= num_points)
{
f = start_freq + (i-1)\*df;
Rs = sqrt(pi \* f \* mu0 / sigma);
R = Rs \* (1.0/(2.0\*a) + 1.0/(2.0\*b));
G = 2.0 \* pi \* f \* C0 \* tand;
fprintf(fidL, \"%.0f %.6e\\n\", f, L0);
fprintf(fidC, \"%.0f %.6e\\n\", f, C0);
fprintf(fidR, \"%.0f %.6e\\n\", f, R);
fprintf(fidG, \"%.0f %.6e\\n\", f, G);
i = i + 1;
}
fclose(fidL);
fclose(fidC);
fclose(fidR);
fclose(fidG);
运行提示依然如上图所示。
我们再翻一下help文件。
For Model_type=1, the data consists of pairs, where each pair is formed
by a frequency value followed by the matrix entries at that frequency.
For N signal lines, the matrix entries are:
L11 L12 … L1N L21 L22 … LNN
Similarly for R, C, G files.
……
When N=1, the matrices are scalar (1×1).
So each line is:
frequency value
……
NOTE:
The tabular model (Model_type=1) is intended for coupled lines (N ≥ 2).
For a single line (N=1), use the static RLGC model (Model_type=0).
N=1 不能用 Model_type=1,只能用 Model_type=0。
放弃 Model_type=1,回到 Model_type=0(static),只用 1 个 RLGC 文件。
我们写这样一段.ael代码,生成文件名static的RLGC文件。
decl pi; pi = 3.14159265358979;
decl c; c = 299792458;
decl mu0; mu0 = 4 \* pi \* 1e-6;
decl a; a = 0.35;
decl b; b = 0.64;
decl eps_r; eps_r = 1.0006;
decl tand; tand = 0.002;
decl sigma; sigma = 5.96e7;
decl ratio; ratio = a / b;
decl Z0; Z0 = (47.086 / sqrt(eps_r)) \* (1.0 - ratio) / (0.279 + 0.721
\* ratio);
decl v; v = c / sqrt(eps_r);
decl L0; L0 = Z0 / v;
decl C0; C0 = 1.0 / (Z0 \* v);
decl Rdc; Rdc = 1.0/(sigma\*a\*a);
decl Gdc; Gdc = 0.0;
// 生成 STATIC 格式 RLGC 文件(N=1 专用)
decl fid; fid = fopen(\"static.rlgc\", \"w\");
fprintf(fid, \"1\\n\"); // N=1
fprintf(fid, \"%.6e \", L0); // L11
fprintf(fid, \"%.6e \", C0); // C11
fprintf(fid, \"%.6e \", Rdc); // Rdc11
fprintf(fid, \"%.6e \", Gdc); // Gdc11
fprintf(fid, \"0.0 \"); // Rs11
fprintf(fid, \"0.0\\n\"); // Gd11
fclose(fid);
然后我们试一下,完美。


结果一模一样。
现在我们回过头来说明一下代码的计算过程:
- 基础物理常数
-
pi → 圆周率
-
c = 299792458 → 真空中光速
-
mu0 = 4πe-7 → 真空磁导率
这些是传输线计算的基础常数。
- 传输线几何参数
我仿真的是 方形同轴线:
-
a = 0.35:内导体半边长
-
b = 0.64:外导体内半边长
- 半径比 ratio
ratio = a / b
用于后面的阻抗经验公式。
- 核心公式:方形同轴线特性阻抗 Z0
Z0 = (47.086 / sqrt(eps_r)) * (1 - ratio) / (0.279 + 0.721 * ratio)
这是 ADS 官方方形同轴线阻抗经验公式
-
47.086 → 固定系数
-
sqrt (eps_r) → 介质影响
-
(1-ratio) → 几何尺寸影响
-
分母是拟合系数
输出:Z0 ≈ 31.68 Ω
- 相速度 v
v = c / sqrt(eps_r)
传输线中电磁波速度,永远比光速慢,由介质决定。
- 单位长度电感 L0
L0 = Z0 / v
传输线理论基础公式:
Z0 = sqrt(L0/C0)
v = 1/sqrt(L0*C0)
推导得到:
L0 = Z0 / v
- 单位长度电容 C0
C0 = 1 / (Z0 * v)
同样由传输线基础公式推导而来。
- 直流电阻 Rdc
Rdc = 1 / (sigma * a²)
-
sigma:导体电导率
-
a²:截面积
这是直流电阻模型。
- 直流电导 Gdc
Gdc = 0
理想介质,无漏电流。
- 生成静态 RLGC 文件(ADS 专用格式)
1
L11 C11 Rdc11 Gdc11 Rs11 Gd11
格式严格对应:
1 → N=1
L0 → 单位长度电感
C0 → 单位长度电容
Rdc → 直流电阻
Gdc → 直流漏电导
0 → 集肤效应电阻(静态模型不用)
0 → 介质损耗电导(静态模型不用)