TI中文支持网
TI专业的中文技术问题搜集分享网站

AWR2944: 1D FFT数据到2D FFT数据的处理以及DDMA解调

Part Number:AWR2944

你好,工程师

我使用AWR2944EVM导出了解压缩后的1D FFT数据,使用matlab进行处理验证。注意到,在使用1D FFT的数据进行2D FFT时,先对数据进行了加窗处理,我在函数DPC_ObjectDetection_execute中调用函数DPU_DopplerProcHWA_config后使用memcpy将window的数据拷贝到L3上的一个固定空间,并使用串口将该数据发出来进行处理,发现如下问题:

1.每次得到的window的数据存在不同;使用如下方式得到window的数据,int32_t * window = (int32_t *)0x88228600, memcpy(window,subFrmObj->dpuCfg.dopplerCfg.hwRes.hwaCfg.window+64,768);其中0x88228600为L3上没有被使用的一块空间的首地址,+64是因为winRamOffset = 256Bytes,且hwaCfg.window为int32_t*类型 的,768表示windowSize in Bytes。窗由函数DPC_ObjDet_GenDopplerWindow中用函数mathUtils_genWindow生成的,所以生成的窗函数不应该有差异。请问为什么得到的window不一样?

2.在matlab中将解压缩后的1D FFT数据加窗后,作2D FFT,得到的结果似乎是错的。如下所示。图1为没有加窗的2d FFT结果,图2为加窗后的2D FFT结果。

3.在matlab上按照解速度模糊的步骤,通过DDMA metric求出各rangeBin和dopplerBin对应的maxidx,与AWR2944上解速度模糊得到的maxidx比较,二者存在差异;即使disable AWR2944上2D FFT之前的加窗操作,与matlab上得到的maxidx仍存在部分不同;请问这是否是因为HWA中的FFT以及其他的定点操作引起的?

Cherry Zhou:

您好,您的问题我们需要升级到英文论坛看下,有答复尽快给您。

,

ZhiQiang Lin:

你好,

感谢你的回复。我发现之所以导出的window数据有问题,是因为memcpy(window,subFrmObj->dpuCfg.dopplerCfg.hwRes.hwaCfg.window+64,768)不需要加64的偏移地址,现在的数据和matlab上生成的hanning窗相同了。但是在求maxidx时,还是存在约1/4的数据不同,请问是否如上第3问的问题导致。请您确认一点,在代码中没有WindowMode的赋值,请问默认是18bit的real 数据格式吗?此时是否将输入HWA进行FFT运算的实部和虚部同乘该18bit的数据。

谢谢

,

Cherry Zhou:

我们跟进给工程师看下,英文论坛的链接如下,您也可以自行查看工程师的答复:

e2e.ti.com/…/awr2944-processing-of-1d-fft-data-to-2d-fft-data-and-demodulation-of-ddma

,

Cherry Zhou:

抱歉回复晚了。

请问是仅通过器件生成和获取的窗口,还是说通过 Matlab (同一窗口)生成的窗口来实现的? 能否分享下两个窗口的比较图?
您能否提供有关失配的更多详细信息? 此外,是否可以提供一个伪脚本来说明是如何在 MATLAB 上执行此操作。 HWA 的运行会影响输出,但差异不应该太大。

此外还请分享下以下信息:

使用的是哪个版本的 SDK?
器件版本是 ES1.0还是2.0?
是否进行了任何"Parameter Set (参数集)"更改? 

,

ZhiQiang Lin:

你好,感谢回复

1.我将2944生成的窗口导出后,和matlab上生成的hanning窗比较,无任何不同;

2.我按照HWA的配置,对从2944上得到的1D FFT数据进行加窗、求log2abs、求DDMA METRIC、进行DDMA解模糊操作,具体流程如下

i.加窗,并加窗后的结果除2^17,并使用round取整,此处在2944TRM中的描述为‘’The output of this multiplication is rounded back to 24-bit I and 24-bit Q by dropping excess LSBs.”,并未指明丢弃多少位LSB,这里的2^17是通过多次测试得到的;

ii.对加窗后的数据作2D FFT,因为HWA配置中2D FFT的dstScale = 0;所以将2D FFT的结果乘2^8;

iii对上面ii的结果进行log2abs处理,因为此处的HWA配置的srcScale=8;所以将ii的结果除以2^8作为输入,输出的求log2后的数据格式为16bit,其中5bit为整数位11bit为小数位,通过函数quantizer('fixed','round',[16,11])对log2的结果进行规范,最后将log2的结果乘2^11,转换为整形; 此处存在疑问:2944上使用The  JPL (Levitt and Morris) approximation,来求abs值,并使用log2(N) = k + log2(1+f),通过LUT来求log2,请问是否会和matlab上使用abs、log2存在区别;

iv.SUM RX,对iii中的结果,在Rx维度上进行积累。因为此处的dstScale = 2;所以输出的结果需要除以2^2;

