在雷达、声纳还有无线通信领域做信号设计,绕不开一个指标:积分旁瓣电平(Integrated Sidelobe Level,简称ISL)。我第一次接触这个指标,是在做脉冲压缩波形优化的时候,仿真出来匹配滤波输出旁瓣高得离谱,想找个量化标准评估波形质量,翻了不少资料才把ISL这套计算逻辑彻底理顺。说句实话,这个指标用MATLAB实现起来并不复杂,核心代码前后不超过二十行,但它背后的信号处理思想、主瓣与旁瓣的划分规则、以及它如何指导波形优化方向,才是真正值得深挖的东西。
这篇文章打算把ISL这件事从头到尾讲透:先解释它的物理意义和工程价值,再给出一个可以直接复用的MATLAB计算函数,接着用线性调频(LFM)波形和相位编码波形做两个完整实例,最后把我在实际调试中遇到的各类“代码跑通了但结果不对”的坑全部整理出来。无论你是刚开始接触雷达波形设计的研究生,还是已经在做相控阵波形优化的工程师,这组内容应该都能给你一些参考。尤其是主瓣宽度怎么定、采样率选多少、旁瓣区域从哪里开始算这类细节,很多资料说得不够清楚,我在这里把个人经验一并分享。
1. 积分旁瓣电平是什么,为什么波形设计离不开它
1.1 从匹配滤波说起:旁瓣到底是怎么来的
先倒回去讲一个最基础的问题:雷达为什么要做脉冲压缩?因为要同时兼顾距离分辨力和作用距离。单载频矩形脉冲的时宽带宽积约等于1,想提高距离分辨力就得压窄脉宽,而脉宽一压窄,发射能量就缩水,探测距离跟着下降。这个矛盾催生了脉冲压缩体制:发射一个时宽较宽、但内部经过调制的波形,比如线性调频或相位编码,在接收端用匹配滤波器把能量重新压成一个窄脉冲。发射信号的能量保住了,匹配滤波输出的有效脉宽也变窄了,距离分辨力自然就上去了。
但天下没有免费的午餐。匹配滤波的本质是求接收信号与发射信号副本的互相关,理想情况下输出的幅度谱就是发射信号自相关函数的包络。一个有限时长信号的自相关函数,不可能做到只在零延迟处有一个冲激、其余位置全部为零,这是信号理论的基本限制。于是,主瓣两侧必然出现旁瓣,它们的横向分布范围和幅度高低,直接决定了雷达在距离维上分辨多目标的能力。
那旁瓣会造成什么实际后果?最典型的就是“弱目标被强目标的旁瓣淹没”。举个例子,一架大型客机和一架小型无人机同时位于同一个方向,距离相差几个距离单元。如果大目标的旁瓣回波强度超过小目标主瓣回波强度,小目标在雷达屏幕上就会消失在大目标身旁的拖影里。旁瓣越高、覆盖范围越宽,这种掩盖效应就越严重。所以,量化旁瓣的总体水平就成了波形设计里的核心需求,ISL就是在这个背景下被广泛使用的指标。
1.2 ISL、PSL、MSR三个指标,别搞混了
在做旁瓣评估时,最常听到的指标有三个:峰值旁瓣电平(Peak Sidelobe Level,PSL)、积分旁瓣电平(Integrated Sidelobe Level,ISL)、主瓣旁瓣比(Mainlobe-to-Sidelobe Ratio,MSR)。这三个指标都在描述旁瓣,但关注点完全不同,使用场景也各有侧重。
| 指标 | 英文全称 | 核心关注点 | 典型应用场景 |
|---|---|---|---|
| PSL | Peak Sidelobe Level | 所有旁瓣中的最大峰值 | 强干扰下的弱目标检测 |
| ISL | Integrated Sidelobe Level | 旁瓣区域的总能量占比 | 波形整体性能、分布式杂波环境、频谱共享 |
| MSR | Mainlobe-to-Sidelobe Ratio | 主瓣峰值与最大旁瓣幅度之比 | 天线方向图合成、阵列波束赋形 |
PSL关心的是“最差的那一个旁瓣有多高”,在强点目标回波可能掩盖邻近弱目标时,PSL最直观。但如果环境里布满分布式杂波,或者目标区域附近有很多散射点,那么单个旁瓣再高也不如“旁瓣总能量有多大”更说明问题,这时候ISL就更合适。
还有一点要留意,ISL和PSL往往不能同时做到最优。拿相位编码波形举例,某些编码序列的自相关函数旁瓣比较平均,没有一个特别高的尖峰,这种波形的PSL看着还行,但旁瓣数量多,总能量算下来ISL并不理想;反过来,有些编码旁瓣在局部集中,看起来有个明显峰值,ISL却可能很低。做工程优化时,必须明确系统指标更在意哪一个,否则很容易顾此失彼。
2. 用MATLAB计算ISL:从计算流程到函数封装
2.1 计算流程拆解:先搞清楚要算哪些能量
在写代码之前,先把计算流程理清楚。给定一个经过匹配滤波后的输出序列,或者在波形设计阶段直接用发射信号的自相关函数,计算ISL的步骤如下。
第一,取信号的模平方,得到功率序列。匹配滤波输出可能是复数序列,模平方就是对应每个距离单元的能量值。
第二,定位主瓣区域。这里最关键的问题是“主瓣的边界在哪里”。工程上有两种常用习惯:一种是以主瓣峰值两侧的第一零点为边界;另一种是由设计者指定一个与理论距离分辨力相关的主瓣宽度。这两种方法各有适用场景,后面我会专门展开讲。在函数实现中,最好把主瓣宽度做成可配置参数,而不是写死在代码里。
第三,分别累加主瓣区域内的功率和旁瓣区域内的功率。
第四,计算比值并转成dB:
ISL_dB = 10 * log10(旁瓣总功率 / 主瓣总功率)注意这里是10倍log10而不是20倍log10,因为功率比和幅度比的对数系数不同。如果粗心写成20,算出来的数值会整整翻倍,这是新手最容易踩的坑。
从物理意义上理解,这个比值衡量的是:接收到的总能量里,有多少比例的能量“漏”到了主瓣之外。比值越小,说明波形的能量聚焦性越好,距离维的干扰水平越低。
2.2 一个可复用的MATLAB函数:ISL计算器
我把上述流程封装成一个MATLAB函数,输入信号序列、主瓣起始索引和结束索引,返回ISL值。代码里加了参数检查和边界保护,方便在不同场景下直接复用。
function isl_dB = calcISL(sig, ml_start, ml_end) % calcISL 计算积分旁瓣电平 % 输入: % sig - 输入信号序列(一维复数或实数向量),一般为匹配滤波输出或自相关函数 % ml_start - 主瓣区域的起始索引 % ml_end - 主瓣区域的结束索引 % 输出: % isl_dB - 积分旁瓣电平(单位:dB) % 参数检查 if nargin < 3 error('至少需要三个输入参数:信号、主瓣起始索引、主瓣结束索引'); end if ~isvector(sig) error('输入信号必须是一维向量'); end % 确保输入为列向量 sig = sig(:); N = length(sig); % 边界检查 if ml_start < 1 || ml_end > N || ml_start > ml_end error('主瓣区域索引超出信号范围或无效'); end % 计算功率谱 power = abs(sig).^2; % 主瓣能量 mainlobe_power = sum(power(ml_start:ml_end)); % 旁瓣能量:总能量减去主瓣能量 total_power = sum(power); sidelobe_power = total_power - mainlobe_power; % 防止除零 if mainlobe_power <= 0 isl_dB = inf; warning('主瓣能量为零,ISL设为无穷大'); return; end % 计算ISL并转换为dB isl_dB = 10 * log10(sidelobe_power / mainlobe_power); end设计这个函数时,我有几个刻意的考虑。第一,强制要求用户显式传入主瓣起止索引,而不是在函数内部猜主瓣宽度,这样可以避免“不同调用场景下主瓣定义不一致”的问题。第二,对输入做了向量和边界检查,防止因为索引越界导致静默出错。第三,设置了主瓣能量为零的保护分支,虽然正常信号里几乎不会出现,但调试异常数据时这个warning能帮你快速定位问题。
这个函数不挑应用场景,时间序列能用,空间方向图也能用,只要把输入换成对应的幅度序列即可。我后来做阵列方向图分析时,就是直接调用这个函数,没有另写一套。
2.3 关于MATLAB的xcorr函数,有三个细节必须说
很多人在计算ISL时,习惯直接调用MATLAB的xcorr函数来算互相关,然后对结果取模平方再套公式。这个思路本身没错,但有三个细节必须注意。
第一个细节,xcorr返回的是一个长度为2N-1的序列,中间位置对应零延迟。如果你直接把xcorr的输出塞进ISL计算函数,主瓣索引必须从N附近开始找,而不是从1开始找,否则时间轴完全错位,算出来的ISL没有物理意义。
第二个细节,xcorr默认会对结果做归一化。如果调用xcorr(a, b)时不指定'none'选项,MATLAB会在输出上乘以一个与序列长度相关的因子,导致幅度值不是严格的互相关结果。计算ISL时,因为取了比值,常数因子会被约掉一部分,但如果两个序列长度不同,归一化方式也有差异,仍可能引入误差。最稳妥的做法是显式指定xcorr(a, b, 'none')。
第三个细节,自相关函数的旁瓣分布与采样率直接相关。同一个波形,在不同采样率下,自相关旁瓣的能量分布差异很大。如果采样率太低,旁瓣的峰值和能量都会被低估,ISL数值就不准。这个坑后面我会专门拿出来讲。
3. 实操演练:两种典型波形的ISL计算
3.1 实例一:线性调频(LFM)波形的ISL计算
线性调频波形是雷达领域应用最广泛的脉冲压缩波形,没有之一。它的表达式是s(t) = exp(j * pi * K * t^2),其中K是调频斜率,t在脉宽T内变化。MATLAB里生成LFM信号很简单:
fs = 100e6; % 采样率 100 MHz T = 10e-6; % 脉宽 10 us B = 10e6; % 带宽 10 MHz K = B / T; % 调频斜率 t = 0 : 1/fs : T - 1/fs; % 时间向量 s = exp(1j * pi * K * t.^2); % LFM信号生成信号之后,计算自相关函数,再用calcISL函数算ISL。这里要特别注意主瓣宽度的确定:LFM信号经过匹配滤波后,主瓣宽度约为1/B,也就是100 ns。在100 MHz采样率下,主瓣大约跨10个采样点。我把主瓣起始索引设在峰值左侧第5个采样点,终止索引设在峰值右侧第5个采样点,就近似覆盖了主瓣的大部分能量区域。
% 计算自相关函数 r = xcorr(s, s, 'none'); N = length(s); % 找到主瓣峰值位置 [~, idx_peak] = max(abs(r)); % 主瓣区域索引(左右各取5个采样点) ml_start = idx_peak - 5; ml_end = idx_peak + 5; % 计算ISL isl_dB = calcISL(r, ml_start, ml_end); fprintf('LFM信号的ISL = %.2f dB\n', isl_dB);从我的实测结果来看,这种经典LFM波形的ISL大约在-17 dB到-13 dB之间,具体数值取决于时间带宽积和采样率。时间带宽积是影响LFM旁瓣水平的关键参数:TB乘积越大,匹配滤波输出越接近理想的sinc函数形状,第一旁瓣约在-13.2 dB处,但后面旁瓣衰减较慢,所以ISL不会特别低。
如果用窗函数加权,比如汉明窗,旁瓣能显著压低。加窗后的LFM波形,第一旁瓣可以压到-40 dB以下,但代价是主瓣会展宽约1.5倍,距离分辨力变差。这里体现了一个工程上永恒的权衡:你不可能同时获得低旁瓣和窄主瓣,ISL和PSL的改善都以主瓣展宽为代价。至于加窗前后的ISL对比,我建议你自己跑一遍,把加窗后的自相关函数画出来,你会很直观地看到旁瓣总体被压下去的效果。
3.2 实例二:相位编码波形的ISL计算
相位编码波形是另一大类常用的脉冲压缩波形。以经典的Barker码为例,它的自相关旁瓣非常均匀,峰值旁瓣电平理论上可以达到1/N的数量级(N为码长)。但Barker码长度有限,最长的Barker码只有13位,需要更复杂波形时,人们常用随机相位编码或优化相位编码。
这里用一个长度为64的随机相位编码波形做实例。先生成随机的0/π相位序列,然后将每个码片放在宽度为T_c的矩形脉冲内:
N_code = 64; % 码长 phase_code = exp(1j * randi([0, 1], 1, N_code) * pi); T_c = 100e-9; % 码片宽度 100 ns fs = 100e6; % 采样率 100 MHz M = round(T_c * fs); % 每个码片的采样点数 s = zeros(1, N_code * M); for n = 1:N_code s((n-1)*M + (1 : M)) = phase_code(n); end生成随机相位编码后,自相关的计算方法和LFM一样。主瓣区域和LFM有所不同:一个码片宽度T_c对应的主瓣宽度,在匹配滤波输出中大约占据M个采样点,这个宽度就是理论上的距离分辨力单元。所以我把主瓣边界设置为峰值左右各M/2个采样点。
随机相位编码有一个显著特点:不同随机序列的ISL结果差异很大。可能你某次生成一个序列,ISL是-15 dB;换一个随机种子,就变成-10 dB。这提醒我们,评价相位编码波形不能只看单次实现,需要在统计意义上分析ISL分布。用蒙特卡洛方式生成几百组随机码,统计ISL的均值和方差,才能得出这类码型家族整体的性能画像。
如果要做进一步优化,可以从随机序列出发,用遗传算法或模拟退火方法迭代搜索,以ISL为目标函数做最小化,收敛后得到的编码序列,ISL通常能比随机码低好几个dB。这个优化过程在MATLAB里可以用全局优化工具箱或自写简单启发式算法实现,后面第六章我专门聊一聊。
3.3 一个验证习惯:ISL计算结果到底准不准
很多人在算完ISL之后,只看一个数值就觉得完事了。我的建议是,每次算完都要画一张自相关幅度图,把主瓣边界标出来,肉眼确认边界位置是否合理。数值是决策的依据,图形是直觉的来源,两者缺一不可。
具体做法很简单,用plot画出abs(r)的曲线,再用hold on叠加两条竖线标记主瓣边界。如果主瓣区域明显包含了一部分旁瓣,或者边界把主瓣的尾巴切掉了,你从图上能一眼看出来,比对着数字猜要快得多。这个习惯帮我避免过好几次因为索引写错而得到“异常优秀ISL值”的尴尬。
4. 我踩过的坑:ISL计算中最容易出错的6个细节
4.1 主瓣边界到底怎么划,这是最核心的分歧点
主瓣边界的定义直接决定ISL数值,甚至可能让结果出现正负翻天覆地的变化。我见过两种主流做法。
第一种是以峰值两侧的第一零点为界。这种划分物理意义明确,也比较严谨。但问题是,对于随机相位编码波形,旁瓣形状不规则,第一零点的位置很难自动定位,有些波形根本没有明显零点。第二种做法是根据理论距离分辨力来划分,比如LFM信号的主瓣宽度约为1/B,那么就在峰值两侧各取1/(2B)的范围作为主瓣。这种做法能直接和雷达系统设计中的距离分辨力概念对应起来,复现性好。
我的建议是:在做项目汇报或发表论文时,明确报告主瓣的定义方式,并在MATLAB函数中将主瓣起点和终点作为可配置参数传入,避免被评审或同事质疑结果合理性。千万不要在主瓣划分上掺入太多主观判断,比如“这次取宽一点让ISL好看一点”,这会让结果失去可比性。
4.2 采样率选太高或太低,ISL数值都不稳定
采样率对ISL的影响非常显著。如果采样率过低,自相关函数的主瓣和旁瓣都被严重欠采样,算出来的能量分布完全不能反映真实信号特征。如果采样率过高,主瓣区域的采样点数量会非常多,边界移动一两个点,能量变化不明显,计算会更稳定,但代价是计算量增大。
具体来说,当采样率等于信号带宽时,LFM波形的匹配滤波输出主瓣只有三四个采样点,主瓣边界稍微偏一个点,能量占比就会变化10%以上,ISL数值很不稳定。采样率至少取信号带宽的2到4倍,主瓣范围才能覆盖足够的采样点,ISL结果才稳定。
实际操作中,我一般会让主瓣区域内的采样点数不少于10个。如果采样率不够,就先对信号做升采样再计算ISL,虽然增加了计算量,但结果稳定性好很多。MATLAB的resample函数可以完成这个操作,但要注意截止频率设置,避免引入额外失真。
4.3 xcorr的归一化行为,容易让人数据错乱
前面提过,xcorr函数做互相关时默认会进行某种形式的归一化。MATLAB文档里写得很清楚,默认情况下xcorr会除以N或N-|lag|之类的因子。对于长度不一致的两个信号,归一化因子各不相同,导致你拿不到真实的互相关输出。
如果只是计算同一信号的自相关,归一化的问题可能不大,因为比值计算会把常数因子约掉。但如果你在做两个信号之间的互相关,比如评估匹配滤波输出时使用了带限接收机,归一化因子的差异会被带进结果。推荐的做法是永远显式指定xcorr(a, b, 'none'),把原始互相关结果拿出来,缩放全靠自己控制,出了问题也好排查。
4.4 复数信号取模平方,千万别忘了abs
这个坑听起来很基础,但赶进度的时候真的容易踩。匹配滤波输出是复数信号,如果你直接用sig.^2做能量累加,得到的是复数平方而不是模平方。复数平方的量纲和相位有关,算出来的能量序列可能出现负值或者奇怪的幅度震荡。
正确做法是abs(sig).^2。这步看着简单,但出错影响很大,因为它直接影响后续所有累加和比值计算。我建议在计算ISL这类能量指标时,第一时间把功率序列算出来,打印一两个典型值检查合理性,比如峰值位置的能量应该等于信号总能量的某个合理倍数,如果量级差了好几个数量级,多半就是这步出了问题。
4.5 用FFT手动算自相关,FFT长度必须取够
MATLAB的xcorr底层会根据序列长度选择不同算法。对于长度不为2的幂的长序列,计算效率会有明显下降,但结果差异不大。真正需要注意的是,当你用FFT方法手动实现自相关时,必须注意圆周卷积带来的混叠效应。
FFT长度必须大于等于2N-1,否则自相关结果会被循环移位混叠,旁瓣结构被污染。我最初用FFT手动实现自相关时,FFT长度设成了N而不是2N-1,导致算出来的ISL偏小很多,一度以为这个波形的旁瓣性能特别好。后来用xcorr做交叉验证才发现问题所在。这个教训提醒我,至少准备两个独立的方法互相验证,别光依赖一种算法闭门造车。
4.6 零填充可能让ISL标签“变好”,但那是假象
有些人为了让旁瓣看起来更平滑,会先对信号做大量零填充再做自相关。零填充确实能让自相关输出更密集,看起来更细腻,但它不会改变真实信号的旁瓣能量结构,只是对同一信息做了插值。这时候如果仍按采样点来算主瓣和旁瓣的能量,结果会受插值点数影响,ISL数值并不稳定。
如果一定要做零填充,我建议把ISL计算写成基于物理坐标(比如时间轴或距离轴)而不是采样点索引的形式,这样零填充前后的结果才能对齐。在MATLAB函数里,可以让用户传入时间轴向量,主瓣边界用时间值来指定,这样代码的通用性更强。
5. 从时间维到空间维:ISL在天线方向图中的扩展用法
5.1 把ISL计算函数复用到阵列方向图上
ISL的应用远不止于脉冲压缩波形。在天线阵列的方向图综合和波束赋形设计中,ISL同样是一个核心优化指标。区别在于,之前处理的是时间域的匹配滤波输出,这里处理的是空间域的方向图幅度。
假设一个均匀线阵有N个阵元,阵元间距为d,波束指向角度为theta_0,方向图可以直接用MATLAB的arrayFactor函数或者手写累加公式计算。得到方向图功率序列后,主瓣区域就是波束指向附近的几个角度,旁瓣区域则是主瓣之外的整个角度范围。用前面同一个calcISL函数,把输入改成方向图幅度序列,传入主瓣的起点和终点索引,就能算出方位向的ISL。
这里有一个细节:阵列方向图的横轴是角度,不是均匀的距离间隔。在角度域上严格计算ISL时,功率序列最好乘上sin(theta)或cos(theta)的权重再累加,因为方向图能量在角度上的积分要考虑立体角因素。不过在很多工程近似中,窄波束场景下这种权重修正的影响不大,按角度均匀采样来累加能量也够用。
如果你手头有电扫阵列MATLAB建模仿真相关的参考书,我建议把方向图合成与旁瓣分析那几章反复看几遍,然后自己从零写一个均匀线阵方向图计算脚本,再套上calcISL函数做旁瓣评估。这个练习做完,你对阵列方向图和ISL之间关系的理解会提升一个档次。
5.2 低旁瓣加权与ISL的权衡之道
阵列方向图的低旁瓣设计通常借助窗函数加权实现。但任何窗函数加权在降低旁瓣的同时,一定会展宽主瓣,主瓣能量相对扩散,ISL可能下降也可能上升,取决于你如何定义主瓣边界。
我的个人经验是:如果阵列主要工作在强干扰环境下检测弱目标,PSL比ISL更值得优先优化;如果系统面临强杂波或分布式干扰,ISL是更合适的设计目标。在做波束赋形优化时,可以把ISL和PSL同时放进目标函数,设置不同权重,用多目标优化算法搜索帕累托前沿,比单一指标的反复试凑高效得多。
MATLAB的Phased Array System Toolbox里提供了不少方向图分析函数,比如beamwidth和sidelobe,但默认没有直接给出ISL的计算接口。所以我的做法是,先用工具箱生成方向图数据,再用自己写的calcISL函数来完成积分旁瓣计算,两边配合使用,效果很好。
6. 以ISL为目标的波形优化:几种实操思路
6.1 坐标下降法优化相位编码
以ISL为目标函数优化相位编码序列,最常用的方法是坐标下降法。核心思想是:每一次迭代只改变一个码片的相位,固定其余所有码片,计算当前ISL是否下降;如果下降就保留,否则恢复原值;遍历全部码片后重复多轮,直到ISL收敛。
这个算法实现简单,MATLAB代码大约三五十行,在码长几百以内速度很快,效果也比随机搜索好得多。需要注意的一点是,每一轮迭代时码片的遍历顺序会影响收敛速度,常用的做法是随机打乱遍历顺序,多跑几次取最好结果,能有效避免掉进局部最优。
坐标下降法的优点是实现简单、不依赖梯度信息,缺点是收敛较慢,适合码长不太大的场景。如果码长超过一千,建议换用基于梯度的方法,尽管自相关函数对相位求导比较繁琐,但可以利用解析梯度配合fminunc这类优化器来加速收敛。
6.2 用MATLAB优化工具箱做ISL最小化
MATLAB的Optimization Toolbox提供了fminunc、ga等函数,可以直接用于ISL最小化。以遗传算法ga为例,种群规模可以取50到100,交叉概率0.8,变异概率0.01,迭代代数根据码长来定。实测中,64位码用遗传算法搜索几千代,ISL能从-10 dB左右降到-20 dB级别,效果相当明显。
使用ga时有一个关键技巧:相位变量有2π的周期性,优化算法可能在一个周期内来回震荡。最好把相位映射到[0, 2π)或[-π, π)区间,并在目标函数中加入相位归一化处理。否则算法在后期可能收敛得很慢,甚至出现震荡不收敛的情况。
目标函数写起来也很有讲究。直接计算ISL需要先做自相关,再找到主瓣峰值和边界,这个过程在优化迭代中会被调用几千次,效率很关键。我自己的做法是,在目标函数里把自相关计算用FFT实现,并提前缓存主瓣边界索引,可以节省不少时间。波形设计优化本身是一个计算密集型任务,代码效率越高,你尝试的种子数就越多,找到好结果的机会也越大。
7. 一些个人经验与最后提醒
我在项目里习惯把ISL计算脚本单独放在一个公共工具库里,并配上一个自测试函数,用来验证每次新的波形设计有没有影响ISL计算逻辑。这个习惯帮我避免了很多回归问题。比如有一次我修改了另一个函数里的信号归一化方式,导致所有波形的功率水平变了,ISL计算因为用了相对比值,所以不受影响,但后来我在计算绝对旁瓣功率时发现了问题。如果当时没有自测试函数,这个问题可能会悄悄带入后续的仿真结果。
关于主瓣定义,我最后再强调一次:无论用哪种定义,务必保证团队或者论文里有统一约定,把它写成注释加进代码里,比事后在“这张图里主瓣取宽一点,ISL就好看了”这种讨论中争论要高效得多。
波形设计是一项工程经验积累大于理论推导的工作,ISL只是众多评价指标中的一个。如果你正在做信号设计相关工作,建议把ISL和PSL的MATLAB计算函数放在手边,配合实时绘图工具,在优化每个波形时把自相关函数和方向图先画出来,肉眼看看旁瓣形态,再结合数值指标做判断。我在实际使用中,最受益的一件事就是把计算函数和绘图代码封装在一起,每次运行直接输出数值和图形,减少了大量重复劳动。
最后再分享一个小技巧:如果你的波形最终要应用到实际雷达系统里,务必用系统真实的采样率、脉宽和带宽来标定ISL,因为任何一处参数不一致,计算出来的ISL都可能与系统实测值差出好几个dB。仿真阶段算得再漂亮,到外场测试时也要接受真实数据的检验。能把ISL从MATLAB代码一路算到实际回波数据,才算真正掌握了这个指标。