简介:围绕线性调频信号的滤波、去噪与脉冲压缩回波处理展开,资源面向雷达信号处理与通信系统方向的学习者和研究人员。压缩包内包含一个MATLAB脚本,可用来生成线性调频信号、实现匹配滤波与脉冲压缩,并演示十米、三十米、一百米等不同距离目标回波在匹配滤波后的分辨效果。由于线性调频信号的频率随时间线性变化,脉冲压缩后时域宽度显著缩短,搭配匹配滤波器可以有效抑制噪声、提升距离分辨率;代码中对此过程进行了完整仿真。整个压缩包仅为一千字节左右的轻量文件,结构极简,便于快速查阅和运行,目前已有二百五十五人学习。通过运行这段代码,读者可以直观观察线性调频信号的频谱特性、匹配滤波器对噪声的抑制作用、目标距离分辨能力的提升过程,从而深入理解从发射脉冲到压缩回波的核心处理链路。
1. 线性调频脉冲压缩技术:窄脉冲分辨率与宽脉冲能量的统一
做雷达信号处理的人,几乎绕不开线性调频(LFM)信号。它的核心价值在于:既能发射宽脉冲保证足够的辐射能量,又能在接收端通过匹配滤波把回波压缩成窄脉冲,从而获得高距离分辨率。这份 LFM.zip 资源里包含完整的 MATLAB 源码 LFM.m,模拟了三个不同距离目标(10米、30米、100米)的回波生成、匹配滤波和脉冲压缩全过程,直接运行就能看到目标在时间轴上从混叠到分离的直观效果。对于刚接触雷达信号处理、需要理解匹配滤波和脉冲压缩原理的从业者,以及正在做课程设计但不知道代码参数怎么定的学生,这份资源都能省去大量从零搭建的时间。需要强调的是,匹配滤波的本质是在白噪声背景下最大化输出信噪比的最优线性滤波器,而脉冲压缩则是这一理论在 LFM 信号上的直接工程体现,两者的结合正是现代雷达普遍采用 LFM 波形的根本原因。
2. LFM 信号模型与关键参数:从复数表达式到波形生成
2.1 时域表达式与瞬时频率的物理含义
LFM 信号在时域的复数表达式为 s(t) = exp(jπKt²),其中 K = B/T 称为调频斜率,B 是信号带宽,T 是脉冲宽度。这里的 j 表示虚数单位,实际发射的信号通常取其实部或虚部。瞬时频率 f(t) = (1/2π)·d(πKt²)/dt = Kt,也就是说频率随时间线性增长。这个线性关系是 LFM 信号区别于其他波形最核心的特征,也是后续匹配滤波能够实现脉冲压缩的数学基础。
在 MATLAB 中生成 LFM 信号,需要先确定采样率和采样点数。采样率 fs 至少要满足奈奎斯特条件,即 fs ≥ B,工程上通常取 fs = (1.2 ~ 2) × B 留出余量。采样点数 N = T × fs,对应脉冲持续时间内采样的离散样本数。如果不加窗直接使用矩形包络,频域会呈现典型的频谱泄漏特征,但 LFM 信号的频谱幅度在带宽范围内近似平坦,这是它能够在匹配滤波后形成低旁瓣窄主峰的重要原因。
% 参数定义 B = 100e6; % 带宽 100MHz T = 10e-6; % 脉冲宽度 10us fs = 200e6; % 采样率 200MHz,满足奈奎斯特且余量充足 K = B / T; % 调频斜率,单位 Hz/s N = round(T * fs); % 采样点数 t = (0:N-1) / fs; % 时间轴 % 生成LFM基带复信号 s_lfm = exp(1j * pi * K * t.^2); figure; plot(t*1e6, real(s_lfm)); xlabel('时间/us'); ylabel('幅度'); title('LFM信号实部波形');这段代码里,K = B/T 直接决定了瞬时频率的变化速率。K 越大,频率增长越快,相同带宽下需要的脉冲宽度越短。时间轴 t 从 0 开始,每两个采样点之间的时间间隔是 1/fs。实部波形呈等幅振荡且频率逐渐加快的特征,这就是 LFM 最直观的时域表现。需要特别留意的是,这里使用的是复指数信号,后续所有匹配滤波运算都基于复数处理,如果误用实信号会把镜像频谱引入信号,导致压缩后出现虚假目标。
2.2 时间带宽积与脉冲压缩增益的关系
LFM 信号有一个非常重要的参数叫时间带宽积 D = B × T,它同时决定了两个关键指标:脉冲压缩比和压缩增益。理论上,匹配滤波后输出的主瓣宽度约为 1/B,对比原始脉冲宽度 T,压缩比为 T/(1/B) = B·T = D。这意味着时间带宽积越大,脉冲被压缩得越狠,距离分辨率越好。
以雷达方程的角度看,发射宽脉冲 T 保证了足够的平均功率,接收端压缩成 1/B 的窄脉冲,等效于系统同时获得了宽脉冲的能量优势和窄脉冲的分辨率优势。这里的 D 就是所谓脉冲压缩增益,通常以 10·log10(D) 计算。比如 B = 100MHz、T = 10us,D = 1000,增益就是 30dB。30dB 的信噪比提升是相当可观的,它意味着检测能力差不多提高了三到四个数量级,这对远距离小目标的探测至关重要。
% 计算理论压缩增益 D = B * T; % 时间带宽积 gain_db = 10 * log10(D); % 理论压缩增益 fprintf('时间带宽积 D = %g, 脉冲压缩增益 = %.2f dB\n', D, gain_db); % 发射波形带宽的频域观测 S_f = fftshift(fft(s_lfm)); f_axis = (-N/2:N/2-1) / N * fs; figure; plot(f_axis/1e6, abs(S_f)/max(abs(S_f))); xlabel('频率/MHz'); ylabel('归一化幅度'); title('LFM信号频谱'); axis([-150 150 0 1.2]);频谱图应该能看到主能量集中在 [-50MHz, 50MHz] 的区间内,这就是 B = 100MHz 的带宽范围。图上的频谱幅度不是理想的矩形,有边缘的滚降,这是因为信号本身是有限时长的,等效于矩形窗与理想 LFM 频谱的卷积。滚降的快慢取决于时宽 T,T 越大滚降越陡峭。实际工程中如果需要更平坦的频谱,可以加窗整形,但也带来了匹配滤波效率下降和主瓣展宽的代价。
2.3 目标回波模型的建立方法
理解了发射 LFM 信号,接下来就需要建立目标回波的离散模型。在简化场景中,忽略幅度衰减和相位变化,回波就是发射信号的延时副本。设目标距离为 R,电磁波往返传播速度为 c(光速),那么回波延时 t_delay = 2R/c。离散化后,延时对应的采样点数为 round(t_delay × fs)。
% 目标距离与回波生成 R = [10, 30, 100]; % 三个目标距离,单位米 delay_samples = round(2 * R / 3e8 * fs); % 各自延时对应的采样点数 N_total = N + max(delay_samples); % 总采样长度,确保回波完整 echo = zeros(1, N_total); % 初始化回波向量 % 线性叠加所有目标回波 for k = 1:length(R) idx = delay_samples(k) + (1:N); echo(idx) = echo(idx) + s_lfm; end % 加入噪声(可选) noise_power = 0.01; echo_noisy = echo + sqrt(noise_power) * randn(1, N_total);这段代码用循环把不同延时的 LFM 信号叠加到同一个向量上。总长度设为 N + max(delay_samples) 是为了容纳最远目标的完整回波,避免数组越界或截断。噪声功率设了 0.01,对应的信噪比大约是 20dB,这是比较乐观的场景。工程上回波幅度会随距离的四次方衰减,而且不同目标的雷达截面积也各不相同,这里统一了幅度是为了把注意力集中在延时信息上。加噪时使用 randn 生成高斯白噪声,近似模拟接收机热噪声与外部环境噪声的叠加效果。
3. 匹配滤波器的实现原理与 MATLAB 代码实战
3.1 匹配滤波的数学本质与最优性条件
匹配滤波器的设计目标是:在加性白噪声背景下,使滤波器输出端的瞬时信噪比最大化。这个问题的解不是唯一的,但它要求滤波器的频率响应为输入信号频谱的共轭,即 H(f) = S*(f),对应时域为输入信号的时间反转共轭。这个结论的推导基于施瓦茨不等式,其物理直觉是:当滤波器对信号各频率分量的相位补偿到一致时,信号在这些频率上相干叠加,而噪声各频率分量随相位随机起伏,不能相干积累,因此输出信噪比达到最大。
匹配滤波运算在时域上表现为回波信号与参考信号的卷积。参考信号通常选择发射波形的共轭时间反转,即 s_ref(t) = s*(-t)。如果是基带复信号,这个反转共轭可以直接构造。在实际实现时,更高效的做法是使用 FFT 将卷积转换为频域乘法,因为直接时域卷积的复杂度是 O(N²),而 FFT 方法只有 O(N·logN),特别是当信号长度达到数千甚至数万点的时候,性能差距极为显著。
% 构造匹配滤波器参考信号 ref = conj(fliplr(s_lfm)); % 时间反转共轭 % 频域实现匹配滤波 N_fft = 2^nextpow2(N_total); % FFT点数取2的幂,加速计算 Echo_f = fft(echo, N_fft); % 回波FFT Ref_f = fft(ref, N_fft); % 参考信号FFT compressed = ifft(Echo_f .* Ref_f, N_fft); % 频域相乘后逆变换 compressed = compressed(1:N_total); % 截取有效长度N_fft 取了 2 的幂次,这是为了配合 MATLAB 中 FFT 的高效实现。如果直接用 N_total 做 FFT,虽然结果一样,但非 2 的幂次在部分 FFT 实现中会退化到混合基算法,速度慢不少。频域乘法相当于在频域完成卷积,需要注意的是这种循环卷积与线性卷积在 FFT 点数足够的情况下是等价的。点数只要不小于 N_total + N - 1 就不会发生混叠,这里取 2 的幂次后通常远大于这个值,所以是安全的。压缩后的信号是复数,取模值后才对应我们常说的压缩脉冲波形。
3.2 时域卷积与频域乘法的等价性与性能对比
直接时域卷积可以用 MATLAB 自带函数 xcorr 或者 conv 实现。xcorr 的本质就是匹配滤波,因为自相关函数 R(τ) = ∫s(t)s*(t-τ)dt 和匹配滤波器输出在数学形式上一致。这一点初学者容易产生困惑:匹配滤波的输出不就是信号的自相关吗?严格来说,只有在接收信号完全等于发射信号(不考虑延时)的前提下,匹配滤波器输出才等于发射信号的自相关。
% 时域实现方式 compressed_td = conv(echo, fliplr(conj(s_lfm))); compressed_td = compressed_td(1:N_total); % 两种方法对比 figure; subplot(2,1,1); plot(abs(compressed), 'b'); title('频域实现匹配滤波输出'); xlabel('采样点'); ylabel('幅度'); subplot(2,1,2); plot(abs(compressed_td), 'r'); title('时域卷积实现输出'); xlabel('采样点'); ylabel('幅度');两种方式的结果理论上完全一致,区别仅在数值精度和运算效率上。实际项目中如果脉冲宽度不长,用 conv 直接算也不是不行,但一旦回波数据变长,走上百公里距离对应的就是上百万个采样点,时域卷积根本无法接受。我的习惯是:验证阶段两种方法都跑一遍,确认结果一致后再固定用频域实现。这能同时验证代码逻辑和数值稳定性,避免某一步矩阵维度或索引处理出错而不知。
3.3 压缩前后时域波形的可视化对比分析
运行完匹配滤波后,最直观的验证方式是分别画出压缩前后的信号幅度图。压缩前,回波信号是三个 LFM 宽脉冲在不同延时处叠加的结果,重叠区域在时域上看起来像一段连续的高能量波形,无法区分出有几个目标。压缩后,三个窄脉冲高峰对应着三个目标的准确位置。这组对比图是所有雷达信号处理教材中都出现过的经典展示,也是课程设计里最核心的输出结果。
figure; subplot(2,1,1); plot(0:N_total-1, abs(echo), 'b'); xlabel('采样点'); ylabel('幅度'); title('匹配滤波前:三目标回波混叠'); subplot(2,1,2); plot(0:N_total-1, abs(compressed), 'r'); xlabel('采样点'); ylabel('幅度'); title('匹配滤波后:三目标清晰分离'); % 将峰值对应的距离还原 [~, locs] = findpeaks(abs(compressed), 'MinPeakHeight', max(abs(compressed))*0.5); R_est = (locs - 1) / fs * 3e8 / 2; disp('检测到的目标距离(m):'); disp(R_est);findpeaks 函数用了 MinPeakHeight 参数过滤掉低幅度噪声峰,阈值设为最大峰值的 50% 是经验值。在多目标场景下,如果两个目标靠得很近,它们的压缩脉冲主瓣会重叠,findpeaks 可能无法分辨,这时需要借助更精细的峰值分离算法。这里检测到的 R_est 应该接近 [10, 30, 100],误差来自延时取整。因为延时采样点数可能是 13.33 这样的小数,但离散化后取整成了 13,导致了微小偏移。这个误差对距离测量的影响是 fs 决定的距离量化间隔,过大的 fs 会把这个误差压得更小。
4. 多目标回波的分辨与旁瓣抑制:距离分辨率的关键工程细节
4.1 距离分辨率的理论极限与带宽的关系
两个目标能够被分辨的临界条件是它们的主瓣峰值之间的间隔不小于主瓣宽度。对 LFM 脉冲压缩后的信号而言,主瓣宽度约为 1/B(基带处理后对应的时间),换算成距离就是 ΔR = c/(2B)。以 B = 100MHz 为例,距离分辨率为 1.5 米。也就是说,如果两个目标相距小于 1.5 米,即便使用匹配滤波也无法从时间轴上把它们分开。这个极限是由信号带宽决定的固有属性,跟采样率、脉冲宽度都没有直接关系,除非加大带宽。
对于本案例中的 10米、30米、100米 三个目标,最小间隔是 20 米,远大于 1.5 米的分辨率极限,所以分离毫无压力。但如果把 30 米换成 30.5 米,距离间隔只有 0.5 米,那么 B 必须大于 300MHz 才能分辨。理解这个数量级关系,再看题目中的目标参数就比较有感觉了。实际雷达设计中,带宽往往由系统探测需求倒推出来,而不是随意选定的。
% 不同带宽下距离分辨率对比 B_values = [50e6, 100e6, 200e6]; % 三个候选带宽 R_resolution = 3e8 ./ (2 * B_values); fprintf('带宽 50MHz 时分辨率: %.2f m\n', R_resolution(1)); fprintf('带宽 100MHz 时分辨率: %.2f m\n', R_resolution(2)); fprintf('带宽 200MHz 时分辨率: %.2f m\n', R_resolution(3));这组输出让设计者对参数选择有直接的量化感知。带宽从 50MHz 提升到 200MHz,分辨率从 3 米提升到 0.75 米,代价是对采样率、存储和后续处理的硬件压力同步上升。工程上不会一味追求高分辨率,而是在系统带宽资源和实时性要求之间找平衡,这也是为什么 LFM 信号在气象雷达、汽车毫米波雷达和合成孔径雷达中的带宽选择各有不同的原因。
4.2 窗函数加权:主瓣展宽与旁瓣抑制的取舍
匹配滤波输出的旁瓣水平在未加权的情况下是 -13.2dB,这对多目标场景是隐患。强目标的高旁瓣可能淹没弱目标的主瓣,造成漏检或虚假检测。解决这个问题的常规手段是加窗,常用窗函数包括汉明窗、海宁窗、布莱克曼窗和泰勒窗。加窗的实现方式有两种:一种是在发射信号和参考信号上都加窗,另一种是仅在匹配滤波后对压缩结果做加权。更常见的是在频域对参考信号频谱加窗,相当于对接收频谱加权,效果等价。
% 使用汉明窗抑制旁瓣 win = hamming(N, 'periodic').'; s_lfm_win = s_lfm .* win; % 发射信号加窗 ref_win = conj(fliplr(s_lfm_win)); % 新的参考信号 Echo_f = fft(echo, N_fft); Ref_win_f = fft(ref_win, N_fft); compressed_win = ifft(Echo_f .* Ref_win_f, N_fft); % 对比主瓣与旁瓣 figure; plot(db(abs(compressed)/max(abs(compressed))), 'b'); hold on; plot(db(abs(compressed_win)/max(abs(compressed_win))), 'r'); legend('不加窗','汉明窗'); ylabel('归一化幅度/dB'); xlabel('采样点'); ylim([-60 5]);db 函数把幅度转成了 dB 刻度,这样能更清楚地看到旁瓣水平。不加窗时第一旁瓣大约是 -13dB,加汉明窗后可以压到 -40dB 以下,但主瓣宽度同时展宽了约两倍。在实际雷达工作模式下,如果探测范围内目标数量不多且目标间距较大,可以不加窗以保留最优分辨率;如果跟踪场景中存在大量目标或强杂波,则优先考虑低旁瓣性能,接受一定的分辨率损失。
4.3 目标检测:峰值定位与距离标定
匹配滤波和加窗都完成后,最后的输出需要转成目标距离信息。这一步包含两个关键操作:检测峰值位置,以及把峰值位置从采样点编号转换到实际距离。峰值位置 locs 对应的是压缩脉冲的延时采样点,距离计算公式是 R = (locs-1)×c/(2×fs)。注意要把峰值定位的索引偏移考虑进去,MATLAB 索引从 1 开始,而延时从 0 开始的物理含义对应会差一个采样间隔。
% 峰值检测与距离输出 threshold_factor = 0.3; % 阈值系数,固定为最大峰值的30% pks_threshold = threshold_factor * max(abs(compressed_win)); [~, locs_det] = findpeaks(abs(compressed_win), 'MinPeakHeight', pks_threshold); range_est = (locs_det - 1) / fs * 3e8 / 2; figure; stem(range_est, abs(compressed_win(locs_det)) / max(abs(compressed_win)), 'filled'); xlabel('距离/m'); ylabel('归一化峰值幅度'); title('目标距离估计结果'); grid on;阈值系数 0.3 的设置不是随意的:太低了会把噪声峰误判为目标,太高了会漏掉弱目标。在噪声功率未知的情况下,可以使用恒虚警检测(CFAR)估计噪声基底并自适应设置阈值,这是雷达检测的标准方法。不过在课程设计和算法验证阶段,固定阈值足以说明匹配滤波和脉冲压缩的完整流程。运行这段代码后,理论上应当能看到三个目标分别落在 10 米、30 米、100 米处,峰值幅度接近一致。
5. 匹配滤波实现中的避坑清单:从波形失配到数值精度
5.1 参考信号方向错误导致压缩失败
现象:匹配滤波输出没有预期的窄脉冲峰,波形看起来仍然像宽脉冲或者出现杂乱的振荡。
原因:参考信号的构造方向反了。匹配滤波要求参考信号是发射信号的共轭时间反转,也就是 fliplr(conj(s_lfm))。如果漏掉了 fliplr,直接用 conj(s_lfm),结果相当于把信号和自身的共轭做相关而不是卷积,在 LFM 信号的对称性下会产生错误的时间延迟映射,脉冲压缩就完全失效了。
解决:打印参考信号的第一个和最后一个采样点,对比发射信号的对应位置,确认两者是时间反转关系。另外可以用一个已知距离的目标做单目标测试,看输出的峰位是否与理论延时一致。
5.2 复数信号与实信号的混用导致频谱混叠
现象:仿真结果出现双峰或者回波波形异常,目标看起来变成了两个。
原因:LFM 信号使用了复指数表达。如果代码里用了实信号 exp(jpiK*t²) 的部分替代,或者用 sin/cos 函数生成了实信号,就相当于在频谱上同时保留了正负频率分量,导致匹配滤波后出现对称的镜像峰。
解决:始终使用复指数信号初始化信号和回波,保持基带处理的一致性。如果在硬件实现中只能用实信号,需要先用正交解调(I/Q 解调)恢复复基带信号,再进行匹配滤波。
5.3 延时取整误差造成测距偏差
现象:检测到的目标距离和设置值系统性偏差一两个采样间隔对应的距离。
原因:采样是离散的,目标延时换算出的采样点数往往不是整数,round 取整引入了量化误差。这个误差的绝对值不超过 1/fs × c/2,也就是距离量化单元的半格。
解决:接受这个系统误差,在报告中标明当前采样率下的测距精度。如果精度不够,提高采样率或者在峰值附近做插值(比如抛物线插值)来获得亚采样精度。抛物线插值公式为 Δ = 0.5×(p[k-1] - p[k+1]) / (p[k-1] - 2p[k] + p[k+1]),其中 p[k] 是峰值采样点的幅度。
5.4 FFT 点数不足导致循环卷积混叠
现象:压缩输出左右两端出现不正常的折叠峰,看起来像多出了目标。
原因:FFT 实现卷积时,如果 N_fft 小于线性卷积所需长度 N_total + N - 1,循环卷积的尾部会折叠回头部,形成虚假峰值。这个错误在短脉冲场景下不明显,但一旦回波长度增加就会暴露出混叠效应。
解决:FFT 点数至少要取到 nextpow2(N_total + N - 1),保守起见我也会把点数定到 N_total 的两倍以上。这是在牺牲少量计算资源换取明确无误的结果。设计阶段先验证 N_fft 是否满足条件,再进入批量计算。
5.5 高旁瓣掩蔽相邻目标的现象
现象:一个强目标附近的小目标检测不到,峰值搜索只能找到强目标。
原因:不加窗时旁瓣达到 -13.2dB,如果强目标比弱目标强 20dB,那么弱目标的主瓣实际上被强目标的旁瓣淹没。这在多目标检测中是最常见的失败模式之一。
解决:先用窗函数压低旁瓣,再结合 CFAR 检测处理。注意加窗会适度展宽主瓣,在旁瓣抑制和分辨率之间做权衡。如果对分辨率有硬性要求,可以考虑扩展的相位编码波形或非线性调频(NLFM),它们在保持高分辨率的同时也有更低的固有旁瓣。
6. 验证脉冲压缩实现正确性的三个步骤与仿真结果检查
拿到了 LFM.m 并跑通以后,真正要关注的问题是确认自己的实现逻辑正确,而不是仅仅看到图形上有尖峰。我通常会用三个步骤做完整的验证,每一层都能独立发现实现中的问题,也算是我压箱底的习惯。
第一步是单目标验证。把多目标场景简化成单个目标,距离设成一个已知数,比如 50 米,运行匹配滤波后检查峰位是不是正好落在 50 米处。单目标的优势是所有干扰因素都最小,如果这一步的位置不对,说明参考信号构造或延时换算存在问题,需要立刻回头修。单目标通过之后再扩展到多目标场景,避免一开始就在复杂波形里排查问题。
第二步是信噪比增益验证。先在不加噪声的情况下测量压缩后信号的峰值幅度,与压缩前的平均幅度做对比,再换不同的噪声功率重复测试,画出输出信噪比和输入信噪比的关系曲线。理想情况下,直线斜率接近 1,截距就是匹配滤波增益,应该接近理论值 10·log10(B·T)。如果实测增益与理论值差距超过 2dB,就要检查是不是加窗过度或者信号截断导致能量损失。这一步能直接检验去噪性能,也最符合题目中 LFM 滤波去噪的诉求。
% 信噪比增益的实测验证 snr_in = -10:5:10; % 输入SNR扫描 snr_out = zeros(size(snr_in)); for k = 1:length(snr_in) noise = randn(1, N_total); noise = noise / norm(noise) * norm(echo) * 10^(-snr_in(k)/20); echo_test = echo + noise; comp_test = abs(ifft(fft(echo_test, N_fft) .* Ref_f, N_fft)); % 信号功率取峰值附近,噪声功率取远离峰值区域的平均 [peak_val, peak_idx] = max(comp_test); signal_power = peak_val^2; noise_region = comp_test([1:peak_idx-10, peak_idx+10:end]); noise_power = mean(noise_region.^2); snr_out(k) = 10 * log10(signal_power / noise_power); end figure; plot(snr_in, snr_out, 'o-'); hold on; plot(snr_in, snr_in + gain_db, 'r--'); xlabel('输入SNR/dB'); ylabel('输出SNR/dB'); legend('实测输出SNR','理论值(输入SNR+增益)');这段代码里噪声功率按归一化方式调整,保证不同输入信噪比条件下信号的幅度基准一致。峰值附近挖掉 10 个采样点作为保护间隔是为了避免把主瓣能量算进噪声里,如果保护间隔太小,噪声功率评估就会偏高,导致输出信噪比被低估。实测值和理论曲线应该呈现出平行关系,斜率接近 1,这意味着匹配滤波器在不同噪声环境下都能提供稳定的增益,这正是它作为最优线性滤波器的工程体现。
第三步是测距精度验证。构造两个间距略大于理论分辨率的目标,比如距离分辨率是 1.5 米,就把两个目标放在 100 米和 102 米处,观察压缩波形是否能形成两个独立的峰。然后逐步缩小间距,找到恰好无法分辨的临界间距,对比理论分辨率值。这个实验能直观感受到带宽对分辨率的决定性影响,也能发现代码里是否存在由加窗导致的分辨率损失。跑完这三步,我对这套仿真结果的信心才是充足的。从那以后,我每次拿到新的 LFM 处理代码,都会强制走一遍单目标验证、增益验证、临界分辨率验证这组流程,虽然多了十几分钟的仿真时间,但排查问题的时间反而大大缩短了。希望这些经验能帮你在使用这份资源时少走弯路,把精力集中在真正值得推敲的信号处理细节上。
本文还有配套的精品资源,点击获取