摘要
脉冲压缩是雷达导引头突破"作用距离-距离分辨力"固有矛盾的核型技术,直接决定了末制导阶段的目标检测能力与测距精度。本文承接第1篇的雷达方程与RCS模型,首先严格推导线性调频(LFM)信号的时频特性与匹配滤波输出信噪比增益;其次修正模糊函数的FFT快速计算方法,定量分析LFM的距离-多普勒耦合特性;进而对比分析加窗法、非线性调频(NLFM)、相位编码三类低旁瓣技术的性能权衡;最后结合弹载设备的工程约束(采样率、量化、多普勒容限、FPGA资源),通过Python仿真验证脉冲压缩对检测性能的改善效果。全文所有公式均给出完整推导,仿真代码可直接复现,为导引头信号级仿真提供工程级参考。
1. 引言
在第1篇中,我们通过雷达距离方程明确了主动导引头的最大作用距离:

其中,(SNR)min是检测所需的最小信噪比,由目标RCS起伏模型(Swerling I~IV)与检测概率 Pd、虚警概率 Pfa共同决定。对于典型空空导弹导引头(如PL-15的X波段AESA),若要探测50km外RCS=1m²的战斗机,所需的最小输入信噪比约为13dB(Swerling III,Pd=0.9,Pfa=10^−6)。
若采用传统窄脉冲(脉宽 τ=0.1μs),发射能量仅为 E=Ptτ,要达到足够的回波信噪比,需将发射功率提升至兆瓦级,远超弹载电源与T/R组件的承受能力。脉冲压缩技术允许发射宽脉冲(保证能量)而在接收端将其压缩为窄脉冲(保证分辨力),是解决这一矛盾的唯一途径。本文将围绕这一技术的理论、仿真与工程实现展开。
2. LFM信号模型:时频特性与核心参数
线性调频(LFM)是导引头最常用的脉冲压缩波形,其瞬时频率在脉冲宽度内随时间线性变化,能够将能量分散在宽频带内,同时保留良好的自相关特性。
2.1 数学定义
设载波频率 fc,脉冲宽度 τ,带宽 B,调频斜率 μ=B/τ,则基带LFM信号的复数形式为:

其中矩形窗函数 rect(t/τ)=1(∣t∣≤τ/2),否则为0。
信号的瞬时频率为相位的导数:

