【限免】线性调频信号的脉冲压缩及二维分离SAR成像算法【附MATLAB代码】

文章来源:微信公众号:EW Frontier

QQ交流群:949444104

程序一

对线性调频信号进行仿真,输出其时频域的相关信息,并模拟回波信号,

对其进行脉冲压缩和加窗处理。

实验记录:

1.线性调频信号时域包络、相位;实部、虚部

2.线性调频信号频谱幅频、相频特性;实部、虚部

3.两个目标回波的时域和频域波形

4.信号通过匹配滤波器的输出结果(脉冲压缩)。

5.用Hamming窗抑制脉冲压缩结果副瓣

%%  基本参数 
    clc;clear all;close all;
​
    T = 10e-6; % LFM周期/脉宽 10us
    B = 60e6; % LFM带宽 60Mhz
    fs = 100e6; % 采样率 100MHz
    K = B/T;
%%  模拟发射信号
    n = round(15*T*fs);
    t = linspace(-10*T, 10*T,n);
​
    lfmT = rectpuls(t,T).*exp(1j*pi*K*t.^2);
    lfmF = fftshift(fft(fftshift(lfmT)));
    f = linspace(-fs,fs,n);
​
    %% 时域绘图
        figure();
        plot(diff(phase(lfmT)));
        title('LFM信号的时间-频率变化趋势图');
        xlabel('时间');
        ylabel('频率');
        xlim([7200,7800])
    % 包络
        figure();
        subplot(2,2,1);
        plot(t,abs(lfmT));
        title('LFM信号时域包络');
        xlabel('t/s');
        ylabel('幅度');
        xlim([-1e-5,1e-5])
        ylim([-0.5,1.5])
    % 相位
        subplot(2,2,2);
        plot(t,phase(lfmT));
        title('LFM信号时域相位');
        xlabel('t/s');
        ylabel('相位');
        xlim([-5e-6,5e-6])
    % 实部
        subplot(2,2,3);
        plot(t,real(lfmT));
        title('LFM信号时域实部');
        xlabel('t/s');
        ylabel('幅度');
        xlim([-1.5e-6,1.5e-6]);
        ylim([-1,1]);
    % 虚部
        subplot(2,2,4);
        plot(t,imag(lfmT));
        title('LFM信号时域虚部');
        xlabel('t/s');
        ylabel('幅度');
        xlim([-1.5e-6,1.5e-6]);
        ylim([-1,1]);
    %% 频域绘图
        figure();
        subplot(2,2,1);
        plot(f,abs(lfmF));
        title('LFM信号幅频特性');
        xlabel('Hz');
        ylabel('幅度');
​
        subplot(2,2,2);
        plot(unwrap(angle(lfmF)));
        title('LFM信号相频特性');
        xlabel('Hz');
        ylabel('相位');
​
        subplot(2,2,3);
        plot(f,real(lfmF));
        title('LFM信号频谱实部');
        xlabel('Hz');
        ylabel('幅度');    
        xlim([-3e7,3e7]);
​
        subplot(2,2,4);
        plot(f,imag(lfmF));
        title('LFM信号频谱虚部');
        xlabel('Hz');
        ylabel('幅度');    
        xlim([-3e7,3e7]);
        %%  模拟回波信号
% 延迟为50us和51us的两个信号( 5000点和5100点,t从4000开始存储 )
    %延迟
    t1=50e-6;
    t2=51e-6;
​
    %由于实际信号时间从0开始,时间轴重新定义
    echo1=rectpuls((t-t1),T).*exp(1j*pi*K*(t-t1).^2);
    echo2=rectpuls((t-t2),T).*exp(1j*pi*K*(t-t2).^2);
    echo=echo1+echo2;
​
     figure();
        subplot(2,2,1)
        plot(t,abs(echo1),'r');
        hold on;
        plot(t,abs(echo2),'b');
        title('两个回波信号');
        xlabel('t/s');
        ylabel('幅度');
        xlim([3.5e-5,7e-5])
        ylim([0,1.5])
​
        subplot(2,2,2)
        plot(t,real(echo));
        title('回波信号时域实部');
        xlabel('t/s');
        ylabel('幅度');
        xlim([4.9e-5 5.2e-5])
​
        subplot(2,2,3)
        plot(f,fftshift(abs(fft(echo))));
        title('回波信号幅频特性');
        xlabel('Hz');
        ylabel('幅度');
