Python实现《合成孔径雷达成像——算法与实现》图2.8和2.9。
import matplotlib.pyplot as plt
import numpy as np
import math
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
#设置时间长度T; 带宽B; 初始频率f0
T = 1
B = 150
for ii in range(9):
#斜率
K = B/T
#生成时间
dt = 1/1200
t = np.arange(0,T,dt)
#t = 0:dt:T
fs = 1/dt
#信号幅度修正
amp = t + 2
amp = amp/max(np.abs(amp))
#生成信号
N = len(t)
f0 = 25+ii*50
s1 = np.cos( 2*math.pi*(f0*t + 0.5*K*np.multiply(t, t)) ) * amp # 实数非基带
#进行fft
F1 = np.fft.fftshift( np.fft.fft( s1 ) / N )
F1 = F1/max(np.abs(F1))
fre1 = np.linspace(-fs/2,fs/2,N)
#生成时间
dt = 1/400
t = np.arange(0,T,dt)
fs = 1/dt
#信号幅度修正
amp = t + 2
amp = amp/max(np.abs(amp))
N = len(t)
#fc = 25+ii*50
s1 = np.cos( 2*math.pi*(f0*t + 0.5*K*np.multiply(t, t)) ) * amp # 实数非基带
#进行fft
F2 = np.fft.fftshift( np.fft.fft( s1 ) / N )
F2 = F2/max(np.abs(F2))
fre2 = np.linspace(-fs/2,fs/2,N)
plt.figure(1)
plt.subplot(9,2,2*ii+1)
plt.title('FC=''%d'%(f0+B/2))
plt.plot(fre1,np.abs(F1))
plt.ylabel('幅度')
plt.subplot(9,2,2*ii+2)
plt.plot(fre2,np.abs(F2))
#plt.ylabel('幅度')
if ii==0:
plt.title('采样后的频谱')
plt.show()