前面的文章,我们对用硬件实现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极客空间


关于FFT提速的更多相关文章

  1. 算法系列:FFT 002

    转载自http://blog.jobbole.com/58246/ 快速傅里叶变换(Fast Fourier Transform)是信号处理与数据分析领域里最重要的算法之一.没有正规计算机科学课程背景 ...

  2. 快速傅里叶变换(FFT)算法【详解】

    快速傅里叶变换(Fast Fourier Transform)是信号处理与数据分析领域里最重要的算法之一.我打开一本老旧的算法书,欣赏了JW Cooley 和 John Tukey 在1965年的文章 ...

  3. 发福利喽稀疏FFT

    附介绍: 四位来自麻省理工学院的研究人员蒂娜·卡塔比(Dina Katabi).海塞姆·哈桑(Haitham Hassanieh).比欧特·因迪克(Piotr Indyk)和埃里克·普里斯(Eric ...

  4. [拉格朗日反演][FFT][NTT][多项式大全]详解

    1.多项式的两种表示法 1.系数表示法 我们最常用的多项式表示法就是系数表示法,一个次数界为\(n\)的多项式\(S(x)\)可以用一个向量\(s=(s_0,s_1,s_2,\cdots,s_n-1) ...

  5. 浅谈FFT(快速博立叶变换)&学习笔记

    0XFF---FFT是啥? FFT是一种DFT的高效算法,称为快速傅立叶变换(fast Fourier transform),它根据离散傅氏变换的奇.偶.虚.实等 特性,对离散傅立叶变换的算法进行改进 ...

  6. 浅谈WEB页面提速(前端向)

    记得面试现在这份工作的时候,一位领导语重心长地谈道——当今的世界是互联网的世界,IT企业之间的竞争是很激烈的,如果一个网页的加载和显示速度,相比别人的站点页面有那么0.1秒的提升,那也是很大的一个成就 ...

  7. 给Eclipse提速的7个技巧

    这篇文章只是关注如何让Eclipse运行得更快.每个技巧都针对Windows.Linux和MacOS用户详细说明.在使用所有优化技巧之后,Eclipse应该能在10秒内启动,并且比以前运行得更流畅. ...

  8. 并行计算提升32K*32K点(32位浮点数) FFT计算速度(4核八线程E3处理器)

    对32K*32K的随机数矩阵进行FFT变换,数的格式是32位浮点数.将产生的数据存放在堆上,对每一行数据进行N=32K的FFT,记录32K次fft的时间. 比较串行for循环和并行for循环的运行时间 ...

  9. 【BZOJ-2179&2194】FFT快速傅里叶&快速傅里叶之二 FFT

    2179: FFT快速傅立叶 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 2978  Solved: 1523[Submit][Status][Di ...

随机推荐

  1. python:控制鼠标和键盘

    程序: # # _*_ coding:UTF-8 _*_ import win32api import win32con import win32gui from ctypes import * im ...

  2. Markdown_02_作图

    [TOC] 前言 一.序列图(Sequence) 序列图由 js-sequence提供支持,可以将代码块转成序列图 示例如下: ```sequence Title: Here is a title A ...

  3. Django-自定义分页组件

    1.封装的分页代码: class PageInfo(object): def __init__(self,current_page,all_count,per_page,base_url,show_p ...

  4. CMDB配置资源管理数据库(理解)

    CMDB是运维自动化的基础,它为日志系统,发布系统,监控系统等运维系统(ELK,zabbix,open-falcon)提供接口函数, 第一种方式:Agent方法实现,agent不能直接访问数据库,因为 ...

  5. LeetCode OJ:ZigZag Conversion(字符串的Z字型转换)

    The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like ...

  6. Linux:tr命令详解

    tr tr命令可以对来自标准输入的字符进行替换.压缩和删除 语法 tr(选项)(SET1 SET2) 选项 -c或——complerment:取代所有不属于第一字符集的字符: -d或——delete: ...

  7. widow系统 LuaForWindows,安装 luasocket

    参考 http://94it.net/a/jingxuanboke/2013/0625/49052.html 1. 我用的是 LuaForWindows_v5.1.4-46.exe 可以在我的百度网盘 ...

  8. Unity3D查找丢失材质和脚本工具

    笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解 ...

  9. 【转】Ubuntu16.04安装WPS

    下载安装下载WPS For Linux:http://community.wps.cn/download/ 直接下载:http://kdl.cc.ksosoft.com/wps-community/d ...

  10. spring boot入门教程——Spring Boot快速入门指南

    Spring Boot已成为当今最流行的微服务开发框架,本文是如何使用Spring Boot快速开始Web微服务开发的指南,我们将使创建一个可运行的包含内嵌Web容器(默认使用的是Tomcat)的可运 ...