回波3DFFT处理(测距、测速、测角)

news2024/12/25 9:34:59

回波3DFFT处理(测距、测速、测角)

  • 1、测距、测速
  • 2、测角
  • 3、3DFFT处理
  • 4、MATLAB程序

本文主要针对TI 毫米波雷达的测距、测速、测角的基本方法——3DFFT处理进行简单介绍,并提供MATLAB处理程序,分析3DFFT处理结果。

1、测距、测速

在这里插入图片描述
毫米波雷达测距主要是通过检测回波时延来计算目标距离;测速是通过检测目标运动产生的多普勒频移来计算目标速度。TI的毫米波雷达采用LFMCW(Linear Frequency Modulated Continuous Wave,线性调频连续波)信号体制,其发射信号与回波示意图如上图所示。

(1)回波信号为发射信号的时延复本,而回波时延与差拍频率成线性关系,通过差拍频率即可计算回波时延,从而计算出目标距离(注意差拍频率包含了多普勒频移,测距时需要减去多普勒频移fd)。

(2)当目标运动时,回波信号不仅仅是发射信号的时延复本,还具有一定的多普勒频移(多普勒效应)。通过提取多普勒频移fd即可计算出目标速度。
在这里插入图片描述

2、测角

在这里插入图片描述
毫米波雷达测角的原理是相位法测角,如上图所示,回波到达不同RX天线的有d*sin(theta)的波程差(d为RX天线间距,theta为回波入射角度),导致不同RX天线的回波信号具有不同的相位差,通过提取RX相位差即可计算出目标角度。

因此,目标距离、速度、角度测量的问题则转化为频率估计的问题。

3、3DFFT处理

频率估计方法有很多,工程上主要采用FFT运算。针对毫米波雷达测距、测速、测角处理,工程上可采用3DFFT处理。将回波数据排列成3维矩阵(n_samples*n_chirps *n_RX),如下图所示,3DFFT即在3个维度上做3次FFT运算。

在这里插入图片描述
(1)距离FFT

对回波每一个chirp作1DFFT,得到距离-脉冲图。

在这里插入图片描述

(2)速度FFT

对距离FFT的结果在chirp维作1DFFFT,得到距离-多普勒图。提取2DFFT的峰值即可得到目标的差拍频率和多普勒频率。

(3)角度FFT
对多个RX的2DFFT结果在天线维作1DFFT,得到距离-多普勒-方位图。
在这里插入图片描述

4、MATLAB程序

采集数据设备:AWR1642+DCA1000EVM,测试场景为距离2m左右的三角锥目标(强散射金属目标)。

clear all;close all;clc;
%% 雷达参数(使用mmWave Studio默认参数)
c=3.0e8;  
B=768e6;       %调频带宽
K=30e12;       %调频斜率
T=B/K;         %调频周期
Tc=160e-6;     %chirp总周期
fs=10e6;       %采样率
f0=77e9;       %初始频率
lambda=c/f0;   %雷达信号波长
d=lambda/2;    %天线阵列间距
n_samples=256; %采样点数/脉冲
N=256;         %距离向FFT点数
n_chirps=128;  %每帧脉冲数
M=128;         %多普勒向FFT点数
n_RX=4;        %RX天线通道数
Q = 180;       %角度FFT
xx = 1;        %第xx帧
%% 读取回波数据
fname='C:\ti\adc_data.bin';
fid = fopen(fname,'rb');    
%16bits,复数形式(I/Q两路),4RX,1TX,有符号16bit,小端模式
sdata = fread(fid,xx*n_samples*n_chirps*4*1*2,'int16');    
sdata = sdata((xx-1)*n_samples*n_chirps*4*1*2+1:xx*n_samples*n_chirps*4*1*2);
%% 1642+DCA1000
fileSize = size(sdata, 1);
lvds_data = zeros(1, fileSize/2);
count = 1;
for i=1:4:fileSize-5
   lvds_data(1,count) = sdata(i) + 1i*sdata(i+2); 
   lvds_data(1,count+1) = sdata(i+1)+1i*sdata(i+3); 
   count = count + 2;
end
lvds_data = reshape(lvds_data, n_samples*n_RX, n_chirps);
lvds_data = lvds_data.';
cdata = zeros(n_RX,n_chirps*n_samples);
for row = 1:n_RX
  for i = 1: n_chirps
      cdata(row,(i-1)*n_samples+1:i*n_samples) = lvds_data(i,(row-1)*n_samples+1:row*n_samples);
  end
