ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

MATLAB实现道尔夫-切比雪夫加权线阵天线方向图综合

MATLAB实现道尔夫-切比雪夫加权线阵天线方向图综合

简介:这份资源面向学习阵列信号处理与相控阵天线综合的高校学生、科研人员及工程技术人员,提供基于MATLAB的线阵道尔夫-切比雪夫加权完整仿真代码,用于解决低副瓣方向图综合中激励幅度分布求解与性能验证的问题。压缩包共3个文件,包含2个m脚本与1个txt说明文档,整体约2KB,其中脚本分别承担切比雪夫加权系数计算与方向图仿真,说明文档用于交代使用方式。代码支持自由修改阵元个数、阵元间距、副瓣电平、波束指向角度与信号频率等参数,可直观对比不同参数对激励幅度分布和方向图的影响,关键部分均附有文字注释,便于理解算法流程与调试思路。目前已有1002人学习下载,适合作为课程设计、毕业设计或科研入门的参考范例,帮助读者快速掌握切比雪夫加权在阵列综合中的实现方法。

1. 从一副“旁瓣压不下去”的方向图说起

做线阵天线综合的人,大概都经历过这样的场景:阵元数、阵元间距都定好了,主瓣宽度也勉强能接受,可一到方向图上看旁瓣,怎么调都压不到指标线以下。均匀加权的线阵,第一旁瓣电平理论上就卡在 -13.2 dB 附近,想再往下压,靠改幅度分布是唯一的路。这时候道尔夫-切比雪夫加权就登场了——它能在给定旁瓣电平的前提下,把主瓣宽度做到最窄,是等旁瓣综合里公认的“最优解”。

这套方案要解决的,就是在 MATLAB 里把道尔夫-切比雪夫加权完整实现出来:从阵列参数设定、切比雪夫多项式阶数匹配,到加权系数求解、方向图绘制,再到和均匀加权做对比验证。适合正在做天线方向图综合、阵列信号处理相关毕设或课设的人,也适合需要快速验证线阵加权效果的从业者。整份方案不依赖任何工具箱里的黑盒函数,核心步骤全部可复现、可改参数。

2. 需求拆解与技术选型:为什么是 MATLAB 加切比雪夫

2.1 阵列综合到底要解决什么问题

线阵天线综合,本质上是在“主瓣宽度”和“旁瓣电平”之间做权衡。阵元数 N 和阵元间距 d 一旦确定,主瓣宽度就基本被孔径锁死了,能动的只有各阵元的激励幅度(有时还有相位)。均匀加权的主瓣最窄,但旁瓣高;二项式加权旁瓣最低,但主瓣宽得离谱。道尔夫-切比雪夫加权正好卡在中间——你指定一个旁瓣电平 R0,它给你一组幅度系数,保证所有旁瓣都等于这个电平,同时主瓣宽度是同等旁瓣电平下最窄的。

这个“等旁瓣”特性是切比雪夫多项式的数学性质带来的。N 元线阵的方向图函数可以写成切比雪夫多项式 T_{N-1}(x) 的形式,通过变量代换把可见区映射到 |x|≤1 之外,就能让旁瓣在等波纹意义上被压平。理解这一点,后面写代码时才知道每一步在干什么,而不是照抄公式。

2.2 为什么选 MATLAB 而不是 Python

不是说 Python 做不了,numpy 加 scipy 一样能算。但天线方向图综合这个场景,MATLAB 有三个实打实的优势:一是复数运算和矩阵操作写起来更贴近公式本身,代码和推导几乎一一对应;二是极坐标绘图、方向图归一化、dB 刻度这些天线领域常用的可视化,MATLAB 的 polarplot 和 semilogy 开箱即用;三是很多高校的阵列信号处理课程本身就基于 MATLAB,交作业、写报告时环境一致,省去解释依赖的麻烦。

选型上还有一个考虑:这份方案要能直接跑。不调用 phased array toolbox 里的现成函数,是因为那些函数把中间过程封装了,你拿不到加权系数向量,也没法逐步验证。自己从切比雪夫多项式递推开始写,每一步的中间变量都能打印出来看,出了问题知道卡在哪。

