分享

TI单芯片毫米波雷达IWR1642使用串口采集原始数据教程(附MATLAB代码、bin文件和数据)

 调皮连续波 2022-07-10 发布于贵州
  1. 引言
今天发布的文章是整理了以前发在知乎上的旧文,主要是为了帮助调皮哥的粉丝们学好雷达。可能是以前写的内容不够准确,最近对于粉丝提出的问题,我觉得我应该把教程做得更加细致,这样更能够方便大家进行学习。

本期文章的内容很老,技术也不存在什么高大上的,但是对于初学者,应该是比较管用的,尤其是没有接触过毫米波雷达的小白,通过这个实验就能够尽快了解到调频连续波雷达的基本工作原理以及雷达信号处理的基本流程。

本期的文章所涉及的内容,是调皮哥在硕士阶段帮助导师设计研究生毫米波雷达实验课程并亲自担任研究生毫米波实验助教中所研究到的主要内容,这也算是调皮哥在硕士研究生阶段做的最有教育意义和人生价值的事情了,希望能够帮助到一些没有接触过这方面内容的读者。

好了,下面开始今天的学习吧!

2.问题来源
今天有读者问到:IWR1642有些不用DCA1000,通过USB串口也能把数据导出来?
答案是肯定的!所以今天就给大家进行统一的问题解答,下面的教程比较详细,认真、仔细读完然后获取文章末尾提供的资料应该能够学会并掌握这个技能。
提前注意事项:
(1)串口数据采集不能做到实时采集,间隔时间还是比较大的,大约有3s左右;
(2)串口数据采集每次只能采集最多768KB的数据,太多了内存装不下,具体为什么,后面会分析到。本文提供的采集方案是只采集128*128的一帧数据。

3.内存资源估计
首先,采集数据需要对芯片内部的资源进行估计,需要预算一下我们最多能够采集多少数据,这点至关重要。

串口采集的数据首先是存储在IWR1642的内存里的,IWR1642雷达数据内存(Radar Data Memory)大概是768KB,也就是DSP核内部存储块L3资源总大小为768KB,主要是用来存储雷达数据。
进入TI官方提供的例程里面去看,L3内存的起始地址是0x200A0000,长度是0x000A0000,存储位宽是32位。

假设雷达参数配置为:
发射天线:2个; 
接收天线:4个; 
一帧数据的chirp数:128个(两个脉冲交替各发射128次)
一个chirp的ADC采样点数:128个 
ADC位数:16bit
采样形式:IQ正交采样(两个十进制数组成一个复数,I+jQ),因此计算数据量大小要乘以2。
那么最终采集到的数据大小为:
因此经过对内存的资源估计,如果按照上述参数,发现最多也就只能存储一帧的数据。如果将原始数据的chirp数和一个chirp的ADC采样点数降低,降低几倍就能够多采集几帧,这样也能够得到多帧的数据,只是相应的雷达性能会下降。另外,如果不按照2的次幂采集chirp数或者ADC采样点数,只要总的数据大小没有超过768KB,也能得到更多的数据,这点有待读者自行探索。

虽然一帧的数据不多,也不能像DCA1000一样实时地长时间采集,但是对于初学者来说用来做毫米波雷达的学习或者实验教学是绰绰有余,基本上可学习到、测距、测速、测角、CFAR以及聚类等算法,而且串口采集数据比较简单,使用MATLAB代码可谓是“一键操作、并可重复采集”,方便简单又快捷。

4.硬件与软件环境搭建
(1)本实验需要一台IWR1642毫米波雷达,5V/2A电源线,USB串口线。
(2)使用TI官方提供的最新版Uniflash软件固化编译好的xwr16xx_mmw_demo.bin文件。此bin文件文章末尾提供下载方式,具体的下载操作请读者参照TI提供的操作手册。
(3)雷达上电,打开MATLAB程序,程序会自动匹配并链接串口,无需进行手动修改。点击运行,MATLAB程序会自动调用CFG文件配置雷达,启动雷达后可以听到雷达有十分微小的滋滋"啸叫"声,即可开始原始数据的采集。
(4)采集完成之后,MATLAB程序输出的是2D-FFT的结果,后续算法读者可自行往下执行,但须修改相应的算法参数。
(5)采集的目标可以是静止角反、单人目标、多人目标,可以分不同角度、不同速度、不同运动方向进行采集,实验采集的数据可谓十分丰富,效果多样化,对于某些算法进行验证是具备可操作性的,有待读者自行探索。
5.雷达参数配置与数据格式说明
CFG文件在文章末尾提供下载方式,关于CFG文件中的所有参数说明,读者可参照TI官方提供的SDK中的文档:
C:\ti\mmwave_sdk_03_05_00_04\docs\mmwave_sdk_user_guide.pdf
该文档不仅说明了参数的配置、含义,还分析了整个软件架构,可细细研究。关于本文的操作,调皮哥在下图的红框中进行了标注,这部分参数就是我们需要关心的,如修改帧周期、chirp数、ADC点数、ADC采样率等等。


