简介

快速傅里叶变换(Fast Fourier Transform)最为一种高效的算法,被广泛的用于信号处理与数据分析等领域。对于设计工程师来讲,自己动手采样可编程语言来实现一个FFT/IFFT模块,不知要花费多少心血。所幸的是Altera和Xilinx两大巨头都提供了自己FFT核,本文将详细讲解如何使用Altera的FFT核。

Altera FFT核

FFT IP core的总体架构分析:FFT分为fixed transform size architectture 和 variable streaming architecture。variable streaming architecture下又分为radix 2 和radix 4两种运算结构,而内部数据运算表达方式可分为fixed point ,floating point 和block floating point三种。

IO数据流支持流(Streaming)、可变流(Variable Streaming)、缓存突发(Buffered Burst)和突发(Burst)等I/O数据流结构。流FFT结构可以连续处理输入的数据和输出连续的复数数据流,不需要在FFT快内或模块外暂停数据流。突发缓存结构和突发结构的FFT比流FFT结构所需资源更少,但代价是平均块吞吐量下降。

指定FFT复数乘法的实现结构,可包括4 Mults/2 Adders 和 3 Mults/5 Adders。前者使用DSP块结构最小化逻辑资源的使用,但最大化DSP块的使用,这种结构能够提高FFT的最大频率;后者要求的DSP块较少,但需要更多的逻辑资源,得到的FFT的最大频率也相对低些。如果勾选Implement appropriate logic function in RAM则表示使用内嵌的RAM块实现内部逻辑功能,例如FFT中的抽头延迟线,该选项可以减少逻辑资源的使用。

Quartus II提供GUI界面来配置参数,按照以下步骤操作,进可完成功能仿真。

  1. 建立工程,根据GUI界面完成FFT核配置参数
  2. 设置好仿真工具(在Quartus工具栏Options下选择EDA Tools Options),编译。
  3. 执行工程目录下的Tcl文件,然后启动仿真

当完成功能仿真后,会发现得到数据和Matlab仿真的结果相差比较大,因为功能仿真的结果需要按照公式output∗2−exponent进行转换(注意:公式1/N∗output∗2−exponent对应于IFFT),才可以得到正确的结果。

案例

实际工程中,需要我们编写逻辑来控制FFT核。IFFT是OFDM基带发送部分的关键,下面给出怎么实现IFFT变换。配置参数为:点数N为64、流水线结构、输入输出位宽16bit、输入输出为自然顺序、Quad Output(4 输出)。

上图是流水线结构的输入时序。在reset信号无效后,将sink_valide置为高有效,表示输入端至少有N个复数据样点可以输入。当sink_ready(FFT核输出的)信号为高电平,表明有能力接收这些输入数据。同时将sink_sop(start)信号置为高电平,表示输入一帧数据(64)的开始,当最后一个数据输入后,sink_eop 被置为高电平 ,表示完成这一帧数据的传输。一定要控制好sink_valid、sink_sop、sink_eop三个信号的时序,否则会导致没有输出或者输出数据出错(笔者曾遇到过)。下图为功能仿真波形图:

参考资料FFT MegaCore Function User Guide
工程代码

