使用NEC和遗传算法优化天线
项目描述
此项目可以使用遗传算法优化天线。它使用我为PGApack编写的Python包装器pgapy,该库最初由Argonne国家实验室的David Levine开发,目前由我维护。它还使用PyNEC,它是NEC2++的Python包装器,NEC2++是数值电磁场代码的C++版本。
最初,这个项目从低增益双元素天线开始,激励元素是一个折叠偶极子。该天线的一个要求是它应该有50Ω的阻抗,并且至少有一些前向增益。手动优化此天线很快变得繁琐,我开始尝试使用遗传算法进行优化。
原始实验可以在 folded.nec 和 folded2.nec 中找到。这些是命令行NEC程序输入文件。您可以使用 nec2c 命令行程序,该程序产生一个可以由 xnecview 查看的输出文件,或者您可以使用图形 xnec2c 程序。所有这些程序都在Linux下运行,并包含在Debian Linux发行版中。这些 .nec 文件也可能在其他操作系统的其他NEC版本中可用,但我没有尝试过。
为了优化双元素Yagi-Uda天线,您可以使用命令行工具 folded_antenna,其中优化器实现于 folded.py 中。后来,根据同样的原理,添加了一个3元素天线,在 folded_3ele.py 中,可以使用命令行工具 folded_3ele_antenna 调用。
antenna_model.py 将各种天线共有的部分抽象出来。
hb9cv.py 命令行工具 hb9cv_antenna 对知名的HB9CV天线进行了建模,但仅仅是非常粗糙的。NEC2并不适合对该天线的相位短路线进行建模,因为它不喜欢太接近的平行线。我主要做这个是为了将优化后的一些天线与知名的HB9CV性能进行比较。
在文件 logper.py 中,使用命令行工具 logper_antenna 可以找到一个9元素的对数周期天线。目前它无法进行优化,实际天线的性能优于NEC获得的结果,因此我尚未实现优化器。
所有天线程序都接受一个动作作为必选参数。动作通常是 optimize 以运行优化器或 necout 以创建一个 .nec 文件,然后可以将其输入上述提到的任何一个NEC程序。当运行优化器时,尝试不同的随机种子是有意义的,每个随机种子通常会生成不同的天线。此外,还有一些实验性动作,frgain 打印最低、中间和最高频率的向前和向后增益(以dBi为单位)以及那些频率的VSWR。 gain 动作可视化3D天线增益模式,而 swr 动作可视化给定频率范围内的VSWR。请注意,gain 和 swr 动作都使用NEC在整个频率范围内计算天线数据,这可能会花费一些时间。
优化器的输出是文本(通常被重定向到文件),打印出遗传算法每10代最佳天线的评估、VSWR、最大增益和前后比。此外,还会打印出创建该天线的命令行选项。当遗传算法不再取得进展时,搜索终止,并给出最佳评估的数据。以下是一个此类文本的最后几行的示例。数据来自早期程序版本中使用随机种子26的最佳2元素天线。
The Best Evaluation: 2.886437e+02. The Best String: -r 0.0364 -d 0.0444 -l 0.1704 -4 0.1075 VSWR: [1.7901433511443068, 1.1495780609982815, 1.7995760521232753] GMAX: 6.69913175227, RMAX: -3.03663376703 Cache hits: 5670/9243 61.34% Eval: 288.64 [ 101011001100101001111000000010011 ]
这告诉我们评估结果(仅对遗传算法有意义),遗传算法 最大化 这个值。在 The Best String: 这一行之后的命令行选项可以用来为该天线创建一个 .nec 文件。示例中的天线在频段两端电压驻波比小于 < 1.8,在频段中间大约为 1.15(在这种情况下,70cm 频段从 430 到 440 MHz)。在频段中间的前向增益为 6.7 dBi。RMAX 值是(最大)后向增益(在后方 30 度区域内)。因此,该天线的 F/B 比率为
6.7 dB - -3.0 dB = 9.7 dB
文本输出的最后一行包含该天线的遗传表示。可以通过以下命令创建优化了该包早期版本的该天线 .nec 文件
folded_antenna -r 0.0364 -d 0.0444 -l 0.1704 -4 0.1075 necout > folded-opt.nec
命令行选项指定折叠偶极子的半径、反射器与折叠偶极子的距离、(半)反射器的长度以及折叠偶极子直段的(半)长度。
根据 NEC,它在 430-440 MHz 范围内具有小于 < 1.8 的驻波比(VSWR),在整个频率范围内具有大于 6.5 dBi 的前向增益,并且具有 8-11 dB 的前向/反向比。
如果您想为自己的天线实现优化器,请查看 folded.py 文件:您需要实现一个类来定义新天线的几何形状,以及一个优化器类来初始化基因范围,并实现一个 compute_antenna 方法,该方法返回从给定基因中获得的参数的您的天线类的实例。所有模型中的长度均为公制(以米为单位),这是 NEC 的默认设置。
此包最近增加的功能涉及同轴电缆的建模。这使用了 Frank Witt 的一篇旧文章的信息,以从制造商的电缆数据中推导出建模具有损耗的传输线所需的所有必要信息。使用这些同轴模型的命令行工具命名为 coaxmodel。同样,此命令也有几个子命令
loss:显示从制造商数据中拟合的损耗曲线与所使用的曲线拟合算法,您可以看到拟合曲线与制造商数据在特定频率上的损耗之间的 dB 差异。
match 计算负载和输入(取决于哪个被作为输入,另一个被计算)的阻抗,匹配和总损耗(匹配损耗是负载完全匹配时的电缆损耗,总损耗是匹配损耗和由于反射引起的额外损耗的总和),SWR 以及各种短接匹配以获得电缆阻抗 Z0 的数据。
resonator 计算给定频率的同轴谐振器的电阻和 Q 因子。谐振器是一段电缆,其远端要么短路,要么开路。子命令计算给定频率的 1/4 波和 1/2 波谐振器。
stub 计算给定阻抗和频率的短接的长度、Q 因子以及结果阻抗,以及电感或电容。默认阻抗为 -100j 欧姆,可以通过 -x 选项更改。选择具有最短结果的长度,因此对于负电抗,选择开路短接,而对于正电抗,选择闭路短接。
对于所有这些子命令,您都可以指定用于计算结果的频率、电缆长度和阻抗(在负载或电缆末端)。您可以以a+bj的格式指定复阻抗,例如50-500j。
最后,transmission_line 程序可以使用 NEC 优化传输线的匹配。默认情况下,假设无损耗线路。默认情况下,还搜索最近的位置处的闭合短路。
可以使用 NEC 的 TL(传输线)卡片来模拟传输线。但 NEC 也可以使用 NT(网络)卡片模拟任意(对称、无源)网络。我们使用它(以及 coaxmodel.py 中的代码)来模拟具有损耗的真实电缆,用于短路匹配。将来自 coaxmodel 的解析短路匹配值与通过 transmission_line 的遗传算法优化得到的值进行比较是有益的。请注意,coaxmodel 采用 Hz 作为频率,而 transmission_line(使用 NEC)接受 MHz 作为频率。例如,我们可以匹配一个 75+15j Ω 的复阻抗
coaxmodel -c sytronic_RG_58_CU -f 435e6 -z 75+15j match
这会产生一个长度为 8.007 cm 的短路,距离负载 7.888 cm。当使用闭合短路进行匹配时,当优化 transmission_line
transmission_line -c sytronic_RG_58_CU -f 435 -z 75+15j optimize
我们得到 8.016cm 的短路长度和 7.6cm 的短路距离。我们可以通过以下方式在给定的频率范围内可视化这些结果
transmission_line -c sytronic_RG_58_CU -f 435 -z 75+15j -i 50 \ -l 0.0816 -d 0.076 --frqstart=430 --frqend=440 necout > x1.nec transmission_line -c sytronic_RG_58_CU -f 435 -z 75+15j -i 50 \ -l 0.08007 -d 0.07888 --frqstart=430 --frqend=440 necout > x2.nec
生产 NEC 输出
nec2c -i x1.nec > x1.out nec2c -i x2.nec > x2.out xnecview x1.out xnecview x2.out
然后使用
transmission_line -c sytronic_RG_58_CU -f 435 -z 75+15j -i 50 \ -l 0.0816 -d 0.076 --frqstart=430 --frqend=440 swr transmission_line -c sytronic_RG_58_CU -f 435 -z 75+15j -i 50 \ -l 0.08007 -d 0.07888 --frqstart=430 --frqend=440 swr
或者直接使用
这两种方法都很接近,在整个频率范围内,SWR 低于 1.1。请注意,如果匹配具有更高 VSWR 的负载阻抗,这可能会发生剧烈变化。
此外,请注意,上述示例中生成的 NEC 文件在每个频率下都有一个不同的 NEC 网络。这是因为 NEC 使用一个频率相关的 导纳矩阵 来模拟网络。
Frank Witt. 来自制造商数据的传输线特性。在 R. Dean Straw 编著的《ARRL 天线汇编》,第 6 卷,第 179-183 页。美国无线电中继联盟(ARRL),1999。
变更
版本 0.3:多目标优化
切换到 pyproject.toml 而不是 setup.py
允许使用 NSGA-III 进行多目标优化
允许建模地面
多个频率范围
允许在优化时使用平均增益。需要在 pynec 中修复一个错误 https://github.com/tmolteno/necpp/pull/73
添加 ε 约束优化。这允许在限制解决方案到低 SWR 的情况下更好地找到具有良好增益的区域
版本 0.2:更多电缆数据
修复设置以正确指定依赖项
添加更多电缆数据,以下命令将列出支持的电缆类型
coaxmodel --help
版本 0.1:初始发布
项目详细信息
antenna-optimizer-0.3.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e9c116a7aed196e9bb08b95536745bc673ced4c06853ed58f79e473e88e128bd |
|
MD5 | 2cff977684ae01130595cd7914395aa5 |
|
BLAKE2b-256 | 52c477ec8fe66d96b78dd5ebf99e14c9eb1df625dff149809bb8680a2c042254 |