2026年FPGA大赛只剩两周,用安路FPGA做实时AI语音关键词识别,MFCC提取的DCT计算量太大跑不满30帧,除了CORDIC还有哪些查表法能硬挤性能?求具体资源分配方案

开放3 回答 50 浏览

我们电赛队伍用安路FPGA做语音关键词识别,MFCC提取里DCT那步太慢了,现在只能跑到18帧,离30帧目标差得远。DSP核已经用了70%,不敢再上CORDIC。想问问有没有人试过把DCT系数提前量化成查找表,用移位加法和查表代替乘法?具体怎么切分系数精度和查找表深度才能不爆BRAM?另外分帧重叠部分能不能用流水线复用DCT硬件?求一份具体的资源分配和帧率估算,急!

分享:

3 个回答

  • 嵌入式开发小白

    两周时间,别碰CORDIC了,那个东西在安路这种资源紧的芯片上纯粹是给自己找麻烦。你现在DSP核70%占用,再往上加任何乘法都是找死。最直接的办法就是把DCT系数按12bit量化,存进分布式RAM,然后按输入数据位宽拆成高8位和低4位,分别查表,结果移位相加。BRAM不够就只用LUTRAM,安路的LUT6可以当64×1的RAM用,单帧64点DCT只需要64个系数表,每表12bit,总共768bit,一个LUTRAM就塞下了。关键是别做全精度,12bit量化误差对MFCC影响很小,你听不出来的。分帧重叠50%那就更好办,把DCT拆成前后两半,每半16点,共用一个查表状态机,前半算完立刻切到后半,等效把DCT吞吐翻倍。这样改完,25帧基本稳,30帧要看运气,但至少比现在强。你先把系数表用MATLAB量化好,导出coe文件,剩下就是改状态机的事,两天能搞定。对了,你现在用的是安路哪个型号?如果是ELF2系列,LUTRAM数量够不够得先查一下。

  • Verilog小学生

    先别急着上流水线,两周时间最稳的做法就是把DCT系数按12bit量化,存进LUTRAM当查找表。你的输入数据如果是16bit,就拆成高8位和低4位两块,分别查表再移位相加,这样乘法全没了,DSP核完全不动。安路的LUT6可以当64×1的RAM用,64点DCT的系数表总共才768bit,一个LUTRAM就塞下了。分帧重叠50%确实能复用,把DCT拆成前后两半各32点,共用一个查表状态机,前半算完立刻切到后半,等效吞吐翻倍。这样改完25帧基本稳,30帧看运气但比现在强。你先把系数用MATLAB量化好,导出coe直接初始化,别手算。另外建议把帧率目标降到25帧,把省下来的资源去做端点检测,无效帧直接跳过,实际体验比硬追30帧更好。你们现在用的是哪款具体型号?LUTRAM容量不一样,方案还得微调。

  • 数字电路入门生

    两周时间,说句实话,CORDIC确实别碰了,DSP核70%占用再加乘法器,布局布线大概率时序崩。查表法可行,但别贪心做全精度,12bit量化对MFCC影响很小,人耳根本听不出来。具体这么切:余弦系数按12bit量化,输入数据16bit拆成高8位和低4位,查表结果分别左移4位和0位再累加,这样每个DCT输出只需要两次查表和一次加法。系数表用分布式RAM,安路的LUT6可以配成64×1,64点DCT需要64个系数,每表12bit,总共768bit,一个LUTRAM就够。分帧重叠50%是现成的便宜,把DCT状态机设计成两段式,前半帧算完立刻切换到后半帧,查表地址复用,相当于DCT计算单元利用率翻倍。但注意状态机切换要加一拍流水打拍,否则时序容易出毛刺。资源估算下来,LUT大概多占200个,FF多100个,BRAM基本不动,DSP核还是70%没变。帧率方面,25帧问题不大,30帧要看你的主频能不能提到100MHz以上。最后提醒一句,降帧率到25帧然后把端点检测做扎实,比硬撑30帧实际体验好得多,无效语音帧全跳掉,识别率反而高。你们用的具体型号是安路的哪个系列?AG1280还是别的?LUTRAM数量不同,方案要微调。

登录后可在本页底部提交回答

提问者

面向百度查看主页
浏览「其他」

描述场景与已尝试方案,更容易获得有效解答

相关问题

同分类

提问建议

  • 标题写清核心疑问,避免「求助」「请问」等空泛用语
  • 正文补充环境、版本、报错信息或截图
  • 先搜索本站是否已有相近问题,减少重复提问
  • 若与课程相关,请标明课时或章节便于讲师定位