IWR1443毫米波雷达------基于多普勒相偏补偿的速度解模糊/扩展,实测数据验证

本文主要是介绍IWR1443毫米波雷达------基于多普勒相偏补偿的速度解模糊/扩展,实测数据验证,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 一、基于多普勒相偏补偿的解模糊算法核心思想
  • 二、算法步骤
  • 三、理论效果示意图
  • 四、程序编写
  • 五、实测数据结果:
    • 5.1、data1结果:
    • 5.2、data2结果:
  • 六、总结
    • 6.1、多普勒相偏补偿参考:
    • 6.2、致读者:


前言

“速度模糊”现象是指由于雷达测速范围有限,当目标速度|Vr|>|Vmax|时,测量速度Ve!=Vr的现象。
更多细节可以看这篇文章:https://zhuanlan.zhihu.com/p/486798151
本文主要是记录iwr1443毫米波雷达通过实测数据,验证基于多普勒相偏补偿的速度解模糊算法的有效性


一、基于多普勒相偏补偿的解模糊算法核心思想

首先,由于雷达测速和测角度都是基于相位差的,因此当实际速度Vr超过测速范围时,发生“相位模糊”导致了"速度模糊"。下图1所示W2>pi,发生“相位模糊”,实测得到的相位为w1=2*pi-w2。因此,目标实际速度Vr测量速度Ve雷达测速范围Vmax之间满足如下公式1所示:

在这里插入图片描述
公式(1)

在这里插入图片描述
图1:相位模糊示意图

雷达测角度时,需要考虑速度引起的相位差,根据测量速度Ve对目标角度的求解进行修正,这一过程称为“多普勒相偏补偿”。
在这种的情况下,根据可知测量多普勒补偿相位差与实际多普勒补偿相位差的关系如公式2所示:
在这里插入图片描述
公式(2)

如果测量速度Ve !=实际速度Vr,那么根据测量速度Vr进行多普勒相偏补偿的结果就是错误的;如果没有发生速度模糊:Ve=Vr,那么根据测量速度Vr进行多普勒相偏补偿的结果就是正确的。因此此算法的核心思想就是在不知道速度是否发生模糊的情况下,通过比较两个不同的角度谱的峰值大小来求解目标速度,因为如果角度补偿结果是错误的,那么相应的角度谱的峰值就会偏小。

二、算法步骤

说明:当假设速度发生模糊,那么如图1所示,实际相位应该为2kpi-w1,k为非零整数,由于不能区分2pi-w1和4pi-w1,因此此算法只能假设当速度模糊时,k=1或-1,这也就导致了此算法只能将速度范围扩展一倍。

如图2所示,是此算法的步骤:定义set1时,符号翻转的操作,对应着复数中“旋转pi”的操作,对应着公式2,但此时k只能取正负1。
在这里插入图片描述
图2:基于多普勒相偏补偿算法的步骤

