Ti雷达代码走读

本文将从多个方面对Ti雷达代码进行详细的解读,并举例说明常见应用场景。

一、硬件部分

无线雷达传感器使用了Texas Instruments公司的AWR1642BOOST EVM开发板,该开发板包含AWR1642芯片。 AW1642是一款由Texas Instruments公司研发生产的微小射频雷达微控制器,集成高增益收发器和数字信号处理器。该芯片可实现超小型,封装简单和低功耗等特点,同时也提供了高精度的探测性能和跟踪功能。

通过读取官方文档以及代码实现的部分,我们可以了解到硬件部分和传感器运行的具体细节。

// 初始化:
bssCfg.rangeCfg.startFreq  = 76U;
bssCfg.rangeCfg.freqSlopeConst = 21U;
bssCfg.rangeCfg.numAdcSamples = 128U;
bssCfg.rangeCfg.numChirps = 64U;

二、软件部分

软件部分是整个雷达系统的核心。它定义了从雷达获取的数据,对原始数据进行预处理、信号处理和特征提取等操作,最终输出目标的位置信息,包括角度、距离和速度。

1、预处理

数据预处理通常包括去噪和滤波等操作。在实际应用中,雷达在捕捉距离和速度信息时,会受到环境干扰而带来一些噪声。这时,预处理的作用就显得尤为重要。

// 预处理:
for (i = 0; i < numPntsPerChirp; i++)
{
  sumVal = 0;
  for (j = 0; j < numChirpsPerFrame; j++)
  {
        sumVal += datap[i*numChirpsPerFrame+j];
  }
  sumVal = sumVal>>beamFormingCfg.log2numVirtAnt;
  datap[i] = sumVal;
}

2、信号处理

信号处理包括对预处理后的数据进行重采样,FFT和纯相位解旋等操作,以获取目标的距离和速度信息。

// 信号处理:
for (idx = 0; idx < numDetectedObjects; idx ++ )
{
    pObj   =   &detObjFinal[idx];
    peakVal    =   pObj->peakVal;

    rangeIdx     =   pObj->rangeIdx;
    dopplerIdx   =   pObj->dopplerIdx;

    range       =   rangeIdx * RangeStep;
    doppler     =   dopplerIdx * DopplerStep;
    // get the coordinates in meters
    pObj->x         =   range * _cosAntAngle * _sinAzimAngl;
    pObj->y         =   range * _cosAntAngle * _cosAzimAngl;
    pObj->z         =   range * _sinAntAngle;
    pObj->velocity  =   doppler*3.0/512;
}

3、特征提取

特征提取用于从雷达原始数据中提取目标的重要特征,比如目标的大小、形状和速度等。在实际应用中,特征提取常常使用机器学习等算法实现。

// 特征提取
for (i = 0; i < numDetectedObjects; i++)
{
    if ((detObjFinal[i].rangeIdx >= rangeIdx_Tgt_MMin) && (detObjFinal[i].rangeIdx <= rangeIdx_Tgt_MMax))
    {
        if ((detObjFinal[i].dopplerIdx >= dopplerIdx_Tgt_MMin) && (detObjFinal[i].dopplerIdx <= dopplerIdx_Tgt_MMax))
        {
            isTgtDetected = 1;
            target->cnt = target->cnt + 1;
            target->doppler += detObjFinal[i].dopplerIdx;
            target->peakVal += detObjFinal[i].peakVal;
        }
    }
}

三、实际应用场景

Ti雷达可以应用于各种场景,比如工业自动化、物流仓储、边缘计算等。以下是一些典型应用场景的解析:

1、 行人检测

行人检测是无线雷达的一个重要应用场景之一,尤其是在一些安全检查点、交通监管区域、火车站和机场等场所。适当放置两个Ti雷达传感器可以很容易地实现行人检测。通过分析随时间变化的雷达数据,可以检测行人的位置、方向和速度等信息。

// 行人检测
for (j = 0; j < numChirpsPerFrame; j++)
{
    for (i = 0; i < numAntenna; i++)
    {
        dataToSend[j*numAntenna+i] = datap[i*numChirpsPerFrame+j];
    }
}
detObj = calculateRangeAzimuthHeatMap(dataToSend, heatMap, &azimuthIdx, &elevIdx);

for (i = 0; i < detObj->numObjOut; i++)
{
    pObj = &detObj->objOut[i];
    if(pObj->peakVal > PHASE_SHIFT_MIN)
    {
        sumRange = sumRange + pObj->rangeIdx;
        tObj.nx = pObj->x*pObj->rangeIdx;
        tObj.ny = pObj->y*pObj->rangeIdx;
        tObj.nz = pObj->z*pObj->rangeIdx;
        distanceOfObj = sqrtf(tObj.nx * tObj.nx + tObj.ny * tObj.ny + tObj.nz * tObj.nz);
        if(distanceOfObj > 0)
        {
            tObj.nx = tObj.nx/distanceOfObj;
            tObj.ny = tObj.ny/distanceOfObj;
            tObj.nz = tObj.nz/distanceOfObj;
        }
        tObj.azim     = pObj->azimuthAngle;
        tObj.elev     = pObj->elevAngle;
        tObj.velocity = pObj->velocity;
        tObj.range    = pObj->rangeIdx*elecDelay+range_offset;
        tObj.certainty = pObj->peakVal/65536.0;
        if(tObj.range <= DETECT_DISTANCE)
        {
            detectedObjs.push_back(tObj);
        }
    }
}

2、物流仓储