本文的雷达配置参数如下,读者可参考自行配。
发射天线:2个; 
接收天线:4个; 
一帧数据的chirp数:128个(两个脉冲交替各发射128次)
ADC采样点数:128个
ADC位数:16bit(两个字节组成一个十进制数) 
采样形式:IQ正交采样(两个十进制数组成一个复数,I+jQ); 
ADC采样率为:2.5Msps。
故而,在上位机中串口收到的字节数为:2*4*128*128*2*2=524288(个)。
解析后,收到的十进制数的个数为:字节数/2 =524288/2 = 262144(个)。
数据重组后,收到的复信号数据个数为:10进制数的个数/2 =262144/2 = 131027(个),正好符合复信号个数为:128*128*2*4= 131072(个),即表示两个发射天线,四个接收天线,一共128个交替chirp脉冲,每个chirp脉冲一共128个采样点。
上述数据量的计算,读者可在本文提供的MATLAB代码中进行观察,同时如果需要自行修改,也可以参照此方法进行计算。
需要注意的是
当采用虚拟天线模式时,复信号的个数为:128*128*8= 131072(个),表示一发8收,有8个接收通道的数据。

当没有采用虚拟天线模式时,复信号的个数为:256*128*4= 131072(个),表示2发4收,只有4个接收通道,而256表示有256个chirp脉冲。

因为如果没有使用虚拟天线,两个发射天线的信号都被4个接收天线接收,自然脉冲数会增多2倍。通常我们为了使用TDM-MIMO模式增加雷达的角度分辨率,采用的是虚拟阵列。所以数据格式记住是128个chirp脉冲,每个chirp脉冲128个采样点,一共8个接收通道。
 经过一系列解析,得到信号的实部和虚部时域图,如下:
放大第一个chirp时域波形,正交性良好,如下图所示:
其中,可以看出,信号的前面一半是TX1(第一个发射天线)的128个脉冲在四个接收通道上的数据,一共为128*128*4= 65536。同理,后一半是TX2的数据。
把上面的实部信号放大了看,只看前5个脉冲,红框的部分就是第一个发射天线(TX1)下,RX1、RX2、RX3、RX4的接数据,每个RX一共128个点,如下图所示:
搞清楚前面这些数据的关系与排列形式,那么接下来对信号进行处理那就非常简单了,这部分内容有点绕,关于雷达串口输出的数据组成格式,可以参照下图进行理解,本图是IWR643ISK的串口数据格式,但只是多一个发射天线,不影响我们理解。
6.MATLAB代码主要内容
(1)串口自动链接函数 
(2)数据采集与存储部分 
(3)数据回放部分 
(4)数据解析重组部分(TDM-MIMO虚拟阵列)
可以对比MIMO与TDM-MIMO在测角处理的区别。
(5)距离维FFT
(6)静态杂波滤除(直流分量去除)
可以验证相量均值相消算法、MTI算法、直接置零法等。 
(6)速度维FFT
(7)CFAR检测算法(二维) 
距离维度做一次CA-CFAR、角度维度做一次CA-CFAR,两次CFAR选择出目标的信息,生成散点图,也叫做点云。
(8)测角算法
测角算法可以验证3D-FFT、Capon-BF、MUSIC等,本文只做了最简单的测角处理。
代码其实除了上述这些处理之外,还可以进行其他许多处理,那些内容比较复杂多变,留给读者自行去探索吧,感谢大家支持,未尽事宜,以后更新。

最后提醒大家记得给调皮哥点赞和在看(加粗的谢谢)

本文所涉及到的MATLAB代码、CFG配置文件、bin文件以及数据,关注公众号“调皮的连续波”,回复“0420”获得下载链接。
本文编辑:@调皮连续波,关注调皮哥,获得更多学习内容和建议。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多