☰
阵列方向图综合中的凸优化方法:建模、求解与工程避坑
2026/10/3 4:56:33 网站建设 项目流程

简介:这是一份针对均匀线性阵列(ULA)波束综合的 MATLAB 程序包,面向无线通信、雷达与天线工程领域的研究者和学生,演示如何利用凸优化方法设计阵列激励权重,实现对波束指向、旁瓣电平等辐射指标的精确控制,解决多波束、低旁瓣等典型阵列优化问题。凸优化建模可确保获得全局最优解,避免了传统方法易陷入局部最优的缺陷。压缩包内仅含 1 个 m 文件,整体大小约 677B,轻量精简,便于直接运行和修改学习;已有 249 人学习下载。程序围绕阵列综合的完整流程展开:定义阵元数量与间距、设定优化目标(如最大增益、最小旁瓣)、构建凸优化模型并调用工具箱求解,最后可视化综合出的方向图,直观展示相位权重调整对波束形状与旁瓣电平的影响。对于正在学习阵列信号处理或凸优化应用的开发者,这份资源提供了一个可运行的入门示例,帮助理解从问题建模到算法求解的关键环节,也可作为后续扩展研究(如非均匀阵列、多波束设计)的起点。

1. 阵列方向图综合为什么绕不开凸优化:从加权求和到可证明最优

做阵列信号处理的工程师,几乎都遇到过这种场景:给定阵元数量和间距,想压旁瓣、凹口、控制主瓣宽度,却发现无论怎么调幅度加权,方向图都不听话——旁瓣压下去一点,主瓣就展宽;凹口做深了,波束指向又偏了。这套调参的"玄学"背后,其实是把一个有约束的波束优化问题当成了无约束的经验调参。阵列综合(array-pattern-synthesis)本质上是一个多目标约束优化问题,而凸优化是少数能把"我要旁瓣低于-30dB、同时在某个方向凹口做到-50dB"这类诉求直接写成数学约束、并且保证收敛到全局最优的工具。array-pattern-synthesis这套代码做的事情,就是把方向图综合落到凸优化框架里:定义变量、写目标、加约束,然后交给求解器,而不是靠手动试权重。适合谁用?做相控阵波束赋形、MIMO天线设计、声呐/雷达阵列方向图设计,以及想从"调权重"升级到"写约束"的工程师。

2. 把阵列综合写成凸优化问题:目标、变量与约束的对偶关系

2.1 三种建模思路:最小二乘、最坏情况与罚函数

方向图综合的数学形式,通常是给定一个理想方向图,然后找一组阵元复权重,让实际方向图尽量接近它。但"尽量接近"有多种度量方式,这决定了问题的凸性,也决定了最终方向图的性格。

第一种是最小二乘(LS)建模。目标函数写成实际方向图与期望方向图的误差平方和,即 min ||A^H w - d||²,其中A是阵列流形矩阵,w是复权重向量,d是期望响应向量(在主瓣方向为1,旁瓣方向为0)。这个目标关于w是凸的(二次函数),求解稳定,但结果往往旁瓣电平不稳定——个别角度可能很高,因为平方误差会容忍"整体偏差小但局部尖峰高"的方向图。

第二种是最坏情况(minimax)建模,也叫切比雪夫意义上的最优。目标写成 min max|A^H w - d|,也就是把最大的偏差压到最小。这个目标同样是凸的,通过引进一个辅助变量t,转成带约束的线性规划或二阶锥规划(SOCP)。这个写法在波束优化里最常用,因为它直接约束旁瓣峰值,得到的旁瓣电平比LS低好几个dB。

第三种是罚函数法。把旁瓣约束或主瓣平坦度作为惩罚项加入目标,比如 min |A_main^H w - 1|² + λ|A_sidelobe^H w|²,λ是罚系数。好处是调节λ可以连续地在"主瓣匹配"和"旁瓣压低"之间走折中,坏处是λ的选择很依赖经验,选大了主瓣变形,选小了旁瓣压不下来。

对偶关系在这里的体现是:凸优化问题天然有强对偶性,原问题(primal)和对偶问题(dual)的最优值相等。这意味着你用CVX或cvxpy求解时,求解器内部会同时迭代原变量和对偶变量,当对偶间隙(duality gap)降到阈值以下,就可以确认当前解已经是全局最优。这在阵列综合里带来的实际好处是:你不用再担心这次解出来的只是"局部最优,换个初值结果就变了"——只要建模是凸的,初值不影响结果。