2.2 核心性能指标
LFM信号的两个核心参数决定了导引头的性能上限:
-
距离分辨力:δR=c/2B,仅与带宽有关,与脉宽无关。例如PL-15导引头若采用 B=3GHz的宽带波形,距离分辨力可达 δR=5cm,足以区分战斗机的进气道与机身。
-
时宽带宽积(压缩比):D=τB,决定了脉冲压缩的增益。例如典型导引头参数:τ=20μs,B=30MHz,则 D=600,意味着宽脉冲将被压缩为原宽度的1/600。
2.3 Python仿真:LFM时频特性
以下代码生成符合弹载导引头实际参数的LFM信号,采样率 fs=200MHz(满足Nyquist定理,留3倍以上余量):
python
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal, fftpack
import seaborn as sns
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
sns.set_style("whitegrid")
# -------------------------- 1. 导引头实际参数设置 --------------------------
fs = 200e6 # 采样率 200 MHz(>2*B=60MHz,满足Nyquist)
tau = 20e-6 # 脉冲宽度 20 us(典型导引头脉宽)
B = 30e6 # 带宽 30 MHz(X波段AESA典型带宽)
fc = 10e9 # 载波频率 10 GHz(X波段)
mu = B / tau # 调频斜率 1.5e12 Hz/s
c = 3e8 # 光速
# 时间轴(覆盖脉冲宽度,两端补零避免循环卷积混叠)
t = np.arange(-tau*2, tau*2, 1/fs)
N = len(t)
# -------------------------- 2. 生成LFM信号 --------------------------
lfm_baseband = np.exp(1j * np.pi * mu * t**2) * np.rectpulse(np.ones(int(tau*fs)), int(tau*fs))
lfm_passband = lfm_baseband * np.exp(1j * 2*np.pi*fc*t) # 通带信号(用于理解,实际处理用基带)
# -------------------------- 3. 时频特性绘图 --------------------------
fig, axes = plt.subplots(3, 1, figsize=(12, 10))
# 时域波形(实部)
axes[0].plot(t*1e6, lfm_baseband.real)
axes[0].set_xlabel('时间 (μs)')
axes[0].set_ylabel('幅度')
axes[0].set_title(f'LFM基带信号时域波形(脉宽={tau*1e6}μs,带宽={B/1e6}MHz)')
axes[0].set_xlim([-tau*1e6, tau*1e6])
axes[0].grid(alpha=0.3)
# 瞬时频率
inst_freq = np.diff(np.unwrap(np.angle(lfm_baseband))) * fs / (2*np.pi)
axes[1].plot(t[:-1]*1e6, inst_freq/1e6)
axes[1].set_xlabel('时间 (μs)')
axes[1].set_ylabel('瞬时频率 (MHz)')
axes[1].set_title('LFM信号瞬时频率线性特性')
axes[1].set_xlim([-tau*1e6, tau*1e6])
axes[1].grid(alpha=0.3)
# 频谱
freq = fftpack.fftshift(fftpack.fftfreq(N, 1/fs))
spectrum = fftpack.fftshift(np.abs(fftpack.fft(lfm_baseband)))
axes[2].plot(freq/1e6, spectrum/np.max(spectrum))
axes[2].set_xlabel('频率 (MHz)')
axes[2].set_ylabel('归一化幅度')
axes[2].set_title('LFM信号频谱')
axes[2].set_xlim([-B*2/1e6, B*2/1e6])
axes[2].grid(alpha=0.3)
plt.tight_layout()
plt.savefig('lfm_time_freq_spec.png', dpi=300)
plt.show()
3. 匹配滤波与脉冲压缩:理论推导与增益分析
脉冲压缩的本质是匹配滤波:在白噪声背景下,最大化输出信噪比的最优线性滤波。
3.1 匹配滤波器理论推导
设接收信号 r(t)=s(t)+n(t),其中 s(t)是发射信号,n(t)是双边功率谱密度为 N0/2的高斯白噪声。匹配滤波器的冲激响应为发射信号的共轭反转:

其频率响应为 H(f)=S∗(f),即与信号频谱共轭匹配。
输出信噪比推导:
匹配滤波的输出峰值信噪比为:

输入信噪比(接收端ADC输入)为:
脉冲压缩的处理增益为:

代入雷达距离方程的接收功率,最终可得 Gp=τB=D,即增益等于时宽带宽积。这是脉冲压缩的核心价值:通过增加脉宽 τ提升发射能量,通过压缩比 D回收信噪比。
3.2 脉冲压缩的工程实现
弹载导引头通常采用FFT快速卷积法实现脉冲压缩,避免时域卷积的高算力消耗:
-
对接收信号做FFT得到 R(f);
-
与匹配滤波器频率响应 H(f)=S∗(f)相乘;
-
做IFFT得到压缩后的时域信号。
该方法的计算复杂度为 O(NlogN),适合FPGA实现。
3.3 Python仿真:脉冲压缩效果
以下代码实现FFT快速脉冲压缩,并量化压缩前后的信噪比变化:
python
# -------------------------- 4. FFT快速脉冲压缩 --------------------------
# 匹配滤波器系数(频域)
Sf = fftpack.fft(lfm_baseband)
Hf = np.conj(Sf) # 匹配滤波器频率响应
# 模拟接收信号(加入高斯白噪声,SNR=-20dB,符合远距离弱目标场景)
snr_db = -20
signal_power = np.mean(np.abs(lfm_baseband)**2)
noise_power = signal_power / (10**(snr_db/10))
noise = np.sqrt(noise_power/2) * (np.random.randn(N) + 1j*np.random.randn(N))
rx_signal = lfm_baseband + noise
# FFT卷积
Rf = fftpack.fft(rx_signal)
compressed_f = Rf * Hf
compressed_t = fftpack.ifft(compressed_f)
# 归一化处理
compressed_t = compressed_t / np.max(np.abs(compressed_t))
lfm_envelope = np.abs(lfm_baseband) / np.max(np.abs(lfm_baseband))
# -------------------------- 5. 压缩效果绘图 --------------------------
fig, axes = plt.subplots(2, 1, figsize=(12, 8))
# 时域对比
axes[0].plot(t*1e6, lfm_envelope, label='原始LFM包络', alpha=0.7)
axes[0].plot(t*1e6, np.abs(compressed_t), label=f'压缩后信号(SNR={snr_db}dB)', linewidth=2)
axes[0].set_xlabel('时间 (μs)')
axes[0].set_ylabel('归一化幅度')
axes[0].set_title('脉冲压缩效果对比(FFT快速卷积)')
axes[0].legend()
axes[0].set_xlim([-0.5, 0.5]) # 聚焦主瓣区域
axes[0].grid(alpha=0.3)
# 压缩后信号dB图(旁瓣分析)
compressed_db = 20 * np.log10(np.abs(compressed_t) + 1e-10)
axes[1].plot(t*1e6, compressed_db)
axes[1].set_xlabel('时间 (μs)')
axes[1].set_ylabel('幅度 (dB)')
axes[1].set_title('压缩后信号旁瓣特性(未加窗)')
axes[1].set_xlim([-0.5, 0.5])
axes[1].set_ylim([-60, 5])
axes[1].grid(alpha=0.3)
plt.tight_layout()
plt.savefig('pulse_compression_result.png', dpi=300)
plt.show()
# 计算处理增益
snr_out = 10 * np.log10(2 * np.sum(np.abs(lfm_baseband)**2) / (noise_power * N))
print(f'理论处理增益:{10*np.log10(D):.2f} dB')
print(f'仿真输出SNR:{snr_out:.2f} dB')
print(f'输入SNR:{snr_db} dB,增益:{snr_out - snr_db:.2f} dB')
4. 旁瓣抑制技术:工程权衡与量化对比
未加窗的LFM脉冲压缩旁瓣高达-13.2dB,会导致两个问题:① 强目标旁瓣掩盖邻近弱目标;② 高旁瓣触发CFAR虚警。工程中需通过**加窗(加权)**抑制旁瓣,代价是主瓣展宽与增益略有下降。
4.1 加窗原理
加窗本质是对LFM信号的频谱进行幅度加权,降低频谱边缘的跳变,从而抑制时域旁瓣。导引头常用三类窗函数:
-
矩形窗:不加窗,主瓣最窄,旁瓣最高(-13.2dB);
-
Hamming窗:旁瓣<-42dB,主瓣展宽1.47倍,增益损失1.3dB;
-
Taylor窗:可自定义旁瓣电平(如-40dB、-50dB),主瓣展宽小于Hamming窗,是导引头首选。
4.2 Python仿真:旁瓣抑制量化对比
python
# -------------------------- 6. 旁瓣抑制对比 --------------------------
# 生成窗函数(频域加权,长度与LFM频谱一致)
win_rect = np.ones(N)
win_hamming = np.hamming(N)
nbar = 4 # Taylor窗旁瓣数
sll = -40 # Taylor窗旁瓣电平-40dB
win_taylor = signal.windows.taylor(N, nbar=nbar, sll=sll)
# 加窗后的匹配滤波
Hf_rect = np.conj(fftpack.fft(lfm_baseband * win_rect))
Hf_hamming = np.conj(fftpack.fft(lfm_baseband * win_hamming))
Hf_taylor = np.conj(fftpack.fft(lfm_baseband * win_taylor))
# 压缩结果
compressed_rect = fftpack.ifft(Rf * Hf_rect)
compressed_hamming = fftpack.ifft(Rf * Hf_hamming)
compressed_taylor = fftpack.ifft(Rf * Hf_taylor)
# 绘图
plt.figure(figsize=(12, 6))
plt.plot(t*1e6, 20*np.log10(np.abs(compressed_rect)/np.max(np.abs(compressed_rect)) + 1e-10),
label='矩形窗(未加窗)', alpha=0.8)
plt.plot(t*1e6, 20*np.log10(np.abs(compressed_hamming)/np.max(np.abs(compressed_hamming)) + 1e-10),
label='Hamming窗', alpha=0.8)
plt.plot(t*1e6, 20*np.log10(np.abs(compressed_taylor)/np.max(np.abs(compressed_taylor)) + 1e-10),
label=f'Taylor窗({nbar}旁瓣,{sll}dB)', alpha=0.8)
plt.xlabel('时间 (μs)')
plt.ylabel('幅度 (dB)')
plt.title('不同窗函数的旁瓣抑制效果对比')
plt.xlim([-0.5, 0.5])
plt.ylim([-80, 5])
plt.legend()
plt.grid(alpha=0.3)
plt.tight_layout()
plt.savefig('windowing_comparison.png', dpi=300)
plt.show()
# 量化指标
def calc_metrics(signal):
main_lobe = signal[np.argmax(np.abs(signal))]
side_lobes = np.concatenate([signal[:np.argmax(np.abs(signal))], signal[np.argmax(np.abs(signal))+1:]])
peak_sidelobe = 20*np.log10(np.max(np.abs(side_lobes))/np.abs(main_lobe))
main_lobe_width = np.sum(np.abs(signal) > 0.5*np.abs(main_lobe)) * (1/fs) * 1e9 # 半功率宽度,ns
return peak_sidelobe, main_lobe_width
metrics_rect = calc_metrics(compressed_rect)
metrics_hamming = calc_metrics(compressed_hamming)
metrics_taylor = calc_metrics(compressed_taylor)
print(f'矩形窗:第一旁瓣={metrics_rect[0]:.2f}dB,主瓣宽度={metrics_rect[1]:.2f}ns')
print(f'Hamming窗:第一旁瓣={metrics_hamming[0]:.2f}dB,主瓣宽度={metrics_hamming[1]:.2f}ns')
print(f'Taylor窗:第一旁瓣={metrics_taylor[0]:.2f}dB,主瓣宽度={metrics_taylor[1]:.2f}ns')
5. 模糊函数:波形的二维分辨特性
模糊函数 χ(τ,fd)描述了雷达信号在**距离(时延 τ)-速度(多普勒频移 fd)**二维平面的分辨能力,是评估波形性能的核心工具。
5.1 定义与物理意义

