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

news/2024/10/17 22:22:12/

回波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-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);
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.ppmy.cn/news/572535.html

相关文章

关于年的日历

#WanNianLi_Month. py # codingutf-8 __author__ xxx def is_leap_year(year): #判断是否为闰年 if year % 4 0 and year % 100 ! 0 or year % 400 0: return True else: return False def get_num_of_day_in_month(year,month): if month in (1, 3…

用python画狗_日常分享| 用Python画两只可爱的狗狗

日常分享| 用Python画两只可爱的狗狗 放假在家不能出门,就提前自学了一点Python,毕竟是下个学期的课程,让我非常惊喜的是和学过Java还有C语言不同,Python居然可以画画哈哈哈哈哈哈 两只狗狗的源代码均来自百度啦(才刚刚…

简洁,漂亮实用的万年历

图示&#xff1a; 代码&#xff1a; <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <meta http-equiv"content-type" content"text/html;charsetgb2312"> <title>漂亮实用的万年…

倒霉的狗年。

俗话说,鸡飞狗跳的.还真应了.狗年一开始,就犯病, 牙疼,疼的我直想撞墙, 所有的计划都落空了. ......倒霉啊.

如何用python给可爱的猫猫狗狗们做一个识别系统?

时不时有一些猫猫狗狗天使般出现~ 又天使般回到了他们的星球 今天就来为我之前的可爱小邻居写个猫狗识别系统吧 真的是小天使啊&#x1f47c; 这篇文章中我放弃了以往的model.fit()训练方法&#xff0c; 改用model.train_on_batch方法。 两种方法的比较&#xff1a; model.…

狗年大作狗文化,吉祥送进千万家!丰收、兴旺、欢乐的景象。(图集)

《母子狗》薛玉琴作农民画 母狗的肚腹内有小狗&#xff0c;背上是只挺立、调皮的小狗&#xff0c;下面还有两只忙着吮奶的小狗。忙碌的母狗踩着玉米株&#xff0c;身上装饰着美丽的花朵&#xff0c;好一幅丰收、兴旺、欢乐的景象。 《福寿狗》孙佃珍作农民画 大狗回首、吐舌、翘…

万年历查询,一个wonderful的年历

在桌面新建记事本&#xff0c;拷贝下面代码到记事本&#xff0c;最后把记事本另存为&#xff1a;XXX.html。就可在本机查看了。 <HTML><HEAD><TITLE>万年历查询</TITLE> <META content"农历; 阳历; 月历; 节日; 时区; 节气; 八字; 干支; 生肖…

快来呀~120类萌狗祝你狗年大吉!

本文来自宏伦工作室 首先祝大家&#xff1a;新年快乐&#xff0c;狗年大吉&#xff01; 怎么是我&#xff1f;说好的 120类萌狗 送祝福呢&#xff1f; 看看下面拼图中的120类狗狗&#xff0c;你能认出其中的多少只&#xff1f; 平时号称爱狗的我&#xff0c;能叫出名字的竟不超…