2.3 关键参数与符号约定

在动手之前,先把符号和参数定清楚,不然后面代码里容易乱。阵元数记作 N,阵元间距记作 d,通常用波长归一化,写成 d/λ。旁瓣电平指标记作 R0,用 dB 表示,比如 -30 dB。波数 k = 2π/λ,但实际计算方向图时用归一化角度 u = (d/λ)·sin(θ) 更方便,θ 是从阵列法线方向量起的扫描角。

参数符号典型取值说明
阵元数N8 / 16 / 32决定多项式阶数 N-1
阵元间距d/λ0.5半波长避免栅瓣
旁瓣电平R0-20 ~ -40 dB指标越低压得越狠
扫描角范围θ-90° ~ 90°可见区对应 u ∈ [-d/λ, d/λ]

这里有个容易忽略的点:d/λ 取 0.5 是常规操作,但如果大于 0.5,可见区会超出切比雪夫多项式的有效映射范围,出现栅瓣,这时候切比雪夫加权也救不了。所以方案里默认 d/λ = 0.5,需要其他间距时在代码里改参数并重新检查栅瓣条件。

3. 总体设计:从多项式到加权系数的完整链路

3.1 方案的整体结构

整个方案分四层:参数层负责接收 N、d/λ、R0 三个输入;多项式层根据 N 和 R0 构造切比雪夫多项式并确定阶数;系数求解层通过多项式系数与阵列因子的对应关系反解出各阵元激励幅度;验证层计算方向图、提取旁瓣电平、和均匀加权做对比。四层之间数据单向流动,每层输出都可以单独拿出来检查。

这种分层的好处是调试方便。比如方向图旁瓣不对,你可以先看多项式层的 T_{N-1}(x0) 算得对不对,再看系数求解层解出来的幅度是不是关于中心对称,最后才怀疑方向图计算。如果全写在一个脚本里,出了问题只能从头查到尾。

3.2 切比雪夫多项式与阵列因子的映射关系

核心推导在这里。N 元等间距线阵,对称激励时阵列因子可以写成:

AF(u) = Σ_{n=1}^{M} I_n · cos[(2n-1)·π·(d/λ)·sin(θ)]

其中 M = N/2(N 为偶数)或 (N+1)/2(N 为奇数),I_n 是第 n 个阵元的激励幅度(对称位置幅度相同)。这个余弦级数可以展开成 cos 的幂次形式,再通过变量代换 x = x0·cos(ψ/2) 映射到切比雪夫多项式 T_{N-1}(x)。x0 由旁瓣电平决定:R0 = T_{N-1}(x0),反解出 x0 后,令阵列因子等于 T_{N-1}(x0·cos(ψ/2)),比较两边 cos 各次幂的系数,就能解出 I_n。

这一步是整个方案里最容易翻车的地方——系数对应关系搞错一个下标,方向图就完全不对。下面代码里我会把递推过程写清楚,每一步都有注释。

3.3 模块划分与数据流

代码层面分四个函数加一个主脚本。主脚本设参数、调函数、画图。四个函数分别是:cheb_poly 生成切比雪夫多项式系数,solve_weights 解加权系数,array_pattern 算方向图,compare_uniform 做对比。数据流是主脚本 → cheb_poly → solve_weights → array_pattern → 绘图,compare_uniform 作为旁路验证。

function T = cheb_poly(N, R0) % 生成 N-1 阶切比雪夫多项式系数,并反解 x0 % 输入:N 阵元数,R0 旁瓣电平(dB,负数) % 输出:T 多项式系数向量(从高次到低次),x0 映射因子 R0_lin = 10^(R0/20); % dB 转线性 order = N - 1; % 多项式阶数 % 切比雪夫多项式递推:T0=1, T1=x, Tn=2x*T(n-1)-T(n-2) T_prev2 = 1; % T0 T_prev1 = [1 0]; % T1 = x for k = 2:order % 2x*T(k-1) 系数左移一位乘2 term1 = [2*T_prev1, 0]; % 补齐 T(k-2) 长度后相减 term2 = [zeros(1, length(term1)-length(T_prev2)), T_prev2]; T_curr = term1 - term2; T_prev2 = T_prev1; T_prev1 = T_curr; end T = T_prev1; % 反解 x0:T_{N-1}(x0) = R0_lin,用 fzero 数值求解 f = @(x) polyval(T, x) - R0_lin; x0 = fzero(f, [1, 10]); % x0 必大于 1 end

