Python实现《合成孔径雷达成像——算法与实现》图3.8

Python实现《合成孔径雷达成像——算法与实现》图3.8。
在这里插入图片描述
在这里插入图片描述

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                   # 信号带宽
K = B/T                     # 调频率
ratio = 10                  # 过采样率
Fs = ratio*B                # 采样频率
dt = 1/Fs                   # 采样间隔
N = math.ceil(T/dt)              # 采样点数
tc = 1e-6                   # 脉冲中心相当于t=0的时间偏移
t = np.arange((0-N/2)/N*T,(N-N/2)/N*T,dt) # 时间轴
st = np.exp(1j*math.pi*K*np.multiply(t-tc, t-tc))      #生成信号
ht = np.exp(-1j*math.pi*K*np.multiply(-t-tc, -t-tc))      # 匹配滤波器为什么-tc不是+tc?
out = np.fft.fftshift(np.fft.ifft(np.multiply(np.fft.fft(st),np.fft.fft(ht))))
Z = np.abs(out)
Z = Z/max(Z)
Z = 20*np.log10(np.finfo(np.float64).eps+Z)


## 画图
plt.figure(1)
plt.subplot(2,2,1)
plt.title('(a)输入阵列信号的实部')
plt.plot(t*1e6,np.real(st))
plt.ylabel('幅度')

plt.subplot(2,2,2)
plt.title('(c)压缩后的信号(经扩展)')
plt.axis([-1,1,-30,0])
plt.plot(t*1e6,Z)
plt.ylabel('幅度(dB)')

plt.subplot(2,2,3)
plt.title('(b)压缩后的信号')
plt.plot(t*1e6,out)
plt.xlabel('相对于$\mathregular{t_0}$''时间(μs)')
plt.ylabel('幅度')

plt.subplot(2,2,4)
plt.title('(d)压缩后信号的相位(经扩展)')
plt.axis([-1,1,-5,5])
plt.plot(t*1e6,np.angle(out))
plt.xlabel('相对于$\mathregular{t_0}$''时间(μs)')
plt.ylabel('相位(弧度)')

plt.show()

#加窗减小旁瓣
window=np.kaiser(N, 2.5)#典型值β=2.5见书P60
ht_window = np.multiply(window,ht)   #时域加窗匹配滤波器

Sf =  np.fft.fftshift( np.fft.fft( np.fft.fftshift(st)))
Hf =  np.fft.fftshift( np.fft.fft( np.fft.fftshift(ht)))

Hf_window = np.fft.fftshift(np.fft.fft(np.fft.fftshift(ht_window)))

out = np.fft.ifftshift(np.fft.ifft(np.fft.ifftshift(np.multiply(Sf,Hf))))
out_window = np.fft.ifftshift(np.fft.ifft(np.fft.ifftshift(np.multiply(Sf,Hf_window))))


Z1 = np.abs(out)
Z1 = Z1/max(Z1)
Z1 = 20*np.log10(Z1)

Z2 = np.abs(out_window)
Z2 = Z2/max(Z2)
Z2 = 20*np.log10(Z2)

tt = np.linspace(-0.5,0.5,N)
plt.figure(2)
plt.subplot(2,2,1)
plt.title('脉冲压缩之后的信号(未加窗)')
plt.plot(tt,out)
plt.ylabel('幅度')

plt.subplot(2,2,2)
plt.title('脉冲压缩之后的信号(未加窗)')
plt.axis([-0.3,0.3,-35,0])
plt.plot(tt,Z1)
plt.ylabel('幅度(dB)')

plt.subplot(2,2,3)
plt.title('脉冲压缩之后的信号(加窗)')
plt.plot(tt,out_window)
plt.xlabel('时间(归一化后)')
plt.ylabel('幅度')

plt.subplot(2,2,4)
plt.title('脉冲压缩之后的信号(加窗)')
plt.axis([-0.3,0.3,-35,5])
plt.plot(tt,Z2)
plt.xlabel('时间(归一化后)')
plt.ylabel('幅度(dB)')

plt.show()
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SAR三维成像算法的代码比较复杂,以下是一个基于MATLAB实现的简单示例代码: 1. 读取数据 ```matlab % 读取数据 file = 'data.bin'; % 数据文件名 fid = fopen(file, 'r'); data = fread(fid, 'float32'); fclose(fid); % 数据处理 N = 1024; % 数据大小 M = length(data)/N; % 数据帧数 data = reshape(data, N, M); ``` 2. 参数设置 ```matlab % 参数设置 fc = 10e9; % 中心频率 fs = 40e9; % 采样频率 lambda = 3e8/fc; % 波长 R = 10; % 成像距离 theta = linspace(-pi/2, pi/2, 256); % 角度范围 phi = linspace(-pi/2, pi/2, 256); % 角度范围 ``` 3. 三维成像 ```matlab % 三维成像 img = zeros(256, 256, 256); % 初始化像 for i = 1:M % 每帧数据进行FFT s = fftshift(fft(data(:,i))); % 构造波束 kx = linspace(-pi/2, pi/2, N)*2*pi/lambda; ky = sqrt((2*pi*fc)^2-kx.^2); h = exp(1j*2*pi*R/sqrt(R^2+kx.^2+ky.^2)); % FFT后进行滤波 s = s.*h.'; % 三维成像 for j = 1:256 for k = 1:256 x = R*tan(theta(j)); y = R*tan(phi(k)); z = sqrt(R^2+x^2+y^2); kx = 2*pi*x/lambda/z; ky = 2*pi*y/lambda/z; kz = sqrt((2*pi*fc)^2-kx^2-ky^2); q = exp(1j*kz*z); img(j,k,i) = img(j,k,i) + s(round(N/2+kx*N/2/pi))*q; end end end ``` 4. 结果显示 ```matlab % 结果显示 figure; % 显示三维成像结果 for i = 1:256 subplot(4,4,i); imagesc(abs(squeeze(img(:,i,:)))); title(['Angle = ', num2str(theta(i)*180/pi), ' degree']); colormap(gray); axis image; end ``` 以上代码仅供参考,实际应用中需要根据具体情况进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值