【自动驾驶|毫米波雷达】逻辑化讲解测角全流程

news2024/11/26 3:53:17

第一次更新:2024/5/7

目录

一. 引入

基础概念

二. 测角原理

1. 接收天线不同位置

2. 角度几何关系

3. 角度正负规定

4. 角度测量

5. 最大不模糊角

三. 角度分辨率

1. 相位变化量

2. 角度表示

3. 角度变化量

三. 测角算法

1. 三维快速傅里叶变换 (3D-FFT:Three-Dimensional Fast Fourier Transform)

1) 原理

2) matlab代码

2.  波束形成技术(DBF:Digital Beam Forming)

1)原理

2)波束形成算法(matlab代码)

3. 多元信号分类算法(MUSIC:Multiple Signal Classification)

1)原理

2)MUSIC算法(matlab代码)


一. 引入

毫米波雷达测角测得是哪个角呢?

传统的毫米波雷达角度测量是特指水平面方位角的测量,即目标物体相对于雷达“正方向”的偏离角度(正方向也就是垂直于雷达天线板的法线方向),如下图:

基础概念

  • 到达角(AOA:Angle of Arrival): 指接收机中的天线阵列或单个天线接收到雷达信号时,根据信号相位差或时间差计算出来的信号到达方向。
  • 雷达的视场(FOV:Field of View): 顾名思义为雷达的“视野范围”,可以理解为AOA的值域。如图所示为前向毫米波雷达以及角雷达的FOV。

二. 测角原理

毫米波雷达方位角的测量主要依赖于接收天线(RX),角度测量的基本原理即通过回波信号在接收天线的距离差d来估计相位差∆∅

1. 接收天线不同位置

假设电磁波的发出与接收天线为同一根

假设电磁波的发射与接收天线不同,则在接收天线处的相位差为:

其中,f_0为初始发波频率,Δd为相邻接收天线的距离差,Δτ为时间差,λ为波长。

2. 角度几何关系

根据距离差Δd与角度θ的几何关系:

3. 角度正负规定

4. 角度测量

可以进行障碍物的角度估计,得到测角公式:

由测角公式可得:相位差是关于角度的非线性函数

  • 当角度θ越接近0°时,角度估算精度越高;
  • 当角度θ越接近90°时,角度估算精度越低。

5. 最大不模糊角

当角度范围超过180°时,会造成测量角度不准确,即有“最大不模糊角”:

\theta <|\pi|

故此时最大到达角(AOA: Angle of Arrival)为:

从理论角度来看,最大视场角(FOV:Field of View)为:

三. 角度分辨率

角度分辨率(θres )是两个物体在角度 FFT 中可显示为两个谱峰时的最小角度间隔

1. 相位变化量

2. 角度表示

又因为:

所以:

3. 角度变化量

三. 测角算法

最常见的角度测量方式为:3D-FFT(三维快速傅里叶变换)DBF(数字波束形成技术)以及MUSIC算法。其中,3D-FFT(三维快速傅里叶变换)和DBF(数字波束形成技术)做DOA估计是最简单且运算复杂度最低的方法,但是这两方法并不能实现超分辨,其角分辨率受限于阵列的孔径,MUSIC算法是实现超分辨的一种算法。

超分辨:据已知图像信息恢复图像细节和其他数据信息的过程,简单来说就是增大图像的分辨率,防止其图像质量下降。(也就是让图像更加清晰的能力)

1. 三维快速傅里叶变换 (3D-FFT:Three-Dimensional Fast Fourier Transform)

1) 原理

三维FFT原理图

在进行完慢时间维FFT和快时间维FFT后,在2D-FFT峰值相对应的相位序列进行FFT,图中雷达对两个目标进行探测。FFT的点数为天线的阵列数N,FFT后得到两个目标对应的相位变化量\omega _1,\omega_2

根据角度估算公式:

\omega_1=\frac{2\pi dsin\theta_1}{\lambda }

即可得到障碍物的角度为:

\theta_1=sin^{-1}\frac{\lambda \omega_1}{2\pi d}

2) 3D-FFT(matlab代码)