这段代码的关键在递推公式 T_n = 2x·T_{n-1} - T_{n-2},用向量表示多项式系数,乘法对应系数移位。x0 的求解用 fzero 在 [1,10] 区间找根,因为旁瓣电平对应的 x0 一定大于 1。注意 R0 输入是负数 dB,先转线性再解。如果 R0 给成正数,这里会直接报错,所以参数检查要放在主脚本里做。

4. 核心模块实现:加权系数求解与方向图计算

4.1 加权系数求解的代码实现

拿到切比雪夫多项式系数和 x0 之后,下一步是解各阵元幅度。思路是把阵列因子写成 cos 的幂次,和 T_{N-1}(x0·cos(ψ/2)) 展开后的系数逐项对应。对于偶数 N,阵列因子只有 cos 的奇次幂;奇数 N 只有偶次幂。下面以偶数 N 为例。

function I = solve_weights(N, d_lambda, R0) % 解道尔夫-切比雪夫加权系数 % 输入:N 阵元数(偶数),d_lambda 归一化间距,R0 旁瓣电平(dB) % 输出:I 各阵元激励幅度(对称,长度 N/2) M = N / 2; [T, x0] = cheb_poly(N, R0); % 构造 T_{N-1}(x0*cos(psi/2)) 的 cos 幂次系数 % 用 Chebyshev 到 cos 幂的转换:T_n(cos a) = cos(n*a) % 这里直接在 u 域展开,避免符号运算 % 阵列因子 AF = sum_{n=1}^{M} I_n * cos((2n-1)*pi*u) % 令 AF = T_{N-1}(x0*cos(pi*u)),比较 cos 系数 % 构造范德蒙式系数矩阵 A = zeros(M, M); for n = 1:M for m = 1:M % cos((2n-1)*pi*u) 展开后第 m 个 cos 幂的系数 A(n, m) = (-1)^(m-1) * (2*n-1)^(2*m-2) * pi^(2*m-2) ... / factorial(2*m-2); end end % 右端项:T_{N-1}(x0*cos(pi*u)) 的 cos 幂系数 b = zeros(M, 1); for m = 1:M b(m) = T(end - 2*(m-1)) * x0^(2*(m-1)); end I = A \ b; % 解线性方程组 I = I / max(abs(I)); % 归一化最大幅度为 1 end

这段代码里 A 矩阵的构造是核心。cos((2n-1)πu) 用泰勒展开写成 cos 幂的级数,取到 M 阶。b 向量从切比雪夫多项式系数里取对应次幂的项,乘以 x0 的幂。最后用左除解线性方程组,归一化。注意这里假设 N 为偶数,奇数情况需要把 M 改成 (N+1)/2 并调整 cos 幂次,代码里加个判断即可。

4.2 方向图计算与旁瓣提取

加权系数解出来之后,方向图就是简单的求和。但要注意角度采样密度——采样太稀会漏掉旁瓣峰值,导致提取的旁瓣电平偏低,看起来指标达标了实际没有。

