|
# LFM信号经过中放的匹配滤波(频域相乘、脉冲压缩)的仿真
# 脉冲压缩指雷达在发射时采用宽脉冲信号,接收和处理回波后输出窄脉冲。
# 脉冲压缩技术是匹配滤波理论和相关接收理论的一个很好的实际应用。
# 很好地解决了这样的一个问题:在发射端发射大时宽、带宽信号,以提高信号的发射能量,
# 而在接收端,将宽脉冲信号压缩为窄脉冲,以提高雷达对目标的距离分辨精度和距离分辨力。
# 该技术解决了雷达远距离探测与高精度测距性能不可兼顾的问题,是现代雷达中不可缺少的关键技术
# DSP对采样后的数据进行FFT变换,变换至频域后,与其匹配滤波器频率数据进行复数相乘,
# 相乘后,再与复数补偿因子进行相乘解决脉冲间距离走动问题,最后将结果做IFFT,重新变换回时域。
# 其中,FFT点数、复数相乘点数、IFFT点数均为1024点
# 脉冲压缩的DSP处理方法有时域卷积或频域相乘。
# 对于点数较多的回波信号,采用频域相乘方法可以获得较快的运算速度
# 脉冲压缩:线性调频信号 + 匹配滤波
# 匹配滤波的计算:时域卷积 频域相乘(回波点数较多时,考虑计算速度)
- import numpy as np
- from scipy.fftpack import fft, ifft, fftshift
- import scipy.signal
- from matplotlib.pylab import mpl
- import matplotlib.pyplot as plt
- mpl.rcParams['font.sans-serif'] = ['SimHei'] # 显示中文
- mpl.rcParams['axes.unicode_minus'] = False # 显示负号
- # LFM信号经过中放的匹配滤波(频域相乘、脉冲压缩)的仿真
- # 脉冲压缩指雷达在发射时采用宽脉冲信号,接收和处理回波后输出窄脉冲。
- # 脉冲压缩技术是匹配滤波理论和相关接收理论的一个很好的实际应用。
- # 很好地解决了这样的一个问题:在发射端发射大时宽、带宽信号,以提高信号的发射能量,
- # 而在接收端,将宽脉冲信号压缩为窄脉冲,以提高雷达对目标的距离分辨精度和距离分辨力。
- # 该技术解决了雷达远距离探测与高精度测距性能不可兼顾的问题,是现代雷达中不可缺少的关键技术
- # DSP对采样后的数据进行FFT变换,变换至频域后,与其匹配滤波器频率数据进行复数相乘,
- # 相乘后,再与复数补偿因子进行相乘解决脉冲间距离走动问题,最后将结果做IFFT,重新变换回时域。
- # 其中,FFT点数、复数相乘点数、IFFT点数均为1024点
- # 脉冲压缩的DSP处理方法有时域卷积或频域相乘。
- # 对于点数较多的回波信号,采用频域相乘方法可以获得较快的运算速度
- # 脉冲压缩:线性调频信号 + 匹配滤波
- # 匹配滤波的计算:时域卷积 频域相乘(回波点数较多时,考虑计算速度)
- T = 10e-6 # 脉宽
- B = 25e6 # 带宽
- K = B/T # 调频斜率
- Fs = 200e6 # 采样频率
- Ts = 1/Fs
- N = int(T/Ts)
- print("脉宽内采样的周期数=", N)
- FFT_POINT = 2048
- # 对于点数较多的回波信号,采用频域相乘方法可以获得较快的运算速度
- print("FFT点数、复数相乘点数、IFFT点数均为%d点(与压缩程度有关吗?)" % FFT_POINT)
- t = np.linspace(-T/2, T/2, N)
- # St = np.exp(j*np.pi*K*t**2) 用欧拉公式展开
- # 发射信号 线性调频信号 回波的射频信号
- St = np.exp(1j * np.pi * K * t**2)
- # Ht = np.exp(-j*np.pi*K*t**2) 匹配滤波器 to=0 后 复数共轭 冲激响应函数
- Ht = np.exp(-1j * np.pi * K * t**2)
- # 变换至频域 n是什么东东?
- Sf = fft(St, n=FFT_POINT)
- Hf = fft(Ht, n=FFT_POINT)
- # 频域相乘后 做逆fft 后fftshift
- # 对于点数较多的回波信号,采用频域相乘方法可以获得较快的运算速度
- # 与复数补偿因子进行相乘解决脉冲间距离走动问题?
- Sot = fftshift(ifft(Sf*Hf))
- # Sot = ifft(Sf*Hf)
- # LFM信号的压缩前脉冲宽度T和压缩后的脉冲宽度之比通常称为压缩比D
- # 卷积定理:时域卷积 相当于 频域相乘
- Sot2 = scipy.signal.convolve(St, Ht)
- # print("是否相等:", Sot == Sot2)
- # assert 0 == 1, "停"
- # 画图
- plt.figure(figsize=(16, 12))
- plt.subplot(211)
- # St与St.real一样的
- # 为何乘以1e6 时间的单位变了(由秒 变 U秒)
- plt.plot(t*1e6, St, linestyle='-', color='blue', label='线性调频', linewidth=1)
- plt.xlabel('Time [u sec]', fontsize=16)
- plt.ylabel('信号幅度', fontsize=16)
- plt.title("LFM线性调频的输入信号", fontsize=16)
- # plt.show()
- plt.subplot(212)
- t1 = np.linspace(-T/2, T/2, FFT_POINT)
- # 2048个点 对应Sot
- db_value = 20 * np.log10(np.abs(Sot))
- plt.plot(t1, db_value, linestyle='-', color='blue', label='线性调频', linewidth=1)
- plt.xlabel('Time [sec]', fontsize=16)
- plt.ylabel('信号幅度[db]', fontsize=16)
- plt.title("LFM脉冲压缩后的输出信号", fontsize=16)
- plt.show()
复制代码
|
|