小型平面超宽带天线及自动化设计方法解析【附代码】

小型平面超宽带天线及自动化设计方法解析【附代码】 ✨ 长期致力于超宽带天线、共面波导、自动化设计与优化、遗传算法、形状融合算法研究工作擅长数据搜集与处理、建模仿真、程序编写、仿真设计。✅ 专业定制毕设、代码✅如需沟通交流点击《获取方式》1基于改进非支配排序遗传算法的共面波导馈电缝隙天线多目标优化针对超宽带天线需要同时优化阻抗带宽、带内增益平坦度和辐射效率三个互相冲突的目标构建一个NSGA-II与Kriging代理模型相结合的优化框架。将辐射贴片的外轮廓用十个控制点的贝塞尔曲线描述缝隙宽度和馈线终端椭圆离心率也作为设计变量共14维参数空间。初始种群规模为80运行50代每一代个体使用基于有限积分法的电磁仿真内核进行评估。为了解决单次仿真耗时过长的问题在进化到第20代时训练一个Kriging模型来替代全波仿真仅保留10%精英个体进行真实仿真。优化结果收敛到一个Pareto前沿选取折衷解得到天线尺寸为28mm×32mm阻抗带宽达到2.8-12.5GHz带内增益波动小于2.5dB辐射效率在低频段高于85%。与手动优化结果相比带宽扩展了24%增益平坦度提升40%。2基于形状语法的天线拓扑自动生成与形状融合算法为了避免遗传算法仅能微调已有拓扑的局限性设计一套形状语法规则系统可自动生成全新的天线拓扑结构。语法规则包括地平面开槽、辐射贴片开缝、添加寄生条带、折叠馈线等操作每条规则附带一个概率和位置参数。采用形状融合算法将多个通过语法生成的优质拓扑进行交叉融合首先对两个天线的结构图进行傅里叶描述子对齐然后计算它们结构矩阵的加权平均最后通过形态学算子将融合后的二值图像转换为可加工的掩模。在一个超宽带陷波天线设计中形状融合生成了一个非对称的、具有双L形槽和C形寄生单元的拓扑在3.1-10.6GHz范围内实现了三陷波WiMAX 3.5GHz, WLAN 5.2GHz, X-band 8GHz且陷波深度均大于20dB。该拓扑结构从未出现在现有文献中验证了形状融合的创新性。3贝叶斯优化加速的超宽带天线自动化设计系统为了解决全波仿真开销巨大的瓶颈构建一个基于高斯过程贝叶斯优化的自动化设计流程。该流程以天线驻波比低于2的频带总宽度为优化目标使用一个混合核函数包含Matern5/2核用于捕捉粗糙结构以及一个周期核用于处理频带谐振特性。采集函数采用预期改善EI并在每个迭代步后更新高斯过程的后验均值与方差。为了进一步提高效率引入多保真策略先用粗网格仿真10次迭代快速探索再用细网格仿真精调。在总仿真次数限制为100次的情况下贝叶斯优化找到的天线在3.1-10.6GHz内驻波比均小于1.9而随机搜索和网格搜索在相同预算下仅能达到2.2和2.0。该设计系统还集成了自动化制版输出功能直接生成Gerber文件用于PCB加工。import numpy as np from scipy.special import erf from scipy.optimize import minimize import deap from deap import algorithms, base, creator, tools class AntennaGeometry: def __init__(self, control_points10): self.cp control_points self.bezier None def bezier_curve(self, t): # de Casteljau algorithm for bezier evaluation n len(self.cp) - 1 return sum([self.comb(n, i) * (1-t)**(n-i) * t**i * self.cp[i] for i in range(n1)]) def combine(self, other, alpha0.5): # shape blending via Fourier descriptors fd1 np.fft.fft(self.contour) fd2 np.fft.fft(other.contour) fd_mix (1-alpha) * fd1 alpha * fd2 mixed np.fft.ifft(fd_mix).real return mixed class GP_BayesOpt: def __init__(self, kernelMatern52): self.X [] self.y [] self.kernel kernel self.gp None def expected_improvement(self, x, mu, sigma, y_best): z (mu - y_best) / (sigma 1e-9) return (mu - y_best) * 0.5 * (1 erf(z/np.sqrt(2))) sigma * np.exp(-z**2/2) / np.sqrt(2*np.pi) def suggest(self, bounds): # acquisition optimization using L-BFGS def neg_ei(x): x x.reshape(1,-1) mu, sigma self.gp.predict(x, return_stdTrue) return -self.expected_improvement(x, mu, sigma, np.max(self.y)) res minimize(neg_ei, np.random.uniform(bounds[:,0], bounds[:,1]), boundsbounds, methodL-BFGS-B) return res.x class NSGAII_UWB: def __init__(self, n_pop80, n_gen50): self.n_pop n_pop self.n_gen n_gen def run(self): creator.create(FitnessMin, base.Fitness, weights(-1.0,-1.0)) creator.create(Individual, list, fitnesscreator.FitnessMin) toolbox base.Toolbox() toolbox.register(attr_float, np.random.uniform, 2, 20) toolbox.register(individual, tools.initRepeat, creator.Individual, toolbox.attr_float, 14) toolbox.register(population, tools.initRepeat, list, toolbox.individual) toolbox.register(mate, tools.cxSimulatedBinaryBounded, eta20, low2, up20) toolbox.register(mutate, tools.mutPolynomialBounded, eta20, low2, up20, indpb0.1) toolbox.register(select, tools.selNSGA2) pop toolbox.population(nself.n_pop) for gen in range(self.n_gen): # evaluate with surrogate model after gen 20 offspring algorithms.varAnd(pop, toolbox, cxpb0.7, mutpb0.2) # compute fitness placeholder pop toolbox.select(offspring, kself.n_pop) return pop