function [theta, AF_dB, SLL] = array_pattern(I, N, d_lambda) % 计算线阵方向图并提取旁瓣电平 % 输入:I 加权系数(长度 N/2),N 阵元数,d_lambda 归一化间距 % 输出:theta 角度向量,AF_dB 归一化方向图(dB),SLL 第一旁瓣电平(dB) theta = linspace(-90, 90, 3601); % 0.05度分辨率 u = d_lambda * sind(theta); AF = zeros(size(theta)); M = length(I); for n = 1:M % 对称激励,正负阵元各贡献一半 AF = AF + 2 * I(n) * cos((2*n-1) * pi * u); end AF = abs(AF); AF = AF / max(AF); % 归一化 AF_dB = 20 * log10(AF + eps); % 加 eps 防 log(0) % 提取第一旁瓣:找主瓣两侧第一个局部极大值 [~, idx_main] = max(AF); % 右侧第一个极小值之后的最大值 right = AF(idx_main:end); [~, idx_min] = min(right(1:min(200, end))); SLL = max(20*log10(right(idx_min:end) + eps)); end

方向图计算用 cos 求和,对称激励所以正负阵元合并成 2 倍。角度分辨率取 0.05 度,3601 个点,足够捕捉旁瓣峰值。旁瓣提取先找主瓣位置,再往右找第一个极小值,之后的最大值就是第一旁瓣。这里用 min 找极小值再取后续最大值,比直接找第二个峰值更稳,因为主瓣和旁瓣之间一定有极小值。

4.3 与均匀加权的对比验证

验证方案是否正确的直接办法,是拿均匀加权做对照。均匀加权旁瓣理论值 -13.2 dB,切比雪夫加权在 R0 = -30 dB 时旁瓣应该压到 -30 dB 附近,同时主瓣宽度会变宽。如果切比雪夫加权算出来的旁瓣比 -13.2 dB 还高,那肯定是系数解错了。

% 对比脚本片段 N = 16; d_lambda = 0.5; I_uniform = ones(1, N/2); I_cheb = solve_weights(N, d_lambda, -30); [theta, AF_u, SLL_u] = array_pattern(I_uniform, N, d_lambda); [~, AF_c, SLL_c] = array_pattern(I_cheb, N, d_lambda); figure; plot(theta, AF_u, 'b--', theta, AF_c, 'r-', 'LineWidth', 1.5); xlabel('角度 (度)'); ylabel('归一化方向图 (dB)'); legend('均匀加权', '切比雪夫加权 R0=-30dB'); grid on; ylim([-60, 0]); fprintf('均匀加权旁瓣: %.2f dB\n', SLL_u); fprintf('切比雪夫加权旁瓣: %.2f dB\n', SLL_c);

跑出来均匀加权旁瓣应该在 -13.2 dB 左右,切比雪夫加权在 -30 dB 左右,主瓣宽度切比雪夫明显更宽。如果切比雪夫旁瓣没压到 -30 dB,先检查 x0 解对没有,再看系数矩阵 A 的构造有没有下标错位。这个对比图也是报告里最有说服力的一张图,答辩时直接放。

5. 避坑与常见问题排查

5.1 旁瓣电平压不下去,方向图旁瓣比预期高

现象:设了 R0 = -30 dB,跑出来第一旁瓣只有 -20 dB 左右,怎么调参数都压不到指标。

原因:最常见的是 x0 求解区间不对。fzero 在 [1,10] 里找根,但如果 R0 设得很低(比如 -50 dB),x0 可能超过 10,fzero 找不到根就返回边界值,导致多项式映射错误。另一个原因是系数矩阵 A 的阶数取少了,cos 幂次截断太早,高频项丢失。

解决:把 fzero 的搜索区间改成 [1, 100],或者用 fzero(f, 1.1) 配合符号判断。系数矩阵阶数 M 要等于 N/2,不能少。改完重新跑,旁瓣应该能压到位。

5.2 方向图出现栅瓣,旁瓣结构完全乱掉

现象:方向图在 ±90 度附近出现和主瓣差不多高的峰值,旁瓣等波纹结构被破坏。

原因:阵元间距 d/λ 大于 0.5,可见区 u 超出 [-0.5, 0.5],切比雪夫多项式的映射范围被突破,栅瓣出现。这不是加权能解决的问题,是阵列几何决定的。

解决:把 d/λ 改回 0.5 或更小。如果指标要求大间距,需要换用其他综合方法(比如遗传算法优化),切比雪夫加权在这个条件下不适用。方案里默认 d/λ = 0.5,改参数前先检查栅瓣条件。

