TI毫米波雷达代码走读
该专栏为热销专栏榜 第100名
文章平均质量分 84
全面解析毫米波雷达前端配置、雷达信号与信息处理、聚类跟踪识别算法的C代码实现。力求逐行解读代码,掌握算法与软件设计。
优惠券已抵扣
余额抵扣
还需支付
¥89.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
lightninghenry
致力于雷达信号与信息处理算法的设计与实现
展开
-
TI单芯片毫米波雷达1642代码走读(〇)——总纲
前言近年来,自动驾驶行业发展如火如荼,雷达技术也逐渐从军工封闭圈走向了开放的市场。毫米波雷达具有全天候探测能力,特别是在雨雪雾天气以及夜间都能可靠工作,并且探测距离相对其他车载传感器非常远,对运动目标非常敏感,价格还低廉,这些特性都使其成为自动驾驶感知层面不可或缺的一环。现如今的雷达已经不仅仅局限于测距测速测角等传统的功能,雷达技术正在从感知走向认知、从宽带走向超宽带、从二维走向三维四维、从相控阵走向数字阵列、从单通道走向MIMO、从独立工作走向分布式协同、从分立组件走向射频数字一体化。MIMO原创 2020-11-06 10:58:48 · 29468 阅读 · 40 评论 -
TI单芯片毫米波雷达代码走读(二十七)—— 角度维(3D)处理之通道间幅相一致性补偿
在实际工程中,由于各接收通道的射频、ADC等器件特性的不一致,以及硬件链路和温度变化的影响,会导致幅度、相位、采样时延的偏差。书接上回,我们知晓了3D处理的主要流程,相信大家都已理解基本的原理。因此需要对MIMO雷达的各通道的幅相进行一定的测量、标定和补偿,以使各通道幅相基准趋于一致,是各通道信号达到应有的品质,尽可能达到理想仿真的结果。第一个函数MmwDemo_addDopplerCompensation()是用于解速度模糊的,我们暂时跳过他,讲完3D处理流程再回来看他。并且每个通道的幅相值都不一样。原创 2023-10-07 00:49:08 · 711 阅读 · 1 评论 -
TI单芯片毫米波雷达代码走读(二十六)—— 角度维(3D)处理之 DFT
3D处理前的DFT原创 2022-10-26 14:01:28 · 2368 阅读 · 6 评论 -
MIMO雷达浅谈
本期我与大家探讨一些MIMO雷达的基本问题,作为接下来角度维(3D)处理的一个知识储备。1.什么是MIMO雷达,它与相控阵雷达、机扫雷达有什么区别?2.为什么民用雷达要使用MIMO雷达?特别是自动驾驶领域3.MIMO雷达主要的优势和劣势是什么?4.MIMO雷达的区别于传统雷达的核心技术是什么?5.MIMO雷达如何测角?MIMO的全称是Multiple input multiple output,译为多输入多输出。众所周知,MIMO的概念最先来自通信领域,4G通信就已经使用了MIM原创 2021-03-06 18:00:27 · 7786 阅读 · 16 评论 -
TI单芯片毫米波雷达代码走读(二十五)—— 角度维(3D)处理流程
我们从今天开始进入近的篇章——3D处理第一维度:距离第二维度:多普勒第三维度:角度第二维度,知道了目标的速度,第一维度与第三维度确定了目标的位置开始读代码上来是一个for循环:for (detIdx2 = 0; detIdx2 < numDetObj2D; detIdx2++)角度计算都在这个for循环里完成,循环次数就是 之间检测到的目标个数上来先配置EDMA控制器,这次是从radarCube中取数据我们回顾一下radarCube的数据...原创 2021-06-28 01:07:49 · 5822 阅读 · 19 评论 -
TI单芯片毫米波雷达代码走读(二十三)—— 峰值聚合(谱峰搜索)
本期要将的内容是Peak grouping,译为峰值聚合。代码走读到了这里:/* Peak grouping */ obj->numDetObjRaw = numDetObj2D; if (obj->cliCfg->peakGroupingCfg.scheme == MMW_PEAK_GROUPING_CFAR_PEAK_BASED) { numDetObj2D = MmwDemo_cfarPeakGroupingCfarQualified原创 2021-02-03 22:39:58 · 3851 阅读 · 3 评论 -
TI单芯片毫米波雷达代码走读(二十二)—— 距离维CA-CFAR检测与目标统计
距离维CFAR检测的时候使用的是还是均值类算法: /* On the detected doppler line, CFAR search the range peak among numRangeBins samples */ numDetObjPerCfar = mmwavelib_cfarCadB_SOGO( &obj->sumAbsRange[(detIdx1 & 0x1) * obj->numRange原创 2021-01-12 08:55:29 · 3785 阅读 · 5 评论 -
TI单芯片毫米波雷达代码走读(二十一)—— 目标标记与数据流
我们回到C代码,现在我们走读到了这里: /* CFAR-detecton on current range line: search doppler peak among numDopplerBins samples */ numDetObjPerCfar = mmwavelib_cfarCadBwrap( obj->sumAbs, obj->cfarDetObjIndexBuf,原创 2021-01-11 13:54:14 · 2837 阅读 · 1 评论 -
TI单芯片毫米波雷达代码走读(二十)—— 多普勒维CA-CFAR检测之数据分析
上一篇文章,我们抓到了detmatrix的数据,并且进行了绘图,纵轴是取过对数的,乍一看显得杂波有点多,其实不然,db值差的是指数倍的。我们讲数据还原重新绘图如下:可以看出目标的峰值比底噪至少要高出10的30次方倍,这是因为我们用了角反的缘故,角反的反射能量很强。我实验的时候角反是运动的,所以MTD都效果就非常好。接下来,我们找出峰值最高的那一列,单独来做下CFAR:将阈值和信号放在一起绘图如下:我们在上位机里设置的是15dB,功率增加15dB,对应功率乘以31.6...原创 2020-12-22 13:25:47 · 3383 阅读 · 11 评论 -
TI单芯片毫米波雷达代码走读(十九)—— 多普勒维CA-CFAR检测之雷达参数与数据获取
我们先来看下CA-CFAR的一些参数,这些参数还是从上位机配置的,如下图所示,在Plots标签页的右下方。从图中可以看出可以设置不少东西,静态杂波滤除我们之前讲过了,勾选上,这个功能就会有了。这次我们主要看的是两个阈值,一个是距离维的CFAR阈值,一个是多普勒维的CFAR阈值,默认值都是15dB。我们还是打开之前的.cfg文件:% ***************************************************************% Created for原创 2020-12-08 23:06:18 · 4873 阅读 · 8 评论 -
TI单芯片毫米波雷达代码走读(十八)—— 多普勒维CA-CFAR检测之C代码实现
我们今天来看距离维CA-CFAR的代码,上一期我们走读到了这里 /* CFAR-detecton on current range line: search doppler peak among numDopplerBins samples */ numDetObjPerCfar = mmwavelib_cfarCadBwrap( obj->sumAbs, obj->cfarDetObjIndex原创 2020-11-26 00:37:16 · 5138 阅读 · 9 评论 -
TI单芯片毫米波雷达代码走读(十七)—— 恒虚警(CFAR)检测浅谈
本期先简要介绍下CFAR,什么是CFAR,全称是。。。参考文章《》CFAR目前有很多种,使用较多的CFAR汇总如下:原创 2020-11-12 21:52:27 · 6339 阅读 · 1 评论 -
TI单芯片毫米波雷达代码走读(十六)—— 多普勒维(2D)处理之2D-FFT与求取模值
静态杂波滤除之后,我们接着看代码: /* process data that has just been DMA-ed */ mmwavelib_windowing16x32( (int16_t *) inpDoppFftBuf, obj->window2D, (int32_t *) obj->windowingBuf2D,原创 2020-10-24 20:33:00 · 5047 阅读 · 2 评论 -
TI单芯片毫米波雷达代码走读(十五)—— 多普勒维(2D)处理之雷达参数与MATLAB仿真
我们进入2D处理之前有几个雷达参数要知道,先回顾一下《TI单芯片毫米波雷达代码走读(八)—— 距离维(1D)处理之雷达参数》,由于2D处理要检测动目标,我们把配置参数重新修改如下图所示:主要调整了最大速度和速度分辨率,得到新的.cfg文件如下:% ***************************************************************% Created for SDK ver:02.00% Created using Visualizer ver:3.原创 2020-10-14 10:51:35 · 6491 阅读 · 20 评论 -
TI单芯片毫米波雷达代码走读(十四)—— 多普勒维(2D)处理之静态杂波滤除
本期要看的代码如下: inpDoppFftBuf = (cmplx16ReIm_t *) &obj->dstPingPong[pingPongId(pingPongIdx) * obj->numDopplerBins]; if (obj->cliCfg->clutterRemovalCfg.enabled) { uint32_t sumVal[2];原创 2020-10-13 23:26:39 · 5094 阅读 · 13 评论 -
TI单芯片毫米波雷达软件架构研究(二)
接着上一篇写之前,先说明下SDK版本的问题,上一篇是根据3.3的UG写的,最近开发发现,TI的demo大部分都是用的SDK2.0,所以我回看了下2.0的UG,发现还真有不一样的地方,所以本着后续与工程代码匹配的原则,从这篇开始统一回到2.0版本。2.0的时候,软件架构(见下图)还没分这么细,没有DPC和DPM这些,算法库也少一些。后面有机会再看看3.3以上版本的算法库新加了哪些。...原创 2020-06-18 00:45:43 · 6414 阅读 · 4 评论 -
TI单芯片毫米波雷达软件架构研究(一)
TI的mmWave的软件架构非常复杂,附加价值很高。要想搞懂,得先死磕官方的mmWave SDK user guide。这篇文章的意义就在于让你可以快速读懂这篇UG。UG分为6个部分:开箱体验; 系统概况; 开搞; 如何开搞 深度开发 附录第1部分就是我们上一篇文章中提到的要准备的东西。第2部分说SDK这个开发包分为Suite和Demo两大部分。Suite中包含了以下这些内容:至于每个里有什么内容,起.原创 2020-06-09 22:46:05 · 16648 阅读 · 7 评论 -
TI单芯片毫米波雷达代码走读(十三)—— 多普勒维(2D)处理之核心函数
今天我们来看看2D处理的核心函数:void MmwDemo_interFrameProcessing(MmwDemo_DSS_DataPathObj *obj),代码如下:/** * @b Description * @n * Interframe processing. It is called from MmwDemo_dssDataPathProcessEvents * after all chirps of the frame have been received an原创 2020-09-22 14:17:35 · 3310 阅读 · 7 评论 -
雷达导论PART III.11 调频连续波测距
本章扩展阅读如下:本章问题如下:原创 2020-09-25 15:58:17 · 2067 阅读 · 6 评论 -
TI单芯片毫米波雷达代码走读(十二)—— 多普勒维(2D)处理流程与数据获取
从今天开始,我们进入第2维度(2D)——多普勒维(或者叫速度维)的雷达信号处理。看过我之前写的文章的读者应当已经知道了第1维度(1D)——距离维 指的是什么,那么第2维度是哪个维度呢?我们先回顾一下《TI单芯片毫米波雷达1642demo代码走读(四)—— 数据流与乒乓操作》这篇文章,在这篇文章中,当1D处理全部结束以后,数据会汇总到radarCube中,如下图所示。这个radarCube其实就是一个二维矩阵,列数为range bin的总数(本工程中数值为256),行数为N/2。上图中重复出现的绿原创 2020-09-20 11:45:06 · 9754 阅读 · 19 评论 -
TI单芯片毫米波雷达代码走读(十一)—— 距离维(1D)处理之直流去除
chirp内处理void MmwDemo_interChirpProcessing()函数最后有这样两行代码: if(obj->cliCfg->calibDcRangeSigCfg.enabled) { MmwDemo_dcRangeSignatureCompensation(obj, chirpPingPongId); }我们首先抓了下cliCfg结构体内的数据,数据可通过关注公众号“雷达导论”下载(右下角有下载按钮),然后我们关注的结构体cal原创 2020-09-09 20:54:35 · 4831 阅读 · 7 评论 -
TI单芯片毫米波雷达代码走读(十)—— 距离维(1D)FFT
上一期我们用MATLAB对加窗后的距离维数据进行了FFT处理看到了目标和目标距离,这一期我们看看C代码是如何做FFT的,回顾一下1D处理的函数代码:/** * @b Description * @n * Interchirp processing. It is executed per chirp event, after ADC * buffer is filled with chirp samples. * * @retval * Not Applica原创 2020-08-24 00:24:08 · 8747 阅读 · 19 评论 -
TI单芯片毫米波雷达代码走读(九)—— 距离维(1D)处理之断点调试数据抓取
续代码走读(七)的步骤,抓取到的数据的下载方式在文末。按照代码走读(七)中的步骤来一遍,想必你将能够看到上图中的结果了,我的试验环节有两个大的RCS目标,4.5米那个位置是墙,2.6米处的那个目标是我专门放的一把铁椅子。好了,第13步:13.回到CCS界面,打开dss_data_path.c文件,滑到第2220行左右的位置,把这附近的代码稍作修改如下。代码其实只加了两个赋值,对程序没有影响,修改的目的一是为了方便实时看数据(毕竟在memory里看数据不是那么直观);二是为了在末尾处加断点。原创 2020-08-16 19:19:01 · 5178 阅读 · 44 评论 -
TI单芯片毫米波雷达代码走读(八)—— 距离维(1D)处理之雷达参数
今天我们通过“mmWave_Demo_Visualizer 3.1.0”上位机发送的.cfg文件来介绍1D处理时需要关心的几个雷达参数。按上一篇文章最后的步骤,我们生成了.cfg文件,文本方式打开,内容如下:% ***************************************************************% Created for SDK ver:02.00% Created using Visualizer ver:3.1.0.1% Frequency:77%原创 2020-08-12 21:00:53 · 6914 阅读 · 17 评论 -
TI单芯片毫米波雷达代码走读(七)—— 距离维(1D)处理之在线调试
一直有小伙伴问代码走读(五)中的回波数据是不是实时抓取的,这里明确回答下,不是我抓的,是为了讲明白1D处理流程专门从网上找的一个数据。1D处理更新到这里,相信大家都有概念了,择日不如撞日,应大家要求,我们自己抓下数据,实验验证一下我们的理论是不是正确的。如果大家手上也有TI的1642开发板(不需要另配数传板),可以和我一起实验一下,具体步骤如下:按照本专栏的第一篇文章——《软件说明文档》准备好工程、SDK、CCS; 用跳帽将SOP设置为101(烧写Flash模式),注意拔插跳帽的时候要断电,可原创 2020-08-11 21:25:11 · 6001 阅读 · 15 评论 -
TI单芯片毫米波雷达代码走读(六)—— 距离维(1D)处理 C代码实现之加窗处理
上一篇文章,我们拿MATLAB走了一遍1D处理的流程,这一期我们来看看C代码如何实现的,首先回顾一下void MmwDemo_interChirpProcessing()函数,代码如下:/** * @b Description * @n * Interchirp processing. It is executed per chirp event, after ADC * buffer is filled with chirp samples. * * @retval原创 2020-08-05 10:34:00 · 4877 阅读 · 6 评论 -
TI单芯片毫米波雷达代码走读(五)—— 距离维(1D)处理 MATLAB
上一期我们讲到了单个chirp的核心算法函数:void MmwDemo_interChirpProcessing(),讲解了数据流和乒乓操作。这两期文章我们来看看对采集到一个chirp(线性调频回波信号)内的数据的距离维处理,看看目标距离是如何计算得到的。 首先我们先给出一个chirp数据,分为虚实两个.dat数据,下载链接都在文章最下方。另外再给大家分享一篇讲FMCW雷达基础原理的文章(我觉得TI写挺好的)。 在看C代码之前我们先使用MATLAB对...原创 2020-07-26 14:29:47 · 9059 阅读 · 11 评论 -
TI单芯片毫米波雷达1642demo代码走读(四)—— 数据流与乒乓操作
接着上篇文章,我们来看核心算法函数:void MmwDemo_interChirpProcessing(); 代码如下,我加了注释:/** * @b Description * @n * Interchirp processing. It is executed per chirp event, after ADC * buffer is filled with chirp samples. * * @retval * Not Applic...原创 2020-07-11 17:21:21 · 8978 阅读 · 20 评论 -
TI单芯片毫米波雷达1642demo代码走读(三)
上篇文章我们看了ARM的代码,今天我们来看看DSP的代码。所有的雷达算法都在DSP里面实现。话不多说,先上图。 这个图非常清晰。我们按照上一篇文章的方法,直接进主线,主线入口:Task_create(MmwDemo_dssInitTask, &taskParams, NULL);void MmwDemo_dssInitTask(UArg arg0, UArg arg1)这个函数还是在dss_main.c文件中,进去以后有很多初始化和配置,我们先全部忽略掉。滑到2805行:...原创 2020-07-02 19:21:14 · 6654 阅读 · 12 评论 -
TI单芯片毫米波雷达1642demo代码走读(二)
上篇文章我们讲了ARM的main函数,用户可更改的地方几乎没有。那么主菜在哪里呢,看这行代码: Task_create(MmwDemo_mssInitTask, &taskParams, NULL); //Task_create()这个函数的内部代码用户不用管。 //Name: Task_create //Prototype: Task_Handle Task_create( Task_FuncPtr fxn, const Task_Params *params, E原创 2020-07-02 19:12:43 · 6280 阅读 · 3 评论 -
TI单芯片毫米波雷达1642demo代码走读(一)
今天我们来实际看下代码。 首先使用CCS软件导入demo工程,工程有两个,一个是ARM的工程,工程名是mmw_mss_16xx;另一个是DSP的工程,工程名为mmw_dss_16xx。我们将这两个工程的主函数打开,分别位于mss_main.c和dss_main.c文件中。 先看mss的主函数,代码如下。我为每行代码都加了中文注释和自己的理解。int main (void){ Task_Params taskPara...原创 2020-06-22 09:44:48 · 16516 阅读 · 17 评论 -
走读前的准备工作
开始研究软件代码之前你需要做以下准备:out-of-box demo工程代码。工程可以在TI Resource Explorer上下到,不想麻烦的话也可以从下面的链接下载。https://download.csdn.net/download/lightninghenry/12535888 mmWave SDK2.0.0.4。主要是要有docs这个文件夹,SDK在TI官网上下载,同样也可以在下面的链接处下载。https://download.csdn.net/download/lightninghenr原创 2020-06-19 16:59:08 · 7831 阅读 · 11 评论