本发明属于计算机技术领域,涉及一种用于FFT中旋转因子乘运算的操作数地址生成方法。

背景技术:

离散傅里叶变换(DFT)是数理方程、线性系统分析、信号处理与仿真等领域中的一种常见方法,特别是快速傅里叶变换(FFT)作为离散傅里叶变换的快速计算手段被提出之后,有力的促进了它在科学研究与工程应用中的普及与发展。基2-FFT算法是一种最常见的快速DFT计算方法,它将一个N点(N=2M,其中M为正整数)的DFT计算分为M级进行处理,每一级都包含N/2次形如的旋转因子乘运算和N/2次形如X(k)±G的蝶形运算,有效减少了DFT原始算法的计算量。以16点的FFT计算为例,如图1所示,基2-FFT算法将其分为四级,每一级中包含8次旋转因子乘运算和8次蝶形运算。

由于在科学与工程中的普遍应用,FFT算法在计算机上的实现研究也极为广泛,大多都围绕着如何高效快速的实现FFT计算来设计相应的软件和硬件。已经公开的专利“一种面向通用处理器的FFT计算地址产生方法(申请号:CN201210363936.1)”中发明了一种循环超界寻址方法,用于FFT计算中每一级的蝶形运算操作数地址的连续生成。对于N点FFT的蝶形运算,循环超界寻址可以表示为:

其中m=1,2,…,log2N,表示当前运算的级数;An表示第n个操作数的原始访存地址,An_new表示更新后的第n个操作数的访存地址。蝶形运算有两个源操作数,所以n=0和1,分别表示源操作数0和源操作数1。

假设N点基2-FFT的待计算数据存储在0起始地址处,计算第m级的蝶形运算首先需要在地址寄存器中设置好初始地址值(A0,A1)=(0,2m-1),地址增量寄存器设置为I0=I1=2m,循环界限寄存器设置为M0=M1=N。表1~表4分别表示了16点基2-FFT计算中,按照式(公式1)的循环超界寻址方式产生的第1~4级的蝶形操作数对的过程,表中产生超界时生成的地址用(*)标出。这里需要注意,当m为1时,表示对第1级执行蝶形运算,循环超界寻址方法虽然同样适用,但是需要事先对操作数进行位反排序,如图1和表1所示。实际操作中,一般在第1级不用循环超界寻址方式,而是直接用位反寻址进行蝶形运算,可以避免单独的排序过程,这里为了计算完整性,仍然将第1级用循环超界的寻址方式列出来。循环超界寻址方式能够按照计算前所设定的初始地址值,连续的产生后续操作数的访存地址,能有效解决FFT中蝶形运算的操作数寻址问题。循环超界寻址方式配合蝶形运算指令,能够实现高效的蝶形运算,提升对FFT的处理性能。而操作数地址生成问题一直都是FFT算法实现的难点,同时也是该算法中的研究热点。

技术实现要素:

本发明的目的在于提供一种用于FFT中旋转因子乘运算的操作数地址生成方法,解决FFT计算中旋转因子乘运算的操作数地址快速生成问题。

为达到上述目的,本发明采用如下技术方案:

一种用于FFT中旋转因子乘运算的操作数地址生成方法,源操作数X(k)采用循环超界寻址方式依次产生每个源操作数X(k)的访存地址,根据源操作数X(k)采用循环超界寻址方式是否产生超界作为旋转因子的地址生成的控制条件,实现旋转因子乘运算的每周期不间断访存地址生成。

进一步的,根据源操作数X(k)采用循环超界寻址方式是否产生超界作为旋转因子的地址生成的控制条件:如果X(k)的地址未产生超界,采用寄存器间接寻址方式产生访存地址;如果X(k)的地址产生了超界,那么采用前变址寻址方式产生访存地址。

进一步的,旋转因子的访存地址表示为:

其中Aw表示旋转因子的地址,Ak表示源操作数X(k)的地址。

进一步的,对于N点FFT计算的第m级,m=1,2,…,log2N,每读取N/2m个X(k)便会产生一次循环超界,此时旋转因子的地址增加值为N/2m;将源操作数X(k)的循环超界标志作为旋转因子地址变化的条件,将循环超界标志关联到旋转因子的访存通道中,便能实现旋转因子的地址变化控制,实现每周期连续的地址生成。

