本文是经过参考多个文章并整理的,相关程序已经经过验证其可行性。在此感谢原文作者(文末有相关链接)的无私分享。

1、测距、测速

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

(1)回波信号为发射信号的时延复本,而回波时延与差拍频率成线性关系,通过差拍频率即可计算回波时延,从而计算出目标距离(注意差拍频率包含了多普勒频移,测距时需要减去多普勒频移fd)。
(2)当目标运动时,回波信号不仅仅是发射信号的时延复本,还具有一定的多普勒频移(多普勒效应)。通过提取多普勒频移fd即可计算出目标速度。

2、测角

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

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

3、3DFFT处理

TI目前有两款采集卡TSW1400和DCA1000,可以为xWR1243/1443和1642毫米波雷达进行回波数据采集。本文主要介绍DCA1000采集卡的数据处理。

(1)1642雷达使用DCA1000采集卡回波数据格式(复数形式)


原始回波数据adc_data.bin中的数据格式即按照上图所示排列。
其中,
RX0(I)Sample1 代表接收天线1的第1个采样点的实部;
RX0(I)Sample2 代表接收天线1的第2个采样点的实部;
RX0(Q)Sample1 代表接收天线1的第1个采样点的虚部;
RX0(Q)Sample2 代表接收天线1的第2个采样点的虚部;……依次类推。

第1个chirp的4RX数据后面是第2个chirp的4RX数据,……,第M个chirp数据;再到下一帧数据,依次类推。

(2)MATLAB回波数据解析程序:

%%%%%% 1642+DCA1000 数据解析 %%%%%%%
fname='adc_data.bin';    %bin文件位置
fid = fopen(fname,'rb');
%读取第一帧数据
%n_samples为每个chirp的采样点数,n_chirps为每帧chirp数
sdata = fread(fid,n_samples*n_chirps*n_Rx*n_Tx*2,'int16');
%通道解析
fileSize = size(sdata, 1);
lvds_data = zeros(1, fileSize/2);
count = 1;
for i=1:4:fileSize-5lvds_data(1,count) = sdata(i) + 1i*sdata(i+2); lvds_data(1,count+1) = sdata(i+1)+1i*sdata(i+3);  %IQ数据合并成复数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     %一帧的chirp个数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);
%4RX数据,n_chirps列,每i列为Chirp i的回波数据
RX1data = reshape(cdata(1,:),n_samples,n_chirps);   %RX1数据
RX2data = reshape(cdata(2,:),n_samples,n_chirps);   %RX2
RX3data = reshape(cdata(3,:),n_samples,n_chirps);   %RX3
RX4data = reshape(cdata(4,:),n_samples,n_chirps);   %RX4

频率估计方法有很多,工程上主要采用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程序

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-5lvds_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_RXfor i = 1: n_chirpscdata(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_RXfor m=1:n_chirpstemp=data_radar(:,m,k).*range_win;    %加窗函数temp_fft=fft(temp,N);    %对每个chirp做N点FFTrange_profile(:,m,k)=temp_fft;end
end
%多普勒FFT
speed_profile = [];
for k=1:n_RXfor n=1:Ntemp=range_profile(n,:,k).*(doppler_win)';    temp_fft=fftshift(fft(temp,M));    %对rangeFFT结果进行M点FFTspeed_profile(n,:,k)=temp_fft;  end
end
%角度FFT
angle_profile = [];
for n=1:N   %rangefor m=1:M   %chirptemp=speed_profile(n,m,:);    temp_fft=fftshift(fft(temp,Q));    %对2D FFT结果进行Q点FFTangle_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);
pink=max(angle_profile(:));
[row,col,pag]=ind2sub(size(angle_profile),find(angle_profile==pink));
%% 计算目标距离、速度、角度
fb = ((row-1)*fs)/N;         %差拍频率
fd = ((col-M/2-1)*fs)/(N*M); %多普勒频率
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);

4、参考

回波3DFFT处理(测距、测速、测角)
回波数据adc_data.bin解析(附MATLAB程序)

万分感谢博主8-24-Mamba分享的文章。



写于关雎



新浪微博:https://weibo.com/tianzhejia
CSDN博客:https://blog.csdn.net/qq_35605018
博客网站:http://www.zhijiadeboke.xyz
GitHub:https://github.com/ZhijiaTian
QQ邮箱:2461824656@qq.com
126邮箱:tianzhejia@126.com
Outlook邮箱:tianzhejia@outlook.com

以上均可与本人取得联系,欢迎探讨。^ v ^