5.3 加权系数出现负值或不对称

现象:解出来的 I 向量里有负数,或者关于中心不对称。

原因:线性方程组 A\b 在 A 接近奇异时会给出数值解,出现负值。对称性破坏通常是 A 矩阵构造时 cos 幂次对应关系错了,比如把奇次幂和偶次幂搞混。

解决:先检查 A 的条件数,cond(A) 如果大于 1e10,说明矩阵病态,需要提高数值精度或改用符号运算。对称性检查直接看 I 是否满足 I(1) 到 I(M) 单调递减(切比雪夫加权幅度从中心向边缘递减),不满足就是系数错了。

5.4 方向图归一化后主瓣宽度异常

现象:主瓣宽度比理论值宽很多,或者窄得不合理。

原因:归一化时用了 max(AF) 但 AF 里包含栅瓣峰值,导致主瓣被错误归一化。或者角度采样太稀,主瓣峰值没采到。

解决:归一化前先确认没有栅瓣,角度采样至少 0.1 度。主瓣宽度可以用 -3 dB 点之间的角度差来量,代码里加个 find 找第一个低于 0.707 的点即可。

5.5 不同 N 值下代码报错或结果跳变

现象:N = 8 跑得通,N = 16 就报错,或者结果完全不对。

原因:奇数 N 和偶数 N 的阵列因子形式不同,偶数只有 cos 奇次幂,奇数只有偶次幂。代码里如果没做奇偶判断,奇数 N 会走错分支。

解决:在 solve_weights 开头加判断,N 为奇数时 M = (N+1)/2,阵列因子改成 cos(2n·πu) 形式,系数矩阵相应调整。方案里默认偶数 N,奇数情况按同样思路改。

6. 验收与答辩:怎么证明这套加权真的做对了

验收这套方案,核心就三件事:旁瓣电平达标、主瓣宽度合理、加权系数对称递减。答辩时不用讲太多推导,直接把三张图放出来——切比雪夫多项式曲线、加权系数分布柱状图、方向图对比图。评委一看方向图旁瓣压到 -30 dB 且等波纹,基本就认可了。

具体验收步骤我一般这么走。第一步,固定 N = 16、d/λ = 0.5,分别设 R0 = -20、-30、-40 dB,跑三组,看旁瓣是否分别压到对应值。如果 -40 dB 那组压不下去,说明 x0 求解区间不够,按 5.1 改。第二步,把加权系数画成柱状图,确认从中心向边缘单调递减,这是切比雪夫加权的标志性特征。第三步,和均匀加权对比,主瓣宽度应该变宽,旁瓣应该从 -13.2 dB 降到设定值,两条曲线在主瓣区域交叉是正常的。

验收项合格标准检查方法
旁瓣电平与设定 R0 偏差 < 1 dB方向图提取第一旁瓣
等波纹特性各旁瓣峰值差 < 0.5 dB观察方向图旁瓣区域
系数对称性关于中心对称且递减柱状图或数值检查
主瓣宽度比均匀加权宽,但无异常展宽-3 dB 点角度差
无栅瓣±90° 内无第二主瓣方向图全局检查

答辩时有个技巧:提前把不同 R0 下的方向图叠在一张图上,用不同颜色区分。评委问“旁瓣压到 -30 dB 主瓣宽多少”,你直接指图上的 -3 dB 点,比现场算快得多。另外,加权系数的数值最好打印成表格附在报告里,评委可能会问具体某个阵元的幅度,翻表格比翻代码快。

我自己的习惯是,每次跑完一组参数,先把加权系数存成 mat 文件,再画图。这样答辩时如果评委要求换一个 R0 现场跑,直接改参数重跑,系数和方向图一起出来,不会手忙脚乱。还有一点,方向图的 dB 刻度下限设到 -60 dB 就够了,设太低旁瓣细节反而看不清。从那以后我每次做阵列综合,都强制走一遍“参数检查 → 系数验证 → 方向图对比”这三步,没出过翻车。希望帮到你。

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

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进