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

第一次更新: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 vectorEn = eye(n)-U*U'; % noise subspace projection matrixP(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.mzph.cn/pingmian/8066.shtml

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

相关文章

代码随想录算法训练营第二十天:二叉树成长

代码随想录算法训练营第二十天&#xff1a;二叉树成长 110.平衡二叉树 力扣题目链接(opens new window) 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a;一个二叉树每个节点 的左右两个子树的高度差的绝…

用c语言进行栈的实现

一、栈的概念 栈Stack&#xff1a; 是只允许在一端进行插入或删除的性表线。首先栈是一种线性表&#xff0c;但限定这种线性表只能在某一端进行插入和删除操作&#xff08;类似于一个只有开口的瓶子&#xff09;。&#xff08;遵循LIFO原则&#xff09;——后进先出&#xff08…

音视频知识基础篇----媒体格式

1. 流媒体&#xff08;Streaming media&#xff09; 流媒体&#xff1a;一连串的多媒体资料压缩后&#xff0c;经过互联网分段发送资料&#xff0c;在互联网上即时传输影音以供观赏的一种技术与过程&#xff0c;此技术使得资料数据包得以像流水一样发送&#xff0c;如果不使用此…

想让网站实现HTTPS访问?教你十分钟内实现

实现网站HTTPS访问通常遵循以下简明步骤&#xff1a; 1. 选择并申请SSL证书&#xff1a; - 根据网站需求&#xff0c;挑选合适的SSL证书类型。常见的有&#xff1a; - DV&#xff08;域名验证&#xff09;&#xff1a;适用于个人或小网站&#xff0c;仅验证域名所有权。 - OV&a…

html--互动星空