进一步的,将FFT每一级中的任意两次旋转因子乘运算和的计算先后顺序按照如下条件来进行排列:

如果n0≤n1且k0

其中n0和n1为旋转因子的指数,k0和k1为序列数据的编号。

与现有技术相比,本发明具有以下有益的技术效果:

本发明一种用于FFT中旋转因子乘运算的操作数地址生成方法,能实现FFT中旋转因子乘运算的操作数地址的连续生成,对FFT中旋转因子乘运算的计算顺序进行优化,将循环超界寻址方式应用于需要进行FFT变换的数据的地址生成,而将循环超界寻址方式是否产生超界作为旋转因子的地址生成的控制条件,用于控制旋转因子的地址变化,形成一种关联寻址方式,有效解决旋转因子的寻址问题,本发明可以应用于各种数字信号处理器的设计中,实现FFT旋转因子乘运算的操作数地址的连续生成,有效提升对FFT的处理性能,本发明公开的循环超界关联寻址方式进行N点FFT计算,只需要在每一级乘旋转因子之前设置好与寻址相关的寄存器,地址产生单元便可以根据循环超界加1寻址方式和关联寻址方式自主连续的寻址操作数,程序中配合复数乘法指令可以实现旋转因子乘的快速流水计算。

附图说明

图1为16点基2-FFT算法的分级计算流程。

图2为FFT中旋转因子乘运算的关联寻址示意图。

具体实施方式

下面结合附图对本发明做进一步详细描述:

本项发明将上述已有的循环超界寻址方式引入旋转因子乘运算中,提供一种用于FFT中旋转因子乘运算的操作数地址生成方法,有效解决了旋转因子乘运算的操作数地址连续生成问题:对FFT中旋转因子乘运算的计算顺序进行优化:

将FFT每一级中的任意两次旋转因子乘运算和的计算先后顺序按照如下条件来进行排列:

如果n0≤n1且k0

将循环超界寻址方式是否产生超界作为旋转因子的地址生成的控制条件:如果X(k)的地址未产生超界,那么采用寄存器间接寻址方式产生访存地址;如果X(k)的地址产生了超界,那么采用前变址寻址方式产生访存地址。

下面以16点基2-FFT的计算为例来说明本项发明内容:

结合图1,在16点基2-FFT的计算中,每一级中旋转因子乘运算的排列顺序如下:

第1级:

第2级:

第3级:

第4级:

从以上的列举可见,源操作数X(k)与旋转因子的获取地址不具备连续递增性,且每一级的地址增长规律也不尽相同。为此,本项发明针对上述复杂且无明显规律的寻址操作,对每一级中旋转因子乘运算的顺序进行优化调整。将每一级的任意两次旋转因子乘运算和的排列先后顺序按照如下两个条件来进行处理:

如果n0≤n1且k0

其中n0和n1为旋转因子的指数,k0和k1为序列数据的编号。

这样将每一级的乘法运算顺序进行重新优化排列如下:

第1级:

第2级:

第3级:

第4级:

分析以上旋转因子与源操作数X(k)的排列规律,可以发现:如果源操作数X(k)按照循环超界寻址,每发生一次超界,旋转因子地址就产生一次变化且同一级中的每次变化的地址增量相同,否则旋转因子地址保持不变;例如,第3级中源操作数X(k)的寻址产生了三次超界,每次超界时旋转因子产生一次访存变化,且地址增量都为2。

在一般情况下,对于N点FFT计算的第m级(m=1,2,…,log2N),每读取N/2m个X(k)便会产生一次循环超界,此时旋转因子的地址增加值为N/2m。如果将源操作数X(k)的循环超界标志作为旋转因子地址变化的条件,将其关联到旋转因子的访存通道中,便能实现旋转因子的地址变化控制,实现每周期连续的地址生成。计算的执行过程中,X(k)的地址未产生循环超界时,旋转因子地址维持不便,产生循环超界时,旋转因子地址发生一次变化。旋转因子的访存地址可以表示成:

其中Aw表示旋转因子的地址,Ak表示源操作数X(k)的地址。

通过这种方式可以实现两个操作数的连续的地址生成,加快旋转因子乘的计算;这种将一个操作数通道的寻址状态关联到另一个操作数通道的方法称为关联寻址方法。

