This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AWR2944EVM:访问和压缩雷达立方体数据

Guru**** 2481965 points
Other Parts Discussed in Thread: AWR2944EVM, AWR2944

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/1548104/awr2944evm-acces-and-compression-of-radar-cube-data

器件型号:AWR2944EVM
主题: AWR2944 中讨论的其他器件

工具/软件:

我正在修改 AWR2944EVM 的 DDM 演示、因此、除了其当前功能外、它还计算 STFT 光谱图并通过 TLV 消息将其发送给终端用户。 我通过共享 HSRAM 成功实现了数据路径、但在处理实际雷达立方体数据方面存在一些问题。

每个 CPI 只需要访问单个距离区间的原始雷达立方体数据 我有 几个关于与雷达立方体进行交互的问题:

1.) 我假设演示中默认压缩雷达数据立方体。 这些行是否指定了压缩系数和压缩类型?

if (staticCfg->compressionCfg.compressionMethod==HWA_COMPRESS_METHOD_BFP){
inputBytesPerBlock = 4 * staticCfg->compressionCfg.rangeBinsPerBlock;
}
其他{
inputBytesPerBlock = 4 * staticCfg->compressionCfg.numRxAntennaPerBlock * staticCfg->compressionCfg.rangeBinsPerBlock;
}

2.) 我的函数 fixedSTFT_execute 在 DPC_ObjectDetection_execute 中直接在 DPU_RangeProcHWA_Process 之后调用、如下所示:

retVal = DPU_RangeProcHWA_Process (subFrmObj->dpuRangeObj、&subFrmObj->dpuCfg.rangeCfg、&outRangeProc);
...
checkFFTClipStatus (objDetObj、&Results->FFTClipCount[0]);
radarCubePtr = subFrmObj->dpuCfg.dopplerCfg.hwRes.radarCube.data;
fixedSTFT_execute (objDetObj->stftHandle、radarCubePtr、objDetObj->stftOutputBuf、objDetObj);

这是我尝试访问雷达立方体的原始代码、但在这个阶段似乎被压缩了。 如何访问非压缩雷达立方体? 如果这不可能、您会给出什么建议来在给定范围库中获取未压缩的 radarcube 数据? 我能否仅在 CPU 上解压缩部分数据而无需接入 HWA 代码?  

3.) 是否可以关闭压缩引擎?

4.) 默认为 i s 通过多普勒处理解压缩后、可在 L3 中以非压缩格式访问的完整“多普勒雷达立方体“?  

此致、

