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.

[参考译文] IWR1443:向高精度实验室添加 CFAR

Guru**** 2546780 points
Other Parts Discussed in Thread: IWR1443

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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/864023/iwr1443-adding-cfar-to-high-accuracy-lab

器件型号:IWR1443

我正在尝试将 CFAR 选项添加到高精度实验室。  其目的是将其放置在第一个 FFT 之后以选择特定峰值,该峰值可能不同于使用 MmwDemo_peakSearch()函数时发现的最高峰值。  一旦选择了特定的峰值,该索引将被复制到 rangeProcStats 结构的 maxIndex 元素,然后 调用 MmwDemo_processInterpolation()函数 woul DBE 执行缩放 FFT。  实际上, lab0003-4K-FFT 项目中的 MmwDemo_processCfar ()函 数版本将替换高精度实验室固件中的 MmwDemo_peakSearch()函数。

首先,我只添加 了 lab0003-4K-FFT 项目中的 MmwDemo_CLICfarCfg()和 MmwDemo_CLIPeakGroupingCfg()函数。  我根据我在各种实验中找到的值为各种参数硬编码值。  我发现、如果我将 peakGroupingCfg.inDopplerDirectionEn 变量设置为0或1、则固件会运行、但不会执行线性调频脉冲。   在 SDK 和工具套件文件中搜索 infopplerDirectionEn 不会导致查找使用该变量的位置、该位置应影响固件的功能。  但很显然、会产生一些效果。

如何确定为什么将 enable 变量设置为有效值会导致固件无法正常运行?

4K_FFT 实验的 HWAutil_configCFAR ()函数中、有

  hwaParamCfg.source.srcRealComplex = HWA 样片_format_Real;

源似乎来自 M0缓冲器。  但是,在用于配置该实验第1个 FFT 的 HWAUtil_configRangeFFT()函数中,有

  hwaParamCfg[paramsetIdx].source.srcRealComplex = HWA 样片_format_complex;//复杂数据

该源似乎也是 M0缓冲器。  似乎没有任何东西可以改变对第一个 FFT 和 CFAR 的调用之间的 M0缓冲区、那么一个函数显示 M0包含真实数据、另一个函数显示具有复杂数据的情况如何?

高精度实验室和4K_FFT 具有不同的编码风格、这一点并不重要。  这使得尝试确保 CFAR 所需的所有必要函数和语句已从一个实验室复制到另一个实验室变得复杂。  

我在另一篇文章中询问了有关固件的文档。  我对这个例子有同样的问题。  《雷达硬件加速器用户指南》介绍了有关 CFAR 的详细信息、但未明确说明如何通过 HWA 链接各种路径。  4K-FFT 实验室使用与高精度实验室不同的第一个 FFT 设置集。  因此,MmwDemo_configCFAR_HWA ()函数中 CFAR 的设置需要不同于4K-FFT 实验中的设置。  如何确定这些设置需要是什么?  哪些文档对其进行了说明?

此致、

