简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作业与毕业设计。代码采用参数化编程,雷达带宽、脉宽等关键参数可灵活修改,无需改动内部逻辑即可适配不同体制与场景;匹配滤波、时宽带宽积、旁瓣特性等核心概念通过仿真结果得到直观体现,注释清晰便于逐步追踪信号流。压缩包共10个文件,含2个.m主程序与8个PNG图像——图像分别展示发射信号、回波、压缩后脉冲等中间/最终结果,方便对照验证;整体仅207KB,轻量易用。已有86人浏览学习,适合需要快速获取可运行Matlab代码并理解脉冲压缩原理的读者。运行附赠案例数据即可观察从发射到压缩全过程的波形变化,有效串联理论公式与实际信号处理。
1. 雷达信号脉冲压缩仿真:从信号生成到脉压输出一次跑通
做雷达信号处理的人绕不开脉冲压缩,尤其是线性调频(LFM)信号这套体系:发射宽脉冲保证足够能量,接收端用匹配滤波把回波压成一个窄峰,从而同时拿到作用距离和距离分辨率。这个 MATLAB 资源把整条链路拆成了三段——信号生成、回波仿真、脉冲压缩,每段代码都留好了参数接口,拿到就能在 MATLAB 里直接跑通。我第一次拿到这套代码时,没有急着看波形,而是把发射信号、回波和脉压输出逐段和公式做对照,确认每个峰值都能解释清楚来自于哪个目标、为什么出现在那个距离。这个资源适合作雷达课程设计、做算法验证的工程师,以及刚入门想在代码层面吃透脉压原理的同学。全文照着一个完整流程走下来,你会得到的不只是一张脉压图,而是一套可复用的仿真模板。
2. 信号生成:线性调频波形的参数约束与MATLAB实现
2.1 距离分辨率、作用距离和采样率:三个量先立约束
脉冲压缩要解决的根本矛盾是“宽脉冲和窄脉冲不可兼得”:宽脉冲能量大、探测距离远,但距离分辨率差;窄脉冲分辨率好,但发射能量上不去。线性调频(LFM)信号的思路是,把发射能量摊在一个长脉冲里,脉冲内瞬时频率从 -B/2 线性扫到 +B/2,接收端再通过匹配滤波把回波压缩成 1/B 量级的窄脉冲。这样一来,距离分辨率只由发射信号带宽 B 决定,和脉宽 T 脱钩了。这个解耦就是脉冲压缩能在雷达里被大规模使用的根本原因。
所以仿真参数不能随手写。我拿到一个脉压仿真任务时,习惯按这个顺序倒推:先按要求的距离分辨率确定 B,比如距离分辨率 30m,对应 B = c/(2δR) ≈ 5MHz;再按作用距离和积累需求确定 T,如果要求发射能量大,T 就取长一些,比如 50us;最后定采样率。低通采样下要求 fs ≥ 2B,工程上更稳妥的是取 3 到 5 倍带宽,也就是 15MHz 到 25MHz。
为什么必须满足 fs ≥ 2B?因为基带 LFM 信号频带宽度近似等于 B,低于奈奎斯特采样率会发生频谱折叠。但频谱折叠在 LFM 信号里的表现并不是“波形看起来变差了”,而是脉压后主瓣变矮、旁瓣抬高变形。这种问题从时域波形上很难直接判断,属于典型的“看起来哪都对、算出来哪都不对”的玄学现场。我见过有人为了排查这种问题,把窗函数换了五六种,最后才发现是采样率不够。所以参数约束应当在第一层就把采样率立住。
把采样率取到 60MHz 是这套代码里一个比较聪明的选择。它的直接好处有两个:一是时延量化误差变小,n_delay = round(τ × fs) 对应距离误差最大为 c/(2fs),60MHz 采样时只有 2.5m;二是后续做多目标分辨和峰值插值,采样点足够密,结果更稳定。代价只是序列变长、FFT 点数变大,多花几十毫秒计算时间,完全不值一提。
这里把三个关键量的关系先说清楚:带宽 B 决定距离分辨率;脉宽 T 决定发射能量和压缩比 T×B;采样率 fs 决定时延量化和频谱保真度。如果你在网上下载过别人写的 LFM 仿真代码,经常会看到三种参数相互对不上的情况,比如 B=10MHz、T=10us、fs=20MHz 看似满足采样定理,实际上三个量组合出来的调频斜率 k = B/T 高得离谱,相位在相邻采样点之间跳变超过 π,瞬时频率曲线都是断的。所以我建议任何仿真开始前,先算一遍这三个量的约束关系,再动代码。
2.2 复数基带LFM构建:时间轴起点、代码实现和瞬时频率自检
发射信号设计里最容易被忽略的是时间轴的起点。LFM 信号的复数基带形式是 s(t) = exp(jπkt²),如果你照抄公式把 t 从 0 取到 T,信号起始相位不为零,匹配滤波参考函数和回波之间会引入一个固定相位偏移。相位偏移对幅度检测影响不大,但后续如果要做多普勒处理、I/Q 不平衡校正,这个固定偏移会变成累赘。更稳妥的做法是从 -T/2 取到 T/2,让信号相位在 t=0 处对称。
为什么要用复数形式而不是直接生成 cos(2πf0t + πkt²) 这样的实信号?因为在脉冲压缩里要用到匹配滤波器,其冲激响应是发射信号的共轭反转。如果只用实信号,频谱里正负频镜像都存在,匹配滤波时镜像部分会干扰主峰,输出里会出现额外的假峰。虽然可以通过希尔伯特变换把实信号变成解析信号,但那样相当于额外做了一次复数化。既然后面的回波仿真、匹配滤波都是复数流程,发射信号从一开始就用复数形式是最自然的选择。
%% LFM发射信号生成 c = 3e8; % 光速 m/s B = 5e6; % 带宽 5MHz,对应距离分辨率 30m T = 50e-6; % 脉宽 50us k = B / T; % 调频斜率,单位 Hz/s fs = 60e6; % 采样率 60MHz Ts = 1 / fs; % 采样间隔 N_T = round(T * fs); % 脉宽内采样点数 3000 t = (-N_T/2 : N_T/2 - 1) * Ts; % 时间轴从 -25us 到 25us lfm_tx = exp(1j * pi * k * t.^2);k = B/T 这一行是整个信号生成的核心。因为 t 单位是秒,B/T 的单位是 Hz/s,物理含义是每秒钟频率变化的速率。如果你把时间轴写成了微秒却忘了把 k 换算成 MHz/us,后面的瞬时频率验证就全对不上了。这个单位换算问题出现在很多人的代码里,而且非常隐蔽,因为 MATLAB 不会报任何错误,画出来的图“看起来”也是线性的,只有斜率数值和预期对不上。
%% 瞬时频率自检:验证频率在 -B/2 到 B/2 之间线性扫过 phase = unwrap(angle(lfm_tx)); inst_freq = diff(phase) / (2 * pi * Ts); plot(t(1:end-1)*1e6, inst_freq/1e6, 'LineWidth', 1.2); xlabel('时间/us'); ylabel('瞬时频率/MHz'); grid on;这段自检代码用到了 unwrap 展开相位,是因为直接取 angle 得到的相位会被限制在 [-π, π] 区间,频率跨过 ±π 时相位会跳变,不做展开直接差分会得到尖刺。先展开成连续相位曲线再差分,得到的就是真实的瞬时频率。正常结果是一条从 -2.5MHz 到 +2.5MHz 的直线,斜率正好等于 k 折算到 MHz/us 后的值。
对于这套代码,我一般会提醒两件事。第一,FFT 的频谱检查也值得做:对 lfm_tx 做 fft 后取幅度,频谱包络应当近似为一个宽度约 5MHz 的矩形。这个检查可以连代码都不用写,直接在命令窗口执行plot(abs(fft(lfm_tx)))就能看到。第二,这套代码用到的都是 MATLAB 基础函数,从 R2019b 到 R2023b、MATLAB 2026b 这些版本跑都没有兼容问题,不需要额外安装工具箱,用在线版 MATLAB 跑也完全可以。最后补充一个细节:如果你把 t 写成 linspace(-T/2, T/2, N_T+1) 再去掉最后一个点,得到的时间轴和这里等效,但直接写 (-N_T/2 : N_T/2-1) 更简洁,也更容易看出采样点数。
3. 回波仿真:目标距离转时延、幅度控制和噪声叠加
3.1 点目标回波建模:时延、幅度和基带相位的关系
回波仿真的核心任务是把“目标在距离 R 处”翻译成数字信号里的延迟和幅度变化。电磁波从雷达发射到目标再返回,走的是双程距离 2R,所以回波相对发射信号的时延 τ = 2R/c。这个 τ 要在离散信号里折算成采样点延迟 n_delay = round(τ / Ts),然后让发射信号在回波数组里后移 n_delay 个位置。
幅度上的处理要分清场景。理想点目标回波在雷达方程里按 R^4 衰减,但在一维基带仿真里,我们通常把它简化成一个标量幅度系数 A,由目标散射截面积和目标距离共同决定。这样做的理由是:脉压仿真关注的是距离分辨力和峰值位置,不需要模拟完整的信道传播,A 只要设置合理,脉压后的相对幅度关系就能反映出不同目标的散射强度差异。
还有一个容易想多的地方:在复基带模型里,回波信号不需要再乘 exp(-j2πfcτ) 这类载频项。因为基带信号已经搬掉了载频,回波里剩下的相位信息主要是延迟引起的包络位移。如果目标是静止的,基带回波和发射信号之间只差一个延迟和一个实系数。只有当你要模拟运动目标的多普勒时,才需要在每个脉冲之间的回波里乘以步进相位,这个概念我们留到最后一章再展开。
%% 单个点目标回波生成 R_target = 10e3; % 目标距离 10km A_coef = 1.0; % 相对幅度系数 tau = 2 * R_target / c; % 双程时延 n_delay = round(tau / Ts); % 采样点延迟 echo_len = 200000; % 回波序列总长度 rx = zeros(1, echo_len); seg = A_coef * lfm_tx; rx(n_delay+1 : n_delay+N_T) = rx(n_delay+1 : n_delay+N_T) + seg;这段代码里 echo_len = 200000 乍一看很大,它是从系统角度设置的:回波序列要同时容纳多个目标的最远延迟和发射信号长度,所以干脆开得足够宽。一个简单判断标准是 echo_len 必须大于 max(n_delay) + N_T。如果回波数组长度小于这个值,远目标的回波会被直接截断,脉压输出里那个目标就是一片残缺的波形,找不出清晰的峰。
3.2 多目标回波叠加与噪声添加:SNR 的口径别算错
多目标回波的本质是发射信号按不同时延和幅度叠加到一个长数组里。如果你要仿真两个相距 150m 的目标,在 B=5MHz 分辨率 30m 的条件下,脉压后应该能清楚分出两个峰;这个距离差就是留给你验证分辨力的。
%% 多目标回波构造 targets = [10e3, 1.0; % 目标1:距离10km,幅度1.0 15.15e3, 0.8; % 目标2:距离15.15km,幅度0.8 20e3, 0.5]; % 目标3:距离20km,幅度0.5 rx = zeros(1, echo_len); for idx = 1:size(targets, 1) R = targets(idx, 1); A = targets(idx, 2); tau = 2 * R / c; n_delay = round(tau / Ts); seg = A * lfm_tx; if n_delay + N_T <= echo_len rx(n_delay+1 : n_delay+N_T) = rx(n_delay+1 : n_delay+N_T) + seg; else warning('目标距离超出回波序列覆盖范围: %.1f km', R/1e3); end end循环里的 if 判断是防止延迟点加上信号长度后越界。如果你一开始把 echo_len 开得足够大,这个判断基本不会触发,但保留它可以让代码在不同参数下不崩。这里还加了 warning 提示,方便你在改目标距离时第一时间发现边界问题。
加噪声时有一个非常典型的口径错误。很多人写噪声代码时用 randn 直接生成复噪声,却没有意识到复噪声的总功率应该分配到实部和虚部两路。正确的写法是先计算信号平均功率,再按线性信噪比换算噪声功率,最后把噪声功率的一半分给实部、一半分给虚部。
%% 添加复高斯白噪声 snr_dB = 20; % 设定信噪比 signal_pow = mean(abs(rx).^2); % 回波信号平均功率 noise_pow = signal_pow / (10^(snr_dB/10)); noise = sqrt(noise_pow/2) * (randn(size(rx)) + 1j*randn(size(rx))); rx_noisy = rx + noise;这个噪声功率计算里,mean(abs(rx).^2) 统计的是整个回波数组的平均功率,包括零填充部分。这样处理的好处是,不管你设几个目标、目标距离多远,信噪比的定义口径始终是“整个接收序列里的信号平均功率对噪声功率”,和雷达方程里按距离单元计算是两回事。实际工程里更常见的做法是先设定每个目标的信噪比,但在一维脉压仿真里,统一用一个全局 SNR 更容易控制实验结果。
加噪声前后建议做一次对照。先用不含噪声的 rx 跑脉压,把理想峰值位置和幅度记录下来,再加噪声跑一遍,对比主瓣是否还能稳定找到。如果直接拿含噪声的脉压结果来调试算法,你很难区分主瓣变形到底是被噪声干扰还是算法本身有 bug。这个“先理想后加噪”的对照习惯,能帮你省下大量排查时间。
4. 脉冲压缩实现:匹配滤波、距离轴标定与窗函数权衡
4.1 频域匹配滤波:共轭谱、FFT点数和群延迟补偿
脉冲压缩的数学本质是让回波通过一个与发射信号共轭匹配的滤波器。匹配滤波器的冲激响应是发射信号的时间反转共轭 h(t) = s*(-t)。在频域实现时,只需要计算回波的 FFT 和发射信号 FFT 的共轭,逐点相乘再做 IFFT,这就是工程中最常用的频域匹配滤波。
但频域实现里藏着一个高频翻车点:直接对两个序列做同样点数的 FFT 再相乘,得到的是循环卷积。如果回波的延迟点加上发射信号长度接近 FFT 点数,循环卷积会把尾部数据绕回前部,在脉压输出里形成等间距的虚假峰,看起来像是多了一个目标。解决方法是把 FFT 点数取到两个序列长度之和减一以上,确保结果是线性卷积。
%% 频域匹配滤波 Nfft = 2^nextpow2(length(rx_noisy) + length(lfm_tx) - 1); fft_tx = conj(fft(lfm_tx, Nfft)); % 匹配滤波器频域响应 fft_rx = fft(rx_noisy, Nfft); % 回波频谱 conv_result = ifft(fft_rx .* fft_tx); % 频域相乘 + IFFT valid_len = length(rx_noisy) + length(lfm_tx) - 1; compressed = conv_result(1:valid_len); % 截取线性卷积有效段nextpow2 的作用是把 FFT 点数取到 2 的整数次幂,让 FFT 计算效率更高。这里真正重要的是 length(rx_noisy) + length(lfm_tx) - 1 这个下限,它保证了线性卷积不会发生循环混叠。截取到 valid_len 是因为 Nfft 可能比实际卷积长度长,后面多出来的部分只是补零区,不包含有效信息,留着只会让距离轴刻度变得不直观。
还有一个隐性的群延迟问题需要解释清楚。用 conj(fft(tx)) 做匹配滤波时,FFT 的循环反转特性会让匹配滤波器的冲激响应相对“理想时间反转”多出一个固定群延迟,群延迟量等于发射信号长度减一,也就是 length(lfm_tx) - 1。这个偏移不会影响脉压结果的形态,但在把峰值索引换算成距离时,如果不把它扣掉,目标距离会整体偏大一个发射信号长度对应的距离,大约在 3000 个采样点左右。这在雷达仿真里的表现就是“目标设 10km,峰却在 12.5km”,非常迷惑。
4.2 距离轴标定与窗函数:主瓣展宽是分辨率换旁瓣的代价
距离轴标定的正确顺序是:先把线性卷积有效段对应的索引轴建立起来,再扣掉群延迟,最后转成距离。下面的代码演示了完整做法:
%% 距离轴标定与峰值定位 n_axis = 0 : valid_len - 1; R_axis = c * (n_axis - (length(lfm_tx) - 1)) / (2 * fs); [peak_amp, peak_idx] = max(abs(compressed)); fprintf('峰值索引 %d,对应距离 %.3f km\n', peak_idx, R_axis(peak_idx)/1e3);注意 R_axis 公式里减去的部分是 length(lfm_tx) - 1,对应上面说的群延迟。峰值索引 peak_idx 是 MATLAB 的 1-based 下标,所以 R_axis(peak_idx) 取到的距离就是真实目标距离。按照这套代码的参数,10km 目标对应峰值索引大约在 11000 附近,换算回来正好是 10km,误差在 2.5m 以内——这是采样率量化误差的下限。
不做窗函数的 LFM 脉压输出,主瓣宽度约 1/B,第一旁瓣压制的电平是 -13.2dB。这个旁瓣在单目标场景下没什么影响,但两个目标幅度差超过 10dB 时,弱目标的峰可能被强目标的旁瓣直接盖住。加窗函数可以压低旁瓣,代价是主瓣展宽。下面这张表是常用的三种窗在 LFM 匹配滤波里的效果:
| 窗类型 | 主瓣展宽因子 | 第一旁瓣电平 |
|---|---|---|
| 矩形窗(不加窗) | 1.0 | -13.2 dB |
| 汉明窗 | 约 1.36 | -42.6 dB |
| 汉宁窗 | 约 1.62 | -31.5 dB |
展宽因子意思很直观:原始主瓣宽度 1/B,加汉明窗后变成约 1.36/B。也就是说,原本 30m 的分辨率会让到大约 40m。所以加窗前要想清楚,你的场景是“近距离强弱目标共存,旁瓣掩盖目标”还是“需要极致分辨力”。前者加窗,后者别加。这一步是工程里的老话题:没有免费的旁瓣抑制。
%% 加汉明窗的脉冲压缩 window = hamming(length(lfm_tx)).'; fft_tx_w = conj(fft(lfm_tx .* window, Nfft)); conv_w = ifft(fft_rx .* fft_tx_w); compressed_w = conv_w(1 : valid_len);窗加在发射信号上的效果,等效于在频域对匹配滤波器做加权。这种加权会让远离主瓣的频谱分量衰减,从而压低时域旁瓣。从公式角度理解,加窗后的匹配滤波器不再与原始发射信号完全匹配,所以主瓣会展宽,峰值幅度也会略微下降,这是失配带来的“失配损失”。实际使用中我一般先跑不加窗的版本看目标是否都在,再加窗看旁瓣是否压得住,两步分开做,避免一次引入太多变量。
5. 避坑:脉冲压缩仿真里五个高频翻车现场
这一章整理了我反复遇到过的五类问题,全部按“现象 → 原因 → 解决”的顺序写,每一条都是可以直接对照排查的经验。
5.1 回波数组长度不够,远目标直接被截断
现象:目标距离设得稍远,脉压输出里那个目标只剩一段残缺波形,看不到清晰的峰值;把 echo_len 调大后问题消失。
原因:回波数组长度 echo_len 小于最大目标延迟点 n_delay 加上发射信号长度 N_T。目标回波还没完全进入数组就被边界切掉了。
解决:确认 echo_len > max(n_delay) + N_T,并留 10% 余量。最笨也最有效的办法是先设一个很大的 echo_len 跑通,记录峰值位置后,再逐步缩短到临界值的两倍左右,既省内存又保证安全。
5.2 FFT点数不足,循环卷积在目标旁边“造”出假峰
现象:脉压输出里真峰旁边出现等间距的小峰,幅度略低,看起来像两个目标;改变目标距离,小峰和主峰的间距不变。
原因:匹配滤波的 Nfft 直接取了 length(rx_noisy),没有考虑两序列卷积后的总长度。FFT 隐含的循环卷积把尾部数据绕回了前部,形成虚警。
解决:Nfft 必须满足Nfft >= length(rx_noisy) + length(lfm_tx) - 1,用 nextpow2 取到 2 的幂。之后还要截取线性卷积有效段,不要把补零区当成信号区。
5.3 峰值索引换算距离总是偏大或偏小
现象:目标设在 10km,脉压后峰值反算出来要么是 12km 左右整体偏移,要么差几米到十几米,始终对不上。
原因:整段偏移通常是没扣匹配滤波群延迟,length(lfm_tx) - 1 对应的距离没有被减掉;几米到十几米的偏差通常是时延量化误差,源于 round 取整不一致。
解决:构造回波时用 n_delay = round(2R/cfs),标定距离时用 R_axis = c * (n_axis - (length(lfm_tx)-1)) / (2*fs),两头统一取整规则。如果是量化误差,提高采样率或对脉压输出做抛物线插值即可把误差压到 1m 以内。
5.4 加复噪声后实测信噪比比设定值低了 3dB
现象:代码里写了 snr_dB = 20,但测量脉压前的回波信噪比只有 17dB 左右,整个脉压结果比预期模糊。
原因:复噪声用 randn + 1j*randn 生成时,实部和虚部各有一份噪声功率,总噪声功率是单路的两倍。如果噪声幅度直接按 sqrt(noise_pow) 生成,实际注入的噪声功率被放大了一倍,等于信噪比降 3dB。
解决:噪声幅度写成 sqrt(noise_pow/2),把噪声功率先分成两半再分别赋给实部虚部。代码里就一句之差,但结果差异很明显,属于最容易自查却最常被忽略的问题。
5.5 只改带宽不换采样率,脉压结果瞬间变质
现象:把 B 从 5MHz 改成 20MHz,其他参数不动,脉压峰值变矮、主瓣变形,甚至出现峰分裂。
原因:20MHz 带宽在 60MHz 采样率下虽然满足 fs ≥ 2B,但已经是临界状态。LFM 信号的相位变化率极高,相邻采样点之间的相位差接近 π,相位量化误差急剧增大;同时 T×B 变大后,回波序列和发射信号长度不变的情况下,FFT 点数可能不再满足线性卷积条件。
解决:fs 至少取 3B 以上,Nfft 用 nextpow2 动态计算,不要把点数写死。改完 B 之后,固定跑一遍单目标无噪声验证脚本,检查峰值距离和主瓣宽度,确认没有异常再进行后续实验。
6. 进阶:用数值验证脉压增益,再扩展多周期多普勒视图
单脉冲脉压跑通之后,第一件值得做的事是验证脉压增益。理论上脉压的功率增益等于时宽带宽积 T×B,这是整个系统最核心的数值。参数 T=50us、B=5MHz 时,T×B=250,对应功率增益约 24dB。验证方法是对比脉压前后信噪比变化。
%% 脉压前后SNR对比 % 选取回波前200点作为纯噪声段 noise_seg = rx_noisy(1:200); noise_pow = mean(abs(noise_seg).^2); % 选取目标所在回波段估算信号功率 n_delay_10km = round(2*10e3/c / Ts); sig_seg = rx_noisy(n_delay_10km+1 : n_delay_10km+N_T); sig_pow = mean(abs(sig_seg).^2); snr_in = 10*log10(sig_pow / noise_pow); % 脉压后:峰值功率与远离主瓣的噪声段功率 peak_pow = max(abs(compressed).^2); noise_seg_pc = abs(compressed(1:200)).^2; noise_pow_pc = mean(noise_seg_pc); snr_out = 10*log10(peak_pow / noise_pow_pc); fprintf('SNR改善: %.2f dB,理论值: %.2f dB\n', snr_out - snr_in, 10*log10(T*B));运行后你会看到实测改善在 23 到 25dB 之间,和理论值 24dB 基本吻合,误差来自离散化损失和噪声估计偏差。如果偏差超过 2dB,优先检查窗函数——加了汉明窗之后,失配损失会直接吃掉一部分增益,这是正常现象。
做完增益验证,就可以把单脉冲场景扩展成多周期。把发射信号复制 M 份,每个周期对应一个脉冲重复间隔 PRI,目标在每个周期里产生相同的回波,只是慢时间上多了运动带来的相位步进。把 M 个周期的脉压输出沿慢时间做 FFT,就能得到距离-多普勒二维图,这是雷达信号处理里真正接近工程实战的一步。扩展时注意两点:不模糊距离要满足 R_max = c×PRI/2,PRI 太短会把远目标折叠进近距区;目标运动带来的步进相位只在慢时间方向上出现,距离维不受影响,所以先按距离维做脉压再沿慢时间做 FFT 的顺序不能换。
最后说一个我自己的习惯。每次改完参数,我都会先在无噪声、单目标场景下跑一遍,确认峰值位置和理论距离一致,再加噪声、再多目标、再换窗函数,这个顺序固定不变。它让我避免了很多“参数一动结果全乱”的排查,也帮我养成了对代码里每一个峰都能说出物理意义的工作方式。希望这套仿真模板和这些踩坑记录能帮你在 MATLAB 里把脉冲压缩这条路走顺。
本文还有配套的精品资源,点击获取