Python实现《合成孔径雷达成像——算法与实现》图3.10
import matplotlib.pyplot as plt
import numpy as np
import math
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
#信号持续时间T=7.24us,信号带宽B=5.8MHz,将过采样率设为5是为了更清晰地观测信号波形
T = 7.24e-6 # 信号持续时间
B = 14.2e6 # 信号带宽
K = B/T # 调频率
ratio = 1.15 # 过采样率
Fs = ratio*B # 采样频率
dt = 1/Fs # 采样间隔
N = math.ceil(T/dt) # 采样点数
t = np.arange((0-N/2)/N*T,(N-N/2)/N*T,dt) # 时间轴
f = np.arange((0-N/2)/N*Fs,(N-N/2)/N*Fs,Fs) # 频率轴
st = np.exp(1j*math.pi*K*np.multiply(t, t)) # 生成信号
Sf = np.fft.fft(st) # FFT
Hf = np.exp(1j*math.pi*np.multiply(f,f)/K) # 频域匹配滤波器
Out = Sf*Hf # 频域匹配滤波
window = np.kaiser(N,2.5) # 时域窗
Window = np.fft.fftshift(window) # 频域窗
st_window = st*window # 时域加窗
Out_Window = Out*Window # 频域匹配滤波后加窗
plt.figure(1)
plt.subplot(2,2,1)
plt.plot(t*1e6,window)
plt.title('时域窗函数')
plt.ylabel('幅度')
plt.subplot(2,2,2)
plt.plot(Window)
plt.title('频域窗函数')
plt.subplot(2,2,3)
plt.plot(t*1e6,np.real(st_window))
plt.title('信号实部')
plt.xlabel('时间(μs)')
plt.ylabel('幅度')
plt.subplot(2,2,4)
plt.plot(np.real(Out_Window))
plt.title('频谱实部')
plt.xlabel('频率(单元)')
plt.show()