v.使用iv的输出,求DDMA METRIC,在matlab中分别对以TX=1,2,3,4,5,6开始的连续4个TX的能量值进行求和得到DDMA metric;为了和AWR2944的HWA保持一致,此处的dstScale=0,输出为32bit的数据,所以对得到的DDMA METRIC乘2^8;

vi.根据DDMA METRIC的结果,对每个rangeBin的每个dopplerBin求最大值的索引,即maxidx;发现和2944上处理得到的maxidx存在差异;

下面为同一帧中,某个rangeBin上的DDMA metric和mapidx数据,共64个dopplerBin;其中带有_2944的为2944的处理结果,_matlab为matlab的处理结果;

data.rar

使用的SDK为4.3.1版本;
器件版本是ES2.0;
在作3D FFT之前,仅修改了twidDitherEnable的值为HWA_FEATURE_BIT_DISABLE;

最后,请问你们有AWR2944的HWA的matlab的simulink的脚本吗?是否可以提供?

                                                                                                                                                                                                                                              谢谢

,

Cherry Zhou:

了解,已转达给工程师。

,

Cherry Zhou:

您可以进行以下尝试:

1)将 PC 端的解压缩数据作为输入馈送到器件上的2D FFT。 (EDMA 传输触发器上的简单断点、并直接加载到 L3上的解压缓冲器中)。 理想情况下,是必须匹配的,因为您的输入在两种情况下都是相同的。 如果确实匹配,您可能需要查看解压缩步骤。 您使用的是自己的脚本吗?

2)为1D FFT 和压缩启用抖动。 

请注意,在 HWA 上计算 FFT 的方式与在 MATLAB 上计算 FFT 的方式(Fixed vs Float)存在一些差异。 

ZhiQiang Lin 说:此处存在疑问:2944上使用The  JPL (Levitt and Morris) approximation,来求abs值,并使用log2(N) = k + log2(1+f),通过LUT来求log2,请问是否会和matlab上使用abs、log2存在区别;

是的,与 MATLAB 相比,HWA 上的近似版本相同,其目的是减少周期数。

高级 MAG 模块也存在一个已知问题,此问题在输入采样中引入了一个小误差(在 LSB 中)(在硬件中不能绕过这个误差)。 这个错误有可能导致 maxidx 中的一个潜在不匹配。 

ZhiQiang Lin 说:请问你们有AWR2944的HWA的matlab的simulink的脚本吗?是否可以提供?

抱歉,我们不提供 Simulink 脚本 HWA。 

,

ZhiQiang Lin:

你好

感谢你的回复。

1)我使用的数据就是2944上解压缩后的1DFFT数据;我也获取过同一帧数据某个距离单元上的2D FFT数据,和在matlab上使用1D FFT数据计算的2D FFT结果也存在一些差异,应该是FFT的Fixed和Float的差异引起的;

2)在使能twiddither后,maxidx不匹配的现象仍然存在。但我在测试的过程中发现出现maxidx的matlab结果和2944结果不一致的多是一些杂波底噪所处的距离单元和多普勒单元,这些单元的能量在6个subband中差不多大,受舍入或截尾误差的影响较大;我现在的rangeBin*DopplerBinTotal=16384,仅有约400个Bin的maxidx不匹配,是否可以认为该maxidx不匹配的现象在实际目标探测的过程中的没有影响或影响有限。

谢谢

,

Cherry Zhou:

您的观察是正确的。 maxidx 不匹配可能具有不匹配,但可以减小。 您可以试下以下校正(根据 FFT 结果以及最大块的输入(如果可能的话)):

1. Enable the CMULT mode 5 (Scalar multiplication)

2. Program 525314 as the scalar to be multiplied. (256/511)

3. Apply a 2x scaling using the input formatter.

可以使输入得到512/511的校正,从而减小幅度块导致的误差。 

,

ZhiQiang Lin:

你好

不好意思这么晚回复。我尝试了一下你的方法;但是在1.中应该仍然是Enable the CMULT mode 0,让所有输入的数与IScale[0]和QScale[0]相乘,我将IScale[0]和QScale[0]的值分别赋值为256/511,然后通过让srcScale=7将2d FFT的输入*2,在相同的环境下测试的结果表明,maxidx不匹配的数量由原来的约400个减少到了约200个,虽然有所改善,但仍不能使2944的处理结果和matlab完全一致;请问可以忽略这部分不匹配的maxidx吗,因为其一般出现在没有目标的噪声单元。

谢谢

,

Cherry Zhou:

我们向工程师确认下再给您答复。

,

Cherry Zhou:

抱歉回复晚了,请看以下答复:

即使检测列表中有200种不匹配也相当高,无论是否恰好位于噪声区域,权变措施也应显著减少这个数字:

是否能够将不匹配的指数的数量仅与此特定块隔离?
是否可以量化不匹配的指数? 与实际结果的差异有多大?
您是否有任何滤波算法可用于丢弃噪声区域中的不匹配指数? 如果可以使用这种方法,那么就可以忽略之前的问题。 

赞(0)
未经允许不得转载:TI中文支持网 » AWR2944: 1D FFT数据到2D FFT数据的处理以及DDMA解调
分享到: 更多 (0)