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

本文通过Python代码实现了合成孔径雷达(SAR)的信号处理,包括生成原始信号、扭曲信号和旋转信号,并对其进行了二维傅里叶变换,展示了不同信号在时域和频域的表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参照destiny0321的《合成孔径雷达成像——算法与实现》之【1】仿真图2.2给出的Matlab程序,用Python试了一下。
在这里插入图片描述

import numpy as np
import math
import cmath
import pylab
pylab.mpl.rcParams['font.sans-serif'] = ['SimHei']
pylab.mpl.rcParams['axes.unicode_minus']=False    #用来正常显示负号
## 参数设置
M = 256                 # 矩阵高度
N = 256                 # 矩阵宽度
top = M/8+1 
bottom = M*7/8 
left = N/8+1 
right = N*7/8 
theta = math.pi/12           # 扭曲或旋转角度

## 生成信号
# 原始信号
S0 = np.zeros((M,N))
S0[int(top):int(bottom),int(left):int(right)] = 1 
#S0[256/8+1:256*7/8 ,256/8+1:256*7/8] = 1 
# 扭曲信号
S1 = np.zeros((M,N)) 
for ii in range(0,M):
    for jj in range(0,N):
        x = jj-N/2 
        y = (M+1-ii)-M/2 
        xx = round(x+N/2)
        yy = M+1-round(x*math.sin(-theta)+y*math.cos(-theta)+M/2)
        if(yy>=0 and yy<= M-1):
            S1[ii,jj] = S0[yy,xx]
# 旋转信号
S2 = np.zeros((M,N)) 
for ii in range(0,M):
    for jj in range(0,N):
        x = jj-N/2 
        y = (M+1-ii)-M/2 
        xx = round(x*math.cos(-theta)-y*math.sin(-theta)+N/2) 
        yy = M+1-round(x*math.sin(-theta)+y*math.cos(-theta)+M/2) 
        if(xx>=0 and xx<= N-1 and yy>=0 and yy<=M-1):
            S2[ii,jj] = S0[yy,xx] 
## 二维傅里叶变换
# 原始信号的二维傅里叶变换
S0_ff = np.fft.fftshift(np.fft.fft2(np.fft.fftshift(S0))) 
S0_ff = abs(S0_ff) 
S0_ff = S0_ff/S0_ff.max() 
S0_ff = 20*np.log10(S0_ff+1e-4) 
# 原始信号二维傅里叶变换
S1_ff = np.fft.fftshift(np.fft.fft2(np.fft.fftshift(S1))) 
S1_ff = abs(S1_ff) 
S1_ff = S1_ff/S1_ff.max() 
S1_ff = 20*np.log10(S1_ff+1e-4) 
# 原始信号二维傅里叶变换
S2_ff = np.fft.fftshift(np.fft.fft2(np.fft.fftshift(S2))) 
S2_ff = abs(S2_ff) 
S2_ff = S2_ff/S2_ff.max() 
S2_ff = 20*np.log10(S2_ff+1e-4) 

## 画图
pylab.figure(1)
pylab.plt.subplot(2,3,1)
pylab.pcolormesh(S0,cmap='jet')
pylab.plt.gca().invert_yaxis()
pylab.title('(a)时域,原始信号')
pylab.plt.subplot(2,3,4)
pylab.pcolormesh(S0_ff,cmap='jet')
pylab.plt.gca().invert_yaxis()
pylab.title('(b)原始信号频谱')
pylab.plt.subplot(2,3,2)
pylab.pcolormesh(S1,cmap='jet')
pylab.plt.gca().invert_yaxis()
pylab.title('(c)时域,扭曲信号')
pylab.plt.subplot(2,3,5)
pylab.pcolormesh(S1_ff,cmap='jet')
pylab.plt.gca().invert_yaxis()
pylab.title('(d)扭曲信号频谱')
pylab.plt.subplot(2,3,3)
pylab.pcolormesh(S2,cmap='jet')
pylab.plt.gca().invert_yaxis()
pylab.title('(e)时域,旋转信号')
pylab.plt.subplot(2,3,6)
pylab.pcolormesh(S2_ff,cmap='jet')
pylab.plt.gca().invert_yaxis()
pylab.title('(f)旋转信号频谱')
pylab.show()
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值