end
fclose(fid);
data_radar_1 = reshape(cdata(1,:),n_samples,n_chirps);   %RX1
data_radar_2 = reshape(cdata(2,:),n_samples,n_chirps);   %RX2
data_radar_3 = reshape(cdata(3,:),n_samples,n_chirps);   %RX3
data_radar_4 = reshape(cdata(4,:),n_samples,n_chirps);   %RX4
data_radar=[];            
data_radar(:,:,1)=data_radar_1;     %三维雷达回波数据
data_radar(:,:,2)=data_radar_2;
data_radar(:,:,3)=data_radar_3;
data_radar(:,:,4)=data_radar_4;
%% 3维FFT处理
%距离FFT
range_win = hamming(n_samples);   %加海明窗
doppler_win = hamming(n_chirps);
range_profile = [];
for k=1:n_RX
   for m=1:n_chirps
      temp=data_radar(:,m,k).*range_win;    %加窗函数
      temp_fft=fft(temp,N);    %对每个chirp做N点FFT
      range_profile(:,m,k)=temp_fft;
   end
end
%多普勒FFT
speed_profile = [];
for k=1:n_RX
    for n=1:N
      temp=range_profile(n,:,k).*(doppler_win)';    
      temp_fft=fftshift(fft(temp,M));    %对rangeFFT结果进行M点FFT
      speed_profile(n,:,k)=temp_fft;  
    end
end
%角度FFT
angle_profile = [];
for n=1:N   %range
    for m=1:M   %chirp
      temp=speed_profile(n,m,:);    
      temp_fft=fftshift(fft(temp,Q));    %对2D FFT结果进行Q点FFT
      angle_profile(n,m,:)=temp_fft;  
    end
end
%% 绘制2维FFT处理三维视图
figure;
speed_profile_temp = reshape(speed_profile(:,:,1),N,M);   
speed_profile_Temp = speed_profile_temp';
[X,Y]=meshgrid((0:N-1)*fs*c/N/2/K,(-M/2:M/2-1)*lambda/Tc/M/2);
mesh(X,Y,(abs(speed_profile_Temp))); 
xlabel('距离(m)');ylabel('速度(m/s)');zlabel('信号幅值');
title('2维FFT处理三维视图');
xlim([0 (N-1)*fs*c/N/2/K]); ylim([(-M/2)*lambda/Tc/M/2 (M/2-1)*lambda/Tc/M/2]);
%% 计算峰值位置
angle_profile=abs(angle_profile);
peak=max(angle_profile(:));
[row,col,pag]=ind2sub(size(angle_profile),find(angle_profile==peak));
%% 计算目标距离、速度、角度
fb = ((row-1)*fs)/N;        %差拍频率
fd = (col-M/2-1)/(M*Tc);    %多普勒频率
fw = (pag-Q/2-1)/Q;         %空间频率
R = c*(fb-fd)/2/K;          %距离公式
v = lambda*fd/2;            %速度公式
theta = asin(fw*lambda/d);  %角度公式
angle = theta*180/pi;
fprintf('目标距离: %f m\n',R);
fprintf('目标速度: %f m/s\n',v);
fprintf('目标角度: %f°\n',angle);

下图为2DFFT的结果(2m的目标),x轴为距离,y轴为速度,z轴为信号强度。通过谱峰搜索找到峰值下标,即可换算成对应的距离、速度信息。谱峰搜索也即是目标检测,一般采用CFAR(Constant False Alarm Rate,恒虚警率)检测,上述程序仅计算了最大峰值的目标,可测单目标的情况。若要检测多目标的情况,需要进行CFAR检测处理。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高等数学下拾遗+与matlab结合

如何学好高等数学 高等数学是数学的一门重要分支,包括微积分、线性代数、常微分方程等内容,它是许多理工科专业的基础课程。以下是一些学好高等数学的建议: 扎实的基础知识:高等数学的内容很多,包括初等数学的一些基…

Postgresql源码(107)analyze行采样流程分析(pg_class中reltuples行数评估是哪里来的准确吗)

总结 pg_class中reltuples行数评估是哪里来的? 行数评估发生在acquire_sample_rows采样函数中,算作采样的副产品之一。 总行数评估totalrows即:扫到页面中live元组的数量 / 扫到多少页面 * 总页面,向上取整。 pg_class中reltu…

十九、socket套接字编程——udp