<!doctype html> <html> <head> <meta charset"utf-8"> <title>互动星空</title><style> html,body {margin:0;overflow:hidden;width:100%;height:100%;cursor:none;background:black;background:linear-gradient(to bot…

python 使用 MQTT

目录结构 1、py代码 offRelay12-yixing.py # _*_ coding: utf-8 _*_ # 须用到第三方库&#xff1a;paho-mqtt # 安装命令 python3 -m pip install paho-mqttimport time import json import paho.mqtt.client as mqtt# 函数&#xff1a;关闭所有房间的12路继电器模块上指定的…

Python检查代码质量库之flake8使用详解

概要 Flake8是一个流行的Python库,用于检查代码质量和风格一致性,它集成了PyFlakes、pep8、Ned Batchelder的McCabe script等工具。Flake8可以帮助开发者发现代码中的错误,保持代码风格的一致性,是每个Python开发者工具箱中的重要组成部分。 安装 安装Flake8非常简单,可…

C语言程序设计(三)

1、数据的两种表现形式 常量&#xff1a;其值不能被改变的量称为常量。 变量&#xff1a; 单撇号内只能包含一个字符。双撇号内可以包含一个字符串。 注意&#xff1a;要区分符号常量和变量,不要把符号常量误认为变量。符号常量不占内存只是一个临时符号,代表一个值,在预编译…

AI智能分析赋能EasyCVR视频汇聚平台,为安全生产监管提供保障

一、背景需求 为提升公共及生产安全监管&#xff0c;深入贯彻落实中央关于智慧城市、数字乡村的部署要求&#xff0c;视频设备融合管理已成为视频治理的必然趋势。针对当前部分地区在视频监控系统建设中存在的问题&#xff0c;如重点地区视频监控系统建设零散、视频监控数据孤…

提升滞销商品处理效能,精细化库存管理的关键要素

一、明确滞销商品的概念 1. 什么是滞销商品 滞销商品是指在一定期限内&#xff0c;其销售量大大低于预期或市场需求的商品。具体来说&#xff0c;这些商品可能因为款式不新颖、功能落后、价格不合理、过时、质量不佳或其他因素而不受消费者欢迎&#xff0c;导致销售速度极慢或…

HTTP免费升级到HTTPS攻略

HTTPS就是在HTTP的基础上加入了SSL&#xff0c;将一个使用HTTP的网站免费升级到HTTPS的关键就是申请一个免费的SSL证书 具体步骤如下 1 获取免费SSL证书 国内的JoySSL 提供不限量免费的SSL/TLS证书。根据自己的需求选择证书类型&#xff08;登录JoySSL官网&#xff0c;创建账号…

列表处理基础问题的四种方法:从入门到惊艳

目录 一、引言 二、方法一&#xff1a;基础循环遍历 三、方法二&#xff1a;列表推导式 四、方法三&#xff1a;内置函数与高阶函数 五、方法四&#xff1a;惊艳的库与工具 六、案例研究 七、总结 一、引言 在编程的世界中&#xff0c;列表&#xff08;List&#xff09…

3套Matplotlib主题

分享3套Matplotlib主题&#xff0c;让图表更好看 seaborn默认主题 import seaborn as sns import pandas as pd import matplotlib as mpltips pd.read_csv(./sns_data/tips.csv)sns.relplot(datatips,x"消费金额 ($)",y"小费金额 ($)",hue"客人性…

matlab绘制时间序列图,横坐标轴如何标注为月-日

Excel表格中有类似于如下 年月日对应的数据 导入 matlab中&#xff0c;为数值矩阵&#xff1b;了解该表格中的时间跨度为从2021年1月2日至2021年12月31日&#xff0c;中间没有缺失&#xff0c;绘图代码&#xff1a; % clear; timespan1[20210102 20211231]; datenn1datenum(da…

保姆级教学 基于Hexo搭建个人网站(Github)

文章目录 搭建Hexo静态博客介绍一、注册Github账号二、 安装前置软件包三、 绑定github仓库创建SSH私钥添加私钥连接Github仓库 四、安装hexo1. 更改npm镜像源2. 创建一个文件夹 在里面打开终端3. 初始化hexo 五、切换主题1. 安装主题2. 修改默认主题查看修改主题后的网站 六、…

(图论)最短路问题合集(包含C,C++,Java,Python,Go)

不存在负权边&#xff1a; 1.朴素dijkstra算法 原题&#xff1a; 思路&#xff1a;&#xff08;依然是贪心的思想&#xff09; 1.初始化距离&#xff1a;dis[1]0&#xff0c;dis[i]INF&#xff08;正无穷&#xff09; 2.循环n次&#xff1a; 找到当前不在s中的dis最小的点&…

搭建Docker私有镜像仓库

大家好&#xff0c;今天给大家分享一下如何搭建私有镜像仓库&#xff0c;私有镜像仓库可以更好地管理和控制镜像的访问和使用&#xff0c;确保只有授权的人员能够获取和使用特定的镜像&#xff0c;而且方便团队内部共享定制化的镜像&#xff0c;提高开发和部署效率&#xff0c;…

自动驾驶主流芯片及平台架构(三)低算力平台

前面有提到&#xff0c;自动驾驶等级每增加一级&#xff0c;所需要的芯片算力就会呈现十数倍的上升&#xff0c;L2级自动驾驶的算力需求仅要求2-2.5TOPS&#xff0c;但是L3级自动驾驶算力需求就需要20-30TOPS,到L4级需要200TOPS以上&#xff0c;L5级别算力需求则超过2000TOPS。…

购物车操作

添加购物车&#xff1a; 需求分析和接口设计&#xff1a; 接口设计&#xff1a; 请求方式&#xff1a;POST 请求路径&#xff1a;/user/shoppingCart/add请求参数&#xff1a;套餐id、菜品id、口味返回结果&#xff1a;code、data、msg 数据库设计&#xff1a; 这上面出现了…

JAVA IO/NIO 知识点总结

一、常见 IO 模型简介 1. 阻塞IO模型 最传统的一种IO模型&#xff0c;即在读写数据过程中会发生阻塞现象。当用户线程发出IO请求之后&#xff0c;内核会去查看数据是否就绪&#xff0c;如果没有就绪就会等待数据就绪&#xff0c;而用户线程就会处于阻塞状态&#xff0c;用户线…