资讯动态

MATLAB线阵切比雪夫加权与旁瓣电平方向图综合

发布时间:2026/10/24 10:00:48 来源:尧图企业网站定制
简介面向阵列天线综合学习者的MATLAB实践资源聚焦线阵天线的道尔夫—切比雪夫加权设计。代码完整演示切比雪夫加权后方向图与激励幅度分布的仿真流程可验证副瓣电平、阵元个数、阵元间距、波束指向角度、信号频率等参数变化对激励幅度与方向图的影响。压缩包共3个文件以2份m脚本为主体分别承担加权计算与仿真出图另附1份txt说明文档交代使用方式整体仅2KB轻量易读关键代码段均配中文注释。已有1003人学习。读者可借此掌握切比雪夫综合的实现思路通过修改参数直观对比不同副瓣电平下的口径分布与波束形状快速搭建线阵方向图实验环境适合天线、雷达课程设计及阵列综合入门练习。1. 一副压不下去的旁瓣方向图把我拽进了切比雪夫加权去年帮某实验室调一套接收线阵主瓣做得挺漂亮旁瓣却死死卡在 -13 dB 下不来而现场那台强干扰刚好落在第一旁瓣的位置。第一反应是加窗汉明、汉宁、布莱克曼轮着试旁瓣压到 -20 dB 出头主瓣却胖了一圈角度分辨率直接崩掉。后来才想起均匀线阵的阵列综合本来就有闭式解MATLAB 里做线阵天线的道尔夫-切比雪夫加权能在给定阵元数和主副瓣比的条件下把所有旁瓣压成等电平同时让主瓣宽度做到最窄。这份资源给的就是这么一套脚本——输入阵元数、阵元间距、目标副瓣电平输出加权系数、归一化方向图外加一张不同参数下的波束宽度对照表。适合正在做阵列综合、波束赋形预研或者被旁瓣指标卡住的人。2. 选型与骨架为什么用切比雪夫多项式而不是随手加个汉明窗阵列综合这件事外行看是给每个阵元配个幅度内行看是在主瓣宽度和副瓣电平之间做一场没法两全的交易。选什么权本质是选你愿意在哪一头让步。这一章先把数学链路捋直再看工程上为什么落到切比雪夫最后看这套脚本是怎么拆文件的。2.1 均匀线阵的阵列因子一条能直接落成代码的数学链N 个各向同性阵元沿一条直线等间距排开间距 d工作波长 λ第 n 个阵元n 从 0 数起的复激励是 w_n。远场某个方向 θ 上各阵元到观察点的波程差换算成相位叠加起来就是阵列因子F(θ) Σ_{n0}^{N-1} w_n · exp(j·2π·(d/λ)·n·sinθ)这个式子里没有阵元方向图只有几何和激励所以它描述的纯粹是阵的贡献。真实天线的总方向图等于阵因子乘以单元因子工程上一般先单独把阵因子调好再乘单元方向图看整体这一步分开做出问题的时候才知道该改哪一头。归一化之后取 20log10(|F|/max|F|)就得到常说的方向图 dB 曲线。主瓣峰值在 0 dB第一旁瓣、第二旁瓣依次往下掉。均匀激励w_n 全等于 1时这个式子有解析结果第一旁瓣固定在 -13.2 dB 附近不管 N 取多少都一样。这是个很反直觉但很硬的结论——加阵元只能让主瓣变窄、旁瓣变密压不低旁瓣。还有一个必须记住的约束可见区。sinθ 只能落在 [-1, 1]所以相位 ψ 2π(d/λ)sinθ 的活动范围是 ±2π(d/λ)。当 d/λ 1 时ψ 的可见区间超过了一个整周期方向图里会挤进第二个甚至第三个主瓣这就是栅瓣。判断条件很干脆d/λ ≤ 1/(1|sinθ₀|)θ₀ 是扫描角。不扫描时 d/λ ≤ 1 就安全一扫描就得往 λ/2 靠。这条在后面排查章节还会再提一次因为它是最容易被当成程序 bug的物理现象。2.2 四种加权方式的取舍为什么最后选了切比雪夫把常见的几类幅度加权摆在一起对比取舍就很清楚了。加权方式第一旁瓣主瓣宽度特点均匀加权-13.2 dB最窄增益最高旁瓣压不住二项式加权无旁瓣极宽旁瓣彻底消失分辨率代价巨大汉明/汉宁窗-41 / -31 dB明显变宽旁瓣递减非等电平泰勒加权可设中等近旁瓣等电平远旁瓣滚降道尔夫-切比雪夫可设同等旁瓣下最窄全部旁瓣等电平切比雪夫的独特之处在于最优这两个字有严格数学含义在所有给定主副瓣比的加权里它的主瓣宽度最小反过来在所有给定主瓣宽度的加权里它的旁瓣电平最低。这不是调参调出来的是切比雪夫多项式的等波纹性质直接给的。代价也很实在所有旁瓣压成一样高意味着能量被均匀摊到整个旁瓣区一旦有强干扰落进来你没法指望远旁瓣衰减更多来救你。所以雷达、通信里如果干扰方向大致已知泰勒加权反而更划算如果干扰方向完全不可预知要的是最坏情况下的下界切比雪夫就是正解。工程上还有一个隐性成本切比雪夫的边缘阵元激励幅度很小。N 大了、副瓣指标定低了两端阵元的系数可能掉到中心阵元的百分之一以下这时候功分网络和衰减器的量化位数就顶不住了实际做出来的方向图跟仿真对不上。所以这套脚本里专门留了一个系数动态范围的输出就是为了提前看一眼硬件扛不扛得住。2.3 文件职责划分六个文件各管一段这套脚本没有做成一个大 main 里从头写到尾而是按算系数、算方向图、出指标、扫参数、画对比切开好处是每一段都能单独拿去用。dolph_cheb_array/ ├── main_demo.m % 主入口跑一个完整例子并出图 ├── cheb_weight.m % 系数生成自写实现 可选 chebwin 对照 ├── array_pattern.m % 方向图计算支持扫描角 ├── pattern_metrics.m % 从方向图里提取 SLL、HPBW、零点波束宽度 ├── sweep_sll.m % 参数扫描副瓣电平 vs 波束宽度 └── plot_compare.m % 均匀/切比雪夫/汉明三条曲线放一张图cheb_weight.m是核心对外只暴露一个签名w cheb_weight(N, sll_dB, mode)mode 取self走自写实现、取builtin走 MATLAB 自带的chebwin。两条路并存不是为了炫技是为了互相验证自写实现写完必须能和chebwin对到小数点后几位否则一定哪一步的归一化或者奇偶分支搞错了。array_pattern.m只做一件事拿到权向量、间距、角度网格吐一条归一化 dB 曲线。它不关心权是怎么来的所以后面换成泰勒权、或者从实测数据里拟合出来的权都能直接复用。pattern_metrics.m是把图变成数的关键。人眼看图只能判断大概 -30 dB但你要写报告、要对比、要做参数扫描就必须让程序自己把第一旁瓣位置、副瓣电平、半功率波束宽度算出来。这一步看着简单实际是翻车最多的地方第 5 章会细说。3. 核心代码拆解从 chebwin 对照到自己算系数一条链路跑通方向图这一章把三段核心代码逐段拆开先用内置函数快速拿到基准再自己推一遍系数确认理解没跑偏最后把方向图和指标读数的链路补全。3.1 先用 chebwin 拿到一条可信的基准曲线MATLAB 的信号处理工具箱里有现成的chebwin它生成的就是 Dolph-Chebyshev 窗物理含义和阵列加权系数完全一致。第一天接手这类工作我一般先用它把图跑出来确认自己对副瓣电平这个参数的理解是对的再动手写自己的版本。% 用 chebwin 快速验证参数含义 N 16; % 阵元数 sll_dB 30; % 目标副瓣电平dB正数表示低于主瓣多少 dB d_lambda 0.5; % 阵元间距 / 波长 w chebwin(N, sll_dB); % 返回 N×1 列向量峰值归一化为 1 w w / max(w); % 双保险避免不同版本归一化差异 [FdB, theta] array_pattern(w, d_lambda, -90:0.02:90, 0); plot(theta, FdB); ylim([-80 0]); grid on; xlabel(\theta / deg); ylabel(归一化幅度 / dB);chebwin的第二个参数是正数的 dB 值传 30 就代表副瓣比主瓣低 30 dB。这里最容易犯的错是把线性比值 0.0316 传进去函数不报错但出来的图完全不对。另外它返回的是列向量后面做矩阵乘法时方向要统一w(:).转成行向量最省事。跑完这条曲线你应该看到主瓣在 0°、两侧一整排高度几乎一致的旁瓣全部贴在 -30 dB 那条线上。如果看到的是一排递减的旁瓣那说明chebwin根本没生效多半是权向量没传进方向图函数用的是默认全 1。3.2 自写系数生成用余弦级数反解激励幅度内置函数好用但它是个黑匣子。要做二次开发——比如加扫描角修正、加幅相误差、加量化——必须知道系数是怎么来的否则改不动。推导思路是这样的切比雪夫多项式 T_m(x) 在 |x| ≤ 1 时等于 cos(m·acos x)在 x 1 时等于 cosh(m·acosh x)。Dolph 的做法是构造一个阵列因子让它等于 T_{N-1}(z₀·cos(ψ/2))其中 ψ 2π(d/λ)sinθ而 z₀ 由主副瓣比 R 定死T_{N-1}(z₀) R ⟹ z₀ cosh( acosh(R) / (N-1) )这样构造出来的方向图在旁瓣区正好是等幅振荡峰值全部等于 1/R。剩下的事就是把 T_{N-1}(z₀·cos(ψ/2)) 展开成 cos(nψ) 的级数级数系数就是各阵元的激励幅度。展开这一步与其硬背闭式公式不如直接解一个线性方程组——未知数只有 (N1)/2 个矩阵小得可以忽略而且不会把组合系数写错。function w cheb_weight_odd(N, sll_dB) % 奇数阵元的 Dolph-Chebyshev 加权系数自写实现 % N : 阵元数必须为奇数 % sll_dB : 目标副瓣电平正数单位 dB % w : N×1 权向量峰值归一化为 1左右对称 if mod(N,2) 0 error(该实现只处理奇数阵元偶数请用 chebwin); end M (N-1)/2; % 单侧阵元数 R 10^(sll_dB/20); % 主副瓣比线性 z0 cosh(acosh(R)/(N-1)); % 切比雪夫参数 psi (0:M) * pi/M; % 在 [0, pi] 上取 M1 个采样点 f zeros(1, M1); for i 1:M1 x z0 * cos(psi(i)/2); if abs(x) 1 f(i) cos((N-1)*acos(x)); % 振荡区用三角分支 else f(i) cosh((N-1)*acosh(x)); % 增长区用双曲分支 end end f f / R; % 归一化主瓣峰值 1 % 用矩阵法反解 cos 级数系数 c_n避免手写 DCT 系数出错 A cos((0:M). * psi); % (M1)×(M1)第 n 行对应 cos(nψ) c A \ f(:); % c(1)I0, c(n1)2*In I0 c(1); In c(2:end) / 2; % 对称阵元正负两侧各一半 w [flipud(In); I0; In]; % 拼成 N×1中心在 I0 w w / max(w); end这段代码有三个地方值得停下来看一眼。第一处是abs(x) 1的分支判断。acosh在参数小于 1 时返回复数MATLAB 不报错只是默默给出带虚部的值。而 cosh 对纯虚数输入恰好等于余弦所以实部其实是对的——但如果你后面直接画图或者比较大小虚部会一路带着走某一步就开始报警告。显式分支写清楚比事后调real()干净得多。第二处是c A \ f(:)。这一步解的是给定 M1 个方向上的阵列因子值反求 M1 个余弦级数系数。因为采样点数和未知数个数相等方程是恰定的解唯一。这里用左除而不是inv(A)*f数值上更稳也不会因为矩阵接近奇异而放大误差。第三处是flipud(In)拼接。阵列因子写成 I₀ 2ΣIₙcos(nψ)对应到实际阵元就是中心一个、两侧对称排开。拼接顺序一旦反了方向图会左右不对称——这个现象非常明显但很多人第一反应是相位参考搞错了其实是幅度顺序翻了。跑一遍和chebwin(N, sll_dB)的结果摆在一起两者应当逐点重合。如果差了 6 dB 或者差了一倍八成是In c(2:end)/2这一步忘了除以 2。3.3 方向图计算把扫描角并进相位里系数拿到之后方向图计算本身很短但有一个设计选择要先定下来扫描角是放在循环里重新算权还是直接写进相位因子。对切比雪夫加权来说加权系数只跟阵元数、间距、副瓣电平有关跟扫描角无关——扫描靠的是每个阵元加一个线性相位。所以最省事的写法是把扫描角并进 u 里。function [FdB, theta] array_pattern(w, d_lambda, theta_deg, theta0_deg) % 计算均匀线阵归一化方向图 % w : N×1 或 1×N 权向量 % d_lambda : 阵元间距 / 波长 % theta_deg : 角度网格行向量 % theta0_deg : 扫描角0 表示正侧射默认 0 if nargin 4, theta0_deg 0; end N numel(w); theta theta_deg(:).; u sind(theta) - sind(theta0_deg); % 把扫描角折进等效正弦 n (0:N-1).; A exp(1j*2*pi*d_lambda*(n*u)); % N × numel(theta) F w(:). * A; F F / max(abs(F)); % 按主瓣峰值归一化 FdB 20*log10(max(abs(F), 1e-12)); % 加下限避免 log10(0) endsind而不是sin是因为角度网格用的是度混用弧度和度是这类脚本里最常见的低级错误出来的图会莫名其妙地在 57° 附近多一个峰。max(abs(F), 1e-12)这个下限不是可有可无的。切比雪夫加权在零点处的理论值是负无穷 dB实际算出来可能是个 1e-18 量级的数log10之后直接给 -360 dB画图时 y 轴范围被拉爆整条曲线的形状全糊了。加个 -240 dB 的底噪下限图看起来就正常了。扫描角并进u的写法有个前提权向量本身关于阵列中心对称。切比雪夫权是对称的没问题如果哪天换成非对称权这个写法会让主瓣位置偏掉得改成对每个阵元单独乘 exp(-j·2π·(d/λ)·n·sinθ₀)。3.4 指标读数让程序自己找旁瓣和半功率点图看着对了不算完报告里要写的是数字。这一步单独抽成一个函数是因为它最容易在参数扫描时被反复调用写死在某一段里会很别扭。function [sll_dB, hpbw_deg, dr] pattern_metrics(theta, FdB) % 从归一化方向图提取副瓣电平、半功率波束宽度、系数动态范围 % theta : 角度网格度 % FdB : 归一化方向图dB主瓣峰值 0 dB [~, i0] max(FdB); % 主瓣峰值索引 [~, locs] findpeaks(FdB); % 所有局部极大值位置 mask abs(theta(locs) - theta(i0)) 2; % 排除主瓣附近 ±2° sll_dB max(FdB(locs(mask))); % 最高的那个旁瓣 % 半功率点从主瓣向两侧找第一次跌破 -3 dB 的位置线性插值 left find(FdB(1:i0) -3, 1, last); right find(FdB(i0:end) -3, 1, first) i0 - 1; if isempty(left) || isempty(right) hpbw_deg NaN; % 主瓣太宽网格没覆盖到 else hpbw_deg theta(right) - theta(left); end dr 20*log10(1/eps); % 占位实际由权向量另算 endfindpeaks要求输入是行向量FdB是从array_pattern出来的行向量正好对上。mask里那个 ±2° 的排除窗口需要根据你的角度网格密度调网格粗比如 1° 一步时窗口要开大一点否则主瓣自己的肩部会被当成旁瓣读出来的 SLL 只有 -3 dB 左右看着像程序坏了。线性插值那一步可以再细一点用interp1在 -3 dB 附近求精确交点。0.02° 的网格下不插值带来的误差大约 0.01°对报告够用网格放到 0.5° 就必须插值了否则 HPBW 读数会跳。动态范围那个输出dr在这里是占位实际应该在外面用20*log10(max(w)/min(w))算。之所以单独拎出来是因为它决定硬件选型动态范围超过 40 dB普通 PIN 二极管衰减器就悬了得换数控衰减器或者干脆改口径分布。3.5 参数扫描把主瓣宽度换旁瓣电平画成一条曲线单点仿真只能说明某一个参数下成立真正写报告要的是趋势。扫描脚本做的事情很朴素固定 N 和 d/λ让 sll_dB 从 20 扫到 50每个点重算一次权和方向图把 HPBW 记下来。N 16; d_lambda 0.5; sll_list 20:2:50; hpbw zeros(size(sll_list)); for k 1:numel(sll_list) w chebwin(N, sll_list(k)); [FdB, theta] array_pattern(w, d_lambda, -90:0.02:90, 0); [~, hpbw(k)] pattern_metrics(theta, FdB); end plot(sll_list, hpbw, o-); xlabel(目标副瓣电平 / dB); ylabel(半功率波束宽度 / deg); grid on;跑出来是一条单调上升的曲线副瓣压得越低主瓣越胖。这条曲线就是交易曲线写方案时把它贴在旁边评审问为什么不定 -40 dB的时候直接指过去——从 -30 到 -40波束展宽了多少度分辨率损失多少一目了然。4. 跑起来环境、执行顺序和四个必须改对的参数代码看懂是一回事能在自己机器上跑出一样的图是另一回事。这一章把运行链路从头到尾走一遍。4.1 环境准备与工具箱依赖这套脚本对 MATLAB 版本不挑R2016b 以后的都能跑因为用到的都是基础语法。唯一的外部依赖是两处函数chebwin在 Signal Processing Toolbox 里。如果你的授权没有这个工具箱把cheb_weight.m里调用它的分支去掉全部走自写实现即可奇数阵元完全等价。findpeaks同样在 Signal Processing Toolbox。没有的话用三行代码手写一个局部极大值判断就行不依赖任何工具箱。% findpeaks 的手动替代比左右邻点都大的位置即局部极大 is_peak false(size(FdB)); is_peak(2:end-1) FdB(2:end-1) FdB(1:end-2) FdB(2:end-1) FdB(3:end); locs find(is_peak);这套替代写法在网格不均匀或者曲线有平台段时会漏检但用于自检足够。真要写进交付代码还是装上工具箱省心。把整个文件夹加到路径里用addpath(genpath(pwd))一行搞定然后cd到目录下。不要在编辑器里直接按 F5 跑某个函数文件MATLAB 会把它当脚本执行函数定义那几行直接报错。4.2 主脚本执行顺序与结果核对main_demo.m的执行顺序是有讲究的先易后难每一步都有明确的核对点。%% 第 1 步参数设定 N 16; sll_dB 30; d_lambda 0.5; theta0 0; %% 第 2 步两路生成权互相对照 w_self cheb_weight(N, sll_dB, self); w_ref chebwin(N, sll_dB); w_ref w_ref / max(w_ref); fprintf(两路权向量最大偏差%.3e\n, max(abs(w_self - w_ref))); %% 第 3 步算方向图与指标 [FdB, theta] array_pattern(w_self, d_lambda, -90:0.02:90, theta0); [sll, hpbw] pattern_metrics(theta, FdB); %% 第 4 步出图 figure; plot(theta, FdB, LineWidth, 1.2); hold on; yline(sll, r--, sprintf(SLL %.1f dB, sll)); ylim([-80 0]); grid on; xlabel(\theta / deg); ylabel(归一化幅度 / dB);第 2 步那个fprintf是整段代码的关键。两路结果的最大偏差应该在 1e-10 量级如果打出来是 1e-2 甚至 0.3说明自写实现有问题后面的图不用看了。这一步相当于给自己留了个断言比对着两张图肉眼比对靠谱得多。第 3 步出来的sll应该非常接近 -30.0 dB误差在 0.1 dB 以内。如果读到 -29.5多半是角度网格不够密峰值没被采到如果读到 -13.2那还是回到权没传进去这个老问题。4.3 四个参数怎么改改了会怎样参数变量名典型范围改了之后的直接影响阵元数N8 ~ 64N 增大主瓣变窄副瓣数变多但电平不变副瓣电平sll_dB20 ~ 50压得越低主瓣越宽边缘系数越小阵元间距d_lambda0.4 ~ 0.5增大到 1 以上出现栅瓣扫描角theta0-60 ~ 60扫描越远主瓣展宽有效口径缩短N的改动最直观从 8 改到 32主瓣宽度差不多缩到四分之一旁瓣数量翻倍但每个旁瓣的高度依然卡在设定的 dB 线上——这就是等电平的意义。注意N改大之后边缘系数的动态范围会迅速恶化N32、sll_dB40时动态范围能到 60 dB 以上硬件基本做不出来这时候得回头看 3.4 节那个dr输出。d_lambda是最需要小心的一项。0.5 是最稳的0.45 到 0.5 都行。往 0.6、0.7 走看起来方向图还挺正常但那是因为主瓣还没扫一旦theta0加到 30° 以上栅瓣就窜出来了。判断方法很简单把theta0从 0 扫到 60盯着方向图里有没有第二个接近 0 dB 的峰冒出来。theta0改大之后主瓣会明显变宽这是有效口径按 cosθ₀ 缩短的必然结果。写报告时如果只给正侧射的波束宽度评审一定会追问扫描到边缘时是多少所以这套脚本的扫描能力不能省。5. 排查记录副瓣读数不对、栅瓣冒头、偶数阵元对不上五处翻车下面这五条都是实际调这套脚本时踩过的按现象→原因→解决写遇到类似症状可以直接对号入座。5.1 现象副瓣电平死活停在 -13.2 dB参数怎么改都不动原因这是均匀加权所有阵元幅度相同的特征值出现它说明权向量根本没进到方向图计算里。常见的三种情况是array_pattern里w的默认值没改、权向量算完忘了赋值给调用处的变量、或者w传进去时维度不对导致矩阵乘法走了 broadcast 得到错误结果但没报错。解决在array_pattern开头加一句assert(numel(w) N)把维度校验卡在前面。另外在main_demo里打印w的最大最小值如果两者都是 1那问题就定位了。5.2 现象设了 -40 dB读出来只有 -28 dB 左右而且每次跑还不一样原因角度网格太粗。切比雪夫方向图的旁瓣峰很尖网格步长 0.5° 时采样点很可能全部落在峰的两侧findpeaks抓到的极大值其实是肩部。网格越粗读数偏差越大而且偏差量随参数变化看起来就像随机误差。解决网格加密到 0.02° 甚至 0.01°。代价是计算量上升但对 N ≤ 64、单角度扫描的场景完全无所谓。另一个办法是在findpeaks之后加一步三点抛物线插值用 0.1° 的网格也能拿到 0.01 dB 的精度。5.3 现象间距取 0.7λ 后方向图里出现两个一样高的主瓣原因栅瓣不是程序错误。d/λ 0.7 时ψ 的可见区是 ±2π×0.7 ±252°超过了一个整周期切比雪夫方向图的周期性把第二个主瓣复制进了可见区。这个现象在正侧射时可能刚好卡在 90° 边界外看不见一旦扫描就冒出来。解决按 d/λ ≤ 1/(1|sinθ₀|) 重新选间距。扫描到 ±60° 时d/λ 必须压到 0.536 以下要到 ±70°得压到 0.515 以下。如果物理尺寸不允许只能接受有限扫描范围或者改用稀布阵、非周期阵等更复杂的综合方法那就超出这套脚本的范围了。5.4 现象偶数阵元时自写实现和 chebwin 对不上差一个镜像或者差个符号原因3.2 节的推导只处理了奇数阵元。N 为偶数时阵列的相位中心落在中间两个阵元之间阵列因子展开成的是半整数阶余弦级数 cos((m1/2)ψ)基函数和采样点都要跟着改直接套奇数分支的代码必然错。解决偶数阵元直接用chebwin它在内部已经处理了半整数情形。如果要自写把基函数矩阵从cos(nψ)换成cos((n0.5)ψ)采样点取到 2N 个以上再解方程。这套脚本里cheb_weight遇到偶数会直接error掉就是为了防止有人不知不觉用了错的公式。5.5 现象画图时报忽略复数虚部的警告方向图上有毛刺原因acosh的入参小于 1 时返回复数。虽然 cosh 作用在纯虚数上得到的是实数余弦理论上虚部应该是零但浮点运算会留下 1e-16 量级的残差某一步做比较或者取绝对值时就被放大成可见的毛刺。解决按 3.2 节的分支写法abs(x) 1时走acos分支。如果代码是从别处拷来的、不方便改结构至少在返回前加一句w real(w)把残差清掉。这句是后悔药不是长久之计但在赶时间的时候能救一次。6. 二次开发把单文件脚本改成能出报告的综合工具链基础脚本能跑通之后真正花时间的是把它变成能用的东西。我一般按三条线往下推每条线都能独立交付。第一条线是加实测约束。仿真出的权向量是连续实数但实际功分网络的分辨率有限比如衰减器只有 6 bit步进 0.5 dB。做法是把权向量先归一化到最大值为 1转成 dB按步进量化再转回线性值重算方向图看副瓣抬了多少。这段代码十几行但结论往往很扎心——指标定到 -40 dB 的方案量化之后可能只剩 -32 dB。function w_q quantize_weight(w, step_dB) % 按给定步进量化权向量幅度模拟衰减器分辨率 w w / max(w); wdB 20*log10(max(w, 1e-6)); wdB round(wdB / step_dB) * step_dB; % 量化到最近的步进 w_q 10.^(wdB/20); w_q w_q / max(w_q); endstep_dB取 0.5 对应 6 bit 左右的数控衰减器取 0.1 对应高精度器件。跑完对比量化前后的 SLL差值超过 3 dB 就得考虑换器件或者放松指标。第二条线是加幅相误差的蒙特卡洛。每个阵元的幅度加一个 σ_a 的高斯扰动相位加一个 σ_φ 的本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