标记

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:Mark、

    这些行是否指定了压缩系数和压缩类型?

    压缩比和压缩方法通过 compressionCfg CLI 命令进行配置。

    [报价 userid=“635100" url="“ url="~“~/support/sensors-group/sensors/f/sensors-forum/1548104/awr2944evm-acces-and-compression-of-radar-cube-data 如何访问非压缩雷达立方体? 如果这不可能、您会给出什么建议来在给定范围库中获取未压缩的 radarcube 数据? 我能否仅在 CPU 上解压缩部分数据而无需接入 HWA 代码?  [/报价]

    解压缩是在多普勒处理 DPU 中执行的。 您将在多普勒处理期间解压缩了适用于给定距离库的 1D FFT。

    根据 compressionCfg CLI 命令中每个块配置的范围区间数量、将解压缩这些数量的范围区间并将其存储在解压缩暂存缓冲区中的 DSS_L3 上。

    是否可以关闭压缩引擎?

    您可以将压缩比配置为 1。 但这会增加雷达立方体的尺寸。 因此、您需要确保 DSS_L3 上有足够的可用存储器。

    [quote userid=“635100" url="“ url="~“~/support/sensors-group/sensors/f/sensors-forum/1548104/awr2944evm-acces-and-compression-of-radar-cube-data s 通过多普勒处理解压缩后、可在 L3 中以非压缩格式访问的完整“多普勒雷达立方体“?  [/报价]

    否、如果 8 个量程区间被压缩在一起、则这 8 个量程区间数据会被解压缩在一起。

    此致、

    Samhitha

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,感谢您的答复!

    在多普勒处理 DPU 中执行解压缩。 在多普勒处理期间、您将已解压缩一个给定距离库的可用 1D FFT。

    那么、您是否建议在“dopplerprochwaDDMA.c"文件“文件中访问解压缩的雷达立方体的最佳方法?  在 objectdetection.c 文件的范围内、是否有任何可行的方法访问未压缩的数据形式?

    我知道,在它完成执行 radarcube 返回到压缩形式后,这是正确的吗?

    您可以将压缩比配置为 1。 但这会增加雷达立方体的尺寸。 因此、您需要确保 DSS_L3 上有足够的可用存储器。

    假设数据将适合 L3、数据是否仍为压缩格式(即 EGC 或 BFP)? 如果它们符合我的理解、我仍然无法将它们读取为原始 cmplx16ReIm_t 数据、这是正确的吗? 这是因为它们将按图像中所示的方式存储、不同之处在于压缩将为因子 1、这将使其无损、但仍然不能直接解释为原始  cmplx16ReIm_t

    此致、

    标记

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:Mark、

    那么、您建议在“dopplerprochwaDDMA.c"文件“文件中找到访问解压缩的雷达立方体的最佳方法吗?  在 objectdetection.c 文件的范围内、是否有任何可行的方法访问未压缩的数据表单?

    是的、您可以在多普勒处理期间访问解压缩的雷达立方体。 由于解压缩暂存缓冲区被覆盖、因此无法访问整个解压缩的雷达立方体。

    在当前处理链中、不支持禁用压缩。 您可以在处理链中进行更改以禁用压缩。

    如果是这样、我的理解是、我仍然无法将它们读取为原始 cmplx16ReIm_t 数据、这是正确的吗? 这是因为它们将按照图像中显示的方式存储、不同之处在于压缩将是因子 1、这将使其无损、但仍然不能直接解释为原始  cmplx16ReIm_t.

    是的、您回答正确。 就不会得到解压缩的雷达立方体。

    此致、

    Samhitha

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您发送编修。

    我的想法是利用解压缩的数据创建一个额外的 L3 缓冲区、我将在该缓冲区中存储每个 CPI 的单个范围库中的样本。 为此、我在 preStartConfig 中分配一次该缓冲区、这个配置可以正常工作。 接下来、我尝试将指针传递到函数 DPC_ObjDet_dobplerConfig 内的该缓冲器、并将其传递到多普勒处理结构:

    在 DPC_ObjDet_dobplerConfig 内:

    DPU_DopplerProcHWA_HW_Resources *hwRes;
    hwRes->stftInputBuf = objDetObj->stftInputBuf;

    为此、我修改了 dopplerprochwaDDMA.h 中的结构:

    typedef 结构 DPU_DopplerProcHWA_HW_Resources_t

    ...
    cmplx16ImRe_t * stftInputBuf;

    DPR_DOPPLERProcHWWA_HW_RESOURCES;

    具体的思路是,我可以访问文件 dopplerprochwaDdma.c 内的 L3 缓冲区并在那里写入解压缩的多维数据集数据,供以后在 objectdetection.c 中使用

    不过 通过将单个条目添加到 dopplerprochwaDDMA.h 内的 DPU_DopplerProcHWA _HW_RESOURCES 结构中、整个演示都会崩溃 直接在初始化时出现此错误:
    [C66xx_DSP]调试:DPM 模块同步完成
    错误:收到 DPM 报告 4、错误:–30712 arg0:0x64 arg1:0x84eb44
    [Cortex_R5_0]错误:DPM 报告 4 收到错误:–30712 arg0:0x64 arg1:0x1025a858
    断言:20.759033s:./mss/mss_main.c:MmwDemo_DPC_ObjectDetection_reportFxn:2638:0 失败!!!

    此错误可追溯到
    *文件 mmwave_error.h -> DPU 基本错误–30000
    *文件 dp_error.h ->多普勒 DDMA base –700
    *文件 dopplerprochwaDDMA.h -> DPU_DOPPLERROCHWA_ERROR_NUMCHIRPSPERPING –12  

    不过 这显然不是根本原因、因为注释掉对结构 DPU_DopplerProcHWA _HW_RESOURCES 的单个描述的修改会导致代码再次正常运行。

    因此,如果你能的话,我会很高兴的:
    1.) 解释为什么修改此结构会导致演示代码完全失败。
    2.) 请建议一种方法(或确认我当前的方法)、说明如何从 dopplerprochwaDdma.c 范围检索一些解压缩的数据到 objectdetection.c 文件范围、其中我有我的 DPC/DPM 自定义传输链设置。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:Mark、

    在 CCS 中的此错误发生所在的行处放置一个断点。 检查在结构中添加附加成员之前和之后、任何变量的值是否有任何变化。  因为这是一个自定义的变化,它是不可能在我的最后检查  

    如果您需要特定范围二进制文件的 1D FFT、然后可以添加一个 DMA、以将数据从解压缩暂存区复制到给定地址。 您可以在循环中添加此更改、我们在其中处理多普勒处理-> DPU_DopplerProcHWA_Process 中的每个距离门。

    此致、

    Samhitha

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、 Samhitha、

    感谢您的支持!  

    您能否请提供一些有关在文件 dopplerprochwaDDMA.c 中设置断点的指导? 该文件不在 CCS 工程中、仅在链接器运行期间编译该文件时才会从以下位置提取预编译的二进制文件: “C:\ti\mmwave_mcuplus_sdk_04_07_00_01\mmwave_mcuplus_sdk_04_07_00_01\ti\proc\dpuplerdopDDMA\libcadoperdma\libchame_29664.dmp4

    重新编译的内容 此文件夹 C:\ti\mmwave_mcuplus_sdk_04_07_00_01\mmwave_mcuplus_sdk_04_07_00_01\ti\datapath\DPU\ 掺杂剂 procDDMA 带有“gmake all“  确实解决了问题。 事实证明、默认的二进制文件(很明显)并没有采纳在 CCS 工程编译期间使用的.h 文件所做的更改。 但是 尽管如此、对于未来的开发、如果您能阐明如何在 dopplerprochwaDDMA.c 的非项目范围文件中设置断点、那将是一个不错的选择

    这可能是指该环路? 其中、在信标检查后、来自单个块的数据将出现在 L3 暂存区中。  

    此致

    标记  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    标记、

    [quote userid=“635100" url="“ url="~“~/support/sensors-group/sensors/f/sensors-forum/1548104/awr2944evm-acces-and-compression-of-radar-cube-data/5961522 尽管如此、对于未来的开发、如果您能阐明如何在 dopplerprochwaDDMA.c 的非项目范围文件中设置断点、那将是一个不错的选择 [/报价]

    我想您看到了类似以下屏幕截图中所示的错误-

    使用 Locate File… 按钮、用于浏览到源文件的位置。 然后、调试器可以在同一位置找到其他源文件、或使用相对路径信息来查找与当前文件相关的文件。 相同程序的未来加载将记住位置。

    [报价 userid=“635100" url="“ url="~“~/support/sensors-group/sensors/f/sensors-forum/1548104/awr2944evm-acces-and-compression-of-radar-cube-data/5961522 这可能是指该环路? 其中、在信标检查后、来自单个块的数据将出现在 L3 暂存区中。  [/报价]

    我指的是在循环中处理每个范围门->

    您仍然可以在所指的信标之后添加数据传输。 但在这种情况下、您需要计算所需距离门从开始的偏移量。

    此致、

    Samhitha

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Samhitha、

    我认为您看到的是如下屏幕截图中所示的错误-

    到目前为止我没有看到任何错误、在编译期间、我的 CCS 工程的链接器拉取位于以下位置的预编译.ae66 文件:  

    • C:\ti\mmwave_mcuplus_sdk_04_07_00_01\mmwave_mcuplus_sdk_04_07_00_01\ti\datapath\DPU\dopplerprocDDMA\lib\libdopplproc_hwah_ddma_awr2944.ae66

    我可以通过运行 setenv、然后在 dopplerprocdma 目录中运行 gamke、来重建这个.ae66 文件。 这就是为什么我想知道如何在外部库中设置断点(,我只在链接操作期间拉入)?

    我指的是在循环中处理每个范围门

    这是一个非常好的 见解,谢谢! 还有一个问题是、 我们在此访问的已解压缩外挡块的格式是什么? 根据我能够找到的是 [numChirps][rangeBinsPerBlock(通过 rangeBinIdx 索引)][rx天 线]  这是正确的吗?

    感谢您的帮助!

    标记

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:Mark、

    用户可以打开反汇编、输入函数名称并在函数的开头放置一个断点。 这是在 CCS 中打开文件所必需的。 从下一次运行中、您可以直接将断点放置在所需行。

    我们在此访问的解压缩的外部块的格式是什么?

    下面是解压缩的暂存缓冲区格式 的屏幕截图-

    每个距离门都包括所有的线性调频脉冲(线性调频脉冲 0 - Rx0、线性调频脉冲 0 - Rx1、线性调频脉冲 0 - Rx2、线性调频脉冲 0 - Rx3、线性调频脉冲 1 - Rx0、线性调频脉冲 1 - Rx1、...)  。

    此致、

    Samhitha

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的  Samhitha:

    感谢您提供有关反汇编器的提示。 它揭示了我的 PC 只有零到达的原因(因为我目前正在通过 TLV 输出慢速序列以进行调试)。

    它确实表明我的条件内的实际逻辑没有被执行。 问题是 DPU 不会拾取我在 objetdetection.c 中分配的指针。

    因此不满足 DPU_DopplerProcHWA_Process 中的以下条件:

    if (cfg->hwRes.stftInputBuf != NULL ){
    }

    还有其他注意事项 (如缓存无效或类似) 与预编译的 DPU 交换信息/指针时需要做什么?

     

     目前我的方法如下:

    1. 在 DPC_ObjDet_preStartConfig 内、我为缓冲区分配(只分配一次)存储器:
      1. ptrObjDetObj->stftInputBuf = DPC_Obj Det_Mem PoolAlloc (L3ramObj、stftInputBuf、sizeof (cmplx16ImRe_t));
        ptrObjDetObj->stftOutputBuf = DPC_Obj Det_Mem PoolAlloc (L3ramObj、ptrObjDetObj->stftBufBytes、sizeof (cmplx16ImRe_t));
    2. 在 顶部前后的 DPC_ObjDet_dopplerConfig 内(不更改结果)memset ((void *) dopCfg、0、sizeof (DPU_DopplerProcHWA_Config));我执行以下 2 个赋值:
      1. hwRes->stftInputBuf = objDetObj->stftInputBuf;
        hwRes->stftRangeBinIdx = objDetObj->stftRangeBinIndex;  
    3. 在 DPU_DopplerProcHWA_Process 中、我已将我的逻辑置于所讨论的循环内、条件是(永远不会满足):
      1.  if (cfg->hwRes.stftInputBuf !=  NULL)

    此致、

    标记   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:Mark、

    [报价 userid=“635100" url="“ url="~“~/support/sensors-group/sensors/f/sensors-forum/1548104/awr2944evm-acces-and-compression-of-radar-cube-data/5966806 还有其他注意事项 (如缓存无效或类似) 与预编译的 DPU 交换信息/指针时需要做什么? [/报价]

    这完全取决于您正在获取的数据和存储器位置。 建议您逐步完成代码并进行调试。 这不在 E2E 的范围内、用于调试定制实现。

    此致、

    Samhitha