Alan


 

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

    尊敬的 Alan:

    我仍在研究这一点、明天我将能够提供一些指导。

    谢谢、

    Akash

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

    尊敬的 Alan:

    您能否发布一个代码片段、说明您尝试实现此功能的方式?

    如上所示、CFAR 计算在 M0中执行、并通过 CFAR 完成中断输出到 M2。 毫米波 Doxygen 中对此进行了说明、此特定页面位于:C:/ti/mmwave_sdk_02_01_00_04/packages/ti/demo/xwr14xx/mmw/docs/doxygen/html/index.html #dataCFAR

    谢谢、

    Akash

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

    您好、Akash、

    本质上、我希望能够用 CFAR 替代高精度实验室中的峰值搜索。

        dataPathObj->firstPassHWADoneCnt++;//??

           if (dataPathObj->cliCfg->calibDcRangeSigCfg.enabled)
           {
               dataPathObj->dcRangeForcedDisableCntr++;
               MmwDemo_dcRangeSignatureCompensation (dataPathObj);
           }
           if (gAccuHighConfig.enableRangeLimit)
           {
               MmwDemo_rangeLimitit (dataPathObj);
           }
           // AMG
           //这可用于 First Echo
           {
    //           MmwDemo_processCfar (dataPathObj、&numDetectedObjects);
               //确定要使用的峰值索引
               //将峰值索引复制到“最大”统计寄存器
           }
           // AMG
           //这可用于自动最大阈值设置
           {
               MmwDemo_peakSearch (dataPathObj);
           }
           HWA readStatsReg (dataPathObj->hwaHandle、&(dataPathObj->rangeProcStats)、1);
           MmwDemo_processInterpolation (dataPathObj);
    这是因为我们使用空气通气雷达的经验是、最大峰值不一定对应于实际液位位置。  有时、电平信号的多次反射具有比电平信号更高的振幅。  因此、在这些情况下、第一个大于某个阈值的峰值是实际水平位置、而不是最大峰值。  因此、CFAR 会为我们提供一个候选峰值列表、从中我们将根据特定标准选择要用于内插的峰值。
    因此、我在4K_FFT 实验中添加了两个配置函数:
    静态 Int32_t MII_CFARCfg (空)

       MmwDemo_CfarCfg  cfarCfg;
       /*初始化 CFAR 配置:*/
       memset ((void *)&cfarCfg、0、sizeof (MmwDemo_CfarCfg));
       /*填充配置:*/
       //proc Direction          =(uint8_t) atoi (argv[1]);
       cfarCfg.averageMode    = MMW_HWA 噪声_AVG_MODE;                  // HWA 噪声_AVG_MODE_CFAR_CASO
       cfarCfg.winLen         = MMW_HWA CFAR_WINDOW_LEN;                 // 8.
       cfarCfg.guardLen       = MMW_HWA CFAR_guard_LEN;                  // 4.
       cfarCfg.noiseDivShift  = MMW_HWA CFAR_Noise_Division_right_shift; // 3.
       cfarCfg.cyclicMode     = 0;                                       //禁用
       cfarCfg.THRESHOLDScale = MMW_HWA CFAR_THRESHOLD_SCALE;            // 0x4b0
       /*保存配置以稍后使用*/
       memcpy ((void *)&gMmwMCB.dataPathObj.cliCfg->cfarCfg、(void *)&cfarCfg、sizeof (mmwDemo_CfarCfg));
       返回0;
    int32_t MII_PeakGroupingCfg (空)

       MmwDemo_PeakGroupingCfg peakGroupingCfg;
       int32_t numRangeBins;
       numRangeBins = gMmwMCB.dataPathObj.numRangeBins;
       memcpy ((void *)&peakGroupingCfg、(void *)&gMmwMCB.dataPathObj.clipCfg->peakGroupingCfg、
           sizeof (MmwDemo_PeakGroupingCfg));
       /*初始化峰值分组配置:*/
    //   memset (((void *)&peakGroupingCfg、0、sizeof (MmwDemo_PeakGroupingCfg));
       /*填充配置:*/
       peakGroupingCfg.scheme              = 1;
       peakGroupingCfg.inRangeDirectionEn  = 0;
    //   peakGroupingCfg.inDopplerDirectionEn = 0; // AMG 将其更改为0会导致线性调频脉冲不发生
    //   peakGroupingCfg.inDopplerDirectionEn = 1; // AMG 将其更改为1会导致线性调频脉冲不发生
       peakGroupingCfg.minRangeIndex       = 0;
       peakGroupingCfg.maxRangeIndex       = numRangeBins - 1;
       if (peakGroupingCfg.scheme!= 1 && peakGroupingCfg.scheme!= 2)
       {
           System_printf ("错误:无效峰值分组方案\n");
           返回-1;
       }
       /*保存配置以稍后使用*/
       memcpy ((void *)&gMmwMCB.dataPathObj.clipCfg->peakGroupingCfg、(void *)&peakGroupingCfg、
           sizeof (MmwDemo_PeakGroupingCfg));
       返回0;
    我发现、仅添加了这两个函数、将 peakGroupingCfg.inDopplerDirectionEn 设置为0或1会导致不产生任何线性调频脉冲。  如果我不设置该变量。 如上面以红色突出显示的那样、则会发生线性调频脉冲、系统会进行距离测量。
     
    一旦我能够解决这个问题(这是发布此帖子的最初原因)、我就会遇到一个更根本的问题。  4K_FFT 实验运行一个1D FFT、然后运行一个2D FFT、最后运行 CFAR。  我们不需要运行2D FFT,因为我们只有一个 Tx 和 Rx 天线。  此外、由于功率限制、我们可能一次运行和分析一个线性调频脉冲。 而不是4K_FFT 实验的多个线性调频脉冲。   那么、与1D FFT 相比、2D FFT 的 L3输出是多少?  它们是否相同、以便 CFAR 也可以使用它们?  或者、它们是否不同、并且根据1D FFT 或2D FFT 是否提供输入、需要对 CFAR 进行一些转换或设置?  如果不同、是否可以将1D FFT 配置为以 CFAR 的格式提供数据而无需运行2D FFT?
     
    这种解释是我在文件中很难找到的。  本文档介绍了各个参数和函数、但不介绍如何配置它们以实现相互交互。  虽然这些实验对系统的启动和运行有很大帮助、但很难理解如何修改实验以使用不同的配置运行。  我被提醒注意原始的 DOS 手册;如果你已经知道 DOS,这是一个很好的资源,但如果你不熟悉 DOS,那就不会太有帮助。
     
    希望这是一个有这种解释的问题,但我还没有找到。
     
    此致、
     
    Alan
     
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Akash、

    在4kfft 实验的 HWAutil_configRangeFFT()函数中,有以下内容:

    /*启用到这个参数集的 DMA 连接、以便数据被复制出*/
    paramISRConfig.interruptTypeFlag = HWA PARAMDONE_INTERRUPT_TYPE_DMA;
    paramISRConfig.dma.dstChannel = dmaDestChannelPing;//TODO SYNC 这定义了要触发的 EDMA 通道、以将数据复制出 
    //paramISRConfig.cpu.callbackArg = paramSetSem;//TODO 检查是否需要 NULL
    errCode = HWA = enableParamSetInterrupt (handle、paramsetIdx、paramISRConfig);
    if (错误代码!= 0)
    {
    //System_printf ("错误:Hwa_enableParamSetInterrupt (ping DMA)返回了%d\n"、错误代码);
    MmwDemo_debugAssert (0);
    返回;
    }
    

    我假设 DMA 存在以触发从 MO 存储器到 L3的传输。  是这样吗?  红色的 TODO 注释是否意味着除了现有固件中的内容外、还需要对代码执行其他操作?

    此致、

    Alan

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

    尊敬的 Alan:

    由于节假日、回复延迟、但我们下周某个时候应该会为您提供答案。

    谢谢、

    Akash

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

    您好、Akash、

    希望你有一个美好的假期,祝你新年快乐!

    我想知道您是否知道该主题中提出的几个问题何时可以获得答案。  制定时间表将有助于规划接下来几周的活动。

    此致、

    Alan

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

    尊敬的 Alan:

    设置 peakGroupingCfg.inDopplerDirectionEn 变量的说明可能是高精度实验室不进行多普勒处理、而仅进行距离处理。 不设置此变量是否意味着要做的事? 您提到了传感器线性调频脉冲并报告距离。 此变量仅在 IWR1443 演示的开箱即用(MMW_CLI.c、223)和 Vital Signs Lab (CLI.c、336)中设置。

    对于第二个问题、需要重新配置 CFAR、因为距离和多普勒一起存储在 L3中(请参阅上面的图表)。 如果您想进一步讨论这个问题、我希望让另一位专家参与。 您是否能够打开器件型号为 IWR1443的新线程、其中包含开箱即用演示的上下文、而不是4K 或高精度实验室。

    此外、TODO 注释似乎无意中保留在代码中、感谢您指出这一点。

    谢谢、

    Akash

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

    您好、Akash、

    感谢您的回答。  我将在接下来的两周内出差、因此在2月的第一周之前、我将无法参加此次活动。  当我返回时、我将按照您的建议设置一个新线程、并添加一个有关我尝试执行的操作的图表。

    此致、

    Alan

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

    这听起来不错、谢谢 Alan!

    谢谢、

    Akash