当前位置: 首页 > article >正文

线性调频波形测距测速信号处理——全代码+注释

clear all
close all
clc

%% 参数设置
fs=600e6;%采样率
fc=10.45e9;% 波形发射载频
t=10e-6;%脉宽
f0=50e6;%波形中频频率
B=10e6;%带宽
u=B/(2*t);%调频斜率
Tv=100e-6;% 脉冲重复周期
Num=64;% 测速脉冲数
lamd=fs/B;% 抽取带宽
Ns=round(fs*t);
NTv=round(fs*Tv);

tt=0:1/fs:t-1/fs;
ff=0:1/t:fs-1/t;

%% 线性调频波形调制

yf=exp(1i*2*pi*((f0-B).*tt+u*tt.^2));
y_lfm=real(yf);
y_lfm_fft=fft(y_lfm);

figure
plot(tt.*1e6,y_lfm./max(y_lfm),'k')
xlabel('时间(us)')
ylabel('归一化幅度')
title('线性调频波形时域')
set(gca,'FontName','宋体','FontSize',12);

figure
plot((ff-fs/2)./1e6,abs(fftshift(y_lfm_fft))./max(abs(y_lfm_fft)),'k')
xlabel('时间(us)')
ylabel('归一化幅度')
title('线性调频波形频域')
set(gca,'FontName','宋体','FontSize',12);

%% 匹配副本处理
bellm=exp(1i*2*pi*f0.*tt);%匹配副本的下变频本振
y_match=yf.*bellm;%发射波形下变频
window_h=hamming(length(y_match));%汉明窗函数
y_match_w=y_match.*window_h';%匹配副本加窗

%% 探测目标设定
c=3e8; % 光传播速度
R=50;% 目标距离
dt=R*1e3*2/c; % 回波时延
Ndt=round(fs*dt);
v=20; % 目标径向速度
df=2*v/(c/fc);% 速度对应的多普勒频移
tt_v=0:1/fs:(Num*NTv-1)*1/fs;
fd=exp(2*j*pi*df.*tt_v);% 多普勒频率调制函数


%% 接收处理仿真        
for k=1:Num;
    yr(k,:)=[zeros(1,Ndt),y_lfm.*fd((k-1)*NTv+1:(k-1)*NTv+Ns)];% 回波延时
    yr_n(k,:)=awgn(yr(k,:),20,'measured');% 加性噪声
    tt_r=0:1/fs:(length(yr_n(k,:))-1)*1/fs;
    bell_i=cos(2*pi*f0.*tt_r);% 回波下变频本振I路信号
    bell_q=sin(2*pi*f0.*tt_r);% 回波下变频本振Q路信号
    yr_n_i(k,:)=yr_n(k,:).*bell_i;% 正交调制
    yr_n_q(k,:)=yr_n(k,:).*bell_q;% 正交调制
%     yr_n_l_i(k,:)=filter(b_d,a_d,yr_n_i(k,:));% 低通滤波
%     yr_n_l_q(k,:)=filter(b_d,a_d,yr_n_q(k,:));% 低通滤波
    yr_n_l(k,:)=yr_n_i(k,:)+1i*yr_n_q(k,:);
    yr_n_l_fft(k,:)=fft(yr_n_l(k,:));
    y_match_w_fft=fft(y_match_w,length(yr_n_l_fft(k,:)));

    %脉冲压缩
    res_fft(k,:)=yr_n_l_fft(k,:).*conj(y_match_w_fft);
    res(k,:)=ifft(res_fft(k,:));
    res_c(k,:)=res(k,1:lamd:end);%等带宽抽取
end

%% 测距
res_c_1=res_c(1,:);
tt_s=0:1/fs*lamd:(length(res_c_1)-1)*1/fs*lamd;
dd_s=tt_s*c/2;
figure
plot(dd_s./1e3,-20*abs(log10(abs(res_c_1)./max(abs(res_c_1)))),'k');
ylim([-100 0])
xlabel('距离(km)')
ylabel('幅度(dB)')
title('脉冲压缩测距')
set(gca,'FontName','宋体','FontSize',12);

%% 测速
for k=1:length(res_c(1,:));
    res_c_fft(:,k)=fft(res_c(:,k));
end

[~,ind_s_temp]=max(abs(res_c(1,:)));
res_v=abs(res_c_fft(:,ind_s_temp));

vv_s=0:1/(Num*Tv)*(c/fc)/2:(Num-1)*1/(Num*Tv)*(c/fc)/2;

figure
plot(vv_s,res_v./max(res_v),'k');
xlabel('速度(m/s)')
ylabel('归一化幅度')
title('相参测速')
set(gca,'FontName','宋体','FontSize',12);

%% 相参处理后距离-速度三维图
res_c_fft=fft(res_c); %相参积累
figure
surf(dd_s,vv_s,abs(res_c_fft)./max(max(abs(res_c_fft))))
xlabel('距离(m)')
ylabel('速度(m/s)')
zlabel('归一化幅度')
set(gca,'FontName','宋体','FontSize',12);
shading interp

 

http://www.lryc.cn/news/2399062.html

相关文章:

  • WPS word 已有多级列表序号
  • Vue 3 源码层核心原理剖析(完整详解版)
  • 数据库操作-MySQL-4(JDBC编程)
  • Linux打开.img镜像文件
  • 【FAQ】HarmonyOS SDK 闭源开放能力 —Account Kit(5)
  • 【科研绘图系列】R语言绘制论文组合图形(multiple plots)
  • springMVC-9数据格式化
  • Kafka 和Redis 在系统架构中的位置
  • 【Spring AI】如何实现文生图功能
  • 【ISAQB大纲解读】Kafka消息总线被视为“自下而上设计”?
  • ISBN书号查询接口如何用PHP实现调用?
  • 什么是 Docker Compose 的网络(network),为什么你需要它,它是怎么工作的
  • 嵌入式Linux 期末复习指南(上)
  • SpringBoot3.2新特性:JdbcClient
  • Dify:启动 Web 服务的详细指南
  • 3.1 HarmonyOS NEXT分布式数据管理实战:跨设备同步、端云协同与安全保护
  • Aop + 注解实现数据字典类型转换 EasyExcel导出
  • Python 元组方法全集详解
  • Selenium 中 JavaScript 点击操作的原理及应用
  • Xilinx超过256m bit flash固件跳转失败问题
  • SpringCloud 分布式锁Redisson锁的重入性与看门狗机制 高并发 可重入
  • 02 APP 自动化-Appium 运行原理详解
  • 由docker引入架构简单展开说说技术栈学习之路
  • linux 1.0.5
  • 强化学习的前世今生(五)— SAC算法
  • SQL进阶之旅 Day 8:窗口函数实用技巧
  • 生成对抗网络(GAN)基础原理深度解析:从直观理解到形式化表达
  • ubuntu 安装redis-6.2.9 源码安装和相关配置详解
  • c++之数组
  • torch.distributed.launch 、 torchrun 和 torch.distributed.run 无法与 nohup 兼容