% generate signal and array response
fs = 100e3;   % sample rate
f0 = 20e3;    % signal frequency
t = 0:1/fs:0.1;    % time vector
s = sin(2*pi*f0*t); % signal
d = 0.02; % element spacing
N = 8; % number of elements
theta = 10; % target angle
c = 343; % speed of sound
lambda = c/f0; % wavelength
k = 2*pi/lambda; % wavenumber
d_array = d*(0:N-1); % array element positions
phi_array = exp(-1i*k*d_array*cosd(theta)); % array response
x = s*phi_array; % received signal
X = fftshift(fft2(x)); % 2D FFT
[m, n] = size(X); % size of FFT matrix
theta_x = asind((-m/2:m/2-1)/(m/2)*sin(pi/2)); % angle axis
theta_y = asind((-n/2:n/2-1)/(n/2)*sin(pi/2)); % angle axis
[X_max, I] = max(abs(X(:))); % find max value in FFT matrix
[I_row, I_col] = ind2sub([m n],I); % find row and column index
theta_x(I_row) % estimate angle in x direction
theta_y(I_col) % estimate angle in y direction

2.  波束形成技术(DBF:Digital Beam Forming)

1)原理

DBF本质是构造视场范围内的各个角度的导向矢量,并用这些导向矢量分别去和阵列的回波信号相乘以得到各个角度下的能量值,我们通过寻找其中的极大值(目标所处方向的回波与导向矢量相干叠加,这些方向的能量会得到增强,而噪声是非相干的,能量得到增强的方向,对应极大值的位置,也即信号的方向)来得到实际回波的方向而达到测角的目的。

信号模型:

假设在平面上均匀排布着M-1个阵列(也就是天线)

设窄带发射信号为:s(t),则阵列接收到的信号x(t)为:

定义导向矢量为:

故:

x(n)=a(θ)s(t)

导向矢量是阵列天线的所有阵元对具有单位能量窄带信源的响应。由于阵列响应在不同方向上是不同的,导向矢量与信源的方向是相互关联的,这种关联的独特性依赖于阵列的几何结构。对于同一阵元阵列,导向矢量的每一个元素具有单位幅度。

总输出为:

y(t)=\sum_{n=1}^{M}a_n(\theta)s(t)

令导矢向量中的角度θ在[0,π]中遍历,使得总输出y(t)的模值最小,此时满足条件的角度即波束形成技术所求得的DOA估计角度。

2)波束形成算法(matlab代码)

数字波束合成可以等效的理解为让发射波束按照指定方向来发射电磁波

实际操作过程中的数字波束是通过回波信号FFT之后的峰值点在通过一个阵列流来改变波束的指向来实现的

 

波束形成技术中常用两种算法:

  • LCMV算法:在有用信号形式以及信号方向完全已知的情况下,在某种约束条件下,使得阵列的输出的方差最小。

LCMV仿真图:

  • LMS算法:采用迭代模式,为每个步骤迭代n时刻的权向量加上一个校正值后,即可组成m+1时刻的权向量,用它逼近最优权向量。

LMS仿真图:

% 生成一个6个天线的阵列
N = 6;
theta = linspace(-pi/2, pi/2, 181);
d = 0.5;
array = phased.ULA(N, d);
 
% 生成两个目标
pos = [-20 5; 10 -10];
fc = 3e8/77e9;
lambda = fc/2;
c = 3e8;
t = (0:0.1e-6:1000e-6)';
s1 = cos(2*pi*fc*t + 2*pi*pos(1,1)*sin(pos(1,2)*pi/180)/c);
s2 = cos(2*pi*fc*t + 2*pi*pos(2,1)*sin(pos(2,2)*pi/180)/c);
s = s1 + s2;
 
% 接收到的信号
rx = array(s, [0;5;10;15;20;25]*1e-3);
 
% DBF估计到达角
angdbf = phased.PhaseShiftBeamformer('SensorArray', array, 'OperatingFrequency', fc, ...
    'Direction', [-90:90], 'PropagationSpeed', c);
[y,doasdbf] = angdbf(rx);
doasdbf = unwrap(doasdbf)*180/pi;
disp(doasdbf);
 
 
 
 
 
 
 
% define parameters
fs = 100e3; % sample rate
f0 = 20e3; % signal frequency
t = 0:1/fs:0.1; % time vector
s = sin(2pif0t); % signal
d = 0.02; % element spacing
N = 8; % number of elements
theta = 10; % target angle
c = 343; % speed of sound
lambda = c/f0; % wavelength
k = 2pi/lambda; % wavenumber
d_array = d*(0:N-1); % array element positions
phi_array = exp(-1ikd_arraycosd(theta)); % array response
x = sphi_array; % received signal
 