2.2 变量选择:复权重直接优化,别碰相位和幅度分离

很多做阵列综合的工程师习惯把问题写成幅度加权和相位加权分开优化,这其实是让问题变非凸的常见方式。幅度加权的目标是非线性的,相位优化本身也是循环的(相位0度和360度等价),直接做联合搜索就是NP难问题。

array-pattern-synthesis这类代码用的变量是复数权重w = [w_1, ..., w_N]^T,每个w_i同时包含了幅度和相位信息。这样方向图P(θ) = |a(θ)^H w|²,其中a(θ)是阵列流形向量。问题的关键在于:P(θ)关于w并不是凸的(二次函数在外层取了模方),但可以通过两种方式凸化:

一种是把模方展开成w^H a(θ) a(θ)^H w,然后用SDP松弛(半定松弛),把对w的优化转为对秩1半正定矩阵X = w w^H的优化,丢掉秩1约束后问题变成SDP,凸了;解完再对X做特征分解,取最大特征值对应的特征向量作为w。代价是松弛后可能得到一个秩大于1的X,这时方向图是所有特征向量的加权混合,实际不可实现,就要做秩1恢复。

另一种是固定主瓣方向,只优化旁瓣区域的响应上界。这在数学上会写成SOCP,不需要SDP松弛,因为目标函数变成线性函数(max旁瓣电平的变量t),约束是二次锥约束,整个问题直接凸。array-pattern-synthesis如果追求求解速度快,用这种写法更实际。

2.3 约束怎么设:主瓣宽度、旁瓣电平、凹口与动态范围比

波束优化的约束写在代码里是几个向量和区间,但每个参数背后是工程折中。以均匀线阵(ULA)为例,阵列流形向量第n个元素是exp(j 2π d n sin(θ)/λ),d是阵元间距,λ是波长。这里四个约束:

主瓣约束:在主瓣区域内(比如-10°到10°),要求|a(θ)^H w| ≥ 1。这是一个下界约束,但|·|≥1对w不是凸的。常见处理办法是只约束主瓣方向θ₀上的响应等于1(等式约束),然后让主瓣内的波纹自然形成;或者用相位旋转的技巧——先假设主瓣方向的响应是实数(可以通过对所有w乘一个公共相位做到),然后约束实部≥1,虚部=0,这样就凸了。

旁瓣约束:在旁瓣区域(比如|θ| > 15°),要求|a(θ)^H w|² ≤ γ,γ是目标旁瓣电平(比如-30dB对应的线性值是0.001)。这个约束是凸的(二次锥),直接写。

凹口约束:对特定方向θ_notch要求|a(θ_notch)^H w|² ≤ δ,δ通常比旁瓣电平再低20dB以上。形式上和旁瓣约束完全一样,只是作用域从一段区间变成一个点。注意单点凹口在物理上很窄,实际方向图里凹口附近的旁瓣往往会在凹口两侧冒起来——这需要在凹口邻域内多取几个采样角度一起约束。

动态范围比(DRR)约束:限制加权幅度之比,即max|w_i| / min|w_i| ≤ ρ。这个约束写成max|w_i| ≤ ρ·min|w_i|,因为min|w_i|本身也是变量,写起来是双线性。实际做法是用一个迭代过程:先不加DRR约束求一个解,得到权重幅度分布后,把幅值小于某个阈值的权重置为阈值,再重新优化相位。array-pattern-synthesis的代码里,如果做的是相控阵馈电设计,DRR通常通过归一化后的权重裁剪来实现。

3. 用CVX跑通最小旁瓣电平综合:完整代码与参数落地

3.1 环境准备:从array-pattern-synthesis.zip到可求解的模型

这套代码最经典的使用环境是MATLAB加上CVX工具箱(也有人在Python里用cvxpy复现,思路一样)。CVX用来描述凸优化问题,底层调求解器(默认sedumi,也可以换mosek或SDPT3)。CVX的安装路径一般要添加到MATLAB的path里,然后运行cvx_setup校验。

解压array-pattern-synthesis.zip后,通常能看到几类文件:阵列流形生成函数、问题建模脚本、结果绘图脚本。如果只想要一个最小可跑通的环境,核心依赖其实就三个:一个生成steering vector的函数,一个调用CVX求解的脚本,一个角度采样网格。在写代码前,先确定指标:阵元数N、间距d(单位取波长倍数)、主瓣指向θ₀、旁瓣区域定义、目标旁瓣电平。

