Vivado中快速傅里叶变换IP配置及应用

快速傅里叶变换 (fast fourier transform,fft), 即利用计算机计算离散傅里叶变换(dft)的高效、快速计算方法的统称,简称fft。dft是实现了从频域(频域分析往往比时域分析更优越)对信号与系统进行分析。然而,随着序列长度的增加,计算量也显著增加,对于计算机而言,处理时间就越长,消耗的资源也就越多。
忘了什么是傅里叶变换的同学,赶紧拿出《信号与系统》翻一下。实在没书,找度娘。对于连续时间信号f(t),定义式如下:
傅里叶变换:
傅里叶逆变换:
信号处理领域大名鼎鼎的傅里叶变换,正式由傅里叶提出的,不得不说,实在太伟大了,顶礼膜拜。
在信号处理中,由于计算机通常只能处理数字信号,因此通过对连续信号进行采样离散化,进而有了离散傅里叶变换。
话不多说,直入主题,首先把dft公式搬出来:
原信号x(t)的采样信号x[n]也可以用x[k]来表示:
1965年,库利和图基提出了快速傅里叶变换(fft)算法,采用这种算法能使计算机计算dft所需要的乘法次数大为减少,特别是被变换的抽样点数n越多,fft算法计算量的节省就越显著。
常用计算方法:
时间抽取算法:令序列的长度为n(2的幂),可以将时域序列x(n)分解为两部分,一是偶数部分x(2n),另一部分是计数部分x(2n+1),于是信号序列x(n)的离散傅里叶变换可以用两个n/2抽样点的离散傅里叶变换来辨识核计算。
频率抽取算法:按照频率吧抽取的fft算法是将频域信号序列x(k)分解为奇偶两部分,但算法仍然是由时域信号序列开始逐级计算,同样把n点分成n/2点计算fft。
02
fft原理
fft是dft的快速算法,可以将一个信号从时域变换到频域。很多时候信号在时域很难进行信号特征分析,变换到频域后,就很容易看出信号的频率、功率、相位等特征信息。更多详细的解释,可移步看这里深入浅出的讲解傅里叶变换(真正的通俗易懂)或者在csdn中阅读深入浅出解释fft系列(非公众号文章,超链接失败,抱歉,可去csdn看原文博客),讲得比较清楚透彻,不愧是10年码龄的巨佬。在这里我就不再赘述了。
03
fft ip core使用
概述
以xilinx vivado设计套件中提供的fft ip为例,简要说明如何进行fft ip配置和设计。
fft core用于计算n点的dft或idft,n=2m,m=3~16。对于计算fft,有三种算术选项用于计算fft:
全精度无缩放算法
定点缩放,提供缩放表
块浮点(运行时调整缩放)
对于n点大小,可对正向/逆向变换、缩放表循环前缀进行配置。
提供四种可选架构:
pipelined streaming i/o
radix-4 burst i/o
radix-2 burst i/o
radix-2 lite burst i/o
端口描述
fft ip core的端口如图1所示,对端口的描述,参考产品指南pg-109-xfft.pdf。
图1 fft端口
fft ip配置
举个栗子:单通道,512点,radix-2,burst i/o,定点数,缩放,取整模式truncation,输入数据位宽16bit,相位因子位宽16,自然序输出,无循环前缀。
在vivado中创建工程后,在工程管理器下的ip catalog中选择并配置fft ip,在ip配置向导的指引下,依次进行相关参数的配置,如图2所示。配置通道数,变换长度,实现架构,数据格式,缩放,取整模式,数据呼出顺序,是否插入循环前缀(cp)等。
图2 fft ip配置
在向导视图左侧,可查看ip端口框图,实现详情以及时延信息,如图3所示。这里需要注意输入输出数据的格式以及配置通道数据的格式。
图3 查看ip实现信息
配置完成后,输出生成定制fft ip,最后再将其实例化到工程模块中。
axi-stream注意事项
该ip的端口采用了标准的axi-stream协议,数据传输基本握手,如图4所示。
图4 axi-stream信道数据传输
axi信道规则
所有的tdata和tuser字段被打包成小端格式,也就是一个子字段的第0位与tdata或tuser的第0位对齐。
字段不包括在tdata或tuser中,除非以这种方式配置了核它需要字段出现。例如,如果核心配置为有一个固定的点大小,没有位分配给指定点大小的nfft字段。
所有的tdata和tuser矢量都是8bit的整数倍。
配置通道
配置通道端口信号如表1所示。
表1 配置通道端口信号
配置通道(s_axis_config)接口是axi通道,tdata字段接口定义如下表2所示,所有需要paded的字段如果未达到8bit边界,则需要扩展到8bit边界。扩展的bit可以未任意值,设计为常量值可节省器件资源。
表2 tdata字段接口定义
tdata数据格式如图5所示。
图5 config_tdata数据据格式
其中,nfft设置情况,如表3所示。需要注意的是,如果选项runtime configurable transform length被选后,变换点大小才可以在配置通道的nfft字段进行设置。
表3 nfft设置
正反变换及缩放
fwd_inv=1时,正向变换;fwd_inv=0时,逆向变换。
对于fft/ifft各级缩放,在不同的实现架构中,缩放因子的设置有所不同。可参考表2 或者产品指南:pg109-xfft.pdf文档ch.4操作理论的run time transform configuration部分。
循环前缀(cp)
将输出结果的尾部复制到头部,输出顺序要选择自然序。插入循环前缀,可逐帧设置,不用打断帧处理进程。
补充:定点数
在fpga处理过程中,常常要对浮点数进行定点化处理。matlab中提供了一个非常方便的定点化函数fi。
fi(data,s,w,f) 各参数的定义:
s:signed or unsigned 标志;
signed: 包含符号位;
f:定点小数精度。
例如:在命令行输入fi(pi,1,16,13),回车,如图6所示。
图6 浮点数定点
查看定点后的数据, 命令行输入ans.hex,显示十六进制数6488,如图7所示。
图7 定点16进制数据
命令行输入ans.dec,显示十进制数,如图8所示。
图8 定点10进制数据
在fpga处理定点乘法,可用乘法器ip—multiplier,如图9所示。
图9 乘法器ip
04
fft模块设计demo
以调用fft,并通过rom预存所需数据进行一个简单的demo设计。
利用fft ip,搭建工程。分别使用两个rom存储dmrs0的i、q两路数据,外部主机断言m_data_tready拉高时,准备开始从rom读取数据,同时配置fft。ifft计算输出通过乘以一个系数,使其幅度值接近于1。设计框图如图10所示。
图10 设计框图
以dmrs0信号5m带宽300点(中间补零,至512点)作ifft为例,创建工程,编写rtl代码。针对配置通道的数据配置(如scale_sch、fwd/inv、cp_len、nfft),假设基于radix-2架构作ifft,不加循环前缀,不更改nfft点数,配置情况如下。
s_axis_config_tdata = 23‘b0000_0000_0000_0000_0000_0000;
注意,高msb五位做了填充,使得tdata的位宽是8的整数倍。
fpga仿真结果如图11所示。
图11 fpga工程仿真
matlab进行ifft变换,并进行适当的缩放,同时将fpga仿真的结果导入,计算各自的幅度,并绘于同一图中,如图12所示。
图12 幅度值对比
计算各自的相位角弧度,如图13所示。
图13 相位弧度对比
通过对比分析可知,matlab仿真与fpga实现结果基本一致。
在lte、5g等无线通信中,ifft和fft变换是一个绕不过的话题。即便5g在探索非正交多址接入技术(noma),因主动引入干扰,接收机设计复杂度急剧上升,能否被采用不得而知。

420上市!2020款哈弗F5潮智来袭
智慧医疗的落地将离我们越来越近了
机器学习如何帮助解决大数据转换及管理问题?
电压模式和电流模式控制系统的比较电路图
耳机中的振动的是如何产生的
Vivado中快速傅里叶变换IP配置及应用
NASA不确定波音是否需要进行另一次试飞
苹果将iPhone12 Pro的产量提高200万部
人工智能的发展正在带来人类历史上的第四轮工业革命
慧示J1 Pro和当贝X3哪个好,二者之间有何差异
魅蓝u10和u20哪个好?魅蓝u10和u20这两部手机超帅气
五轴加工中3+2定位与5轴联动的区别是什么
无人机“对组织的信息构成潜在风险”?大疆方面的回应来了
如何选择合适的PCBA加工厂
揭秘云计算技术的现状及特点
RK3566搭载Android11加速度和陀螺仪调试
本振和RF互换了有没有影响?
手机信号放大器应该怎么选,这三大点很重要
多媒体会议室解决方案
菲律宾SMART部署爱立信天线内置射频单元