CN111368250A - 基于傅里叶变换/逆变换的数据处理系统、方法及设备 - Google Patents
基于傅里叶变换/逆变换的数据处理系统、方法及设备 Download PDFInfo
- Publication number
- CN111368250A CN111368250A CN201811600858.6A CN201811600858A CN111368250A CN 111368250 A CN111368250 A CN 111368250A CN 201811600858 A CN201811600858 A CN 201811600858A CN 111368250 A CN111368250 A CN 111368250A
- Authority
- CN
- China
- Prior art keywords
- storage
- data
- same
- buffer area
- writing
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/14—Fourier, Walsh or analogous domain transformations, e.g. Laplace, Hilbert, Karhunen-Loeve, transforms
- G06F17/141—Discrete Fourier transforms
- G06F17/142—Fast Fourier transforms, e.g. using a Cooley-Tukey type algorithm
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Theoretical Computer Science (AREA)
- Discrete Mathematics (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Complex Calculations (AREA)
Abstract
本发明公开了基于傅里叶变换/逆变换的数据处理系统、方法及设备,本发明方法包括:所述数据为需进行傅里叶变换的数据,在从缓冲区的存储阵列读取数据时,同时用一组时钟读取存储阵列的每列的所有存储块相同存储位置的数据;在向缓冲区的存储阵列写入数据时,同时用一组时钟向存储阵列的第奇数行/偶数行的所有存储块相同存储位置写入数据;所述缓存区包括输入缓冲区、第一缓冲区、第二缓冲区,所述缓冲区的存储结构相同,包括N个相同存储块的存储阵列,所述存储阵列的行数与列数相等,每个存储块包括M个存储位置,每个存储位置包括n个点的数据,所述M、N、n为正整数,该方法将数据离散存储,简便易行,节省空间,且效率高。
Description
技术领域
本发明涉及数据处理技术领域,特别涉及基于傅里叶变换/逆变换的数据处理系统、方法及设备。
背景技术
傅里叶变换/逆变换FFT/IFFT变换是现代信号处理或数据处理中的一种重要手段。在信号或数据处理过程中,经常会遇到2048个点的数据的FFT/IFFT的变换,变换的具体实现过程方式多种多样。
直接变换法同时对所有点的数据实行变换操作,变换效率最快,缺点是实现的模块所需功耗太大,资源消耗也大,随机存取存储器RAM分块及读写方法实现容易。
蝶形核变换法是根据FFT/IFFT变换原理采用一个基准蝶形核来完成,如一个2048点的变换采用基2或基4的核,不断地循环调用,直至所有2048点全部完成变换。蝶形核变换法实现模块简单,但效率很低,一个2048点在基2核下运算需要循环(2048/2)*log2(2048)=12288次,耗时较长,同样RAM分块及读写方法实现容易;
将多个蝶形核并行使用,并级联起来形成流水线,既可以加快运算效率,模块实现也不是太复杂,功耗也低。但是由于FFT/IFFT变换引擎内各变换级之间的数据存在相应的依赖关系,因此,必须按照依赖关系来索引前一级的数据才能满足后一级变换对数据索引的要求。
因此缺少一种适用于多个蝶形核并行使用,并级联起来形成流水线的数据变换方法RAM分块架构以及高效的读写方法,使得引擎高效运作。
综上所述,现有的基于傅里叶变换/逆变换进行数据处理时,存在直接变换法所需功耗太大,资源消耗大,蝶形核变换法的效率低耗时长,使用混合蝶形核变换法能降低功耗提高效率,但无合适的存储架构以及高效的数据读写方法的问题。
发明内容
本发明提供一种基于傅里叶变换/逆变换的数据处理系统、方法及设备,用以解决现有技术中,基于傅里叶变换/逆变换进行数据处理时,存在直接变换法所需功耗太大,资源消耗大,蝶形核变换法的效率低耗时长,使用混合蝶形核变换法能降低功耗提高效率,但无合适的存储架构以及高效的数据读写方法的问题。
第一方面,本发明提供基于傅里叶变换/逆变换的数据处理系统,该系统包括输入缓冲区、第一缓冲区、第二缓冲区、引擎模块,所述输入缓冲区分别与第一缓冲区、第二缓冲区和引擎模块连接,其中:
所述输入缓冲区,用于存储需进行傅里叶变换/逆变换的数据和所述引擎模块写入的数据;
所述引擎模块,用于从输入缓冲区读取数据基于混合蝶形核经蝶形运算后写入到第一缓冲区,从第一缓冲区读取数据基于混合蝶形核经蝶形运算后写入到第二缓冲区,从第二缓冲区读取数据基于混合蝶形核经蝶形运算后写入到输入缓冲区完成数据处理;
所述输入缓冲区、第一缓冲区、第二缓冲区的存储结构相同,包括N个存储块的存储阵列,存储阵列的行数与列数相等,每个存储块包括M个存储位置,每个存储位置包括n个点的数据,所述M、N、n为正整数。
上述方法中,采用行数与列数相等的相同的存储阵列构建所述输入缓冲区、第一缓冲区、第二缓冲区,完成需进行傅里叶变换/逆变换的数据存储和缓存的过程,简便易行,且将引擎模块变换完成的数据再次写入输入缓冲区,实现输入缓冲区的共享,节省资源和空间。
在一种可能的实现方式中,所述需进行傅里叶变换/逆变换的数据为2048点的数据,所述N为16,M为32,n为4。
上述方法中,当数据为2048个点时,仅需要三个四行四列的存储阵列即可完成所述数据的傅里叶变换/逆变换过程中的缓存以及最后的存储,节省资源。
第二方面,本发明提供基于傅里叶变换/逆变换的数据处理方法,该方法包括:
将需进行傅里叶变换/逆变换的数据写入到输入缓冲区;
从输入缓冲区读取数据基于混合蝶形核经蝶形运算后,将运算后的数据写入到第一缓冲区;
从第一缓冲区读取数据基于混合蝶形核经蝶形运算后,将运算后的数据写入到第二缓冲区;
从第二缓冲区读取数据基于混合蝶形核经蝶形运算后,将运算后的数据再次写入到输入缓冲区完成数据处理;
所述输入缓冲区、第一缓冲区、第二缓冲区的存储结构相同,包括N个相同存储块的存储阵列,所述存储阵列的行数与列数相等,每个存储块包括M个存储位置,每个存储位置包括n个点的数据,所述M、N、n为正整数。
上述方法中,采用行数与列数相等的相同的存储阵列构建所述输入缓冲区、第一缓冲区、第二缓冲区,完成需进行傅里叶变换/逆变换的数据散存储,按照傅里叶变换/逆变换(以下简称I/FFTe)时序要求读写分散存储的数据,简便易行,节省空间,达到快速高效完成流水线作业,且将引擎模块变换完成的数据再次写入输入缓冲区,实现输入缓冲区的共享,节省资源和空间。
在一种可能的实现方式中,所述需进行傅里叶变换/逆变换的数据为2048点的数据,所述N为16,M为32,n为4。
上述方法中,将16个同样大小的存储块构成一个四行四列的缓冲区,以与四核并行二级流水线的I/FFTe变换方法适应;将变换所需数据分散存储,按照I/FFTe变换时序要求读写分散存储的数据,并在最终变换后共享存储区域,节省空间,达到快速高效完成流水线作业,只需要较少时钟就可完成2048点的I/FFTe全部变换过程。
在一种可能的实现方式中,按照存储阵列的行数从上到下的顺序向输入缓冲区写入数据;
在向同一行的存储块写入数据时,按照存储阵列的列数从左到右的顺序,向同一行所有存储块中的同一存储位置q写入数据;
完成同一行所有存储块的同一存储位置q的数据写入时,按照存储阵列的列数从左到右的顺序,将同一行所有存储块的同一存储位置p写入数据,至写满同一行所有存储块中所有存储位置;其中同一存储块中存储位置p向后偏移一个存储位置得到所述存储位置q的下一个存储位置。
在一种可能的实现方式中,按照存储阵列的列数从左到右的顺序,将同一行所有存储块的同一存储位置q写入数据,包括:
将需进行傅里叶变换/逆变换的数据,将时域索引顺序连续的n个点的数据作为一个存储单元写入输入缓冲区中一个存储块的一个存储位置。
上述方法中,I/FFTe变换之前,按照数据的时域索引顺序将需要变换的数据以4个点为一个存储单位写入输入缓冲区,节省空间,所需时间较短。
在一种可能的实现方式中,所述数据为需进行傅里叶变换的数据,从第一缓冲区、第二缓冲区或输入缓冲区中读取数据,包括:
按照存储阵列的列数从左到右的顺序,从同一列所有存储块中同一组存储位置k1中读取数据,其中,采用不同的时钟按照存储位置从前到后的顺序读取每个存储块中的所述同一组存储位置k1中不同存储位置的数据,所述同一组存储位置k1位于同一存储块且每两个相邻的存储位置间隔固定数量个存储位置;
完成所有列中所有存储块中同一组存储位置k1的数据读取时,按照存储阵列的列数从左到右的顺序,从不同列的所有存储块中同一组存储位置k2中读取数据,至读取完所有存储块中所有存储位置中的数据,其中,同一组存储位置k1中每个存储位置向后偏移一个存储位置得到所述的同一组存储位置k2。
在一种可能的实现方式中,任一存储块中所述同一组存储位置k1包括存储位置从前到后的0/4处、1/4处、1/2处、3/4处的存储位置。
上述方法中,每个时钟读取一个存储单元的数据,一个存储单元包含n个点的数据,在读取数据时,同时从同列的所有存储块的同一组存储位置读取数据,一次读取组存储位置的数据,即一次读取个点的数据,使整个变换系统高效运转起来,提高了数据读取的效率。
在一种可能的实现方式中,所述数据为需进行傅里叶变换的数据,向第一缓冲区、第二缓冲区写入数据或再次向输入缓冲区中写入数据,包括:
按照先向所述存储阵列的第奇数行中存储块写入数据,再向第偶数行中存储块中写入数据的方式写入所述数据,其中按照如下方式向存储阵列的第奇数行/偶数行写入数据:
向同一组存储位置k3中写入数据,所述同一组存储位置k3包括第奇数行/偶数行的每个存储块中两个相邻的存储位置;
完成同一组存储位置k3的数据写入时,向下一组存储位置k4写入数据,其中,所述同一组存储位置k3中每个存储位置向后偏移两个存储位置得到所述同一组存储位置k4。
在一种可能的实现方式中,向同一组存储位置k3/k4写入数据,包括:
采用不同的时钟按照存储阵列的列数从左往右的顺序,每次向相邻两列中每个存储块的同一存储位置d1写入数据,完成所有列中每个存储块的同一存储位置d1的数据写入后,按照存储阵列的列数从左往右的顺序,每次向相邻两列中每个存储块的同一存储位置d2写入数据,其中,同一存储块的存储位置d1向后偏移一个存储位置得到同一存储块的存储位置d2。
上述方法中,每次向同一组存储位置中写入数据,同一组存储位置包括第奇数行/偶数行的每个存储块中两个相邻的存储位置,即一次向一组存储位置写入个点的数据,使整个变换系统高效运转起来,极大的提升了数据写入的效率,且符合数据变换的规律。
在一种可能的实现方式中,所述数据为需进行傅里叶逆变换的数据,从第一缓冲区、第二缓冲区或输入缓冲区中读取数据,包括:
按照先从所述存储阵列的第奇数行中存储块读取数据,再从第偶数行中存储块中读取数据的方式读取所述数据,其中按照如下方式从存储阵列的第奇数行/偶数行读取数据:
从同一组存储位置k3中读取数据,所述同一组存储位置k3包括第奇数行/偶数行的每个存储块中两个相邻的存储位置;
完成同一组存储位置k3的数据读取时,从下一组存储位置k4读取数据,其中,所述同一组存储位置k3中每个存储位置向后偏移两个存储位置得到所述同一组存储位置k4。
在一种可能的实现方式中,从同一组存储位置k3/k4读取数据,包括:
采用不同的时钟按照存储阵列的列数从左往右的顺序,每次从相邻两列中每个存储块的同一存储位置d1读取数据,完成所有列中每个存储块的同一存储位置d1的数据读取后,按照存储阵列的列数从左往右的顺序,每次从相邻两列中每个存储块的同一存储位置d2读取数据,其中,同一存储块的存储位置d1向后偏移一个存储位置得到同一存储块的存储位置d2。
上述方法中,每次从同一组存储位置中写入数据,同一组存储位置包括第奇数行/偶数行的每个存储块中两个相邻的存储位置,即一次读取一组存储位置包存的数据,即为个点的数据,使整个变换系统高效运转起来,极大的提升了数据读取的效率,且符合数据变换的规律。
在一种可能的实现方式中,所述数据为需进行傅里叶逆变换的数据,向第一缓冲区、第二缓冲区写入数据或向缓冲区中再次数据,包括:
按照存储阵列的列数从左到右的顺序,向同一列所有存储块中同一组存储位置k1中写入数据,其中,采用不同的时钟按照存储位置从前到后的顺序向每个存储块中的所述同一组存储位置k1中不同存储位置写入数据,所述同一组存储位置k1位于同一存储块且每两个相邻的存储位置间隔固定数量个存储位置;
完成所有列中所有存储块中同一组存储位置k1的数据写入时,按照存储阵列的列数从左到右的顺序,向不同列的所有存储块中同一组存储位置k2写入数据,至写满所有存储块中所有存储位置,其中,同一组存储位置k1中每个存储位置向后偏移一个存储位置得到所述的同一组存储位置k2。
在一种可能的实现方式中,任一存储块中所述同一组存储位置k1包括存储位置从前到后的0/4处、1/4处、1/2处、3/4处的存储位置。
第三方面,本发明提供基于傅里叶变换/逆变换的数据处理设备,该设备包括处理器和存储器,
其中,所述处理器用于:
将需进行傅里叶变换/逆变换的数据写入到输入缓冲区;
从输入缓冲区读取数据基于混合蝶形核经蝶形运算后,将运算后的数据写入到第一缓冲区;
从第一缓冲区读取数据基于混合蝶形核经蝶形运算后,将运算后的数据写入到第二缓冲区;
从第二缓冲区读取数据基于混合蝶形核经蝶形运算后,将运算后的数据再次写入到输入缓冲区完成数据处理;
所述输入缓冲区、第一缓冲区、第二缓冲区的存储结构相同,包括N个相同存储块的存储阵列,所述存储阵列的行数与列数相等,每个存储块包括M个存储位置,每个存储位置包括n个点的数据,所述M、N、n为正整数。
第四方面,本申请还提供一种计算机存储介质,其上存储有计算机程序,该程序被处理单元执行时实现第一方面所述方法的步骤。
另外,第三方面和第四方面中任一种实现方式所带来的技术效果可参见第一方面和第二方面中不同实现方式所带来的技术效果,此处不再赘述。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例一提供的基于傅里叶变换/逆变换的数据处理系统示意图;
图2A为本发明实施例二提供的基于傅里叶变换/逆变换的数据处理;
图2B为本发明实施例二提供的针对于进行傅里叶变换的数据,按存储阵列的行进行数据读取的示意图;
图2C为本发明实施例二提供的,针对于进行傅里叶变换的数据,向存储阵列的第奇数行的RAM写入数据的具体方法示意图;
图3为本发明实施例提供的基于傅里叶变换/逆变换的数据处理的设备示意图;
图4为本发明实施例提供的另一种傅里叶变换/逆变换的数据处理的装置示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部份实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
下面对文中出现的一些词语进行解释:
本发明实施例中术语“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
本发明实施例描述的应用场景是为了更加清楚的说明本发明实施例的技术方案,并不构成对于本发明实施例提供的技术方案的限定,本领域普通技术人员可知,随着新应用场景的出现,本发明实施例提供的技术方案对于类似的技术问题,同样适用。其中,在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。
FFT/IFFT变换是现代信号处理或数据处理中的一种重要手段,在信号或数据处理过程中,经常会遇到2048点的FFT/IFFT的变换,变换的具体实现过程方式多种多样;现有的基于FFT/IFFT的数据变换的方法中,直接变换法所需功耗太大,资源消耗大,蝶形核变换法的效率低耗时长。
基2蝶形核是最简单的蝶形核,硬件实现简单,耗资源少,但执行效率低;一个2048点在基2蝶形核下循环运算,需要(2048/2)*log2(2048)=12288个clock,耗时较长;
基4蝶形核执行效率要高,硬件实现也很简单;一个2048点在基4核下(第一级采用基2蝶形核)循环运算,需要(2048/2)+((1024/4)*log4(1024))*2=3584个clock,耗时还很长;
其它蝶形核效率会高一些,但其实现硬件要更为复杂一些。现代信号处理或数据处理中的FFT/IFFT变换需要能够快速低功耗的实现方式。对经常使用到的2048点FFT/IFFT的变换,相比较直接变换法和单蝶形核变换法而言,采用多核并行多级流水线处理方式更为合理;
将基2/基4蝶形核两者结合一下,设计一个混合蝶形核,需要时可实现基2(双基2点运算)或基4的蝶形运算,以混合蝶形核为基础,采用8个这样的蝶形核,构成四核并行二级流水线的FFT/IFFT(即I/FFTe)引擎,能够快速高效地完成2048点的变换运算。同样一个2048点在该I/FFTe引擎下循环运算,需要个clock,再加上流水线带来的几个clock延迟,总体耗时非常小。对于这样的四核并行二级流水线实现的I/FFTe引擎,要想让这个引擎高效地按照流水线运行起来,需要合理的设计RAM分块架构以及高效的读写方法,故而本方案实施例提供一种四核并行二级流水线实现的FFT/IFFT(以下简称I/FFTe)引擎的RAM分块架构以及高效的读写方法。
因此本发明提供一种基于傅里叶变换/逆变换的数据处理系统、方法及设备,用以解决上述场景中,使用混合蝶形核变换法能降低功耗提高效率,但无合适的存储架构以及高效的数据读写方法的问题。
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
针对上述场景,下面结合说明书附图对本发明实施例做进一步详细描述。
实施例一:
如图1所示,本实施例提供基于傅里叶变换/逆变换(以下简称为I/FFTe)的数据处理系统,该系统包括输入缓冲区10、第一缓冲区20、第二缓冲区30、引擎模块40(I/FFTe),上述输入缓冲区分别与第一缓冲区20、第二缓冲区30和引擎模块40连接,其中:
上述输入缓冲区10,用于存储需进行傅里叶变换/逆变换的数据和上述引擎模块写入的数据;
上述引擎模块40,用于从输入缓冲区10读取数据基于混合蝶形核经蝶形运算后写入到第一缓冲区20,从第一缓冲区10读取数据基于混合蝶形核经蝶形运算后写入到第二缓冲区30,从第二缓冲区30读取数据基于混合蝶形核经蝶形运算后写入到输入缓冲区10完成数据处理;
上述输入缓冲区10、第一缓冲区20、第二缓冲区30的存储结构相同,包括N个存储块的存储阵列,存储阵列的行数与列数相等,每个存储块包括M个存储位置,每个存储位置包括n个点的数据,上述M、N、n为正整数。
其中,图1中的旋转因子Rotate Factor用于数据进行傅里叶变换/逆变换时。
可选地,在实施中,上述需进行傅里叶变换/逆变换的数据为2048点的数据,上述N为16,M为32,n为4。
在本实施例中,如表1所示,将16个同样大小的存储块RAM块构成一个四行四列的缓冲区,每个RAM有32个存储位置,每个位置可存储4个点的数据,在表1中0行、1行、2行和3行均表示上述存储阵列的行;0列、1列、2列和3列均表示上述存储阵列的列,用Rab(其中a和b都为小于4的自然数)作为上述每个RAM的标识。
表1:
0列 | 1列 | 2列 | 3列 | |
0行 | R00 | R01 | R02 | R03 |
1行 | R10 | R11 | R12 | R13 |
2行 | R20 | R21 | R22 | R23 |
3行 | R30 | R31 | R32 | R33 |
在本实施例中,上述I/FFTe的引擎模块数据处理流程为:在I/FFTe工作下,将2048个点的数据进行傅里叶变换FFT或傅里叶逆变换IFFT共需要6个变换级,其中,在将数据进行第0、1变换级时,上述引擎模块从输入缓冲区10读取数据进行第0、1变换,将变换后的数据写入第一缓冲区20;在将数据进行2、3变换级时,上述引擎模块40从第一缓冲区20读取数据进行第2、3变换,将变换后的数据写入第二缓冲区30;在将数据进行第4、5变换级时,上述引擎模块从第二缓冲区30读取数据进行第4、5变换,将变换后的数据再次写入输入缓冲区40。I/FFTe与各缓冲区RAM的读写过程由控制单元Control Unit统一调度完成,其中图1中的旋转因子Rotate Factor用于引擎模块对数据进行傅里叶变换/逆变换时。
上述方法中,采用行数与列数相等的相同的存储阵列构建上述输入缓冲区10、第一缓冲区20、第二缓冲区30,完成需进行傅里叶变换/逆变换的数据存储和缓存的过程,简便易行,且将引擎模块变换完成的数据再次写入输入缓冲区,实现输入缓冲区的共享,节省资源和空间,当数据为2048个点时,仅需要三个四行四列的存储阵列即可完成上述数据的傅里叶变换/逆变换过程中的缓存以及最后的存储,节省资源。
实施例二:
基于实施例一提供的基于傅里叶变换/逆变换(以下简称为I/FFTe)的数据处理,本实施例提供一种傅里叶变换/逆变换的数据处理方法,如图2A所示,具体包括:
步骤201,将需进行傅里叶变换/逆变换的数据写入到输入缓冲区;
步骤202,从输入缓冲区读取数据基于混合蝶形核经蝶形运算后,将运算后的数据写入到第一缓冲区;
步骤203,从第一缓冲区读取数据基于混合蝶形核经蝶形运算后,将运算后的数据写入到第二缓冲区;
步骤204,从第二缓冲区读取数据基于混合蝶形核经蝶形运算后,将运算后的数据再次写入到输入缓冲区完成数据处理;
上述输入缓冲区、第一缓冲区、第二缓冲区的存储结构相同,包括N个相同存储块的存储阵列,上述存储阵列的行数与列数相等,每个存储块包括M个存储位置,每个存储位置包括n个点的数据,上述M、N、n为正整数。
上述方法中,采用行数与列数相等的相同的存储阵列构建上述输入缓冲区、第一缓冲区、第二缓冲区,完成需进行傅里叶变换/逆变换的数据散存储,按照傅里叶变换/逆变换(以下简称I/FFTe)时序要求读写分散存储的数据,简便易行,节省空间,达到快速高效完成流水线作业,且将引擎模块变换完成的数据再次写入输入缓冲区,实现输入缓冲区的共享,节省资源和空间。
可选地,上述数据基于混合蝶形核的运算可由I/FFTe的引擎模块完成,如图1所示的系统,上述I/FFTe的引擎模块40数据处理流程为:在I/FFTe工作下,将2048个点的数据进行傅里叶变换FFT或傅里叶逆变换IFFT共需要6个变换级,其中,在将数据进行第0、1变换级时,上述引擎模块40从输入缓冲区10读取数据进行第0、1变换,将变换后的数据写入第一缓冲区20;在将数据进行2、3变换级时,上述引擎模块40从第一缓冲区20读取数据进行第2、3变换,将变换后的数据写入第二缓冲区30;在将数据进行第4、5变换级时,上述引擎模块40从第二缓冲区30读取数据进行第4、5变换,将变换后的数据再次写入输入缓冲区10。I/FFTe与各缓冲区RAM的读写过程由控制单元Control Unit统一调度完成。
在一种可能的实现方式中,上述需进行傅里叶变换/逆变换的数据为2048点的数据,上述N为16,M为32,n为4,上述输入缓冲区、第一缓冲区、第二缓冲区的存储结构如图表1所示。
上述方法中,将16个同样大小的存储块构成一个四行四列的缓冲区,以与四核并行二级流水线的I/FFTe变换方法适应;将需进行傅里叶变换/逆变换(I/FFTe)的数据分散存储,按照I/FFTe变换时序要求读写分散存储的数据,并在最终变换后共享存储区域,节省空间,达到快速高效完成流水线作业,只需要个clock就可完成2048点的I/FFTe全部变换过程。
一、在一种可能的实现方式中,按照存储阵列的行数从上到下的顺序向输入缓冲区写入数据;
在向同一行的存储块写入数据时,按照存储阵列的列数从左到右的顺序,向同一行所有存储块中的同一存储位置q写入数据;
完成同一行所有存储块的同一存储位置q的数据写入时,按照存储阵列的列数从左到右的顺序,将同一行所有存储块的同一存储位置p写入数据,至写满同一行所有存储块中所有存储位置;其中同一存储块中存储位置p向后偏移一个存储位置得到上述存储位置q的下一个存储位置。
在一种可能的实现方式中,按照存储阵列的列数从左到右的顺序,将同一行所有存储块的同一存储位置q写入数据,包括:
将需进行傅里叶变换/逆变换的数据,将时域索引顺序连续的n个点的数据作为一个存储单元写入输入缓冲区中一个存储块的一个存储位置。
上述方法中,I/FFTe变换之前,按照数据的时域索引顺序将需要变换的数据以4个点为一个存储单位写入输入缓冲区,节省空间,所需时间较短。
在本实施例中,I/FFTe变换之前Input Buffer缓冲区的数据存储方式如下:
2048个点数据(每点数据位宽可以但不局限于为B比特,B为8bit或12bit或16bit),其时域顺序编号为0到2047,每个存储块Rab有32个存储位置,每个存储位置的数据位宽为4*B(bit),即每个Rab每个存储位置可以存储4个点的数据,在将数据写入输入缓冲区时,将4个点的数据作为一个存储单元,一次性写入一个Rab中的一个存储位置,同时用4个时钟clock做为一组时钟进行数据的写入工作,每个clock可以完成一个Rab的一个存储位置的数据写入工作,即一组时钟一次向4个Rab写入数据,即一组时钟一次向输入缓冲区写入(4×4×4=64)个点的数据,一个clock可以写入(4×4=16)个点的数据,将2048个数据存入输入缓冲区共需要(2048/16=128)个clock;
其中,向输入缓冲区存入数据的方式如下表2所示,表1中表格中的数字对应2048个点在时域索引的编号:
表2:
二、在一种可能的实现方式中,上述数据为需进行傅里叶变换的数据时:
(一)按照如下方式从第一缓冲区、第二缓冲区或输入缓冲区中读取数据,上述方式包括:
按照存储阵列的列数从左到右的顺序,从同一列所有存储块中同一组存储位置k1中读取数据,其中,采用不同的时钟按照存储位置从前到后的顺序读取每个存储块中的上述同一组存储位置k1中不同存储位置的数据,上述同一组存储位置k1位于同一存储块且每两个相邻的存储位置间隔固定数量个存储位置;
完成所有列中所有存储块中同一组存储位置k1的数据读取时,按照存储阵列的列数从左到右的顺序,从不同列的所有存储块中同一组存储位置k2中读取数据,至读取完所有存储块中所有存储位置中的数据,其中,同一组存储位置k1中每个存储位置向后偏移一个存储位置得到上述的同一组存储位置k2。
在一种可能的实现方式中,任一存储块中上述同一组存储位置k1包括存储位置从前到后的0/4处、1/4处、1/2处、3/4处的存储位置。
上述方法中,每个时钟读取一个存储单元的数据,一个存储单元包含n个点的数据,在读取数据时,同时从同列的所有存储块的同一组存储位置读取数据,一次读取组存储位置的数据,即一次读取个点的数据,使整个变换系统高效运转起来,提高了数据读取的效率。
即在本实施中,使用4个clock作为一组时钟,每次利用上述一组时钟读取上述存储阵列的同一列的所有RAM中的同一组存储位置,每个时钟可以并行读取存储阵列的同一列的所有RAM的同一个存储位置的数据;每一组时钟可以并行读取存储阵列的同一列的所有RAM的上述同一组存储位置的数据,这样,实际上每组四个时钟内读出的数据点数为:4×16=64个点的数据,并且上述四个时钟读出的四组存储位置的16个点数据正好满足I/FFTe引擎连续4个Clock运算所需要的索引数据。
此处,如图2B所示,将上述4个时钟标记为clock0、clock1、clock2、clock3,将每个存储块Rab的32个存储位置按照从前向后的顺序标记为小于32的自然数,则在本处上述方法中,利用同一组时钟第一次读取存储阵列的第一行(即行号为0)的存储数据时,如表3所示,包括:
如表4所示(在表3和表4中,假设记读取存储阵列的所有存储块的同一组存储位置的数据为读取数据的一轮,其中,用i作为读取数据的轮数,则i为小于8的自然数,上述8由32/4所得,其中,32为每个RAM的存储位置的总个数(记为M),4为一组时钟的时钟个数);
第i轮读取数据时:
clock0读取存储块R00、R01、R02和R03的第((0/4)*M+i)处(即第i个)存储位置上的数据,即对应表2中的数据0、512、1024、1536所在的位置,因4个点的数据为一个存储单元保存在一个存储位置处,即clock0一次读取的数据为(0、1、2、3)、(512、513、514、515)、(1024、1025、1026、1027)、(1536、1537、1537、1538);
表4:
clock1读取存储块R00、R01、R02和R03的第((1/4)*M+i)处(即第(8+i)个)的存储位置上的数据;
clock2读取存储块R00、R01、R02和R03的第((2/4)*M+i)处(即第(16+i)个)的存储位置上的数据;
clock3读取存储块R00、R01、R02和R03的第((3/4)*M+i)处(即第(24+i)个)的存储位置上的数据;
表3:
时钟 | 第i轮读取数据的存储位置(M为每个存储块的存储位置的总个数) |
clock0 | R00、R10、R20、R30的第((0/4)*M+i)处(即第i个)存储位置 |
clock1 | R00、R01、R02和R03的第((1/4)*M+i)处(即第(8+i)个)的存储位置 |
clock2 | R00、R01、R02和R03的第((2/4)*M+i)处(即第(16+i)个)的存储位置 |
clock3 | R00、R01、R02和R03的第((3/4)*M+i)处(即第(24+i)个)的存储位置 |
利用同一组时钟读取存储阵列的第一列的存储数据完成后,按上述方法依次读取第二、三、四(即列号分别为1、2、3)列的数据,在第1轮读取完所有列的同一组存储位置的数据后,下一轮(即第2轮)再次读取第一列数据时,需要将读取的同一组存储位置中的每个存储位置向后偏移一个存储位置,即下一轮第1次用上一轮(即第1轮)同一组时钟读取数据时包括:
clock0读取存储块R00、R01、R02和R03的第2(即第1个存储位置向后偏移一个的存储位置)个存储位置上的数据;
clock1读取存储块R00、R01、R02和R03的第9个(即第8个存储位置向后偏移一个的存储位置)的存储位置上的数据;
clock2读取存储块R00、R01、R02和R03的第17个(即第16个存储位置向后偏移一个的存储位置)的存储位置上的数据;
clock3读取存储块R00、R01、R02和R03的第25处(即第24个存储位置向后偏移一个的存储位置)的存储位置上的数据;
按照上述方法读取数据,直至读取出存储阵列的所有数据。
在读取数据的过程中,依次将上述4个clock从输入缓冲区读取的数据送到引擎模块,进行傅里叶变换的第0、1级数据变换;依次将上述4个clock从第一缓冲区读取的数据送到引擎模块,进行傅里叶变换的第2、3级数据变换;依次将上述4个clock从第二缓冲区读取的数据送到引擎模块,进行傅里叶变换的第4、5级数据变换;
(二)在一种可能的实现方式中,上述数据为需进行傅里叶变换的数据,从引擎模块将完成傅里叶变换的第0、1级数据向第一缓冲区写入、从引擎模块将完成傅里叶变换的第2、3级数据向第二缓冲区写入,或从引擎模块将完成傅里叶变换的第4、5级数据再次向输入缓冲区中写入时,包括:
按照先向上述存储阵列的第奇数行中存储块写入数据,再向第偶数行中存储块中写入数据的方式写入上述数据,其中按照如下方式向存储阵列的第奇数行/偶数行写入数据:
向同一组存储位置k3中写入数据,上述同一组存储位置k3包括第奇数行/偶数行的每个存储块中两个相邻的存储位置;
完成同一组存储位置k3的数据写入时,向下一组存储位置k4写入数据,其中,上述同一组存储位置k3中每个存储位置向后偏移两个存储位置得到上述同一组存储位置k4。
在一种可能的实现方式中,向同一组存储位置k3/k4写入数据,包括:
采用不同的时钟按照存储阵列的列数从左往右的顺序,每次向相邻两列中每个存储块的同一存储位置d1写入数据,完成所有列中每个存储块的同一存储位置d1的数据写入后,按照存储阵列的列数从左往右的顺序,每次向相邻两列中每个存储块的同一存储位置d2写入数据,其中,同一存储块的存储位置d1向后偏移一个存储位置得到同一存储块的存储位置d2。
上述方法中,每次向同一组存储位置中写入数据,同一组存储位置包括第奇数行/偶数行的每个存储块中两个相邻的存储位置,即一次向一组存储位置写入个点的数据,使整个变换系统高效运转起来,极大的提升了数据写入的效率,且符合数据变换的规律。
在本实施例中,上述存储阵列为4行4列的存储阵列,共16个RAM,在向存储阵列写入数据时,使用4个clock作为一组时钟,每次利用上述一组时钟向上述存储阵列的第奇数行(即0行和2行)/偶数行(即1行和3行)的所有RAM中的相同的存储位置写入数据,上述存储阵列的第奇数行/偶数行的所有RAM中的相同的存储位置作为上述一组存储位置;其中,每个时钟可以并行向第奇数行/偶数行的所有RAM的相邻两个存储位置写入数据;这样,实际上每组四个时钟内写入的数据点数为:2×4×8=64个点的数据,其中,上述2为每个RAM块的2个存储位置,4为一个存储位置存储的数据的点数,8为4行4列的存储阵列的第奇数行/偶数行的RAM的个数;
以下给出向上述存储阵列的第奇数行的RAM写入数据的具体方法,如图2C,此处,将上述4个时钟标记为clock0、clock1、clock2、clock3,将每个存储块Rab的32个存储位置按照从前向后的顺序标记为小于32的自然数,则在本处上述方法中,利用同一组时钟第一次写入存储阵列的第偶数行(即行号为0、2)的存储数据时,如表5所示,包括:
如表6所示(在表6和表5中,假设记写入存储阵列的第偶数行的所有存储块的相邻两个存储位置的数据为一次计数i,则i为小于16的自然数,其中,上述16由32/2所得,32为每个RAM的存储位置,2为每个RAM的2个相邻存储位置的个数;
第i次向存储阵列写入数据时:
clock0向存储块R00、R01、R21和R31的第(2*i)处(即第(2*i)个)存储位置写入数据,即对应表1中的数据0、4、1024、1028所在的位置,因4个点的数据为一个存储单元保存在一个存储位置处,即clock0第一次写入的数据为(0,256,512,768)、(1024,1280,1536,1792)、(128,640,1152,1664)、(384,896,1408,1920);
表6:
clock1向存储块R03、R04、R23和R24的第(2*i)处(即第2*i个)的存储位置写入数据;
clock2向存储块R01、R02、R21和R22的第(2*i+1)处(即第(2*i+1)个)的存储位置写入数据;
clock3向存储块R03、R04、R23和R24的第(2*i+1)处(即第(2*i+1)个)的存储位置上的数据;
表5:
时钟 | 第i次写入数据的存储位置 |
clock0 | R00、R01、R21和R31的第(2*i)处(即第(2*i)个)存储位置 |
clock1 | R03、R04、R23和R24的第(2*i)处(即第(2*i)个)的存储位置 |
clock2 | R01、R02、R21和R22的第(2*i+1)处(即第(2*i+1)个)的存储位置 |
clock3 | R03、R04、R23和R24的第(2*i+1)处(即第(2*i+1)个)的存储位置 |
在将上述存储阵列的第奇数行(即本实例中0行和2行)的RAM的所有存储位置写满数据后,按照同样的方法,向上述存储阵列的第偶数行(即本实例中1行和3行)的RAM写入数据。
三、在一种可能的实现方式中,上述数据为需进行傅里叶逆变换的数据时:
(一)按照如下方式从第一缓冲区、第二缓冲区或输入缓冲区中读取数据,上述方式包括:
按照先从上述存储阵列的第奇数行中存储块读取数据,再从第偶数行中存储块中读取数据的方式读取上述数据,其中按照如下方式从存储阵列的第奇数行/偶数行读取数据:
从同一组存储位置k3中读取数据,上述同一组存储位置k3包括第奇数行/偶数行的每个存储块中两个相邻的存储位置;
完成同一组存储位置k3的数据读取时,从下一组存储位置k4读取数据,其中,上述同一组存储位置k3中每个存储位置向后偏移两个存储位置得到上述同一组存储位置k4。
在一种可能的实现方式中,其特征在于,从同一组存储位置k3/k4读取数据,包括:
采用不同的时钟按照存储阵列的列数从左往右的顺序,每次从相邻两列中每个存储块的同一存储位置d1读取数据,完成所有列中每个存储块的同一存储位置d1的数据读取后,按照存储阵列的列数从左往右的顺序,每次从相邻两列中每个存储块的同一存储位置d2读取数据,其中,同一存储块的存储位置d1向后偏移一个存储位置得到同一存储块的存储位置d2。
上述方法中,每次从同一组存储位置中写入数据,同一组存储位置包括第奇数行/偶数行的每个存储块中两个相邻的存储位置,即一次读取一组存储位置包存的数据,即为个点的数据,使整个变换系统高效运转起来,极大的提升了数据读取的效率,且符合数据变换的规律。
具体的读取数据的方式类似进行傅里叶变换时写入数据的方式,此处不再重复叙述。
(二)上述数据为需进行傅里叶逆变换的数据,从引擎模块将完成傅里叶变换的第0、1级数据向第一缓冲区写入、从引擎模块将完成傅里叶变换的第2、3级数据向第二缓冲区写入,或从引擎模块将完成傅里叶变换的第4、5级数据再次向输入缓冲区中写入时,包括:
按照存储阵列的列数从左到右的顺序,向同一列所有存储块中同一组存储位置k1中写入数据,其中,采用不同的时钟按照存储位置从前到后的顺序向每个存储块中的上述同一组存储位置k1中不同存储位置写入数据,上述同一组存储位置k1位于同一存储块且每两个相邻的存储位置间隔固定数量个存储位置;
完成所有列中所有存储块中同一组存储位置k1的数据写入时,按照存储阵列的列数从左到右的顺序,向不同列的所有存储块中同一组存储位置k2写入数据,至写满所有存储块中所有存储位置,其中,同一组存储位置k1中每个存储位置向后偏移一个存储位置得到上述的同一组存储位置k2。
在一种可能的实现方式中,任一存储块中上述同一组存储位置k1包括存储位置从前到后的0/4处、1/4处、1/2处、3/4处的存储位置。
具体的写入数据的方式类似进行傅里叶变换时读取数据的方式,此处不再重复叙述。
实施例三:
如图3所示,基于相同的发明构思,本实施例中提供了基于傅里叶变换/逆变换的数据处理设备,该设备包括处理器301和存储器302,其中上述处理器用于:
将需进行傅里叶变换/逆变换的数据写入到输入缓冲区;
从输入缓冲区读取数据基于混合蝶形核经蝶形运算后,将运算后的数据写入到第一缓冲区;
从第一缓冲区读取数据基于混合蝶形核经蝶形运算后,将运算后的数据写入到第二缓冲区;
从第二缓冲区读取数据基于混合蝶形核经蝶形运算后,将运算后的数据再次写入到输入缓冲区完成数据处理;
上述输入缓冲区、第一缓冲区、第二缓冲区的存储结构相同,包括N个相同存储块的存储阵列,上述存储阵列的行数与列数相等,每个存储块包括M个存储位置,每个存储位置包括n个点的数据,上述M、N、n为正整数。
可选地,上述需进行傅里叶变换/逆变换的数据为2048点的数据,上述N为16,M为32,n为4。
上述处理器具体用于,按照存储阵列的行数从上到下的顺序向输入缓冲区写入数据;
在向同一行的存储块写入数据时,按照存储阵列的列数从左到右的顺序,向同一行所有存储块中的同一存储位置q写入数据;
完成同一行所有存储块的同一存储位置q的数据写入时,按照存储阵列的列数从左到右的顺序,将同一行所有存储块的同一存储位置p写入数据,至写满同一行所有存储块中所有存储位置;其中同一存储块中存储位置p向后偏移一个存储位置得到上述存储位置q的下一个存储位置。
上述处理器具体用于,按照存储阵列的列数从左到右的顺序,将同一行所有存储块的同一存储位置q写入数据,包括:
将需进行傅里叶变换/逆变换的数据,将时域索引顺序连续的n个点的数据作为一个存储单元写入输入缓冲区中一个存储块的一个存储位置。
上述处理器具体用于,上述数据为需进行傅里叶变换的数据,从第一缓冲区、第二缓冲区或输入缓冲区中读取数据,包括:
按照存储阵列的列数从左到右的顺序,从同一列所有存储块中同一组存储位置k1中读取数据,其中,采用不同的时钟按照存储位置从前到后的顺序读取每个存储块中的上述同一组存储位置k1中不同存储位置的数据,上述同一组存储位置k1位于同一存储块且每两个相邻的存储位置间隔固定数量个存储位置;
完成所有列中所有存储块中同一组存储位置k1的数据读取时,按照存储阵列的列数从左到右的顺序,从不同列的所有存储块中同一组存储位置k2中读取数据,至读取完所有存储块中所有存储位置中的数据,其中,同一组存储位置k1中每个存储位置向后偏移一个存储位置得到上述的同一组存储位置k2。
在一种可能的实现方式中,任一存储块中上述同一组存储位置k1包括存储位置从前到后的0/4处、1/4处、1/2处、3/4处的存储位置。
上述处理器具体用于,上述数据为需进行傅里叶变换的数据,向第一缓冲区、第二缓冲区写入数据或再次向输入缓冲区中写入数据,包括:
按照先向上述存储阵列的第奇数行中存储块写入数据,再向第偶数行中存储块中写入数据的方式写入上述数据,其中按照如下方式向存储阵列的第奇数行/偶数行写入数据:
向同一组存储位置k3中写入数据,上述同一组存储位置k3包括第奇数行/偶数行的每个存储块中两个相邻的存储位置;
完成同一组存储位置k3的数据写入时,向下一组存储位置k4写入数据,其中,上述同一组存储位置k3中每个存储位置向后偏移两个存储位置得到上述同一组存储位置k4。
上述处理器具体用于,向同一组存储位置k3/k4写入数据,包括:
采用不同的时钟按照存储阵列的列数从左往右的顺序,每次向相邻两列中每个存储块的同一存储位置d1写入数据,完成所有列中每个存储块的同一存储位置d1的数据写入后,按照存储阵列的列数从左往右的顺序,每次向相邻两列中每个存储块的同一存储位置d2写入数据,其中,同一存储块的存储位置d1向后偏移一个存储位置得到同一存储块的存储位置d2。
上述处理器具体用于,上述数据为需进行傅里叶逆变换的数据,从第一缓冲区、第二缓冲区或输入缓冲区中读取数据,包括:
按照先从上述存储阵列的第奇数行中存储块读取数据,再从第偶数行中存储块中读取数据的方式读取上述数据,其中按照如下方式从存储阵列的第奇数行/偶数行读取数据:
从同一组存储位置k3中读取数据,上述同一组存储位置k3包括第奇数行/偶数行的每个存储块中两个相邻的存储位置;
完成同一组存储位置k3的数据读取时,从下一组存储位置k4读取数据,其中,上述同一组存储位置k3中每个存储位置向后偏移两个存储位置得到上述同一组存储位置k4。
在一种可能的实现方式中,其特征在于,从同一组存储位置k3/k4读取数据,包括:
采用不同的时钟按照存储阵列的列数从左往右的顺序,每次从相邻两列中每个存储块的同一存储位置d1读取数据,完成所有列中每个存储块的同一存储位置d1的数据读取后,按照存储阵列的列数从左往右的顺序,每次从相邻两列中每个存储块的同一存储位置d2读取数据,其中,同一存储块的存储位置d1向后偏移一个存储位置得到同一存储块的存储位置d2。
上述处理器具体用于,上述数据为需进行傅里叶逆变换的数据,向第一缓冲区、第二缓冲区写入数据或向缓冲区中再次数据,包括:
按照存储阵列的列数从左到右的顺序,向同一列所有存储块中同一组存储位置k1中写入数据,其中,采用不同的时钟按照存储位置从前到后的顺序向每个存储块中的上述同一组存储位置k1中不同存储位置写入数据,上述同一组存储位置k1位于同一存储块且每两个相邻的存储位置间隔固定数量个存储位置;
完成所有列中所有存储块中同一组存储位置k1的数据写入时,按照存储阵列的列数从左到右的顺序,向不同列的所有存储块中同一组存储位置k2写入数据,至写满所有存储块中所有存储位置,其中,同一组存储位置k1中每个存储位置向后偏移一个存储位置得到上述的同一组存储位置k2。
在一种可能的实现方式中,任一存储块中上述同一组存储位置k1包括存储位置从前到后的0/4处、1/4处、1/2处、3/4处的存储位置。
实施例四:
如图4所示,基于相同的发明构思,本实施例中提供了基于傅里叶变换/逆变换的数据处理装置,该装置包括:
初始数据存储单元401,用于将需进行傅里叶变换/逆变换的数据写入到输入缓冲区;
第一数据读取单元402,用于从输入缓冲区读取数据基于混合蝶形核经蝶形运算后,将运算后的数据写入到第一缓冲区;
第二数据读取单元403,用于从第一缓冲区读取数据基于混合蝶形核经蝶形运算后,将运算后的数据写入到第二缓冲区;
第三数据读取单元404,用于从第二缓冲区读取数据基于混合蝶形核经蝶形运算后,将运算后的数据再次写入到输入缓冲区完成数据处理;
上述输入缓冲区、第一缓冲区、第二缓冲区的存储结构相同,包括N个相同存储块的存储阵列,上述存储阵列的行数与列数相等,每个存储块包括M个存储位置,每个存储位置包括n个点的数据,上述M、N、n为正整数。
可选地,上述需进行傅里叶变换/逆变换的数据为2048点的数据,上述N为16,M为32,n为4。
上述初始数据存储单元用于,按照存储阵列的行数从上到下的顺序向输入缓冲区写入数据;
在向同一行的存储块写入数据时,按照存储阵列的列数从左到右的顺序,向同一行所有存储块中的同一存储位置q写入数据;
完成同一行所有存储块的同一存储位置q的数据写入时,按照存储阵列的列数从左到右的顺序,将同一行所有存储块的同一存储位置p写入数据,至写满同一行所有存储块中所有存储位置;其中同一存储块中存储位置p向后偏移一个存储位置得到上述存储位置q的下一个存储位置。
上述处理器具体用于,按照存储阵列的列数从左到右的顺序,将同一行所有存储块的同一存储位置q写入数据,包括:
将需进行傅里叶变换/逆变换的数据,将时域索引顺序连续的n个点的数据作为一个存储单元写入输入缓冲区中一个存储块的一个存储位置。
在实施中,上述装置还包括,数据读取单元405,上述数据为需进行傅里叶变换的数据,上述数据读取单元用于从第一缓冲区、第二缓冲区或输入缓冲区中读取数据,包括:
按照存储阵列的列数从左到右的顺序,从同一列所有存储块中同一组存储位置k1中读取数据,其中,采用不同的时钟按照存储位置从前到后的顺序读取每个存储块中的上述同一组存储位置k1中不同存储位置的数据,上述同一组存储位置k1位于同一存储块且每两个相邻的存储位置间隔固定数量个存储位置;
完成所有列中所有存储块中同一组存储位置k1的数据读取时,按照存储阵列的列数从左到右的顺序,从不同列的所有存储块中同一组存储位置k2中读取数据,至读取完所有存储块中所有存储位置中的数据,其中,同一组存储位置k1中每个存储位置向后偏移一个存储位置得到上述的同一组存储位置k2。
在一种可能的实现方式中,任一存储块中上述同一组存储位置k1包括存储位置从前到后的0/4处、1/4处、1/2处、3/4处的存储位置。
在实施中,上述装置还包括,数据写入单元406,上述数据为需进行傅里叶变换的数据,上述数据写入单元用于向第一缓冲区、第二缓冲区写入数据或再次向输入缓冲区中写入数据,包括:
按照先向上述存储阵列的第奇数行中存储块写入数据,再向第偶数行中存储块中写入数据的方式写入上述数据,其中按照如下方式向存储阵列的第奇数行/偶数行写入数据:
向同一组存储位置k3中写入数据,上述同一组存储位置k3包括第奇数行/偶数行的每个存储块中两个相邻的存储位置;
完成同一组存储位置k3的数据写入时,向下一组存储位置k4写入数据,其中,上述同一组存储位置k3中每个存储位置向后偏移两个存储位置得到上述同一组存储位置k4。
上述数据写入单元用于,向同一组存储位置k3/k4写入数据,包括:
采用不同的时钟按照存储阵列的列数从左往右的顺序,每次向相邻两列中每个存储块的同一存储位置d1写入数据,完成所有列中每个存储块的同一存储位置d1的数据写入后,按照存储阵列的列数从左往右的顺序,每次向相邻两列中每个存储块的同一存储位置d2写入数据,其中,同一存储块的存储位置d1向后偏移一个存储位置得到同一存储块的存储位置d2。
上述数据为需进行傅里叶逆变换的数据,上述数据读取单元,用于从第一缓冲区、第二缓冲区或输入缓冲区中读取数据,包括:
按照先从上述存储阵列的第奇数行中存储块读取数据,再从第偶数行中存储块中读取数据的方式读取上述数据,其中按照如下方式从存储阵列的第奇数行/偶数行读取数据:
从同一组存储位置k3中读取数据,上述同一组存储位置k3包括第奇数行/偶数行的每个存储块中两个相邻的存储位置;
完成同一组存储位置k3的数据读取时,从下一组存储位置k4读取数据,其中,上述同一组存储位置k3中每个存储位置向后偏移两个存储位置得到上述同一组存储位置k4。
在一种可能的实现方式中,其特征在于,从同一组存储位置k3/k4读取数据,包括:
采用不同的时钟按照存储阵列的列数从左往右的顺序,每次从相邻两列中每个存储块的同一存储位置d1读取数据,完成所有列中每个存储块的同一存储位置d1的数据读取后,按照存储阵列的列数从左往右的顺序,每次从相邻两列中每个存储块的同一存储位置d2读取数据,其中,同一存储块的存储位置d1向后偏移一个存储位置得到同一存储块的存储位置d2。
上述数据为需进行傅里叶逆变换的数据,上述数据写入单元用于向第一缓冲区、第二缓冲区写入数据或向缓冲区中再次数据,包括:
按照存储阵列的列数从左到右的顺序,向同一列所有存储块中同一组存储位置k1中写入数据,其中,采用不同的时钟按照存储位置从前到后的顺序向每个存储块中的上述同一组存储位置k1中不同存储位置写入数据,上述同一组存储位置k1位于同一存储块且每两个相邻的存储位置间隔固定数量个存储位置;
完成所有列中所有存储块中同一组存储位置k1的数据写入时,按照存储阵列的列数从左到右的顺序,向不同列的所有存储块中同一组存储位置k2写入数据,至写满所有存储块中所有存储位置,其中,同一组存储位置k1中每个存储位置向后偏移一个存储位置得到上述的同一组存储位置k2。
在一种可能的实现方式中,任一存储块中上述同一组存储位置k1包括存储位置从前到后的0/4处、1/4处、1/2处、3/4处的存储位置。
实施例五:
本发明实施例还提供一种计算机可读非易失性存储介质,包括程序代码,当上述程序代码在计算终端上运行时,上述程序代码用于使上述计算终端执行上述本发明实施例二的方法的步骤。
以上参照示出根据本申请实施例的方法、装置(系统)和/或计算机程序产品的框图和/或流程图描述本申请。应理解,可以通过计算机程序指令来实现框图和/或流程图示图的一个块以及框图和/或流程图示图的块的组合。可以将这些计算机程序指令提供给通用计算机、专用计算机的处理器和/或其它可编程数据处理装置,以产生机器,使得经由计算机处理器和/或其它可编程数据处理装置执行的指令创建用于实现框图和/或流程图块中所指定的功能/动作的方法。
相应地,还可以用硬件和/或软件(包括固件、驻留软件、微码等)来实施本申请。更进一步地,本申请可以采取计算机可使用或计算机可读存储介质上的计算机程序产品的形式,其具有在介质中实现的计算机可使用或计算机可读程序代码,以由指令执行系统来使用或结合指令执行系统而使用。在本申请上下文中,计算机可使用或计算机可读介质可以是任意介质,其可以包含、存储、通信、传输、或传送程序,以由指令执行系统、装置或设备使用,或结合指令执行系统、装置或设备使用。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (16)
1.基于傅里叶变换/逆变换的数据处理系统,其特征在于,该系统包括输入缓冲区、第一缓冲区、第二缓冲区、引擎模块,所述输入缓冲区分别与第一缓冲区、第二缓冲区和引擎模块连接,其中:
所述输入缓冲区,用于存储需进行傅里叶变换/逆变换的数据和所述引擎模块写入的数据;
所述引擎模块,用于从输入缓冲区读取数据基于混合蝶形核经蝶形运算后写入到第一缓冲区,从第一缓冲区读取数据基于混合蝶形核经蝶形运算后写入到第二缓冲区,从第二缓冲区读取数据基于混合蝶形核经蝶形运算后写入到输入缓冲区完成数据处理;
所述输入缓冲区、第一缓冲区、第二缓冲区的存储结构相同,包括N个存储块的存储阵列,存储阵列的行数与列数相等,每个存储块包括M个存储位置,每个存储位置包括n个点的数据,所述M、N、n为正整数。
2.如权利要求1所述的系统,其特征在于,所述需进行傅里叶变换/逆变换的数据为2048点的数据,所述N为16,M为32,n为4。
3.基于傅里叶变换/逆变换进行数据处理的方法,其特征在于,该方法包括:
将需进行傅里叶变换/逆变换的数据写入到输入缓冲区;
从输入缓冲区读取数据基于混合蝶形核经蝶形运算后,将运算后的数据写入到第一缓冲区;
从第一缓冲区读取数据基于混合蝶形核经蝶形运算后,将运算后的数据写入到第二缓冲区;
从第二缓冲区读取数据基于混合蝶形核经蝶形运算后,将运算后的数据再次写入到输入缓冲区完成数据处理;
所述输入缓冲区、第一缓冲区、第二缓冲区的存储结构相同,包括N个相同存储块的存储阵列,所述存储阵列的行数与列数相等,每个存储块包括M个存储位置,每个存储位置包括n个点的数据,所述M、N、n为正整数。
4.如权利要求3所述的方法,其特征在于,所述需进行傅里叶变换/逆变换的数据为2048点的数据,所述N为16,M为32,n为4。
5.如权利要求3或4所述的方法,其特征在于,将需进行傅里叶变换/逆变换的数据写入到输入缓冲区,包括:
按照存储阵列的行数从上到下的顺序写入数据;
在向同一行的存储块写入数据时,按照存储阵列的列数从左到右的顺序,向同一行所有存储块中的同一存储位置q写入数据;
完成同一行所有存储块的同一存储位置q的数据写入时,按照存储阵列的列数从左到右的顺序,将同一行所有存储块的同一存储位置p写入数据,至写满同一行所有存储块中所有存储位置;其中同一存储块中存储位置p向后偏移一个存储位置得到所述存储位置q的下一个存储位置。
6.如权利要求5所述的方法,其特征在于,按照存储阵列的列数从左到右的顺序,将同一行所有存储块的同一存储位置q写入数据,包括:
将需进行傅里叶变换/逆变换的数据,将时域索引顺序连续的n个点的数据作为一个存储单元写入输入缓冲区中一个存储块的一个存储位置。
7.如权利要求3或4所述的方法,其特征在于,所述数据为需进行傅里叶变换的数据,从第一缓冲区、第二缓冲区或输入缓冲区中读取数据,包括:
按照存储阵列的列数从左到右的顺序,从同一列所有存储块中同一组存储位置k1中读取数据,其中,采用不同的时钟按照存储位置从前到后的顺序读取每个存储块中的所述同一组存储位置k1中不同存储位置的数据,所述同一组存储位置k1位于同一存储块且每两个相邻的存储位置间隔固定数量个存储位置;
完成所有列中所有存储块中同一组存储位置k1的数据读取时,按照存储阵列的列数从左到右的顺序,从不同列的所有存储块中同一组存储位置k2中读取数据,至读取完所有存储块中所有存储位置中的数据,其中,同一组存储位置k1中每个存储位置向后偏移一个存储位置得到所述的同一组存储位置k2。
8.如权利要求7所述的方法,其特征在于,任一存储块中所述同一组存储位置k1包括存储位置从前到后的0/4处、1/4处、1/2处、3/4处的存储位置。
9.如权利要求3或4所述的方法,其特征在于,所述数据为需进行傅里叶变换的数据,向第一缓冲区、第二缓冲区写入数据或再次向输入缓冲区中写入数据,包括:
按照先向所述存储阵列的第奇数行中存储块写入数据,再向第偶数行中存储块中写入数据的方式写入所述数据,其中按照如下方式向存储阵列的第奇数行/偶数行写入数据:
向同一组存储位置k3中写入数据,所述同一组存储位置k3包括第奇数行/偶数行的每个存储块中两个相邻的存储位置;
完成同一组存储位置k3的数据写入时,向下一组存储位置k4写入数据,其中,所述同一组存储位置k3中每个存储位置向后偏移两个存储位置得到所述同一组存储位置k4。
10.如权利要求9所述的方法,其特征在于,向同一组存储位置k3/k4写入数据,包括:
采用不同的时钟按照存储阵列的列数从左往右的顺序,每次向相邻两列中每个存储块的同一存储位置d1写入数据,完成所有列中每个存储块的同一存储位置d1的数据写入后,按照存储阵列的列数从左往右的顺序,每次向相邻两列中每个存储块的同一存储位置d2写入数据,其中,同一存储块的存储位置d1向后偏移一个存储位置得到同一存储块的存储位置d2。
11.如权利要求3或4所述的方法,其特征在于,所述数据为需进行傅里逆叶变换的数据,从第一缓冲区、第二缓冲区或输入缓冲区中读取数据,包括:
按照先从所述存储阵列的第奇数行中存储块读取数据,再从第偶数行中存储块中读取数据的方式读取所述数据,其中按照如下方式从存储阵列的第奇数行/偶数行读取数据:
从同一组存储位置k3中读取数据,所述同一组存储位置k3包括第奇数行/偶数行的每个存储块中两个相邻的存储位置;
完成同一组存储位置k3的数据读取时,从下一组存储位置k4读取数据,其中,所述同一组存储位置k3中每个存储位置向后偏移两个存储位置得到所述同一组存储位置k4。
12.如权利要求11所述的方法,其特征在于,从同一组存储位置k3/k4读取数据,包括:
采用不同的时钟按照存储阵列的列数从左往右的顺序,每次从相邻两列中每个存储块的同一存储位置d1读取数据,完成所有列中每个存储块的同一存储位置d1的数据读取后,按照存储阵列的列数从左往右的顺序,每次从相邻两列中每个存储块的同一存储位置d2读取数据,其中,同一存储块的存储位置d1向后偏移一个存储位置得到同一存储块的存储位置d2。
13.如权利要求3或4所述的方法,其特征在于,所述数据为需进行傅里叶逆变换的数据,向第一缓冲区、第二缓冲区写入数据或向缓冲区中再次数据,包括:
按照存储阵列的列数从左到右的顺序,向同一列所有存储块中同一组存储位置k1中写入数据,其中,采用不同的时钟按照存储位置从前到后的顺序向每个存储块中的所述同一组存储位置k1中不同存储位置写入数据,所述同一组存储位置k1位于同一存储块且每两个相邻的存储位置间隔固定数量个存储位置;
完成所有列中所有存储块中同一组存储位置k1的数据写入时,按照存储阵列的列数从左到右的顺序,向不同列的所有存储块中同一组存储位置k2写入数据,至写满所有存储块中所有存储位置,其中,同一组存储位置k1中每个存储位置向后偏移一个存储位置得到所述的同一组存储位置k2。
14.如权利要求13所述的方法,其特征在于,任一存储块中所述同一组存储位置k1包括存储位置从前到后的0/4处、1/4处、1/2处、3/4处的存储位置。
15.基于傅里叶变换/逆变换进行数据处理的设备,其特征在于,该设备包括处理器和存储器,
其中,所述处理器用于:
将需进行傅里叶变换/逆变换的数据写入到输入缓冲区;
从输入缓冲区读取数据基于混合蝶形核经蝶形运算后,将运算后的数据写入到第一缓冲区;
从第一缓冲区读取数据基于混合蝶形核经蝶形运算后,将运算后的数据写入到第二缓冲区;
从第二缓冲区读取数据基于混合蝶形核经蝶形运算后,将运算后的数据再次写入到输入缓冲区完成数据处理;
所述输入缓冲区、第一缓冲区、第二缓冲区的存储结构相同,包括N个相同存储块的存储阵列,所述存储阵列的行数与列数相等,每个存储块包括M个存储位置,每个存储位置包括n个点的数据,所述M、N、n为正整数。
16.一种计算机可存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求3~14任一所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811600858.6A CN111368250B (zh) | 2018-12-26 | 2018-12-26 | 基于傅里叶变换/逆变换的数据处理系统、方法及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811600858.6A CN111368250B (zh) | 2018-12-26 | 2018-12-26 | 基于傅里叶变换/逆变换的数据处理系统、方法及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111368250A true CN111368250A (zh) | 2020-07-03 |
CN111368250B CN111368250B (zh) | 2023-08-15 |
Family
ID=71206053
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811600858.6A Active CN111368250B (zh) | 2018-12-26 | 2018-12-26 | 基于傅里叶变换/逆变换的数据处理系统、方法及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111368250B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112328172A (zh) * | 2020-10-27 | 2021-02-05 | 北京百度网讯科技有限公司 | 数据存储方法、装置及数据读取方法、装置 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070288542A1 (en) * | 2006-04-28 | 2007-12-13 | Qualcomm Incorporated | Multi-port mixed-radix fft |
CN101330489A (zh) * | 2008-07-28 | 2008-12-24 | 中兴通讯股份有限公司 | 快速傅立叶变换/快速傅立叶反变换处理器及其处理方法 |
WO2010045808A1 (zh) * | 2008-10-24 | 2010-04-29 | 中兴通讯股份有限公司 | 一种实现快速傅立叶变换、反变换的硬件装置及方法 |
CN105095152A (zh) * | 2015-08-04 | 2015-11-25 | 广东顺德中山大学卡内基梅隆大学国际联合研究院 | 一种可配置的128点fft装置 |
CN105718424A (zh) * | 2016-01-26 | 2016-06-29 | 北京空间飞行器总体设计部 | 一种并行快速傅立叶变换处理方法 |
CN106970895A (zh) * | 2016-01-14 | 2017-07-21 | 普天信息技术有限公司 | 基于fpga的fft装置及方法 |
WO2017125023A1 (zh) * | 2016-01-19 | 2017-07-27 | 清华大学 | 一种流水可重构的单精度浮点fft/ifft协处理器 |
-
2018
- 2018-12-26 CN CN201811600858.6A patent/CN111368250B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070288542A1 (en) * | 2006-04-28 | 2007-12-13 | Qualcomm Incorporated | Multi-port mixed-radix fft |
CN101330489A (zh) * | 2008-07-28 | 2008-12-24 | 中兴通讯股份有限公司 | 快速傅立叶变换/快速傅立叶反变换处理器及其处理方法 |
WO2010045808A1 (zh) * | 2008-10-24 | 2010-04-29 | 中兴通讯股份有限公司 | 一种实现快速傅立叶变换、反变换的硬件装置及方法 |
CN101729463A (zh) * | 2008-10-24 | 2010-06-09 | 中兴通讯股份有限公司 | 一种实现快速傅立叶变换、反变换的硬件装置及方法 |
CN105095152A (zh) * | 2015-08-04 | 2015-11-25 | 广东顺德中山大学卡内基梅隆大学国际联合研究院 | 一种可配置的128点fft装置 |
CN106970895A (zh) * | 2016-01-14 | 2017-07-21 | 普天信息技术有限公司 | 基于fpga的fft装置及方法 |
WO2017125023A1 (zh) * | 2016-01-19 | 2017-07-27 | 清华大学 | 一种流水可重构的单精度浮点fft/ifft协处理器 |
CN105718424A (zh) * | 2016-01-26 | 2016-06-29 | 北京空间飞行器总体设计部 | 一种并行快速傅立叶变换处理方法 |
Non-Patent Citations (2)
Title |
---|
刘志哲等: "基于分级存储并行运算的FFT处理器设计", 《北京理工大学学报》 * |
陈媚媚,朱恩: "一种高性能的基-4FFT蝶形运算单元", 《电子工程师》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112328172A (zh) * | 2020-10-27 | 2021-02-05 | 北京百度网讯科技有限公司 | 数据存储方法、装置及数据读取方法、装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111368250B (zh) | 2023-08-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10140251B2 (en) | Processor and method for executing matrix multiplication operation on processor | |
JP5689282B2 (ja) | 行列をsimdマルチコア・プロセッサ・アーキテクチャ上で転置するためのコンピュータ実装方法、コンピュータ可読ストレージ媒体及びシステム | |
US8094157B1 (en) | Performing an occurence count of radices | |
US20180307438A1 (en) | Statically-schedulable feed and drain structure for systolic array architecture | |
US7640284B1 (en) | Bit reversal methods for a parallel processor | |
EP2408158B1 (en) | Circuit and method for implementing fft/ifft transform | |
US9317481B2 (en) | Data access method and device for parallel FFT computation | |
US20040243656A1 (en) | Digital signal processor structure for performing length-scalable fast fourier transformation | |
EP4156079A1 (en) | Image data storage method, image data processing method and system, and related apparatus | |
WO2018027706A1 (zh) | Fft处理器及运算方法 | |
US9262378B2 (en) | Methods and devices for multi-granularity parallel FFT butterfly computation | |
CN111737638A (zh) | 基于傅里叶变换的数据处理方法及相关装置 | |
US11003620B2 (en) | Systolic array of pipelined processing engines for implementing dynamic programming algorithms | |
US20100318758A1 (en) | Efficient transfer of matrices for matrix based operations | |
US8825729B1 (en) | Power and bandwidth efficient FFT for DDR memory | |
CN111368250A (zh) | 基于傅里叶变换/逆变换的数据处理系统、方法及设备 | |
CN111158757B (zh) | 并行存取装置和方法以及芯片 | |
US9268744B2 (en) | Parallel bit reversal devices and methods | |
CN103493039A (zh) | 数据处理方法和相关装置 | |
CN113569189B (zh) | 一种快速傅立叶变换计算方法及装置 | |
CN109753629B (zh) | 多粒度并行fft计算装置 | |
US10761847B2 (en) | Linear feedback shift register for a reconfigurable logic unit | |
US9760372B2 (en) | Parallel processing in plural processors with result register each performing associative operation on respective column data | |
WO2020146284A1 (en) | Efficient squaring with loop equalization in arithmetic logic units | |
US6438568B1 (en) | Method and apparatus for optimizing conversion of input data to output data |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |