关于硬件实现FFT逆运算

前面的文章我们介绍了关于FFT的硬件实现。关于FFT的逆运算IFFT,其实就是将实现FFT的过程反过来执行就可以了。
在实现过程中要注意很多问题。
同 FFT一样,效率问题。以2048点为例,根据理论值计算,计算一次2048点的IFFT的时间应为130us。在采用流水线的方式下,实部计算和虚部计算均采用两块RAM实现流水线。
结构如上图。在这种方式下,FPGA的片上RAM会消耗很多。
为了节省RAM,可以采用一块RAM的流水线方式。在实现过程中要注意对RAM操作的reading-during-write,之前的文章介绍过了。这种方式速度会降低一半。
最节省的方式是使用控制器方式,但速度更低。这里不再介绍。
上图所示的IFFT流程,存在大量的组合逻辑,时序远远不够,所以应当在组合逻辑中加入寄存器提高速度。但是,寄存器流水线的级数又影响到了读写两块RAM的切换,从而影响计算效率,所以这里值得商榷。
由于设计中RAM输出端没有使用REG,所以1处应该加入REG,提高速度,否则1处会出现时序违规,1处的组合逻辑延迟很大。

2处和3处也是值得深入考虑的地方,加法器的输出到乘法器的输入,以及乘法器的输出再到加法器的输入,均是大量的组合逻辑,设计中一定要注意,不能仅仅完成功能仿真就可以了,一定要在综合工具下综合一下,看看时序是否满足。实践中,这两处均加入REG。
4处是否再加REG需要看综合后的结果。根据实际分析,4处加REG会降低计算效率,读RAM和写RAM来不及切换,这是根据自己的设计得出的结果。
由于FFT计算过程用到乘法器,所以在IFFT中需要用到除法器。如何减少除法器使用的资源或者将除法器更改为其他逻辑实现,需要深入探讨。
版权所有权归卿萃科技 杭州FPGA事业部,转载请注明出处
作者:杭州卿萃科技ALIFPGA
原文地址:杭州卿萃科技FPGA极客空间 微信公众号

扫描二维码关注杭州卿萃科技FPGA极客空间
关于硬件实现FFT逆运算的更多相关文章
- STM32F4使用FPU+DSP库进行FFT运算的测试过程一
测试环境:单片机:STM32F407ZGT6 IDE:Keil5.20.0.0 固件库版本:STM32F4xx_DSP_StdPeriph_Lib_V1.4.0 第一部分:使用源码文件的方式,使 ...
- 基于HAL库的STM32的DSP库详解(附FFT应用)
1 . 建立工程,生成代码时选择包含所有库. 2. 打开 option for target 选择 Target 标签,在code generatio中,将floating point hardw ...
- 关于FFT提速
前面的文章,我们对用硬件实现FFT做了简单介绍.前面文章我们使用的是控制器方式实现FFT,也就是说将一组数据放入FFT模块的RAM中,计算一次蝶形计算,完成后从RAM中读出数据继续计算. 以2048点 ...
- 四轴飞行器1.3 MPU6050(大端)和M4的FPU开启方法
四轴飞行器1.3 MPU6050(大端)和M4的FPU开启方法 原创文章,欢迎转载,转载请注明出处 最近时间花在最多的地方就是STM32的I2C上了.之前就知道STM32的I2C并不好用, ...
- 玩转X-CTR100 l STM32F4 l DSP指令集性能测试
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 DSP库的 ...
- HEAAN库学习
本文主要学习HEAAN同态库,选择最老的一版:地址,最新版在:位置,HEAAN是CKKS17论文的主要代码复现. 版本 1.地址这是最老的一版,对应的论文CKKS17 2.在1的基础上,实现了boot ...
- 关于FFT的硬件实现
DFT在实际应用中非常重要,可以计算信号的频谱,功率谱和线性卷积等. 离散傅里叶变换的公式: 其中: 称为旋转因子. 由欧拉公式可得: 直接按DFT变换进行计算,当序列长度N很大时,计算量非常大,所 ...
- 基于verilog的FFT算法8点12位硬件实现
FFT算法8点12位硬件实现 (verilog) 1 一.功能描述: 1 二.设计结构: 2 三.设计模块介绍 3 1.蝶形运算(第一级) 3 2.矢量角度旋转(W) 4 3.CORDIC 结果处理 ...
- linux驱动程序设计的硬件基础,王明学learn
linux驱动程序设计的硬件基础(一) 本章讲总结学习linux设备程序设计的硬件基础. 一.处理器 1.1通用处理器 通用处理器(GPP)并不针对特定的应用领域进行体系结构和指令集的优化,它们具有一 ...
随机推荐
- 一些常用的UI控件
让你的 EditText 全部清除: 网址:https://github.com/MrFuFuFu/ClearEditText
- APUE学习笔记——5.9Binary I/O 二进制读写
概述: 二进制I/O,通常用来一次性读写结构化的数据块.(因为有时候我们要读写的数据中包含换行符或者Null字符,无法使用fgets或fputs,而使用getc和putc又需要花费太多 ...
- thinkphp3.1 多表联合查询代码
php代码 public function info(){ $where['openid']=session('openid');////用户session $db = M("pay&quo ...
- Android SDK无法更新解决办法
一.设置SDK代理 启动Android SDK Manager,选择菜单 Tools ->Options -> 代理地址: mirrors.opencas.cn 代理端口: 80 如下图: ...
- ubuntu16 tomcat7安装和编码修改
有直接通过命令安装的,但是我还是喜欢把文件下载下来,然后自己配置. 1,下载tomcat7二进制文件 https://tomcat.apache.org/download-70.cgi 2,解压tom ...
- ubuntu16 jdk7 install&config
1,下载jdk文件 http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521 ...
- 机器人操作系统(ROS)在线实训平台学习实验指南
机器人操作系统(ROS)在线学习指南 在高校开设ROS相关课程已经积累了一年多的经验,由于自动化类专业在课程安排中不同于计算机相关专业,通常没有Linux相关的课程基础,直接上手ROS较为 ...
- oracle数据库导入导出09192255
1.导入数据库(dmp) Linux系统中: 1. 用root账号登录服务器,然后切换到oracle账号(安装oracle数据库的时候用的用的账号) 2. 切换到oralce的安装目录下的bin下 3 ...
- Synchronized之一:基本使用
目录: <Java并发编程之三:volatile关键字解析 转载> <Synchronized之一:基本使用> Synchronized作用 1.Synchronized可以保 ...
- 使用vue与element组件
1.安装element npm i element-ui -S 2.引入 在main.js写入一下内容 import Vue from 'vue'; import ElementUI from 'el ...