​
        subplot(2,2,4)
        plot(t,imag(echo));
        title('回波信号时域虚部');
        xlabel('t/s');
        ylabel('幅度');
        xlim([4.9e-5 5.2e-5])
​
    lfmT = rectpuls(t,T).*exp(1j*pi*K*t.^2);
    lfmF = fftshift(fft(fftshift(lfmT)));
    f = linspace(-fs,fs,n);

脉冲压缩(匹配滤波)

方法1:

把信号变到频域 (2048点的FFT)[-fs/2,fs/2]

频域相乘 H(w) = *S(w)

逆傅里叶变换

方法2:

驻留相位原理获得传递函数

% 这里采用方法1
    %回波信号的频域形式
    echo_F=fftshift(fft(echo));
    %回波信号的匹配滤波器
    Hf=fftshift(fft(conj(lfmT)));
    %脉压结果
    Pc_F=echo_F.*Hf;
    %脉压时域结果
    Pc_T=ifftshift(ifft(Pc_F));
​
%用Hamming窗抑制副瓣
    %制作汉明窗
    Hm = [zeros(1,2300) hamming(9900)' zeros(1,2800)];
    %频域加窗
    Pcw_F = Hm.*Pc_F;
    Pcw_T=ifftshift(ifft(Pcw_F));
​
    figure();
    subplot(2,2,1)
    plot(t,abs(Pc_T));
    title('脉冲压缩后的时域波形');
    xlim([4.5e-5 5.5e-5])
​
    subplot(2,2,2)
    plot(f,abs(Pc_F));
    title('脉冲压缩后的频谱');
​
    subplot(2,2,3)
    plot(f,abs(Pcw_T));
    title('脉压加窗后的时域波形');
     xlim([4.5e7 5.5e7])
​
    subplot(2,2,4)
    plot(f,abs(Pcw_F));
    title('脉压加窗后的频谱');

程序一仿真结果

程序二

先根据点目标分布,计算出对应的延时,再根据表达式计算回波数据进行仿真。再对回波数据

进行距离向和方位向上的脉冲压缩,得出二维图像。

1.二维回波信号幅度、相位

2.距离向脉冲压缩结果的二维等高线图

3.点目标成像结果;二位等高线图,距离和方位剖面

4.用Hamming窗抑制成像结果副瓣

%%  基本参数和配置 
clc;clear all;close all;
    v_c =3e+8;%光速
    T =10e-6;%发射脉冲时间
    Br=60e6;%距离向带宽
    lamda=0.03;%波长
    f0=v_c/lamda;%载频
    vx=150;%雷达平台运动速度
    R0=15e3;%场景中心最短斜距
    Kr=Br/T;%调频斜率
    Nr=2048;%距离向采样点数,必须要大于T*Br
    Fr=100e6;%距离向采样频率
    deta_t=1/Fr;%距离向采样时间间隔
    tr=2*R0/v_c+((0:Nr-1)-Nr/2)*deta_t;%距离向采样时间轴
    fr=((-Nr/2):(Nr/2-1))/Nr*Fr;
    PRF=100;%PRF
    Na=60;%方位向采样点数
    ta=((0:(Na-1))-Na/2)/PRF;
    T_sar=Na/PRF;%方位向采样时间
    fa=((-Na/2):(Na/2-1))/Na*PRF;
    Ka=2*vx^2/(lamda*R0);
​
%% 根据目标点计算二维回波信号
    %%计算放置点的参数
    dot_num_a=1; % 方位向点个数
    deta_a=100; % 方位向点间距
    dot_num_r=3; % 距离向点个数
    deta_r=600; % 距离向点间距
    dot_xy_cell=cell(1,dot_num_a);
​
    middle_point_r=ceil(dot_num_r/2);
    middle_point_a=ceil(dot_num_a/2);
    line_x=vx*ta;
    line_y=zeros(1,Na);
​
    for i_dot_num_a=1:dot_num_a
        dot_xy=zeros(dot_num_r,2);
     for i_dot_num_r=1:dot_num_r
      dot_xy(i_dot_num_r,2)=(i_dot_num_r-middle_point_r)*deta_r;
      dot_xy(i_dot_num_r,1)=(i_dot_num_a-middle_point_a)*deta_a;
     end
     dot_xy_cell{1,i_dot_num_a}=dot_xy;
    end
​
    slant_range_cell=cell(1,dot_num_a);
    %计算每个点在所有方位的斜距
    for i_dot_num_a=1:dot_num_a
        slant_range=zeros(dot_num_r,Na);%single
        dot_xy=dot_xy_cell{1,i_dot_num_a};
        for i_dot_num_r=1:dot_num_r
        slant_range(i_dot_num_r,:)=sqrt((line_y-(R0+dot_xy(i_dot_num_r,2))).^2+(line_x-dot_xy(i_dot_num_r,1)).^2);%???
        end
        slant_range_cell{1,i_dot_num_a}=slant_range;
    end
    %计算每个点在所有方位的时延
    t_delay_cell=cell(1,dot_num_a);
    for i_dot_num_a=1:dot_num_a
         slant_range=slant_range_cell{1,i_dot_num_a};
         t_delay=slant_range*2/v_c;%single
         t_delay_cell{1,i_dot_num_a}=t_delay;
    end
    echo_data=zeros(Nr,Na);
    tr_matrix=repmat(tr.',1,Na);%矩阵化处理
    for i_dot_num_a=1:dot_num_a
        t_delay= t_delay_cell{1,i_dot_num_a};
       for i_dot_num_r=1:dot_num_r
       t_delay_matrix=repmat(t_delay(i_dot_num_r,:),Nr,1);%矩阵化处理
       echo_data=echo_data+rect((tr_matrix-t_delay_matrix)/T).*exp(1j*pi*Kr*(tr_matrix-t_delay_matrix).^2).*exp(-1j*2*pi*f0*t_delay_matrix);
       end
    end
    echo_data_phase=unwrap(angle(echo_data));
% 输出图像
    figure;
    subplot(2,1,1)
    imagesc(abs(echo_data));title('二维信号的幅度');
    subplot(2,1,2)
    imagesc(echo_data_phase);title('二维信号的相位');
 %% 脉冲压缩
 %距离向脉冲压缩
    Echo=circshift(fft2(circshift(echo_data,[-Nr/2,-Na/2])),[Nr/2,Na/2]);
    ref=exp(1j*pi*fr.^2/Kr);
    ref_matrix=repmat(ref.',1,Na);% 距离向二维匹配滤波器
    COMP=Echo.*ref_matrix; % 距离向匹配滤波后频域
​
 %方位向脉冲压缩
    fr_matrix=repmat(fr.',1,Na);
    fa_matrix=repmat(fa,Nr,1);
    Haz=exp(-1j*pi.*(fa.^2)./Ka);
    Haz_matrix=repmat(Haz,Nr,1); % 方位向二维匹配滤波器
    SAC=COMP.*Haz_matrix; % 再经方位向脉冲压缩后
​
%     [a b]=find(SAC==max(max(SAC))); % 找出最大值
%     figure;plot(abs(SAC(:,31)));
%     figure;plot(abs(SAC(1599,:)));
    sac=circshift(ifft2(circshift(SAC,[0,0])),[Nr/2,Na/2]); % 时域图像
    figure;
    subplot(2,1,1)
    imagesc(abs(sac));title('点目标成像时域结果')
    subplot(2,1,2)
    imagesc(abs(SAC));title('点目标成像频域结果')
%% 生成Hamming窗
    window=hamming(1151)*hamming(37).';
    window_hamming=zeros(2048,60);
    xx=10;
    window_hamming(450+xx:1600+xx,13:49)=window;
    WINDOW_data=window_hamming.*SAC;
    window_data=circshift(ifft2(circshift(WINDOW_data,[0,0])),[Nr/2,Na/2]);
    figure;
    subplot(2,1,1)
    imagesc(abs(window_data));title('加Hamming窗后时域')
    subplot(2,1,2)
    imagesc(abs(WINDOW_data));title('加Hamming窗后频域')
%% 剖面图
    i_x=1; % 第i个点
    i_y=1;
​
    x=1025+300*(i_x-1);
    y=31+400*(i_y-1);
    pou=sac(x-10:x+9,y-10:y+9); % 截取
    pou_range=pou(1:20,11);
    pou_azimuth=pou(11,1:20);
    range_db=ifft([fft(pou_range);zeros(980,1)]);
    tr_db=linspace(tr(x-10),tr(x+10),1000);
​
    azimuth_db=ifft([fft((pou_azimuth).');zeros(980,1)]);
    ta_db=linspace(ta(y-10),ta(y+10),1000);
​
    POU=fft2(pou);
    POU1=zeros(1000,1000);
    POU1(1:20,1:20)=POU;
    pou1=ifft2(POU1);
    a=max(abs(pou1));
    b=max(a);
    pou1_db=20*log10(abs(pou1)/b);
    c=max(pou1_db);
    dgx1=[-3 -13 -20 -30];
    figure;
    subplot(2,1,1)
    contour(pou1_db,dgx1);
    title('-3 -13 -20 -30(db)不加窗时二维图像');
    xlabel('方位向(m)');ylabel('距离向(m)');
% 加窗
    pou2=window_data(x-10:x+9,y-10:y+9);
​
    pou_range2=pou2(1:20,11);
    pou_azimuth2=pou2(11,1:20);
    range_db2=ifft([fft(pou_range2);zeros(980,1)]);
    tr_db=linspace(tr(x-10),tr(x+10),1000);
​
    azimuth_db2=ifft([fft((pou_azimuth2).');zeros(980,1)]);
    ta_db=linspace(ta(y-10),ta(y+10),1000);
​
    POU=fft2(pou2);
    POU1=zeros(1000,1000);
    POU1(1:20,1:20)=POU;
    pou1=ifft2(POU1);
    a=max(abs(pou1));
    b=max(a);
    pou1_db=20*log10(abs(pou1)/b);
    c=max(pou1_db);
    dgx2=[-3 -13 -20 -30];
    subplot(2,1,2)
    contour(pou1_db,dgx2);
    title('-3 -13 -20 -30(db)加窗时二维图像');
    xlabel('方位向(m)');ylabel('距离向(m)');
​
% 加窗对比输出
    figure;
    subplot(2,2,1)
    plot(tr_db,20*log10(abs(range_db)/max(abs(range_db))));
    title('不加窗的距离像')
    subplot(2,2,2)
    plot(ta_db,20*log10(abs(azimuth_db)/max(abs(azimuth_db))));
    title('不加窗的方位像')
    subplot(2,2,3)
    plot(tr_db,20*log10(abs(range_db2)/max(abs(range_db2))));
    title('加窗的距离像')
    subplot(2,2,4)
    plot(ta_db,20*log10(abs(azimuth_db2)/max(abs(azimuth_db2))));
    title('加窗的方位像')

程序二仿真结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/757039.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

24年hvv前夕,微步也要收费了,情报共享会在今年结束么?

一个人走的很快,但一群人才能走的更远。吉祥同学学安全https://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247483727&idx1&sndb05d8c1115a4539716eddd9fde4e5c9&scene21#wechat_redirect这个星球🔗里面已经沉淀了: 《Ja…

自闭症早期风险判别和干预新路径

谷禾健康 自闭症谱系障碍 (ASD) 是一组神经发育疾病,其特征是社交互动和沟通的质量障碍、兴趣受限以及重复和刻板行为。 环境因素在自闭症中发挥重要作用,多项研究以及谷禾队列研究文章表明肠道微生物对于自闭症的发生和发展以及存在明显的菌群和代谢物的…

智慧校园-报修管理系统总体概述

智慧校园报修管理系统是专为优化教育机构内部维修报障流程而设计的信息化解决方案,它通过集成现代信息技术,为校园设施的维护管理带来革新。该系统以用户友好和高效运作为核心,确保了从报修请求提交到问题解决的每一个步骤都顺畅无阻。 师生或…

Apache IoTDB 监控详解 | 分布式系统监控基础

IoTDB 分布式系统监控的基础“须知”! 我这个环境的系统性能一直无法提升,能否帮我找到系统的瓶颈在哪里? 系统优化后,虽然写入性能有所提升,但查询延迟却增加了,下一步我该如何排查和优化呢? 请…

【折腾笔记】兰空图床使用Minio作为储存策略

前言 花了几个小时研究了一下在兰空图床中使用Minio作为存储策略,官方并没有给出太多关于minio的储存策略配置文档,我是经过反复尝试,然后根据错误日志的提示以及查阅兰空图床在GitHub上面的issues悟出来的配置方法。 因为我的兰空图床和Minio都是基于群晖的NAS设备DS423+…

[OtterCTF 2018]Bit 4 Bit

我们已经发现这个恶意软件是一个勒索软件。查找攻击者的比特币地址。** 勒索软件总喜欢把勒索标志丢在显眼的地方,所以搜索桌面的记录 volatility.exe -f .\OtterCTF.vmem --profileWin7SP1x64 filescan | Select-String “Desktop” 0x000000007d660500 2 0 -W-r-…

Debian/Ubuntu Linux安装OBS

先决条件 建议使用 xserver-xorg 1.18.4 或更新版本,以避免 OBS 中某些功能(例如全屏投影仪)出现潜在的性能问题。在 Linux 上使用 OBS Studio 需要 OpenGL 3.3(或更高版本)支持。在终端中输入以下内容来检查系统支持…

几个常见的FPGA问题之序列发生器、编码器、D触发器

几个常见的FPGA问题之序列发生器、编码器、D触发器 语言 :Verilg HDL 、VHDL EDA工具: Vivado 几个常见的FPGA问题之序列发生器、编码器、D触发器一、引言二、背景1、序列发生器(Sequence Generator)2、编码器(Encoder)3、D触发器(D Flip-Flop)二、问题及解决方案1. 序…

了解WPF控件:OpenFileDialog常用属性与用法(十六)

掌握WPF控件:熟练OpenFileDialog常用属性(十六) OpenFileDialog控件在WPF中用于需要用户指定文件路径,为用户提供了一个直观且易用的界面来浏览和选择本地文件系统中的文件。例如,当用户需要打开一个已存在的文本文件…

AD9026芯片开发实录5-ADRV9026 - FAQ

1. What information should I provide to help speed resolution of my issue?  Please provide as much detail as possible including all of the detail described in the table below 2. What are the key specifications of ADRV9026 chip?  The ADRV9026 is a 4…

Python自动化测试:web自动化测试——selenium API、unittest框架的使用

web自动化测试2 1. 设计用例的方法——selenium API1.1 基本元素定位1)定位单个唯一元素2)定位一组元素3)定位多窗口/多框架4)定位连续层级5)定位下拉框6)定位div框 1.2 基本操作1.3 等待1.4 浏览器操作1.5…

第三十七篇——麦克斯韦的妖:为什么要保持系统的开放性?

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华 一、背景介绍 如果没有详细的学习这篇文章,我觉得我就是被麦克斯韦妖摆弄的…

[OtterCTF 2018]Closure

既然你从内存中提取了密码,你能解密rick的文件吗? 密码是知道了,加密文件 ? flag 文件?dump 出来 已知这个勒索软件为HiddenTear,直接在网上找到解密程序HiddenTearDecrypter先将加密文件的末尾多余的0去掉…

memory动态内存管理学习之weak_ptr

此头文件是动态内存管理库的一部分。std::weak_ptr 是一种智能指针,它持有对被 std::shared_ptr 管理的对象的非拥有性(“弱”)引用。在访问所引用的对象前必须先转换为 std::shared_ptr。std::weak_ptr 用来表达临时所有权的概念&#xff1a…

力扣SQL50 判断三角形 case when then end

Problem: 610. 判断三角形 Code select x,y,z,case when x y > z and x z > y and y z > x then Yeselse Noend as triangle from triangle;

Linux shell编程学习笔记59: ps 获取系统进程信息,类似于Windows系统中的tasklist 命令

0 前言 系统进程信息是电脑网络信息安全检查中的一块重要内容,对于使用Linux和基于Linux作为操作系统的电脑来说,可以使用ps命令。 1 ps命令 的功能、格式和选项说明 1.1 ps命令 的功能 Linux 中的ps(意为:process status&…

<电力行业> - 《第8课:输电(一)》

1 输电环节的意义 电能的传输,是电力系统整体功能的重要组成环节。发电厂与电力负荷中心通常都位于不同地区。在水力、煤炭等一次能源资源条件适宜的地点建立发电厂,通过输电可以将电能输送到远离发电厂的负荷中心,使电能的开发和利用超越地…

firewalld(2)安装、配置文件、规则查询

安装firewalld 我使用的操作系统是debian 12,并没有安装firewalld。 通过apt install firewalld安装firewalld firewalld 本身是一个服务(firewalld.service),可以通过 systemctl 进行启动、停止和重启,而iptables 本身并不是一个服务,而是一个用户空间工具,被用来配置底…

使用SpringBoot整合Listener

常用的Web事件的监听接口如下: ServletContextListener:用于监听Web的启动及关闭 ServletContextAttributeListener:用于监听ServletContext范围内属性的改变 ServletRequestListener:用于监听用户请求 ServletRequestAttributeLi…

Rocketmq-集群部署(Master-Slave)

使用中间件版本:rocketmq-4.5.2环境介绍及角色划分 这里采用俩台机器做集群的搭建,172.0.0.1 以及 172.0.0.2 服务器172.0.0.1 做为a-master与b-slave。 服务器172.0.0.2 做为b-master与a-slave。 配置讲解图(主要说明区分点) 配置rocketmq环境变量,这里…