本发明的具体实施方式中可将旋转因子作为源操作数1(Src1),将X(k)作为源操作数0(Src0),关联寻址的时候将Src1关联到Src0,如图2所示,当然也可以反过来,将Src0关联到Src1。这里结合图2,并以图1的16点基2-FFT计算为例来说明本发明的具体实施方式。

在16点基2-FFT中,计算第m级的乘旋转因子时,如果由Src0和Src1两个通道分别读取X(k)和进行复数乘法操作,如图1所示,那么Src0通道采用循环超界寻址模式实现X(k)的地址生成。这里所采用的循环超界寻址方式简记为:*AR0++(IR0)%1,它按照(公式1)的方法实现地址生成,循环超界后地址增量为1;AR0的初始值设置为X(2m-1)所在的地址(第一个复数乘法为),且地址偏移寄存器IR0=2m,超界限制寄存器IMR0=N(这里假设X(k)存储在0起始地址处,那么超界地址为N)。Src1采用关联寻址模式,按照(公式2)的方法实现的地址生成,这里所采用的关联寻址模式可简记为:*++AR1(IR1)|*AR1(Related Src0)。当Src0通道中X(k)的地址未产生超界时,采用“*AR1”的寄存器间接寻址方式,用AR1中的值作为地址去访存,且AR1中的值保持不变;X(k)的地址产生超界时,采用“*++AR1(IR1)”的前变址模式,即先将AR1的值更新为AR1+IR1,并用这个更新后的地址作为访存地址,实现了的地址变化。

表5~表8分别给出了16点基2-FFT的各级乘旋转因子的源操作数寻址过程。该例子中假设X(k)存储在0起始地址处,旋转因子存储在0x2000起始地址处,Src0的循环超界以及Src1的地址变化均用(*)符号进行了标注,并且Src0和Src1分别采用AR0和前变址的AR1new的地址进行访存。表5中的第1级旋转因子乘运算是针对位反排序后的操作数进行的,但是所乘的旋转因子均为常数1,所以第1级旋转因子乘运算可以省略而直接用位反寻址进行第1级的蝶形运算,此处为了保持计算的完整性,仍然列出了第1级中采用关联寻址实现旋转因子的乘运算。

本发明公开的循环超界关联寻址方式进行N点FFT计算,只需要在每一级乘旋转因子之前设置好与寻址相关的寄存器,地址产生单元便可以根据循环超界加1寻址方式和关联寻址方式自主连续的寻址操作数,程序中配合复数乘法指令可以实现旋转因子乘的快速流水计算。

表1 16点基2-FFT的第1级循环超界寻址的蝶形操作数对

表2 16点基2-FFT的第2级循环超界寻址的蝶形操作数对

表3 16点基2-FFT的第3级循环超界寻址的蝶形操作数对

表4 16点基2-FFT的第4级循环超界寻址的蝶形操作数对

表5 16点基2-FFT的第1级乘旋转因子的寻址过程

表6 16点基2-FFT的第2级乘旋转因子的寻址过程

表7 16点基2-FFT的第3级乘旋转因子的寻址过程

表8 16点基2-FFT的第4级乘旋转因子的寻址过程