文章目录 一、socket套接字编程接口(一)socket头文件(二)socket 常见API(套接字编程接口)1. 创建 socket 文件描述符 (TCP/UDP, 客户端 服务器 )2.绑定网络信息 (TCP/UDP, 服务器 )3.开始监听 socket (TCP…

【安装教程】KingFunsion3.6-Windows版本的安装教程

哈喽!大家好,我是雷工! 由于项目需要今天学习认识KingFunsion3.6及记录Windows版本的安装教程。 一、KingFunsion介绍 1、KingFunsion是什么? KingFunsion是一款面向工程师的管控一体化全组态平台,是一套面向制造企…

Flutter进阶-Future、FutureBuilder、StreamBuilder详解

一、时间循环 Event Loop机制 程序之所以卡说白了就是没有时间更新UI界面刷新屏幕导致 常见的卡顿主要是两种: 1.很大的计算量CPU忙不过来 2.等待,等服务器的响应、等用户的输入、等文件的读取...等等 在多线程的机制里每当遇到需要等的东西就开启一…

管理类联考——逻辑——知识篇——分析推理——二、匹配——haimian

匹配 题型识别 题干一般提供3-5个对象和2~3个维度的信息,并描述某对象及信息间的条件关系,要求将信息进行匹配。要从一个一个条件出发,通过逻辑推理,得出正确答案。 思维导图 解题技巧 注意选项的模式,如果已经将关…

Unity | HDRP高清渲染管线学习笔记:HDRP光照系统(二)

目录 一、光源类型和模式 1. Light组件 1.1 General(通用设置) 1.1.1 LightLayer(光照层) 1.2 Emission(发光设置) 1.3 Shadows(阴影) 二、Light Layer(光源分层&…

【C/C++实战项目】扫雷游戏

目录 项目分析 外部头文件 初始化 打印 扫雷游戏函数 main函数 项目分析 游戏需要自定义地图的大小、埋雷的数量通过输入坐标进行扫雷,输入的坐标是埋雷的地方,则游戏失败输入的坐标未埋雷,则该坐标显示周围8个坐标总共的雷数游戏初始…

Ant Design Vue实现表格双击编辑、添加新行、文字提示

早上刚上班,产品就朝我工位走了过来,一看大事不好,肯定又是来提需求的! 产品:做一个表格,要实现双击编辑的功能 我:做不了 产品:老板提的 我:好的,可以做 老板…

什么是测试开发工程师?

目录 前言: SDET是做啥的? 为什么需要测试开发? SDET的角色和职责 技术和软技能 非技术能力: 沟通能力 时间管理和组织能力 良好的工作态度 热情 日常工作 事业进阶 总结 前言: 测试开发工程师 (Software …

AIDL中 Binder 的具体流转过程(源码讲解)

前言 本篇文章承接上篇 Binder对象的流转(系统服务的调用过程、AIDL的使用过程) 上一篇简单笼统地说明了流转的大致方向与手段,此篇文章我们将深入代码层面,看看 Binder 到底是怎么实现的。 一、一个简单的AIDL示例 客户端&…

网关全局过滤器:Java中的强大工具

文章目录 网关过滤器简介网关过滤器的作用过滤器的生命周期实际应用示例权限过滤器解析 总结 网关过滤器简介 网关过滤器是一个位于应用程序和底层服务之间的组件,它截取进出网络请求,并提供对请求和响应进行处理的机制。它可以在请求到达目标服务之前或…

测试老鸟的职业生涯,从初识到功能再到自动化测试,他都经历了啥...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 张工:…

Qt/C++编写onvif工具(搜索/云台/预置位/OSD/录像存储)

一、前言 从最初编写这个工具开始的时间算起来,至少5年多,一直持续完善到今天,这个工具看起来小也不小大也不大,但是也是经历过无数个现场的洗礼,毫不夸张的说,市面上能够遇到的主流的厂商的设备&#xff…

深入探究 ReentrantLock 的应用和原理

博主介绍: ✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家✌ Java知识图谱点击链接:体系化学习Java(Java面试专题) 💕💕 感兴趣的同学可以收…

微信开发者工具-导入小程序项目会自动切换到小游戏打开出错的解决方案

微信开发者工具导入小程序项目会自动切换到小游戏打开出错, 提示Error 提示appid错误,如下图 错误 Error: INVALID_TOKEN...表示网络已断开, 检查开发工具是否连接到网络, 或注销重新登录开发工具试试 提示缺少文件 如果提示缺…

智能安全用电技术电气火灾监控的应用介绍 安科瑞 许敏

摘要:智能安全用电技术在智慧监狱的应用,可以提升监狱智能化管控水平和降低能耗。文章以智能安全用电技术为入手点,简要分析了监狱用电现状,论述了智能安全用电技术在智慧监狱中的具体应用,对智能安全用电技术在智慧监…

【面试题12】HTTP协议三次握手和四次挥手分别是什么

文章目录 一、概览二、三次握手2.1 第一步:客户端向服务端发送 SYN(同步)包2.2 第二步:服务端返回 ACK(确认)包和 SYN 包2.3 第三步:客户端返回 ACK(确认)包 三、四次挥手…

今日分享:音频格式转换软件

小林最近特别喜欢唱歌,不过总是遇到一些麻烦,例如自己录制的音频格式无法在其他设备上播放,或者想把某个歌曲转成适合自己播放的格式。这时候就需要一个好用的音频格式转换器啦!小林找了一圈,终于找到了几款可爱又好用…

大数据应用——工程实践III

任务一:完成Hadoop集群部署前环境的准备工作 1.1 虚拟机环境准备 1. 安装虚拟机 2. 克隆虚拟机 3. 修改网络配置 4. 修改主机名和映射 5. 关闭防火墙 1.2 安装JDK 1.3 安装Hadoop 1.4 集群配置 1. 编写集群分发脚本xsync 2. 集群部署规划 表 1.1 hadoop101 …