[解疑][TI]TI毫米波雷达系列(三):调频连续波雷达回波信号3DFFT处理原理(测距、测速、测角)相关推荐

  1. [解疑][TI]TI毫米波雷达系列(一):Texas Instruments德州仪器 相关软件安装及使用时问题汇总,持续更新......

    德州仪器 (Texas Instruments),简称TI,是全球领先的半导体公司,为现实世界的信号处理提供创新的数字信号处理(DSP)及模拟器件技术.除半导体业务外,还提供包括传感与控制.教育产品和 ...

  2. 毫米波雷达系列 | 基于前后向空间平滑的MUSIC算法详解

    毫米波雷达系列 | 基于前后向空间平滑的MUSIC算法详解 文章目录 毫米波雷达系列 | 基于前后向空间平滑的MUSIC算法详解 DOA阵列模型 MUSIC算法 空间平滑算法 整体流程 仿真代码 忙了 ...

  3. 深入剖析Redis系列(三) - Redis集群模式搭建与原理详解

    前言 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...

  4. TI AWR1642毫米波雷达学习笔记之理论基础(2)

    背景:在知道毫米波雷达信号数学模型后,我们开始对TSW1400开发板采集的原始数据进行处理.本文主要讲解信号处理时涉及的1D FFT和2D FFT处理时前期数据处理,主要为将数据格式处理为天线维-快时 ...

  5. TI AWR1843毫米波雷达采集三维点云数据(ROS)

    毫米波雷达以其稳定性.对不同环境的适应能力.价格等方面的优势逐步引起了科研人员的注意,本文主要介绍利用了TI(德州仪器)的AWR1843设备,基于ROS系统进行采集点云数据的流程.供大家参考及为自己做 ...

  6. 车载毫米波雷达系列专题规划和文章目录

        文章多了后为方便查阅,这里制定一个本专栏下的文章列表.该专栏为记录和探讨毫米波雷达的各方面内容,这些内容我现阶段大致分成了以下几个部分(后面可能会有所更改),在更新博文时我会一并将之纳入这里分 ...

  7. 自动驾驶-毫米波雷达系列基础篇-测距原理

    毫米波雷达的测距原理 1.毫米波雷达的测距原理 1.1 单目标的测距原理 1.2 多个目标测距过程 1.3 距离分辨率 1.4 雷达的最远测距 1.5 小结 1.毫米波雷达的测距原理 问题思考: 1) ...

  8. 自动驾驶-毫米波雷达系列基础篇-测角原理

    雷达的测角原理 3.1 单目标的测角原理 3.2 最大视场角 3.3 同距同速的多个目标 3.4 角度分辨率 3.5 对比角度估计和速度估计 当目标距离发生很小的变化时,会导致Range-FFT峰值处 ...

  9. 毫米波雷达 3发4收 阵列信号回波模拟(基于信号的延时来建模)以及DOA和MVDR方法测角 (二)

    雷达阵列回波模拟和DOA.MVDR仿真 下列matlab程序主要是仿真了3发4收等效为1发12收的连续扫频波制式下的阵列回波,并在阵列的基础上做DOA和MVDR角度分辨率实验. 这于上一篇<毫米 ...

最新文章

  1. LCS最长公共子序列和LIS最长上升子序列——例题剖析
  2. ios 获取一个枚举的所有值_凯哥带你从零学大数据系列之Java篇---第十一章:枚举...
  3. 关于今天写Flex视频循环播放所出现的sdk问题
  4. STM32 初学不知道外设对应的APB1还是APB2
  5. UNION,EXISTS,IN等在SQL语句中的灵活应用和场境的选择。
  6. java虚拟机_深入浅出Java虚拟机,从来没有人能把Java 虚拟机讲解的这么透彻
  7. RedisConf2018记录--Day 1 sessions
  8. 常用排序+查找算法时间复杂度大集合
  9. GoogleNet_V3结构(论文复现)
  10. Bootstrap(5)栅格系统
  11. UVA1386 Cellular Automaton
  12. APICloud教程
  13. UE4 角色沿着样条线移动
  14. 网络通信安全部分笔记二
  15. 全志T3开发板——嵌入式入门学习测试教程(7)
  16. week_02_面向对象基础
  17. 人工只能对php的影响,阿西莫夫眼中的人工智能
  18. 联发科技嵌入式_【MTK联发科技嵌入式驱动工程师面试】面试官人很好,问的问题很基础。-看准网...
  19. Vue简单入门及使用(二)---基本语法及组件使用
  20. 敏涵控股董事长刘敏——不一样的巾帼慈善企业家

热门文章

  1. 广西大学计算机考研资料汇总
  2. Qt美化之基础控件美化
  3. 腾讯 Code Review 规范出炉!
  4. 在ubuntu20.04中设置锁屏背景(亲测有效)
  5. python中的header_python中header是什么意思
  6. 老挑毛u盘一键装系统计算机意外地,u盘装系统 重装Win7系统出现提示计算机意外的重新启动或遇到错误怎么处理 我已经删除了所有分...
  7. 数字电路的74HC138的PROTUES的仿真
  8. 大卫艾克~雄狮醒来2:实相的本质(中字)
  9. GBU406-ASEMI整流扁桥GBU406
  10. mysql中复杂sql语句之多重if嵌套语句