% DBF processing
theta_range = -90:1:90; % angle range
w = ones(1,N); % weighting coefficients
P = zeros(size(theta_range)); % power spectrum
for i = 1:length(theta_range)
phi = exp(-1ikd_array'sind(theta_range(i))); % steering vector
y = wx.phi; % beamformed signal
P(i) = abs(sum(y))^2/(Nsum(abs(y).^2)); % power spectrum
end
 
% find peak angle
[P_max, I] = max(P);
theta_est = theta_range(I);
 
% plot results
figure;
plot(theta_range, P);
hold on;
plot(theta_est, P_max, 'r*');
xlabel('Angle (degree)');
ylabel('Power spectrum');
title('DBF');
legend('Power spectrum', 'Estimated angle');

3. 多元信号分类算法(MUSIC:Multiple Signal Classification)

 

 MUSIC(Multiple Signal Classification),多重信号分类,是一类空间谱估计算法。其思想是利用接收数据的协方差矩阵进行特征分解,分离出信号子空间和噪声子空间,利用信号导矢向量与噪声子空间的正交性来构成空间扫描谱,进行全域搜索谱峰,从而实现信号的参数估计。

1)原理

假设N元等距线阵,阵元间距为d,信号的波长为λ,空间中有r个信源,那么接收到的观测信号可表示为:

X(t)=\sum_{i=1}^{r}s_i(t)A(\theta_i)+N(t)

其中s_i为第i个信号,\theta_i为第i个信号的入射角度,A(\theta_i)为导矢向量,N(t)为高斯白噪声。

协方差矩阵为:

R=E[XX^T]=AR_SA^T+R_n

将一组完备的正交基分为信号子空间和噪声子空间:

U_S=span[q_1,q_2,...,q_r]

U_n=span[q(r+1),...,q_N]

又因为:

Rq_n=\sigma ^2Iq_n,n=r+1,...,N

代入R=ASA^T+\sigma ^2I得:

A\cdot R_sA^Tq_n=0

即表明信号来波方向的相位矢量A噪声特征值对应 的特征向量正交

定义一个噪声矩阵:

E_n=[q_{r+1},...,q_N]

根据上式可以得到:

A^H(\theta_i)E_n*E_n^TA(\theta_i)=0

构造空间谱

P_{music}=\frac{1}{A^H(\theta_i)P_NA(\theta_i)}

其中P_n=E_n*E_n^T, \theta_i遍历空间搜索角度,当搜索到角度θ的时候,此时P_{music}有一尖峰,对应角度即障碍物角度。

2)MUSIC算法(matlab代码)

MUSIC仿真图:

代码:

% 生成一个6个天线的阵列
N = 6;
theta = linspace(-pi/2, pi/2, 181);
d = 0.5;
array = phased.ULA(N, d);
 
% 生成两个目标
pos = [-20 5; 10 -10];
fc = 3e8/77e9;
lambda = fc/2;
c = 3e8;
t = (0:0.1e-6:1000e-6)';
s1 = cos(2*pi*fc*t + 2*pi*pos(1,1)*sin(pos(1,2)*pi/180)/c);
s2 = cos(2*pi*fc*t + 2*pi*pos(2,1)*sin(pos(2,2)*pi/180)/c);
s = s1 + s2;
 
% 接收到的信号
rx = array(s, [0;5;10;15;20;25]*1e-3);
 
