IWR6843AOPEVM: Vital Signs with People Tracking Demo 源码解惑

Part Number: IWR6843AOPEVM

您好

之前与TI签署了NDA后从你们那拿到了Vital Signs with People Tracking Demo的源码,最近在对这个源码进行研究,发现在心肺解算逻辑里,内部使用的数据有问题。我通过录取的方式拿到了实时处理过程中心肺计算所需的数据,经仿真分析录取到的该数据是正确的,同时我也录取了内部处理所使用的心肺数据,理论上这两个数据应该是一样的,但实际发现这个数据有问题,所以导致Demo最终检测结果出现较大误差。

下面给出了一个通道一个距离单元下两个数据的对比,第一幅图是正确的数据,第二副图是Demo中用到的数据,可以看出大致趋势是一致的,但是第二幅图的数据有很多零值,且有一些其他错误片段,只有部分数据是正确的,现有的逻辑看不出哪里出了问题,想问下能否提供技术支持解惑一下。期待您的回复,感谢!

补充说明:录取数据的位置,第一张图录取的数据在存数函数 MmwDemo_vitalsignPickupPoint 内部,与存数据的逻辑在一起,另外存了一份输出;第二张图录取的数据在心肺处理函数

MmwDemo_vitalsignProcessing 内部,将输入数据另存一份输出。
  • 你好,

    请问你画的两个图使用的变量是什么?

    如果图1的数据是对的,你是否尝试使用图1的数据作为处理函数的输入?

    Thanks,

    Chris

  • 你好,

    图2错误的数据是MmwDemo_vitalsignProcessing 函数内定义的变量cplxf_t *pDataIn_buf_CPLXF,该变量获取的数据是输入的数据pDataIn

    pDataIn_buf_CPLXF = (cplxf_t *)((uint32_t)&pDataIn[0]); 图1是在函数MmwDemo_vitalsignPickupPoint 内部拿到的,获取方式同该函数内部数据保存一样,我额外新加的一个变量保存下来输出到外部类,这个变量只存储一帧(5*12)的数据,实时输出,如下图,给出了部分数据的获取:
    我没有用这个数据作为输入实验,因为他的大小是一帧,而MmwDemo_vitalsignProcessing 内部用的数据是300帧的,这个新建的变量没有开那么大的内存,担心内存不够,所以还没有实验该方式,理论上来讲,MmwDemo_vitalsignPickupPoint 内部预处理数据并保存到缓存用于心肺检测处理,我也是在这里保存数据用于离线分析,两个的数据来源相同,不应该有问题。
    另外,我没有搞清楚MmwDemo_vitalsignPickupPoint 内部预处理的数据是保存在Datasave_Mss_TCMA_p这个地址下,而MmwDemo_vitalsignProcessing 所使用的数据是 (cplx32_t *)subFrmObj->dataIn,两个没有明显的关联性,调试看起来地址是不一样的,所以感觉这里也有点奇怪,而且Datasave_Mss_TCMA_p数据在存储时,每次是从倒数第15帧开始放,放够新的15帧之后,又开始从倒数15帧开始放,周而复始,之前的285帧数据看到是在哪里更新的。
  • 补充一下正确数据和错误数据之间的对比,从结果来看,错误的数据和正确数据有关联,发生了错位,如下图示对比单通道单距离单元数据的实部,correct代表正确的数据,wrong代表错误的数据,同一次实验,各通道和各距离单元正确数据与错误数据对比的偏差规律是一样的。且错误数据突变0值具备周期规律性,当设置15步长时,是每15次变为0,当设置其他步长如23,就是每23次变为0,请问这是什么原因,这个Demo的逻辑是不是哪里存在问题