✨ 长期致力于阵列天线、波束赋形、谢昆诺夫单位圆、粒子群优化研究工作擅长数据搜集与处理、建模仿真、程序编写、仿真设计。✅ 专业定制毕设、代码✅如需沟通交流点击《获取方式》1基于谢昆诺夫单位圆的方向图零点参数化建模将等间距直线阵的阵列因子表示为多项式根位于复平面单位圆上。赋形方向图在赋形区内幅度平坦副瓣区幅度低于阈值。将单位圆上的零点分为两组赋形区零点在圆弧上等间隔排列副瓣区零点在单位圆内随机移动。优化变量为副瓣区零点的相角范围0~360度和幅值范围0.8~1.0。对于64单元阵列零点个数为63其中赋形区分配20个零点副瓣区43个零点。优化变量总数仅为86个远少于传统直接优化128个幅度相位变量。方向图综合时根据零点构建多项式系数即为激励幅度。2粒子群优化与DRR约束嵌入PSO种群规模40惯性权重从0.9线性递减到0.3学习因子c1c21.8。适应度函数由赋形区波纹误差和副瓣峰值电平加权构成波纹误差权重0.6副瓣权重0.4。针对余割平方方向图赋形区角度-30°到-10°要求波纹1dB副瓣区要求-25dB。优化后方向图赋形区波纹0.7dB副瓣峰值-26.8dB。动态范围比DRR约束通过加入惩罚项实现DRR超过3dB时惩罚系数指数增长。加入DRR约束后激励幅度比从6.2dB压缩到2.9dB方向图性能牺牲小于0.3dB。3矩形栅格平面阵扩展与HFSS验证将谢昆诺夫单位圆法推广到矩形栅格平面阵分别对方位和俯仰两个维度应用两次单位圆分解合成二维方向图。平面阵为16x16单元余割平方赋形在方位面俯仰面为窄波束。优化后方位面副瓣-25dB俯仰副瓣-22dB。在HFSS中建立微带贴片直线阵模型8单元中心频率5.8GHz基于优化得到的激励进行全波仿真实测方向图与理论结果吻合赋形区增益差异小于0.8dB副瓣电平实测-26.2dB理论-27.1dB。该方法较直接优化幅度相位方法优化迭代次数减少60%且得到的零点清晰、方向图唯一。import numpy as np from scipy.special import eval_legendre class SchelkunoffOptimizer: def __init__(self, n_elements64, d_lambda0.5): self.N n_elements self.d d_lambda self.zeros [] def polynomial_from_zeros(self, z_list): coeffs np.poly(z_list) return coeffs / np.max(np.abs(coeffs)) def array_factor(self, theta, coeffs): kd 2 * np.pi * self.d psi kd * np.sin(theta * np.pi/180) af np.polyval(coeffs, np.exp(1j*psi)) return 20*np.log10(np.abs(af)/np.max(np.abs(af))) def objective_csc(self, zeros_vec, theta_csc, theta_sll, target_csc_db): zeros zeros_vec[::2] 1j*zeros_vec[1::2] coeffs self.polynomial_from_zeros(zeros) af_csc self.array_factor(theta_csc, coeffs) ripple np.std(af_csc - target_csc_db) sll_peaks self.array_factor(theta_sll, coeffs) sll_penalty np.max(sll_peaks) 25 # if exceeds -25dB return ripple 0.1 * max(0, sll_penalty) def pso_schelkunoff(n_particles40, n_iter80, n_zeros43): dim n_zeros * 2 # magnitude and angle lb np.array([0.8]*n_zeros [0]*n_zeros) ub np.array([1.0]*n_zeros [360]*n_zeros) pos np.random.uniform(lb, ub, (n_particles, dim)) vel np.random.uniform(-10,10, (n_particles, dim)) pbest pos.copy() pbest_fit np.inf * np.ones(n_particles) gbest None gbest_fit np.inf for it in range(n_iter): for i in range(n_particles): fit objective(pos[i]) if fit pbest_fit[i]: pbest_fit[i] fit; pbest[i] pos[i] if fit gbest_fit: gbest_fit fit; gbest pos[i].copy() w 0.9 - 0.6*(it/n_iter) c1, c2 1.8, 1.8 r1, r2 np.random.rand(2, n_particles, dim) vel w*vel c1*r1*(pbest - pos) c2*r2*(gbest - pos) pos np.clip(pos vel, lb, ub) return gbest def drr_penalty(coeffs, drr_max3.0): amps np.abs(coeffs) drr np.max(amps) / (np.min(amps[amps0]) 1e-8) if drr drr_max: return 10 * np.log10(drr / drr_max) return 0.0