参数选择上有几个原则:阵元数N决定自由度,N越大,能同时满足的约束越多;角度采样间隔取0.5°到1°就够,太密约束数量增加,求解变慢,太稀约束会漏掉旁瓣峰值;d一般取0.5λ,避开栅瓣的同时留出足够自由度。

3.2 最小化旁瓣电平的CVX代码与逐段说明

以32元均匀线阵、主瓣指向0°、要求旁瓣区域(|θ|>12°)电平最低为例,代码如下:

% 均匀线阵最小旁瓣电平综合 % 变量:复权重 w(N×1) % 目标:最小化旁瓣峰值 t % 约束:主瓣方向响应=1,旁瓣区域|响应|^2 <= t clear; clc; % ---- 阵列参数 ---- N = 32; % 阵元数 d = 0.5; % 阵元间距,单位:波长 theta_main = 0; % 主瓣指向(度) sidelobe_start = 12; % 旁瓣区域起始角度(度) theta_grid = -90:0.5:90; % 角度采样网格 % ---- 构建阵列流形矩阵 A(每一列对应一个角度) ---- theta_rad = deg2rad(theta_grid); A = exp(1j * 2 * pi * d * (0:N-1).' * sin(theta_rad)); % ---- 分离主瓣与旁瓣索引 ---- main_idx = find(abs(theta_grid - theta_main) < 0.5); sidelobe_idx = find(abs(theta_grid) >= sidelobe_start); % ---- CVX求解 ---- cvx_begin sdp variable t variable w(N) complex % 归一化:主瓣方向响应为1(通过公共相位旋转保证实部不为负) real(A(:, main_idx)' * w) == 1; imag(A(:, main_idx)' * w) == 0; % 旁瓣约束:|A_sidelobe' * w|^2 <= t for k = 1:length(sidelobe_idx) abs(A(:, sidelobe_idx(k))' * w) <= sqrt(t); end minimize(t) cvx_end % ---- 提取权重并绘图 ---- w_opt = w; theta_plot = -90:0.1:90; A_plot = exp(1j * 2 * pi * d * (0:N-1).' * sin(deg2rad(theta_plot))); pattern = 20*log10(abs(A_plot' * w_opt) + 1e-6); plot(theta_plot, pattern); grid on; xlabel('角度(deg)'); ylabel('归一化方向图(dB)');

代码逻辑解释:第一段定义阵列参数,N和d是物理参数,theta_grid是方向图采样角度。构建A矩阵时,(0:N-1).'是一个N×1的列向量,sin(theta_rad)是1×L的行向量,两者相乘得到一个N×L的矩阵,第k列就是第k个角度对应的流形向量。这里MATLAB的隐式扩展(R2016b以后)会自动广播,不需要repmat。

CVX部分用SDP模式(cvx_begin sdp),但实际约束里没有矩阵变量,只有平方锥约束,写成sdp只是保留了SDP的求解路径。主瓣约束用实部等于1、虚部等于0来控制主瓣方向响应为1,这里其实隐含了一个前提:w可以任意旋转公共相位,所以主瓣方向的响应可以旋转到实数轴上。旁瓣约束写成abs(...) <= sqrt(t),等价于|A^H w|² <= t,因为两边都是非负的,开方后还是等价。minimize(t)直接压下旁瓣峰值,这就是minimax准则。

CVX跑完后,t就是最优旁瓣电平的线性值。一个常见的疑问是:为什么不是直接minimize(t)然后约束写在|A^H w| ≤ t?那样也可以,但把t开根号放进约束,能让CVX识别成二阶锥,数值上更稳定。

3.3 结果评判:方向图指标、收敛性与可行性

跑完代码后,第一个看的指标自然是旁瓣电平。把optval转成dB,20*log10(sqrt(cvx_optval)),跟初始的均匀加权方向图对比,32元均匀线阵的均匀加权旁瓣大约在-13.2dB,凸优化综合后通常能做到-35dB以下(约束足够稀疏的情况下)。但这不代表约束越多越好——约束数量增加,可行域缩小,旁瓣电平会回弹。

第二个看的是方向图主瓣宽度。凸优化压低旁瓣的代价通常是主瓣展宽,因为旁瓣抑制约束相当于把能量从旁瓣推回主瓣,而主瓣宽度和阵元数决定的瑞利限有关。如果综合结果主瓣宽度比均匀加权宽了太多(超过1.5倍),说明旁瓣目标定得太激进,需要放松。

第三个看求解状态。CVX会输出Status: Solved还是Inaccurate/Solved,后者说明求解器在数值上有问题。如果返回Infeasible,说明约束冲突——最常见原因是旁瓣目标定得低于理论极限(N个阵元的自由度决定了旁瓣最小可达到约-20log10(N)+一些常数),这时要降约束。

4. 波束优化的求解器选择与调参:SDP、SOCP与迭代加权

4.1 SDP与SOCP在波束优化里的分工

阵列综合的约束可以写成多种凸结构,CVX会根据表达式自动选择求解路径,但理解背后路径对排查数值问题很有用。SOCP(二阶锥规划)处理的约束是||x|| ≤ t的形式,比如旁瓣约束|A^H w| ≤ t就是一个锥约束。SDP(半定规划)处理的是矩阵半正定约束,比如SDR松弛后的X ≥ 0。

有个经验:单纯做旁瓣最小化、凹口约束时,SOCP表达比SDP快得多,因为SOCP的内点法迭代每步成本是O(N²)量级,而SDP处理N×N矩阵变量时每步是O(N³)。在CVX里,如果要显式避免把问题转成SDP,应该用cvx_begin(默认高斯-牛顿模式),并通过变量声明让CVX识别SOCP结构。array-pattern-synthesis里如果只写标量/向量变量,CVX会自动选SOCP求解器。一旦引入了hermitian semidefinite的矩阵变量,就躲不开SDP。

我一般建议的路径是:先尝试直接SOCP建模,不带SDR;不行(约束里出现|w_i|之间的比值、秩1约束的需要)再上SDR。

4.2 迭代加权l1范数:让稀疏阵列综合更好用的技巧

阵列综合的一个进阶需求是稀疏阵列:给定一个满阵,想用更少的阵元实现接近的方向图。这时的变量不是一个固定长度的权重向量,而是N个权重加一个"用/不用"的二值选择。二值变量是非凸的,常见做法是把权重向量的l0范数松弛成l1范数,但直接l1会让所有阵元权重都变小,不能真正选出子集。

迭代加权l1(Iteratively Reweighted l1 Minimization, IRL1)是实际阵列优化里更可用的方案:第0次先做一次常规凸优化,得到权重w^(0);第1次迭代时,在目标函数里加上加权l1范数Σ (1/(|w_i^(0)|+ε))·|w_i|,其中ε是一个防止除零的小量(比如1e-6)。权重小的阵元在下次迭代中会被压得更狠,权重大的阵元保持原样,迭代5-10次后,大部分小权重阵元会被压到接近0,剩下的就是稀疏阵列的位置。

实现时,目标函数变成min t + μ·Σ β_i·|w_i|,旁瓣约束不变。β_i = 1/(|w_i^(prev)| + ε)是迭代权重。μ是稀疏性正则系数,μ越大,阵元越稀疏,但方向图指标越差。这个超参没有解析解,用网格扫:μ从0.01开始,步长×10直到方向图主瓣展宽超过可接受范围。

下面给一段cvxpy的Python实现(如果你是把array-pattern-synthesis的思路迁移到Python环境,cvxpy更顺手):

import numpy as np import cvxpy as cp # 参数 N = 32 d = 0.5 theta = np.arange(-90, 90.1, 0.5) A = np.exp(1j * 2 * np.pi * d * np.arange(N)[:, None] * np.sin(np.deg2rad(theta))) # 旁瓣区域 sidelobe_idx = np.where(np.abs(theta) >= 12)[0] main_idx = np.where(np.abs(theta) < 0.5)[0] # 迭代加权l1 mu = 0.05 eps = 1e-6 w_prev = np.ones(N, dtype=complex) # 初始均匀加权 for it in range(8): beta = 1.0 / (np.abs(w_prev) + eps) w = cp.Variable(N, complex=True) t = cp.Variable() constraints = [ cp.real(A[:, main_idx[0]] @ w) == 1, cp.imag(A[:, main_idx[0]] @ w) == 0, ] for k in sidelobe_idx: constraints.append(cp.abs(A[:, k] @ w) <= cp.sqrt(t)) objective = cp.Minimize(t + mu * cp.sum(beta @ cp.abs(w))) prob = cp.Problem(objective, constraints) prob.solve(solver=cp.CLARABEL) w_prev = w.value print(f"iter {it}: weight norm = {np.linalg.norm(w_prev):.4f}")

这段代码的核心在循环:每次重新计算beta,让已经很小的权重在下一次迭代中被施加更大的惩罚。注意cvxpy里cp.abs(w)对复数变量求的是模,cp.sqrt(t)对非负t是凹函数,但放在约束的右侧是允许的(非凸方向在约束里要小心),实际cvxpy会把这类约束规范成锥约束。

4.3 正则参数与主瓣约束的折中:从血泪经验里总结的调参顺序

正则参数μ是最难调的一个量,因为它同时影响方向图指标和阵列稀疏度。经验是:先用大步长扫(0.01、0.1、1),确定方向图指标能承受的μ上限;再用二分法在0.02到0.2之间细扫。看两个曲线:阵元有效数量-μ曲线和旁瓣电平-μ曲线,两者交汇处附近就是可用工作点。

主瓣约束还有个容易忽略的细节:当旁瓣目标很激进时,SDP松弛解出来的X秩大于1,反代回去的方向图是多个秩1方向图的混合,旁瓣可能看起来很好,但不是物理可实现的方向图。这时候有一个"后悔药"做法:先对X做主特征分解,取主特征向量w1回代,计算方向图P1;再检查P1的旁瓣是否超限。如果超限,把旁瓣目标放松3-5dB,重新求解。这个反馈在代码里需要自动完成,否则你会在调试时看到"求解说最优,但方向图就是不对"的怪相。

5. 阵列综合避坑指南:五个让方向图翻车的真实问题

5.1 旁瓣约束太紧导致求解器不可行

现象:CVX返回Infeasible,或者求解器提示"Failed"。

原因:目标旁瓣电平低于理论可达到的下限。N阵元均匀线阵的自由度是N-1(去除相位模糊),你要同时约束主瓣响应为1、旁瓣峰值低于某个极值,当极值低于-20log10(N)+常数时,可行域就是空的。

解决:先不加旁瓣约束做一次纯主瓣响应约束的求解,得到最小可达到的旁瓣电平作为参考下界;然后把这个下界加上3-5dB作为实际约束值。如果确实需要更低旁瓣,只有两条路:增加阵元数N,或者放宽主瓣宽度约束(主瓣宽了,旁瓣可压低的空间就大了)。

5.2 相位变量引发非凸:为什么不能直接优化阵元相位

现象:方向图综合结果主瓣指向偏了,或者方向图不对称,即使约束写了主瓣方向响应=1。

原因:有的综合代码为了控制DRR,把变量拆成了幅度和相位,然后对相位加约束。但方向图关于相位变量的函数是高度非线性的,一个相位从179度变到181度,方向图响应几乎不变,但从181度变到-179度,看似只有2度变化,实际方向图变化巨大。这种周期性让排序/搜索算法完全失效。

解决:写变量时只用复权重,相位信息天然包含在复数里。如果要对相位加约束(比如限制移相器量化范围),用不等式约束复权重的实部虚部比值,而不要直接约束角度。array-pattern-synthesis如果提供了直接优化幅相的脚本,我建议一律改成复权重建模。

5.3 阵元间距与栅瓣:凸优化救不了物理层面

现象:方向图在±90度附近出现和主瓣几乎等高的栅瓣,优化后旁瓣电平指标显示很漂亮,但栅瓣峰值完全失控。

原因:阵元间距d在流形向量里出现在相位项2π d sin(θ)/λ里。如果d > 0.5λ,当sin(θ)变化使得相位扫过2π时,流形向量会重复,方向图出现栅瓣。这是一个数学上"合法但物理上不可接受"的解,凸优化只保证数学最优,不保证避免栅瓣。

解决:这是建模阶段就要解决的问题,不是求解阶段。d必须≤0.5λ,如果要大间距(减少阵元数量),必须用非均匀阵列,让间距不满足周期性——但这时流形向量变了,需要把每个阵元的实际位置x_n写进流形向量公式exp(j 2π x_n sin(θ)/λ),而不是等间距的简单形式。

5.4 数值尺度问题导致CVX报错 Incorrectly bracketed

现象:CVX报"numeric problems"或者"Incorrectly bracketed (normally caused by invalid values) ",有时还会出现NaN。

原因:方向图响应数值跨度太大。主瓣方向响应归一化为1,而旁瓣约束如果写成0.001这样的线性值,和实部虚部约束里出现的1,数值量级差1000倍。内点法在求解时,对偶变量容易溢出。

解决:把旁瓣约束、凹口约束从线性值改为以dB为单位的表达式:用10^(-sl_dB/20)作为sqrt(t)的约束目标,只在最后显示方向图时转dB。另一个技巧是把角度网格从度数换成弧度:当角度接近±90度时,sin(θ)对θ的变化率接近0,流形向量变化极小,约束矩阵接近病态,改用单位向量u = sin(θ)作为采样变量(常规做法是把方向图表达为关于u = sin(θ)的函数),这样阵列流形变成exp(j 2π d n u),数值属性好很多。

5.5 求解器选错导致速度慢或精度差

现象:同样的SDP问题,用sedumi要跑几分钟,换成mosek十几秒就出结果;或者sedumi返回精度不足。

原因:CVX默认的sedumi是为通用SDP设计的,处理中等规模(N=8-16)没问题,但N>32的SDP加上几百个锥约束时,迭代次数明显上升。mosek的锥优化引擎对SOCP和SDP混合问题做了专门优化。

解决:安装mosek后在CVX里用cvx_solver mosek指定。实际对比中,32元阵列旁瓣最小化问题,sedumi大约需要30-60秒,mosek通常10秒内。但mosek是商业软件,要license;如果没有license,把问题改成SOCP形式配合sedumi,速度也能接受。另一个免费选择是SDPT3,对稀疏约束结构支持更好,但需要把约束写成矩阵形式。

6. 从综合到验证:用蒙特卡洛检验波束优化的鲁棒性

方向图综合做出来的权重,仿真阶段看着漂亮,上到实际阵列上就变形,这是阵列优化最常见的翻车场景。原因几乎都指向同一个问题:仿真里假设每个阵元的幅度和相位都精确等于权重值,而实际阵元有幅相误差——馈线长度偏差、移相器量化误差、功放不一致,都会让实际方向图偏离设计值。

我习惯在综合完成后做一轮蒙特卡洛验证。做法是:给设计好的权重w_opt叠加随机幅相误差,w_real = w_opt .* (1 + amp_err) .* exp(1j * phase_err),其中amp_err是幅度误差(标准差取0.05,即±5%),phase_err是相位误差(标准差取2度到5度),每个阵元独立。跑1000次,统计主瓣指向偏差、旁瓣电平均值和最大值、凹陷深度的变化范围。

验证指标上有一个经验值:如果相位误差标准差超过5度,综合时旁瓣设计值就必须预留至少6dB的裕量。也就是说,如果实际系统预期相位误差5度,目标旁瓣就不要定-40dB,定-34dB以下才稳妥。array-pattern-synthesis如果提供了误差鲁棒性综合的选项(即加上对角加载或者最坏情况鲁棒约束),这通常是用一个额外的凸约束实现的:在主瓣周围加一个不确定集,约束在该集合内响应下界仍满足要求。

蒙特卡洛验证的代码片段如下:

% 蒙特卡洛:1000次随机幅相误差下的方向图统计 n_mc = 1000; n_theta = length(theta_plot); patterns = zeros(n_mc, n_theta); rng(2024); for mc = 1:n_mc amp_err = 1 + 0.05 * randn(N, 1); % 幅度误差 ±5% phase_err = exp(1j * deg2rad(3) * randn(N, 1)); % 相位误差 3度(标准差) w_real = w_opt .* amp_err .* phase_err; patterns(mc, :) = 20*log10(abs(A_plot' * w_real) + 1e-6); end p_sidelobe_max = max(patterns(:, sidelobe_region), [], 2); % 每个样本的旁瓣峰值 fprintf('旁瓣峰值均值: %.1f dB, 最大值: %.1f dB\n', ... mean(p_sidelobe_max), max(p_sidelobe_max));

这段代码的目的不是看某一次的方向图,而是看误差注入后旁瓣峰值的分布。如果p_sidelobe_max的最大值比设计值高了8dB以上,说明权重对误差太敏感,应该回头加上鲁棒约束重新综合。

做阵列综合这几年,我最大的感受是:凸优化解决的是"给定约束下找最优权重"这一层,但"约束怎么定才符合物理系统"这件事,永远要靠工程师自己判断。旁瓣定多少,凹口放多宽,DRR限多少,这些参数背后是硬件能力和误差预算,不是求解器能给的。现在我做新的阵列设计,都会先把误差预算算完,再回头定方向图指标,最后才进凸优化求解器。这套顺序省了我太多返工时间,希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询