Other Parts Discussed in Thread: MMWAVE-MCUPLUS-SDK, AWR2944
部件号:MMWAVE-MCUPLUS-SDK
主题: AWR2944 中讨论的其他器件
尊敬的专家:
我正在尝试在 AWR2944 上使用 HWA 实现 4K FFT 拼接。 我参考了 AWR1432 文档中的 4K FFT 拼接、并尝试在 AWR2944 上复制相同的方法。
使用的 SDK:
mmwave_mcuplus_sdk_04_07_00_01
实施方法
从 1432 文档中、4K FFT 拼接流程从 M0 存储器读取输入、执行 FFT、并将输出写入 M2 存储器。
使用相同的概念:
从 M0 读取输入
FFT 使用 HWA 计算
输出被写入 M1
我按照文档中的说明配置了 Param 0 和 Param 1、当我在 1432 上尝试此流程时、缝合的 FFT 输出是在 M1 中正确获得的。
然后、我在 AWR2944 上的 hwa_real_FFT 示例中实现了相同的配置。
参考示例:
mcu_plus_sdk_awr294x_10_00_00_07\examples\drivers\hwa_real_fft\awr294x-evm\c66ss0_nortos
输入信号
为了测试实现方案、我生成了 4096 个正弦波样本。
#define FFT_SIZE 4096
#define PI 3.14159265358979323846f
#define FREQ 1210937.5f //以 Hz 为单位
Float sine_wave[fft_size];
对于 (uint32_t n = 0;n < fft_size;n++)
{
SINE_WAVE[n]= 0.001 * sin (2 * PI *(FREQ / 1000000000)* n);
}
状态= HWAFT_fftRealToCmplxFloat (fftObj、
&gTestFFTFloatOutput[0]、
&SINE_WAVE[0]、
TEST_FFT_NUM_SAMPLES);
DebugP_assert (SystemP_Success == status);
由于每个样本为 4 个字节、因此 M0 中参数 0 的总输入大小为:
4096 × 4 字节= 16KB
预期的 FFT 输出是复数(实数+虚数)、因此预期的输出大小为:
4096 × 8 字节= 32KB
发现问题
情形 1 –使用 1432 中的参数设置(16 位配置)
最初、我使用了 1432 中的相同 Param 0 配置、该配置专为 16 位数据而设计。
采用以下配置:
M1 中观察到的输出大小约为 65KB、这是不正确的。
情形 2 –更新了 32 位输入的配置
然后、我修改了 param 0 以支持 32 位输入样本。
进行此修改后:
M1 中的输出大小增加到超过 100KB
未获得预期的 32 KB 输出
我尝试多次修改参数、但未达到预期的输出大小。
其他观察
为了进一步验证该问题、我在拼接中使用的四个迭代中绘制了中间 FFT 输出。
在所有迭代中都未观察到预期的 FFT 峰值、这表明可能无法正确配置 FFT 计算或内存处理。
调试期间出现问题
在验证输入数据时、我发现了另一个问题。
DMA 触发 HWA 后、M0 中的输入数据会损坏。
这种情况发生在:
状态+= HWA_setDMA2ACCManualTrig(fftObj->hwaHandle, resObj->rdDmaCh);
SemaphoreP_Pend(&fftObj->doneSem, SystemP_WAIT_FOREVER);
使用的触发功能为:
int32_t HWA_setDMA2ACCManualTrig (HWA_Handle handle、uint8_t idx)
使用的参数 0 配置:
paramCfg->triggerMode = HWA_TRIG_MODE_DMA;
paramCfg->triggerSrc = resObj->rdDmaCh;
paramCfg->accelMode = HWA_ACCELMODE_FFT;
paramCfg->source.srcAddr = HWADRV_ADDR_CONVERSION_CPU_TO_HWA (resObj->rdMemBankAddr);
paramCfg->source.srcSign = HWA_Samples_signed;
paramCfg->source.srcAcnt = 1023u;
paramCfg->source.srcBcnt = 3u;
paramCfg->source.srcBIdx = 8u;
paramCfg->source.srcWidth = hw_samples_width_32bit;
paramCfg->source.srcScale = 0u;
paramCfg->source.srcIQSwap = 0u;
paramCfg->dest.dstAddr = HWADRV_ADDR_CONVERSION_CPU_TO_HWA (resObj->wrMemBankAddr);
paramCfg->dest.dstSkipInit = 0U;
paramCfg->dest.dstAcnt = 1023u;
paramCfg->dest.dstAIdx = 32u;
paramCfg->dest.dstBIdx = 8u;
paramCfg->dest.dstRealComplex = HWA_Samples_format_complex;
paramCfg->dest.dstWidth = hw_samples_width_32bit;
paramCfg->dest.dstSign = hw_samples_signed;
paramCfg->dest.dstScale = 8u;
paramCfg->source.srcAIdx = 32u;
paramCfg->source.srcRealComplex = HWA_Samples_format_real;
paramCfg->accelModeArgs.fftMode.fftEn = HWA_FEATURE_BIT_ENABLE;
paramCfg->accelModeArgs.fftMode.fftSize = 10u;
paramCfg->accelModeArgs.fftMode.butterflyScaling = 0xFFFU;
paramCfg->accelModeArgs.fftMode.windowEn = HWA_FEATURE_BIT_DISABLE;
paramCfg->accelModeArgs.fftMode.postProcCfg.fftOutMode = HWA_FFT_MODE_OUTPUT_DEFAULT;
问题
在 AWR2944 HWA 上实现 4K FFT 拼接是否需要任何特定的参数配置?
需要考虑 AWR1432 和 AWR2944 之间的 FFT 拼接配置是否存在任何差异?
使用 32 位输入样本时、为什么输出大小超过预期的 32KB?
什么可能会导致 DMA 触发 HWA 后 M0 中的输入数据损坏?
在 AWR2944 上使用 HWA 实现 4K FFT 拼接的建议方法是什么?
对于 AWR2944 上使用 HWA 的 4K FFT 拼接、有关正确配置或示例实现的任何指导都会非常有用。
谢谢你。