`

三、理论效果示意图

图3(a)和图3(b)分别展示了两种情况下的理论结果:
在这里插入图片描述
图3(a):未发生速度模糊
在这里插入图片描述
图3(b):发生速度模糊

四、程序编写

根据图2所示的算法步骤,只需在原有的求解目标角度的基础上修改。程序有三个需要注意的点:
1.index_dop是目标速度在多普勒门中的下标,范围是-64到63(假设一帧中的脉冲数目chirp_num=128),具体细节可以参考官方关于多普勒相偏补偿的讲解。
2.符号翻转对应着复数中的“旋转pi”。
3.比较两个角度谱的峰值的相对大小,所以一定不要在music算法内将角度谱归一化
核心代码块如下:

        snapshot=snapshot';%未经过多普勒相偏补偿的原始数据snapshot1=snapshot;%操作:多普勒相偏补偿,对应set0snapshot2=snapshot;%操作:多普勒相偏补偿+符号翻转,对应set1%分别进行操作snapshot1(5:8,:)=snapshot1(5:8,:)*exp(-1i*pi*(index_dop(n)/128));%多普勒相偏补偿snapshot2(5:8,:)=snapshot2(5:8,:)*exp(-1i*pi*(index_dop(n)/128))*exp(1i*pi);%分别利用空间谱估计算法(FFT或者MUSIC算法)求解角度谱%注意由于要比较两个角度谱的峰值的相对大小,所以一定不要在music算法内将角度谱归一化[azimuth1(n),P1] = Music(snapshot1,chirps_num,1);%P1:set0[azimuth2(n),P2] = Music(snapshot2,chirps_num,1);%P2:set1plot(P1,'b-.');hold  on%叠加,比较set0和set1plot(P2,'r--');xlabel('方位角/度')ylabel('幅度')title('基于多普勒补偿的速度扩展示意图(Vr>V_max)')legend({'set0','set1'})

全部代码和数据放在如下网盘中,可自取:链接:https://pan.baidu.com/s/1fhAVXiAIDKM_nPshWbvJEw?pwd=HUST
提取码:HUST

五、实测数据结果:

5.1、data1结果:

data1.bin文件是人体走动跟踪的数据,因此全程不会发生速度模糊Vr<Vmax,此时理论上如图3(a)所示:set0>set1。
在这里插入图片描述
图4(a):未发生速度模糊
在这里插入图片描述图4(b):未发生速度模糊

5.2、data2结果:

data2.bin文件是向上抛物并下落的数据,因此全程在自由落体时发生速度模糊Vr>Vmax,此时理论上发生速度模糊时如图3(b)所示:set0<set1。当然,此过程中当物体上升过程中,速度没有发生模糊(70帧)。
在这里插入图片描述
图5(a):发生速度模糊
在这里插入图片描述
图5(b):未发生速度模糊

六、总结

6.1、多普勒相偏补偿参考:

关于多普勒相偏补偿,请参考官方SDK中的说明文档“Millimeter Wave (mmw) Demo for XWR14XX”

6.2、致读者:

更多结果和程序说明,都在代码注释中详细说明了。由于第一次写博客,所以文章的排版很差,望理解。由于本人水平有限,所以难免出现错误,请大家赐教。

这篇关于IWR1443毫米波雷达------基于多普勒相偏补偿的速度解模糊/扩展,实测数据验证的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/188492

相关文章

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

Java JDK Validation 注解解析与使用方法验证

《JavaJDKValidation注解解析与使用方法验证》JakartaValidation提供了一种声明式、标准化的方式来验证Java对象,与框架无关,可以方便地集成到各种Java应用中,... 目录核心概念1. 主要注解基本约束注解其他常用注解2. 核心接口使用方法1. 基本使用添加依赖 (Maven

C#使用iText获取PDF的trailer数据的代码示例

《C#使用iText获取PDF的trailer数据的代码示例》开发程序debug的时候,看到了PDF有个trailer数据,挺有意思,于是考虑用代码把它读出来,那么就用到我们常用的iText框架了,所... 目录引言iText 核心概念C# 代码示例步骤 1: 确保已安装 iText步骤 2: C# 代码程

Pandas处理缺失数据的方式汇总

《Pandas处理缺失数据的方式汇总》许多教程中的数据与现实世界中的数据有很大不同,现实世界中的数据很少是干净且同质的,本文我们将讨论处理缺失数据的一些常规注意事项,了解Pandas如何表示缺失数据,... 目录缺失数据约定的权衡Pandas 中的缺失数据None 作为哨兵值NaN:缺失的数值数据Panda

C++中处理文本数据char与string的终极对比指南

《C++中处理文本数据char与string的终极对比指南》在C++编程中char和string是两种用于处理字符数据的类型,但它们在使用方式和功能上有显著的不同,:本文主要介绍C++中处理文本数... 目录1. 基本定义与本质2. 内存管理3. 操作与功能4. 性能特点5. 使用场景6. 相互转换核心区别

python库pydantic数据验证和设置管理库的用途

《python库pydantic数据验证和设置管理库的用途》pydantic是一个用于数据验证和设置管理的Python库,它主要利用Python类型注解来定义数据模型的结构和验证规则,本文给大家介绍p... 目录主要特点和用途:Field数值验证参数总结pydantic 是一个让你能够 confidentl

JAVA实现亿级千万级数据顺序导出的示例代码

《JAVA实现亿级千万级数据顺序导出的示例代码》本文主要介绍了JAVA实现亿级千万级数据顺序导出的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 前提:主要考虑控制内存占用空间,避免出现同时导出,导致主程序OOM问题。实现思路:A.启用线程池

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很