χ(τ,fd)∣2称为模糊函数平方,其主峰对应目标的距离-速度估计值,旁瓣对应模糊目标。理想波形的模糊函数应为"钉床":除原点外其余区域为零,但实际波形均存在折衷。
5.2 LFM的斜刀刃特性
LFM信号的模糊函数为:

可见其主峰沿直线 fd=μτ分布,呈斜刀刃(Skewed Blade) 状,这意味着距离与速度测量存在耦合:若目标存在多普勒频移 fd,其距离测量值将偏移 Δτ=fd/μ,即距离-多普勒耦合。
5.3 模糊函数仿真(FFT快速算法)
本次采用FFT循环相关法:
python
# -------------------------- 7. 模糊函数计算(修正版) --------------------------
def ambiguity_function(signal, t, fd_range):
"""FFT快速计算模糊函数"""
N = len(signal)
af = np.zeros((len(fd_range), N), dtype=complex)
for i, fd in enumerate(fd_range):
# 多普勒频移后的信号
shifted_signal = signal * np.exp(1j * 2*np.pi * fd * t)
# 循环相关(FFT卷积)
corr = signal.fftconvolve(signal, np.conj(shifted_signal)[::-1], mode='same')
af[i, :] = corr
# 归一化
af_abs = np.abs(fftshift(af, axes=1))
af_abs /= np.max(af_abs)
return af_abs
# 多普勒轴(对应导引头的最大不模糊速度:v_max = λ*fs/(4*fc) ≈ 1500m/s)
fd_max = fs/4 # 最大多普勒频移
fd_range = np.linspace(-fd_max, fd_max, 512)
af_lfm = ambiguity_function(lfm_baseband, t, fd_range)
# 绘图
plt.figure(figsize=(10, 8))
plt.imshow(20*np.log10(af_lfm + 1e-10),
extent=[-tau*2 * 1e6, tau*2 * 1e6, -fd_max/1e6, fd_max/1e6],
aspect='auto', origin='lower', cmap='viridis')
plt.colorbar(label='幅度 (dB)')
plt.xlabel('时延 (μs)')
plt.ylabel('多普勒频移 (MHz)')
plt.title('LFM信号模糊函数(斜刀刃特性)')
plt.clim(-40, 0)
plt.tight_layout()
plt.savefig('lfm_ambiguity_function.png', dpi=300)
plt.show()
6. 常用波形对比:LFM、NLFM、相位编码
除LFM外,导引头还常用非线性调频(NLFM)与相位编码信号,三者性能对比如下:
6.1 非线性调频(NLFM)
NLFM的频率变化率非线性(如正弦形、余割平方形),通过预失真设计使频谱幅度呈特定形状,无需加窗即可实现低旁瓣。其优点是主瓣宽度小于加窗LFM,缺点是距离-多普勒耦合更严重,多普勒容限更低。
Python仿真:NLFM设计与对比
python
# -------------------------- 8. NLFM信号生成(频域加权法) --------------------------
# 设计NLFM的频谱幅度(余割平方加权,实现-40dB旁瓣)
freq_axis = fftpack.fftshift(fftpack.fftfreq(N, 1/fs))
Sf_lfm = fftpack.fftshift(Sf)
# 余割平方加权:|S(f)| = csc(πf/(2B)),限制在带宽内
weight = 1 / np.sin(np.pi * freq_axis / (2*B) + 1e-10)
weight[np.abs(freq_axis) > B/2] = 0
Sf_nlfm = Sf_lfm * weight
Sf_nlfm = fftpack.ifftshift(Sf_nlfm)
# 逆FFT得到NLFM时域信号
nlfm_signal = fftpack.ifft(Sf_nlfm)
nlfm_signal *= np.rectpulse(np.ones(int(tau*fs)), int(tau*fs)) # 加矩形窗限制脉宽
# 压缩NLFM信号
Hf_nlfm = np.conj(fftpack.fft(nlfm_signal))
compressed_nlfm = fftpack.ifft(Rf * Hf_nlfm)
# 对比LFM与NLFM
plt.figure(figsize=(12, 6))
plt.plot(t*1e6, 20*np.log10(np.abs(compressed_taylor)/np.max(np.abs(compressed_taylor)) + 1e-10),
label='LFM+Taylor窗', alpha=0.8)
plt.plot(t*1e6, 20*np.log10(np.abs(compressed_nlfm)/np.max(np.abs(compressed_nlfm)) + 1e-10),
label='NLFM(余割平方加权)', alpha=0.8)
plt.xlabel('时间 (μs)')
plt.ylabel('幅度 (dB)')
plt.title('LFM与NLFM旁瓣性能对比')
plt.xlim([-0.5, 0.5])
plt.ylim([-80, 5])
plt.legend()
plt.grid(alpha=0.3)
plt.tight_layout()
plt.savefig('lfm_vs_nlfm.png', dpi=300)
plt.show()
NLFM在不加窗的情况下实现了-40dB旁瓣,且主瓣宽度比LFM+Taylor窗窄约10%,适合对距离分辨力要求极高的导引头(如反舰导弹末制导)。
6.2 相位编码信号
相位编码信号将宽脉冲分为 N个子脉冲(码元),每个码元的相位按特定序列(如Barker码、P4码)跳变,具有理想的周期性自相关特性。但其多普勒敏感性极强:当存在多普勒频移时,码元内的相位差会导致相关峰急剧恶化。
多普勒敏感性仿真
python
# -------------------------- 9. 相位编码信号与多普勒敏感性 --------------------------
# 生成13位Barker码
barker_code = np.array([1, 1, 1, 1, 1, -1, -1, 1, 1, -1, 1, -1, 1])
Tc = tau / len(barker_code) # 码元宽度≈1.54us
t_code = np.arange(0, Tc, 1/fs)
barker_signal = np.array([])
for bit in barker_code:
phase = 0 if bit == 1 else np.pi
barker_signal = np.append(barker_signal, np.exp(1j*phase) * np.ones_like(t_code))
# 加多普勒频移(模拟高速目标,v=750m/s,f_d=50kHz)
fd_target = 50e3
barker_fd = barker_signal * np.exp(1j * 2*np.pi * fd_target * np.arange(len(barker_signal))/fs)
# 压缩
compressed_barker = signal.fftconvolve(barker_fd, np.conj(barker_signal[::-1]), mode='same')
# 绘图
plt.figure(figsize=(12, 6))
plt.plot(np.arange(len(compressed_barker))/fs*1e6,
20*np.log10(np.abs(compressed_barker)/np.max(np.abs(compressed_barker)) + 1e-10),
label=f'Barker码(f_d={fd_target/1e3}kHz,v=750m/s)')
plt.xlabel('时间 (μs)')
plt.ylabel('幅度 (dB)')
plt.title('相位编码信号的多普勒敏感性')
plt.xlim([len(barker_signal)*0.4/fs*1e6, len(barker_signal)*0.6/fs*1e6])
plt.ylim([-40, 5])
plt.legend()
plt.grid(alpha=0.3)
plt.tight_layout()
plt.savefig('barker_doppler_sensitivity.png', dpi=300)
plt.show()
Barker码的多普勒敏感性。当目标速度为750m/s(多普勒频移50kHz)时,相关峰下降约12dB,旁瓣抬高至-15dB,完全丧失检测能力。因此相位编码仅适合低速目标(如地面目标),不适合空空导弹导引头。
6.3 波形选型总结
| 波形类型 | 旁瓣性能 | 主瓣宽度 | 多普勒容限 | 适用场景 |
|---|---|---|---|---|
| LFM+加窗 | -40~-60dB | 1.1~1.5倍 | 高(~1/τ) | 空空/地空导弹导引头(高速目标) |
| NLFM | -40~-60dB | 1.0~1.1倍 | 中(~0.5/τ) | 反舰/反辐射导弹(高分辨需求) |
| 相位编码 | -∞~-30dB | 1.0倍 | 低(~1/(NTc)) | 地面雷达/低速目标探测 |
7. 导引头工程实现约束
上述理论需结合弹载设备的硬约束落地,核心约束包括:
-
采样率:需满足 fs≥2B,实际设计中取 3∼5B留余量,如B=30MHz时取fs=200MHz,符合AD9680等弹载ADC的性能指标。
-
量化位数:通常采用12~14位ADC,量化信噪比约为 6.02b+1.76dB,14位ADC量化信噪比约86dB,远高于接收噪声,不会引入额外损失。
-
多普勒容限:LFM的多普勒容限为 1/τ,如τ=20μs时容限为50kHz,对应速度容限750m/s,覆盖战斗机的最大机动速度(~600m/s)。
-
FPGA资源:FFT快速脉冲压缩需占用Block RAM与DSP资源,Xilinx Kintex-7 FPGA可实现1024点FFT,处理延迟<1μs,满足导引头实时性要求。
8. 实战仿真:脉冲压缩对检测性能的改善
结合第1篇的雷达方程,验证脉冲压缩的实际效果:

若不使用脉冲压缩,采用τ=0.1μs窄脉冲,则 D=3,增益仅4.8dB,输出SNR=3+4.8=7.8dB,无法满足检测要求,作用距离将下降至约28km。
9. 总结
本文系统讲解了雷达导引头脉冲压缩技术的理论与工程实现:
-
LFM信号通过时宽带宽积 D=τB实现脉冲压缩,增益等于 D,距离分辨力仅与带宽有关;
-
Taylor窗可在旁瓣<-40dB的前提下将主瓣展宽控制在1.1倍,是导引头的首选加权方式;
-
LFM的斜刀刃模糊函数导致距离-多普勒耦合,需通过多普勒补偿消除;
-
NLFM适合高分辨场景,相位编码仅适合低速目标;
-
脉冲压缩可将50km处目标的SNR从3dB提升至30.8dB,满足检测要求。