zoukankan      html  css  js  c++  java
  • 关于FFT提速


    前面的文章,我们对用硬件实现FFT做了简单介绍。前面文章我们使用的是控制器方式实现FFT,也就是说将一组数据放入FFT模块的RAM中,计算一次蝶形计算,完成后从RAM中读出数据继续计算。

    以2048点为例的话,这个FFT计算周期是2048*11*DT,DT为计算一次蝶形运算的时间,按照上述算法,整个FFT时间为2ms左右。这个速度按照控制器的方式,是可以接受的。在不需要实时性的某些场合可以使用这种方式。

    在需要实时性的情况下,这种方式速度太慢。所以改用流水线的方式来实现。具体方法是不断从RAM读数据出来,后端以流水的形式不断执行蝶形计算。

    如上图,是使用流水线的方式不断读写RAM,从时序看到,为了防止RAM的read-during-write出现访问错误,读写使能是错拍进行的。

    这样这个流水线操作完成输出FFT结果,大概需要300多微秒就计算完成了。

    但这样的代价是FPGA资源会使用较多。

    如果还想继续提高速度,以实部数据的RAM为例,需要开辟两块RAM存放实部数据,从RAM1读数据出来进行流水线操作进行蝶形运算,完成后存入RAM2中,当第一级蝶形运算完成后,从RAM2读数据,将运算后的数据写入RAM1,这样轮流读写两块RAM,就不会有read-during-write出现,可以继续提高一倍的速度。同样,代价是RAM资源使用较多。

    读者可根据情况选择合适的方式实现FFT。


    版权所有权归卿萃科技 杭州FPGA事业部,转载请注明出处

    作者:杭州卿萃科技ALIFPGA

    原文地址:杭州卿萃科技FPGA极客空间 微信公众号


    扫描二维码关注杭州卿萃科技FPGA极客空间


  • 相关阅读:
    AVLTree的实现以及左右旋转维持自平衡
    哈希函数之布隆过滤器
    LeetCode——线段树解决区间总和问题
    第23章 Windows身份验证
    第22章 使用外部身份提供商登录
    第21章 登录
    第20章 定义客户端
    第19章 定义资源
    第18章 启动
    第17章 社区快速入门和模板
  • 原文地址:https://www.cnblogs.com/alifpga/p/9211746.html
Copyright © 2011-2022 走看看