% MUSIC估计到达角
angmusic = phased.MUSIC('SensorArray', array, 'OperatingFrequency', fc, 'NumSignals', 2, 'ScanAngles', theta);
[Pmusic,doasmusic] = step(angmusic, rx);
doasmusic = unwrap(doasmusic)*180/pi;
disp(doasmusic);
 
 
 
 
 
 
% generate signal and array response
fs = 100e3; % sample rate
f0 = 20e3; % signal frequency
t = 0:1/fs:0.1; % time vector
s = sin(2*pi*f0*t); % signal
d = 0.02; % element spacing
N = 8; % number of elements
theta = [10, 20]; % target angles
c = 343; % speed of sound
lambda = c/f0; % wavelength
k = 2*pi/lambda; % wavenumber
d_array = d*(0:N-1); % array element positions
phi_array = exp(-1i*k*d_array'*cosd(theta)); % array response
x = s*phi_array; % received signal
 
% MUSIC processing
theta_range = -90:1:90; % angle range
U = svd(x); % singular values of received signal
n = length(U); % number of eigenvalues
P = zeros(size(theta_range)); % power spectrum
for i = 1:length(theta_range)
    phi = exp(-1i*k*d_array'*cosd(theta_range(i))); % steering vector
    En = eye(n)-U*U'; % noise subspace projection matrix
    P(i) = 1/abs(phi'*En*En'*phi); % power spectrum
end
 
% find peak angles
[P_max, I] = sort(P, 'descend');
theta_est = theta_range(I(1:2));
 
% plot results
figure;
plot(theta_range, P);
hold on;
plot(theta_est, P_max(1:2), 'r*');
xlabel('Angle (degree)');
ylabel('Power spectrum');
title('MUSIC');
legend('Power spectrum', 'Estimated angles');

参考:

详细介绍雷达到达角估计算法3DFFT,DBF,MUSIC,Capon的原理、对比、各自的优势_雷达dbf技术-CSDN博客

《深入浅出通信原理》陈爱军

《阵列信号处理及MATLAB实现》张小飞 

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

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

相关文章

视频号创作者分成4.0,软件无脑原创,轻松过分成计划,日入600+

详情介绍 今天给大家带来的项目是《视频号创作者分成4.0&#xff0c;软件无脑原创&#xff0c;轻松过分成计划&#xff0c;日入600》

在Mars3d实现cesium的ImageryLayer自定义瓦片的层级与原点

需要自定义瓦片层级和原点&#xff0c;所以需要自己写第三方图层&#xff0c;但是之前写的很多方法&#xff0c;图层控制和显隐以及透明度&#xff0c;需要跟之前的交互一直&#xff0c;改动量太大的话不划算&#xff0c;所以直接看Mars3d的layer基类&#xff0c;把重写的image…

定时任务还可以这么玩--基于SpringBoot中的ThreadPoolTaskScheduler实现动态定时任务

Hi,大家好&#xff0c;我是抢老婆酸奶的小肥仔。 最近做了一个需求&#xff1a;将定时任务保存到数据库中&#xff0c;并在页面上实现定时任务的开关&#xff0c;以及更新定时任务时间后重新创建定时任务。 于是想到了SpringBoot中自带的ThreadPoolTaskScheduler。 在Spring…

华为OD机试 - 找磨损度最高和最低的硬盘 - 优先队列(Java 2024 C卷 100分)

华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试…

Linux中的软连接和硬链接

一、软和硬链接连接 在Linux系统中&#xff0c;软连接&#xff08;符号链接&#xff09;和硬链接是文件系统中两种不同类型的链接&#xff0c;它们用于创建对文件的引用。下面详细解释这两种链接的特点和区别&#xff1a;、 软连接&#xff08;符号链接&#xff09; 定义&…

The 2021 Sichuan Provincial Collegiate Programming Contest

The 2021 Sichuan Provincial Collegiate Programming Contest The 2021 Sichuan Provincial Collegiate Programming Contest A. Chuanpai 题意&#xff1a;给出总值k&#xff0c;将k分成xyk&#xff0c;x和y均小于7&#xff0c;最多分成多少组。 思路&#xff1a;暴力跑一…

MATLAB画图,重磅教程MATLAB的美图及强大的绘图功能|

目录 1.plot() 函数&#xff1a; 2.scatter() 函数&#xff1a; 3.histogram() 函数&#xff1a; 4.bar() 函数&#xff1a; 5.plot3() 函数&#xff1a; 6.imshow() 函数&#xff1a; 7.surf() 函数&#xff1a; 福利&#xff1a;免费送资料 MATLAB&#xff08;Matrix…

Tcl学习笔记(四)——流程控制、过程、命名空间、访问文件

1. 流程控制 if命令 if命令后跟两个参数&#xff1a;表达式、待执行的Tcl脚本。if命令中的每一个左大括号都必须与它前一个字符同行。 有elseif和else可选子句&#xff0c;使用时与if中第二个参数的右大括号放在同一行。 switch命令 switch命令利用一个给定值与多个模式进行匹…

crossover不能生成容器 无法创建容器怎么办

CrossOver不能生成容器&#xff0c;我们应该先了解什么是容器&#xff0c;容器是盛放类虚拟机——CrossOver在macOS系统和Linux系统下载的win版软件的器皿。无法创建容器怎么办&#xff1f;无法创建多数情况是macOS系统与CrossOver不兼容所造成的。 首先&#xff0c;我们将介绍…

护眼台灯什么牌子好一点?五款专业护眼灯品牌排行分享

台灯作为家庭中不可或缺的桌面照明设备&#xff0c;在儿童和青少年的学习生活中扮演着至关重要的角色。对于这个年龄段的孩子来说&#xff0c;台灯的选择尤为关键&#xff0c;因为不恰当的照明可能对他们娇嫩的视力造成损害。护眼台灯什么牌子好一点&#xff1f;家长们在挑选台…

男士内裤什么品牌质量好?男士内裤选购指南攻略分享

有很多小伙伴认为男士内裤只是穿在里面的&#xff0c;只要能穿就不讲究了。但实际上选择一些质量不好的男士内裤会让穿着舒适性十分不佳&#xff0c;同时还会因为不具备抗菌效果而滋生细菌&#xff0c;导致出现健康问题。 最近我也是深入研究了一番关于男士内裤&#xff0c;今天…

连锁餐饮店做扫码点餐小程序的作用是什么

餐饮业市场规模高&#xff0c;餐厅、奶茶店、火锅店、小吃店、烧烤店等每天都有不少用户消费&#xff0c;其中也不乏连锁品牌&#xff0c;在线下就餐场景里&#xff0c;扫码点餐已经成为众多商家必备&#xff0c;提升客户餐品选择效率&#xff0c;也能提高商家管理能力及节约时…

Linux学习之高级IO

之前的内容我们基本掌握了基础IO&#xff0c;如套接字&#xff0c;文件描述符&#xff0c;重定向&#xff0c;缓冲区等知识都是文的基本认识&#xff0c;而高级IO则是指更加高效的IO。 对于应用层&#xff0c;在读写的时候&#xff0c;本质就是把数据写给OS&#xff0c;若一方…

MFC DLL注入失败一些错误总结

使用cheat Engine为MFC窗口程序注入DLL时一定要注意&#xff0c;被注入的exe程序和注入的DLL 的绝对路径中一定不要带有中文字符&#xff0c;否则会遇到各种各样的奇怪错误&#xff0c;如下所示&#xff1a; 以下是dll绝对路径中均含有中文字符&#xff0c;会报错误&#xff…

浙大最新开源:MGMap-掩码引导学习的在线矢量化高精地图构建方法

论文标题&#xff1a; MGMap: Mask-Guided Learning for Online Vectorized HD Map Construction 论文作者&#xff1a; Xiaolu Liu, Song Wang, Wentong Li, Ruizi Yang, Junbo Chen, Jianke Zhu 作者单位&#xff1a;浙江大学&#xff0c;有鹿科技 开源地址&#xff1a;…

RUST 编程语言使构建更安全的软件变得更加容易。RUST ALL THE THINGS 需要什么?

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

极致设计!详解专业网页设计的全套步骤和流程

在当今的数字时代&#xff0c;拥有一个专业、易于使用和有吸引力的网页对任何企业或个人都至关重要。专业的网页设计是实现这一目标的关键步骤之一。本文将详细介绍专业的网页设计步骤和过程&#xff0c;以帮助您了解如何设计一个优秀的网页。 在介绍专业网页设计步骤和流程之…

温暖家居新风尚,能率壁挂炉——设计新风尚,体验再升级

随着家居品质要求的提升&#xff0c;现代人对家居的舒适性和设计感有了更高的追求。壁挂炉&#xff0c;作为现代家居中不可或缺的一部分&#xff0c;其重要性日益凸显。中国国际供热通风空调、卫浴及舒适家居系统展览会&#xff08;ISH China & CIHE&#xff09;将于2024年…

短视频矩阵系统电脑端/手机版双端加盟saas技术源头开发

短视频矩阵系统是为了帮助用户更高效地管理、编辑、发布和分析短视频内容而设计的综合性平台。这种系统通常包含电脑端和手机端两个部分&#xff0c;每个部分都有其特定的功能模型&#xff0c;以适应不同设备的操作习惯和使用场景。以下是根据搜索结果中提供的信息&#xff0c;…

差动绕组电流互感器过电压保护器ACTB

安科瑞薛瑶瑶18701709087/17343930412 电流互感器在运行中如果二次绕组开路或一次绕组流过异常电流&#xff0c;都会在二次侧产生数千伏甚至上万伏的过电压。这不仅会使CT和二次设备损坏&#xff0c;也严重威胁运行人员的生命安全&#xff0c;并造成重大经济损失。采用电流互感…