用Python实现《合成孔径雷达成像——算法与实现》图3.2
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 = 5.8e6 # 信号带宽
B = 99.43e6; # 信号带宽
K = B/T # 调频率
ratio = 1.25 # 过采样率
Fs = ratio*B # 采样频率
dt = 1/Fs # 采样间隔
N = math.ceil(T/dt) # 采样点数
st = np.exp(1j*math.pi*K*np.multiply(t, t)) #生成信号
Sf = np.fft.fftshift(np.fft.fft(np.fft.fftshift(st))) # FFT
tt = np.linspace(-0.5,0.5,N)
## 画图
plt.figure(1)
plt.subplot(2,2,1)
plt.title('(a)频谱实部')
plt.plot(tt,np.real(Sf))
plt.xlabel('频率(归一化后)')
plt.ylabel('幅度')
plt.subplot(2,2,2)
plt.title('(c)频谱幅度')
plt.plot(tt,np.abs(Sf))
plt.xlabel('频率(归一化后)')
plt.ylabel('弧度')
plt.subplot(2,2,3)
plt.title('(b)频谱虚部')
plt.plot(tt,np.imag(Sf))
plt.xlabel('频率(归一化后)')
plt.ylabel('幅度')
plt.subplot(2,2,4)
plt.title('(d)频谱相位')
plt.plot(tt,np.unwrap(np.angle(Sf)))#一般在计算一个系统相频特性时,就要用到反正切函数提取相位,计算机中反正切函数规定:在一、二象限中的角度为0 ~ π,三、四象限的角度为0 ~ -π
#但实际得到的结果会发生相位跳变,跳变幅度为2π,这就叫做相位的卷绕unwrap的作用就是解卷绕,使相位在π处不发生跳变,从而反映出真实的相位变化
plt.xlabel('频率(归一化后)')
plt.ylabel('相位(弧度)')
plt.show()