Altera FFT核使用详解的更多相关文章

  1. 关于altera的fft核使用问题记录

    altera的fft核使用比较特别,今天我做了一下仿真,发现一些问题,现做记录如下: 1,ip配置 parameters选项卡主要是fft变换的长度和数据长度,旋转因子长度,需要注意的是“Twiddl ...

  2. stm32F103RCT6使用FFT运算分析波形详解(非常新手)

    最近学校电赛院队招新,出的招新题就是低频示波器的.之前一直没有弄懂FFT,借着这次机会实现了一下. FFT原理详解 FFT,就是快速傅里叶变换,这个操作能够将时域信号转化成频域信号,然后对信号进行分析 ...

  3. [Spark內核] 第41课:Checkpoint彻底解密:Checkpoint的运行原理和源码实现彻底详解

    本课主题 Checkpoint 运行原理图 Checkpoint 源码解析 引言 Checkpoint 到底是什么和需要用 Checkpoint 解决什么问题: Spark 在生产环境下经常会面临 T ...

  4. EasyPR--开发详解(6)SVM开发详解

    在前面的几篇文章中,我们介绍了EasyPR中车牌定位模块的相关内容.本文开始分析车牌定位模块后续步骤的车牌判断模块.车牌判断模块是EasyPR中的基于机器学习模型的一个模块,这个模型就是作者前文中从机 ...

  5. Nginx配置文件nginx.conf中文详解(转)

    ######Nginx配置文件nginx.conf中文详解##### #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数. worker_ ...

  6. mina框架详解

     转:http://blog.csdn.net/w13770269691/article/details/8614584 mina框架详解 分类: web2013-02-26 17:13 12651人 ...

  7. Nginx配置文件详解

    Nginx是一款面向性能设计的HTTP服务器,相较于Apache.lighttpd具有占有内存少,稳定性高等优势. ######Nginx配置文件nginx.conf中文详解##### #定义Ngin ...

  8. Nginx中文详解、配置部署及高并发优化

      一.Nginx常用命令: 1. 启动 Nginx          /usr/local/nginx/sbin/nginxpoechant@ubuntu:sudo ./sbin/nginx2. 停 ...

  9. MYSQL服务器my.cnf配置文档详解

    MYSQL服务器my.cnf配置文档详解 硬件:内存16G [client] port = 3306 socket = /data/3306/mysql.sock [mysql] no-auto-re ...

随机推荐

  1. LSI SAS 3008 Web配置操作

    配置 LSI SAS 3008 介绍LSISAS3008的配置操作. 4.1 登录CU界面 介绍登录LSISAS3008的CU配置界面的方法. 4.2 创建RAID 介绍在LSISAS3008扣卡上创 ...

  2. Unity中限制轴向移动范围Mathf.Clamp

    Mathf.Clamp   在游戏中,为了限制玩家的某一轴向的移动不超过一定的范围,可以用Mathf.Clamp来解决 Mathf.Clamp(float value,float min,float ...

  3. Vue.js 源码实现

    目录 Vue.js 代码实现 1. 步骤一 2. 步骤二 3.步骤三 Vue.js 工作机制 初始化 编译 响应式 虚拟dom 更新视图 编译 Vue.js 代码实现 检验学习效果的最好方法就是自己造 ...

  4. IIS中使用子目录文件作为默认文档(Default Document)替代重定向

    以前一直以为IIS应用程序的默认文档只能设置根目录下的文件,像index.html,default.aspx等,后来经同事指点,原来子目录或者子应用程序下的文件也可以添加到根应用程序的默认文档列表中. ...

  5. 清北刷题冲刺 10-30 a.m

    星空 #include<iostream> #include<cstdio> using namespace std; int n,m; int main(){ freopen ...

  6. 洛谷P1349 广义斐波那契数列

    传送门 话说谁能告诉我矩阵怎么用latex表示…… 差不多就这样 //minamoto #include<iostream> #include<cstdio> #include ...

  7. Travelling (三进制+状压dp)

    题目链接 #include <bits/stdc++.h> using namespace std; typedef long long ll; inline ll read(){ ,f= ...

  8. sql 查找重复数据,并且重复数据有子集

    SELECT A.* FROM comm_department A INNER JOIN ( select path,count(*) as count from comm_department gr ...

  9. 使用Collectd + InfluxDB + Grafana进行JMX监控

    我们已经看到使用Collectd监控CPU /内存利用率(本文).但它没有提供所有信息来确定性能问题的瓶颈.在本文中,我们将使用Collectd Java插件来使用其JMX技术来监视和管理Java虚拟 ...

  10. 微信小程序在sublime开发代码高亮显示

    问题:xxx.wxml 和xxx.wxss在subline中不高亮不显示 如下图,开发起来非常的不方便 解决办法:右下角将Plain Text改为Html,问题解决,可高亮,提高代码可读性,可提示,提 ...