matlab计算fft旋转因子表,一种用于FFT中旋转因子乘运算的操作数地址生成方法与流程...相关推荐

  1. 单载波频域均衡matlab,一种用于单载波频域均衡信道的低复杂度均衡方法与流程...

    本发明属于通信领域,具体是一种用于单载波频域均衡信道的低复杂度均衡方法. 背景技术: 在时变信道中,由于多径影响导致了严重的码间干扰(ISI),使得信号在传输过程中出现严重失真.因此需要采用均衡器来消 ...

  2. 4 种在 Linux 中检查默认网关或者路由器 IP 地址的方法

    你应该意识到你的默认网关是你的路由器的 IP 地址.一般这是在安装过程中由操作系统自动检测的,如果没有,你可能需要改变它. 如果你的系统不能 ping 自身,那么很可能是一个网关问题,你必须修复它.在 ...

  3. 【paper 1】2022 一种用于脑内出血血肿体积检测的鲁棒性深度学习分割方法-英文

    A Robust Deep Learning Segmentation Method for Hematoma Volumetric Detection in Intracerebral Hemorr ...

  4. catia制作物料明细_一种基于CATIA的国标标准物料清单的生成方法与流程

    本发明涉及一种物料清单的生成方法,尤其涉及一种基于CATIA的国标标准物料清单的生成方法. 背景技术: 众所周知,CATIA是法国达索公司的产品开发旗舰解决方案.作为PLM协同解决方案的一个重要组成部 ...

  5. 一种用于解决银行代理产品交易热点账户的系统及方法

    一种用于解决银行代理产品交易热点账户的系统及方法  摘要 本发明公开了一种用于解决银行代理产品交易热点账户的系统,该系统包括业务受理终端.系统主机.前置处理装置和第三方单位系统,其中:业务受理终端通过 ...

  6. 蓄冷罐布水器仿真matlab,用于蓄冷罐的布水器及开孔与安装方法与流程

    本发明涉及一种蓄冷罐,更具体的说,涉及一种用于蓄冷罐的布水器及布水器的开孔与安装方法. 背景技术: 蓄冷罐作为一种水蓄冷的大型储水容器,广泛应用于数据中心领域,作为数据中心的后备冷源.蓄冷罐的使用是在 ...

  7. 一种基于Voronoi图的曲边化随机颗粒模型生成方法

    一种基于Voronoi图的曲边化随机颗粒模型生成方法 简介  在数值模拟中,除了对物体的整体模拟,还要对物体的细观层面进行模拟,以探讨裂纹的生产.扩展:或者细观层面的变化情况.特别是对于某些颗粒增强型 ...

  8. group lasso matlab,一种利用肠道微生物菌群评价生猪个体蛋白营养状态的方法与流程...

    本发明涉及一种评价生猪个体蛋白营养状态的方法,特别涉及一种利用肠道微生物菌群评价生猪个体蛋白营养状态的方法. 背景技术: 近年来,饲料原料的紧缺,人畜争粮状况加剧:超过营养需求的饲料供应也会加重畜禽养 ...

  9. 快速谱峭度matlab,一种基于快速谱峭度分析的泵潜在空化故障检测方法与流程

    本发明属于信号处理领域,尤其涉及一种基于快速谱峭度分析泵的实时状态并且检测其潜在空化故障的方法. 背景技术: 高性能离心泵在当今社会上广泛应用和需求巨大.由于工作在高压高速等复杂条件下,离心泵的空化故 ...

最新文章

  1. 使用OpenCV搭建违章停车检测系统
  2. Java中如何实现j并发更新数据库同一条数据
  3. TCP丢包检测技术详解
  4. win32 GDI 画图 防止闪烁
  5. 为什么仿宋字体打印出楷体_win7缺少仿宋_GB2312和楷体_GB2312字体,造成word字体显示不正常...
  6. office365 自定义_IT外包观察,足不出户,Office365打造教学新体验?
  7. netty4 收不到服务器响应的数据_Netty模拟redis服务器
  8. Qt与MySQL的连接与基本操作
  9. 阿里云AIoT造物秘籍●开放下载
  10. 在小米R1D 中,为 Advanced Tomato 添加菜单
  11. mysql relay log_mysql binlog和relay log日志如何清除
  12. 2020上传透明头像易语言源码 附成品
  13. 五个强盗分金币的问题分析(博弈论)
  14. Java乐谱_如何在java中创建一个简单但结构良好的乐谱表(乐谱)?
  15. React解密:React高阶组件是什么?
  16. 系统提示“内存不足”的九大原因及解决方法
  17. html怎么设置竖线符号,竖线符号怎么打【运用方式】
  18. 怎么恢复佳能相机SD卡CF卡误删除格式化丢失MP4视频
  19. oracle 10g oem地址,Oracle 10g: The Top 20 Features for DBA-OEM
  20. DHCP服务器原理及搭建过程

热门文章

  1. 项目1: 波士顿房价预测
  2. 在Ubuntu Server 22.04 LTS 上部署BT面板和Seatable
  3. 火影忍者忍者先锋维修服务器,《火影:忍者先锋》支持简体中文 PC配置公布
  4. 生产管理软件实施流程_生产管理软件实施过程会遇到哪些问题?
  5. PowerDesgier让id自增及破解、下载安装注意事项
  6. 云服务器怎么和自己的电脑传文件,电脑和云服务器之间怎么传文件
  7. 免越狱!利用filza修改系统运营商名称!
  8. Win系统 - 罗技 G604 鼠标蓝灯闪烁、失灵解决方案
  9. java项目免费授权方案 代码加密 离线授权 模块授权
  10. MapReduce的学习心得