物流仓储通常需要检测货架上的商品信息。通常情况下,使用摄像头来拍摄货架上的商品,但是其中存在一些问题,比如商品遮挡、光线条件差等。使用雷达来实现商品检测可以很好地解决这些问题。Ti雷达可以很快地检测出货架上物品的位置和数量等信息。

// 物品检测
for (i = 0; i < numDetectedObjects; i++)
{
    if ((detObjFinal[i].rangeIdx >= rangeIdx_Tgt_MMin) && (detObjFinal[i].rangeIdx <= rangeIdx_Tgt_MMax))
    {
        if ((detObjFinal[i].dopplerIdx >= dopplerIdx_Tgt_MMin) && (detObjFinal[i].dopplerIdx <= dopplerIdx_Tgt_MMax))
        {
            isTgtDetected = 1;
            target->cnt = target->cnt + 1;
            target->doppler += detObjFinal[i].dopplerIdx;
            target->peakVal += detObjFinal[i].peakVal;
        }
    }
}

3、边缘计算

边缘计算是一种新型的计算模式,可以将计算资源尽可能地放在设备端而不是云端。通过Ti雷达传感器可以将原始数据、信号处理和特征提取等操作在设备端实现,并将结果上传至云端进行更精细和深度的分析。

// 边缘计算
for(k = 0; k < heatmapsize; k++)
{
    if(data[k]>ACCUM_THRESHOLD)
    {
        rangeIdx = k%RANGE_ROWS;
        dopplerIdx = k/RANGE_ROWS;
        if((((rangeIdx>=detObjMinRangeIdx)&&(rangeIdx<=detObjMaxRangeIdx))&&
            ((dopplerIdx>=detObjMinDopplerIdx)&&(dopplerIdx<=detObjMaxDopplerIdx)))&&(detObj[k].snr>=detObjSNRThresh))
        {
            tmpObj.rangeIdx = rangeIdx;
            tmpObj.dopplerIdx = dopplerIdx;
            tmpObj.snr = detObj[k].snr;
            tmpObj.x = detObj[k].x;
            tmpObj.y = detObj[k].y;
            tmpObj.z = detObj[k].z;
            tmpObj.velocity = detObj[k].velocity;
            tmpObj.xc = detObj[k].xc;
            tmpObj.yc = detObj[k].yc;
            targets.pushback(tmpObj);
        }
    }
}

结论

本文以Ti雷达代码走读为主题,从硬件、软件和应用场景等多个方面对雷达代码进行了详细的解读,并举例说明了其在行人检测、物流仓储和边缘计算等场景中的应用。在实践中,需要仔细阅读技术文档,熟悉其整体架构,才能更好地应用并优化Ti雷达系统。

原创文章,作者:USOCV,如若转载,请注明出处:https://www.506064.com/n/374073.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
USOCVUSOCV
上一篇 2025-04-27 15:26
下一篇 2025-04-27 15:26

相关推荐

  • Python周杰伦代码用法介绍

    本文将从多个方面对Python周杰伦代码进行详细的阐述。 一、代码介绍 from urllib.request import urlopen from bs4 import Bea…

    编程 2025-04-29
  • Python字符串宽度不限制怎么打代码

    本文将为大家详细介绍Python字符串宽度不限制时如何打代码的几个方面。 一、保持代码风格的统一 在Python字符串宽度不限制的情况下,我们可以写出很长很长的一行代码。但是,为了…

    编程 2025-04-29
  • Python基础代码用法介绍

    本文将从多个方面对Python基础代码进行解析和详细阐述,力求让读者深刻理解Python基础代码。通过本文的学习,相信大家对Python的学习和应用会更加轻松和高效。 一、变量和数…

    编程 2025-04-29
  • 仓库管理系统代码设计Python

    这篇文章将详细探讨如何设计一个基于Python的仓库管理系统。 一、基本需求 在着手设计之前,我们首先需要确定仓库管理系统的基本需求。 我们可以将需求分为以下几个方面: 1、库存管…

    编程 2025-04-29
  • Python满天星代码:让编程变得更加简单

    本文将从多个方面详细阐述Python满天星代码,为大家介绍它的优点以及如何在编程中使用。无论是刚刚接触编程还是资深程序员,都能从中获得一定的收获。 一、简介 Python满天星代码…

    编程 2025-04-29
  • 写代码新手教程

    本文将从语言选择、学习方法、编码规范以及常见问题解答等多个方面,为编程新手提供实用、简明的教程。 一、语言选择 作为编程新手,选择一门编程语言是很关键的一步。以下是几个有代表性的编…

    编程 2025-04-29
  • Python实现简易心形代码

    在这个文章中,我们将会介绍如何用Python语言编写一个非常简单的代码来生成一个心形图案。我们将会从安装Python开始介绍,逐步深入了解如何实现这一任务。 一、安装Python …

    编程 2025-04-29
  • 怎么写不影响Python运行的长段代码

    在Python编程的过程中,我们不可避免地需要编写一些长段代码,包括函数、类、复杂的控制语句等等。在编写这些代码时,我们需要考虑代码可读性、易用性以及对Python运行性能的影响。…

    编程 2025-04-29
  • 北化教务管理系统介绍及开发代码示例

    本文将从多个方面对北化教务管理系统进行介绍及开发代码示例,帮助开发者更好地理解和应用该系统。 一、项目介绍 北化教务管理系统是一款针对高校学生和教职工的综合信息管理系统。系统实现的…

    编程 2025-04-29
  • Python爱心代码动态

    本文将从多个方面详细阐述Python爱心代码动态,包括实现基本原理、应用场景、代码示例等。 一、实现基本原理 Python爱心代码动态使用turtle模块实现。在绘制一个心形的基础…

    编程 2025-04-29

发表回复

登录后才能评论