CN103955446B - 基于dsp芯片的可变长度fft计算方法 - Google Patents
基于dsp芯片的可变长度fft计算方法 Download PDFInfo
- Publication number
- CN103955446B CN103955446B CN201410174461.0A CN201410174461A CN103955446B CN 103955446 B CN103955446 B CN 103955446B CN 201410174461 A CN201410174461 A CN 201410174461A CN 103955446 B CN103955446 B CN 103955446B
- Authority
- CN
- China
- Prior art keywords
- fft
- data
- result
- chip
- memory
- 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.)
- Active
Links
Landscapes
- Complex Calculations (AREA)
Abstract
本发明公开一种基于DSP芯片的可变长FFT计算方法,步骤为:1)判断待运算数据的长度N,若N<N1,执行步骤2);若N1<N<TH1,执行步骤3);若TH1<N<TH2,执行步骤4);其中N1为DSP芯片内FFT执行装置能够直接支持的最大点数,TH1为片上存储器能够存储的最大点数,TH2=N1*N1;2)直接执行一维FFT并以DMA方式从片外存储器读写数据;3)执行二维FFT且由片上存储器存储中间数据并进行矩阵转置;4)分成多个数据块进行变换,由片上存储器存储每个数据块。本发明具有实现方法简单、能够实现可变长度的FFT计算且计算长度范围大、存储带宽利用率高、执行效率高的优点。
Description
技术领域
本发明涉及数字信号处理领域,尤其涉及一种基于SRAM的可变长度FFT计算方法。
背景技术
DFT(Discrete Fourier Transformation,离散傅里叶变换)是数字信号处理领域不可缺少的工具之一,它将一种信号从时域变换到频域,广泛应用于声学、图像、雷达、电信和无线信号处理等领域。FFT(Fast Fourier Transformation,快速傅立叶变换)是DFT的一种快速实现方法,FFT的出现使得DFT在实际应用中得到了更广泛的应用。FFT算法是利用复指数常数的特性将信号序列x(n)或X(k)的排列次序进行重排并分解成短序列运算,将DFT运算复杂度由O(n2)降低到O(nlogn)。在实时信号处理领域,FFT算法对嵌入式处理器的性能和效率都提出更高要求,对于不同的应用,FFT的运算规模变化非常大,可能由数十点到数十万点。
目前,大部分FFT算法采用DSP芯片上的运算单元实现,然而FFT计算过程需要交叉访问信号序列x(n),无法充分发挥DSP芯片的计算和存储效率,尤其对于大规模FFT计算,不能将整行变换数据存储到Cache或者片上存储器中,导致需要频繁访问片外存储器,从而存储带宽利用率非常低,而且无法发挥DSP芯片提供的流水线计算效率。
部分DSP芯片中虽然提供了FFT加速器方案,例如TI C55X系列的DSP芯片中的紧耦合FFT加速器,支持的最大运算规模仅为1K,限制FFT加速器的应用范围。由于执行大规模FFT时至少需要将一行数据存储到FFT加速器内部数据寄存器中,因此FFT加速器所需存储容量随FFT规模的增大而线性增加,存储容量将成为大规模FFT加速器设计的主要限制。
DDR和SRAM是两类最常用的数据存储器,其中DDR存储器具有存储容量大(通常为G量级)、价格低的特点,通常用于大规模原始数据和计算结果的存储。DDR存储器的行缓冲组织结构决定了DDR存储器的访问特征,若数据顺序存储且按照顺序进行访问,则能够充分发挥DDR存储器存储带宽,获得较大实际访问带宽;但若以不规则方式访问DDR存储器时,DDR存储器存储带宽利用率将急剧下降。片上SRAM存储器是一种随机访问存储器,具有访问灵活、速度快的特点,但是相对于DDR存储器来说,SRAM存储器的存储容量较小,通常仅为M量级,无法存储大规模原始数据和计算结果。在DSP芯片中,通常将SRAM设计成多核之间的高速共享存储器。随着工艺的提升,DSP芯片内部集成的SRAM容量越来越大,如TI C66XX系列DSP芯片的SRAM存储容量达到4MB。
对于大规模的FFT计算,可以通过二维FFT计算的方式模式实现。N=N1*N2点的FFT可以通过N2个N1点和N1个N2点的FFT算法来实现,迭代公式如下式所示:
其中0≤k1<N1,0≤k2<N2。
如图1所示,二维FFT模拟实现大规模FFT的实现流程,将N点的初始数据从逻辑上看成按行存储为N1*N2的矩阵形式,二维方式实现N=N1*N2点FFT的计算步骤如下:
步骤1)列方向的FFT计算。
进行N2次的N1点FFT运算,即执行N2次如下公式:
步骤2)补偿旋转因子计算。
将步骤1)得到的计算结果乘以补偿旋转因子得到列方向FFT运算结果。
步骤3)行方向的FFT计算。
将步骤2)得到的列方向FFT运算结果进行N1次的N2点FFT运算,即执行M1次如下公式:
如上所述,采用二维方式模拟实现大规模FFT的实现流程中,列方向的FFT计算时需要以列方向顺序读取初始矩阵数据,计算结果再以列方向写入到DDR存储器中,行方向的FFT计算时计算结果也需以列方向写入到DDR存储器。因此直接采用DDR存储器进行大规模FFT计算时的数据存储时,由于DDR存储器非突发访问模式的存储带宽利用率非常低,导致采用二维方式计算FFT时消耗的计算时间较大、执行效率低。
发明内容
本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种实现方法简单、能够实现可变长度的FFT计算且计算长度范围大、存储带宽利用率高、执行效率高的基于DSP芯片的可变长度FFT计算方法。
为解决上述技术问题,本发明提出的技术方案为:
一种基于DSP芯片的可变长度的FFT计算方法,步骤为:
(1)判断存储在片外存储器中待运算数据的长度N,若N<N1,转入执行步骤(2);若N1<N<TH1,转入执行步骤(3);若TH1<N<TH2,转入执行步骤(4);其中N=2k,N1为DSP芯片内FFT执行装置能够直接支持的最大点数,TH1为片上存储器能够存储的最大点数,TH2=N1*N1;
(2)直接以DMA方式从片外存储器中读取初始数据,所述FFT执行装置执行N点一维FFT运算后将运算结果以DMA方式写回片外存储器中,退出计算;
(3)将所述待运算数据视为N1*N2的二维数据矩阵并按行顺序读取到片上存储器,其中N=N1*N2;所述FFT执行装置对片上存储器中数据矩阵执行二维FFT运算后得到最终结果矩阵,按列顺序读取所述最终结果矩阵并按行顺序写回片外存储器,退出计算;
(4)将所述待运算数据视为N1*N2的二维矩阵并按列分为多个列数据块,每个列数据块包含TH1个数据点,依次读取每个列数据块到片上存储器中并由所述FFT执行装置进行列方向的FFT计算,将计算结果顺序写回片外存储器;将所述计算结果按行分为多个行数据块,每个行数据块包含TH1个数据点,依次读取每个行数据块到片上存储器中,由所述FFT执行装置进行行方向的FFT计算,按列顺序读取计算结果并按行顺序写回片外存储器,退出计算。
作为本发明的进一步改进,所述步骤(3)的具体步骤为:
(3.1)将片外存储器中N点所述待运算数据视为N1*N2的二维数据矩阵,按行顺序读取所述二维数据矩阵并以相同顺序存储到片上存储器中,得到初始数据矩阵;
(3.2)所述FFT执行装置读取片上存储器中的所述初始数据矩阵并执行列方向上的N2次N1点FFT运算,进行旋转因子补偿后得到列方向运算结果矩阵,并写入片上存储器中对应位置;
(3.3)所述FFT执行装置从片上存储器中顺序读取所述列方向运算结果矩阵并执行行方向上的N1次N2点FFT运算,得到最终运算结果矩阵并顺序写入到片上存储器中对应位置;
(3.4)按列顺序从片上存储器中读取所述最终结果矩阵并以行顺序写回片外存储器中,得到最终结果矩阵,退出计算。
作为本发明的进一步改进,所述步骤(3.2)的具体步骤为:
(3.2.1)以间隔寻址的方式从片上存储器中读取所述初始数据矩阵的一列数据至所述FFT执行装置中;
(3.2.2)由所述FFT执行装置进行N1点FFT运算,得到当前列数据的蝶形运算结果;对所述蝶形运算结果进行一级补偿旋转因子计算,得到当前列数据的计算结果;以间隔寻址的方式读取下一列数据至所述FFT执行装置中,返回执行步骤(3.2.2),总计执行N2次后得到列方向运算结果矩阵;
(3.2.3)将所述列方向运算结果矩阵的每列数据以间隔寻址的方式写入片上存储器的对应位置中,转入执行步骤(3.3)。
作为本发明的进一步改进,所述步骤(3.3)的具体步骤为:
(3.3.1)从片上存储器中顺序读取所述列方向运算结果矩阵的一行数据至所述FFT执行装置中;
(3.3.2)由所述FFT执行装置进行N2点FFT运算,得到当前行数据的运算结果;顺序读取下一行数据至所述FFT执行装置中,返回执行步骤(3.3.2),总计执行N1次后得到最终运算结果矩阵;
(3.3.3)将所述最终运算结果矩阵的每行数据顺序写入片上存储器的对应位置中,转入执行步骤(3.4)。
作为本发明的进一步改进,所述步骤(4)的具体步骤为:
(4.1)将片外存储器中所述待运算数据视为N1*N2的二维数据矩阵,并将二维数据矩阵按列分为m个列数据块,每个列数据块包含TH1个数据点,其中按行顺序读取一个列数据块,转入执行步骤(4.2);
(4.2)按顺序将当前列数据块读取到片上存储器中,由所述FFT执行装置执行列方向的FFT计算,进行旋转因子补偿后得到当前列数据块的计算结果,并将所述当前列数据块的计算结果顺序写回片外存储器;按行顺序读取下一个列数据块,返回执行步骤(4.2),直至完成所有列数据块的运算,得到列方向计算结果矩阵;
(4.3)按行顺序将片外存储器中所述步骤(4.2)得到的列方向计算结果矩阵分为m个大行数据块,每个行数据块包含TH1个数据点,按行顺序读取一个行数据块,转入执行步骤(4.4);
(4.4)将当前行数据块按顺序读取到片上存储器中,由所述FFT执行装置执行行方向的FFT计算,得到当前行数据块的计算结果,按列读取所述当前行数据块的计算结果并按行写回片外存储器;按行顺序读取下一个行数据块,返回执行步骤(4.4);直至完成所有行数据块的运算,得到最终结果矩阵,退出计算。
作为本发明的进一步改进,所述步骤(4.2)中得到当前列数据块的计算结果的具体步骤为:
(4.2.1)以间隔寻址的方式从片上存储器中读取当前列数据块的一列数据至所述FFT执行装置中;
(4.2.2)由所述FFT执行装置进行N1点FFT运算,得到当前列数据的蝶形运算结果;对蝶形运算结果进行一级补偿旋转因子计算,得到当前列的运算结果;以间隔寻址的方式读取下一列数据至所述FFT执行装置中,返回执行步骤(4.2.2),总计执行完t1次后得到当前列数据块的列方向计算结果矩阵,其中
(4.2.3)将所述当前列数据块的列方向计算结果矩阵以间隔寻址的方式写入片上存储器的对应位置中,得到当前列数据块的计算结果。
作为本发明的进一步改进,所述步骤(4.4)中得到当前行数据块的计算结果的具体步骤为:
(4.4.1)以顺序寻址的方式从当前行数据块中取出一行数据至所述FFT执行装置;
(4.4.2)由所述FFT执行装置进行N3点FFT计算,其中得到当前行数据的运算结果;以顺序寻址的方式读取下一行数据至所述FFT执行装置中,返回执行步骤(4.4.2),总计执行t2次后得到当前行数据块的行方向计算结果矩阵,其中
(4.4.3)将所述当前行数据块的行方向计算结果矩阵的每行数据顺序写入片上存储器的对应位置中,得到当前行数据块的计算结果。
作为本发明的进一步改进:所述片上存储器为DDR存储器,所述片外存储器为SRAM存储器。
与现有技术相比,本发明的优点在于:
(1)本发明结合片外存储器和片上存储器的使用实现较大规模的FFT运算,充分利用片外存储器连续快速访问的特点,使用片外存储器顺序存储初始数据和计算结果,同时结合DSP芯片内片上存储器快速随机存储的优势,使用片上存储器存储中间结果并将运算结果按列读取按行写入片外存储器的方式完成二维FFT计算中的二维数据转置功能,避免直接按列访问片外存储器中数据,有效提高了片外存储器的带宽利用率及FFT计算的执行效率。
(2)本发明采用DDR存储器作为片外存储器,SRAM存储器作为片上存储器,结合DDR存储器的容量大、按行顺序访问效率高及SRAM存储器访问灵活、速度快的优势,避免直接按列访问DDR存储器中数据,提高DDR存储器的带宽利用率及FFT计算的执行效率。
(3)本发明结合片外存储器和片上存储器以及二维FFT实现大规模的FFT运算,当计算长度为小规模时,直接执行FFT运算;当计算长度为中等规模时,采用二维FFT计算实现;当计算长度为大规模时,将运算数据分为多个数据块进行分块变换,能够实现小规模到大规模范围内的可变长度的FFT运算,应用范围广、使用灵活。
附图说明
图1是二维FFT模拟实现大规模FFT的实现流程示意图。
图2是本实施例基于DSP芯片的可变长度FFT计算方法实现流程示意图。
图3是本实施例中等规模FFT的具体实现流程示意图。
图4是本实施例大规模FFT的具体实现流程示意图。
图5是本实施例FFT执行装置结构示意图。
图6是本实施例中FFT执行单元FFT-PE结构示意图。
图7是本实施例中执行批量的小规模FFT计算时状态转换流程示意图。
图8本实施例中执行批量的中等规模FFT计算时状态转换流程示意图。
图9是本实施例中执行批量的大规模FFT计算时状态转换流程示意图。
具体实施方式
以下结合说明书附图和具体优选的实施例对本发明作进一步描述,但并不因此而限制本发明的保护范围。
本发明的核心思想是采用分而治之的方法,对于规模较大的一维FFT运算使用二维FFT实现,同时在执行运算时将初始数据和计算结果存储在支持连续快速访问的片外存储器中,中间结果存储在支持快速随机存储模式的片上存储器中同时利用片上存储器完成二维数据转置,避免对片外存储器进行列方向操作,充分利用片外存储器和片上存储器的优点完成小规模到大规模范围内的FFT运算。
如图2所示,本实施例基于DSP芯片的可变长度FFT计算方法,步骤为:
(1)判断存储在片外存储器中待运算数据的长度N,若N<N1,转入执行步骤(2);若N1<N<TH1,转入执行步骤(3);若TH1<N<TH2,转入执行步骤(4);其中N=2k,N1为DSP芯片上FFT执行装置能够直接支持的最大点数,TH1为片上存储器能够存储的最大点数,TH2=N1*N1;
(2)直接以DMA方式从片外存储器中读取初始数据,FFT执行装置执行N点一维FFT运算后将运算结果以DMA方式写回片外存储器中,退出计算;
(3)将待运算数据视为N1*N2的二维数据矩阵并按行顺序读取到片上存储器,其中N=N1*N2;FFT执行装置对片上存储器中数据矩阵执行二维FFT运算后得到最终结果矩阵,按列顺序读取最终结果矩阵并按行顺序写回片外存储器,退出计算;
(4)将待运算数据视为N1*N2的二维矩阵并按列分为多个列数据块,每个列数据块包含TH1个数据点,依次读取每个列数据块到片上存储器中并由所述FFT执行装置进行列方向的FFT计算,将计算结果写回片外存储器;将计算结果按行分为多个行数据块,每个行数据块包含TH1个数据点,依次读取每个行数据块到片上存储器中,由FFT执行装置进行行方向的FFT计算,按列顺序读取计算结果并按行顺序写回片外存储器,退出计算。
本实施例中,初始运算数据存储在片外存储器中,每个数据为一个单精度复数,占8B存储空间。片外存储器可以为支持连续快速访问的所有类型的外部存储器,片上存储器可以为DSP芯片上支持快速随机存储模式的所有类型的内部存储器。FFT执行装置为DSP芯片上的FFT加速器,用于执行FFT计算,且FFT加速器能够直接支持的最大点数为N1。
本实施例中,将运算数据的长度N<N1时,即不超过N1点FFT,定义为小规模FFT;将N1<N<TH1时,即N1点到TH1点之间的FFT,定义为中等规模FFT;将TH1<N<TH2时,即TH1点到TH2点之间的FFT,定义为大规模FFT,TH2即为能够支持的最大点数,即能够支持的运算数据的最大长度。对于小规模FFT,其运算数据的长度小于N1,FFT加速器由于能够直接支持N点的一维FFT运算,则直接执行N点一维FFT运算,执行计算时以DMA方式从片外存储器中读取初始数据,运算结果则以DMA方式写回片外存储器中,对数据进行连续、快速的访问。
对于中等规模FFT运算,其运算数据的长度大于N1,FFT加速器不能够直接支持N点的一维运算,但由于运算数据的长度N小于片上存储器能够存储的最大点数TH1,初始数据矩阵或者中间结果矩阵可以完全存储到DSP芯片中的片上存储器中。
本实施例中,步骤(3)的具体步骤为:
(3.1)将片外存储器中N点待运算数据视为为N1*N2的二维数据矩阵,按行顺序读取二维数据矩阵并以相同顺序存储到片上存储器中,得到初始数据矩阵;
(3.2)FFT加速器读取片上存储器中的初始数据矩阵并执行列方向上的N2次N1点FFT运算,进行旋转因子补偿后得到列方向运算结果矩阵,并写入片上存储器中对应位置;
(3.3)FFT加速器从片上存储器中顺序读取列方向运算结果矩阵并执行行方向上的N1次N2点FFT运算,得到最终运算结果矩阵并顺序写入到片上存储器中对应位置;
(3.4)按列顺序从片上存储器中读取最终结果矩阵并以行顺序写回片外存储器中,得到最终结果矩阵,退出计算。
本实施例中,对于运算数据的长度大于N1小于TH1的中等规模FFT,采用二维FFT计算将大于N1点的FFT分解为一系列小于N1点的一维FFT运算,初始数据矩阵或中间结果矩阵存储在片上存储器中,从片上存储器中读取运算数据到FFT加速器的数据存储器中执行FFT计算,实现对运算数据的快速随机存储,提高FFT计算的执行效率;原始待运算数据及计算结果存储在片外存储器中,支持数据的连续快速访问,同时计算结果通过片上存储器完成二维FFT计算中的矩阵转置,对片外存储器只进行行访问,从而提高片外存储器的带宽利用率。
本实施例中,步骤(3.2)的具体步骤为:
(3.2.1)以间隔寻址的方式且间隔为8*N2B从片上存储器中读取初始数据矩阵的一列数据到FFT加速器中;
(3.2.2)FFT加速器进行N1点FFT运算,得到当前列数据的蝶形运算结果;对蝶形运算结果进行一级补偿旋转因子计算,得到当前列数据的计算结果;以间隔寻址的方式读取下一列数据至FFT加速器中,返回执行步骤(3.2.2),总计执行N2次后得到列方向运算结果矩阵;
(3.2.3)将列方向运算结果矩阵的每列数据以间隔寻址的方式且间隔为8*N2B写入片上存储器的对应位置中,转入执行步骤(3.3)。
本实施例中,步骤(3.3)的具体步骤为:
(3.3.1)从片上存储器中顺序读取列方向运算结果矩阵的一行数据至所述FFT加速器中;
(3.3.2)由FFT加速器进行N2点FFT运算,得到当前行数据的运算结果;顺序读取下一行数据至FFT加速器中,返回执行步骤(3.3.2),总计执行N1次后得到最终运算结果矩阵;
(3.3.3)将最终运算结果矩阵的每行数据顺序写入片上存储器的对应位置中,转入执行步骤(3.4)。
对于大规模FFT运算,其运算数据的长度大于片上存储器能够存储的最大点数TH1,不能够直接支持N点的一维运算且初始数据矩阵或者中间结果矩阵不可以完全存储到DSP芯片中的片上存储器中。本实施例中,将大规模FFT运算进行分块变换,结合片上存储器和片外存储器共同完成大规模FFT运算,充分利用片外存储器连续快速访问的特点以及片上存储器快速随机存储的优势,同时避免直接按列访问片外存储器中数据,提高片外存储器的存储带宽利用率及大规模FFT运算的执行效率。计算时,将N点的FFT运算分成多个小于TH1点的列数据块,使每个数据块的FFT运算能够完全存储到DSP芯片中的片上存储器中,对每个列数据块执行列方向的FFT运算后将计算结果分为多个小于TH1点的行数据块,再对每个行数据块执行行方向的FFT运算,完成N点的FFT运算;执行计算时,将数据块从片外存储器中读取到片上存储器中,由片上存储器存储每个数据块的初始运算数据矩阵和中间结果矩阵,同时利用片上存储器完成矩阵转置。采用以上方法,本实施例中能够支持的最大点数TH2=N1*N1。
本实施例中,步骤(4)的具体步骤为:
(4.1)将片外存储器中待运算数据转换为N1*N2的二维数据矩阵,并将二维数据矩阵按列分为m个列数据块,每个列数据块包含TH1个数据点,其中按行顺序读取一个列数据块,转入执行步骤(4.2);
(4.2)按顺序将当前列数据块读取到片上存储器中,由FFT加速器执行列方向的FFT计算,进行旋转因子补偿后得到当前列数据块的计算结果,并将当前列数据块的计算结果顺序写回片外存储器;按行顺序读取下一个列数据块,返回执行步骤(4.2),直至完成所有列数据块的运算,得到列方向计算结果矩阵;
(4.3)按行顺序将片外存储器中所述步骤(4.2)得到的列方向计算结果矩阵分为m个大行数据块,每个行数据块包含TH1个数据点,按行顺序读取一个行数据块,转入执行步骤(4.4);
(4.4)将当前行数据块按顺序读取到片上存储器中,由FFT加速器执行行方向的FFT计算,得到当前行数据块的计算结果,按行读取所述当前行数据块的计算结果并按列写回片外存储器;按行顺序读取下一个行数据块,返回执行步骤(4.4);直至完成所有行数据块的运算,得到最终结果矩阵,退出计算。
本实施例中,步骤(4.2)中得到当前列数据块的列方向计算结果的具体步骤为:
(4.2.1)以间隔寻址且间隔为N1B从片上存储器中读取当前列数据块的一列数据至FFT加速器中;
(4.2.2)由FFT加速器进行N1点FFT运算,得到当前列数据的蝶形运算结果;对蝶形运算结果进行一级补偿旋转因子计算,得到当前列的运算结果;以间隔寻址的方式读取下一列数据至FFT加速器中,返回执行步骤(4.2.2),总计执行完t1次后得到当前列数据块的列方向计算结果矩阵,其中
(4.2.3)将当前列数据块的列方向计算结果矩阵以间隔寻址的方式且间隔为N1B写入片上存储器的对应位置中,得到当前列数据块的计算结果。
本实施例中,步骤(4.4)中得到当前行数据块的行方向计算结果的具体步骤为:
(4.4.1)以顺序寻址的方式从当前行数据块中取出一行数据至所述FFT执行装置;
(4.4.2)由FFT加速器进行N3点FFT计算,其中得到当前行数据的运算结果;以顺序寻址的方式读取下一行数据至FFT加速器,返回执行步骤(4.3.2),总计执行t2次后得到当前行数据块的行方向计算结果矩阵,其中
(4.4.3)将当前行数据块的行方向计算结果矩阵的每行数据顺序写入片上存储器的对应位置中,得到当前行数据块的计算结果。
以下以片外存储器采用DDR存储器、片上存储器采用SRAM存储器且SRAM存储器可用于FFT运算的容量为1MB为例对本发明进行进一步说明。
本实施例中,每个点的数据为一个单精度复数,占8B存储空间,因此1MB存储器能够存储128K点数据,则N1=1K,TH1=1MB/8B=128K,TH2=N1*N1=1M,由DSP芯片内FFT加速器执行FFT运算。
本实施例中,基于DSP芯片的可变长度FFT计算方法的步骤为:
(1)判断存储在DDR存储器中初始数据的长度N的大小,若N<1K,转入执行步骤(2);若1K<N<128K,转入执行步骤(3);若128K<N<1M,转入执行步骤(4),其中N=2k;
(2)直接以DMA方式从DDR存储器中读取初始数据,FFT加速器执行N点FFT运算后将运算结果以DMA方式写回DDR存储器中,退出计算;
(3)将待运算数据视为210*2k-10的二维数据矩阵并按行顺序读取到SRAM存储器,由FFT加速器对SRAM存储器中数据矩阵执行二维FFT运算后得到最终结果矩阵,从SRAM存储器中按列顺序读取所述最终结果矩阵并按行顺序写回DDR存储器,退出计算;
(4)将待运算数据视为210*2k-10的二维数据矩阵并按列分为多个列数据块,每个列数据块包括128K个数据点,依次将每个列数据块读取到SRAM存储器中,由FFT加速器进行列方向的FFT计算后将计算结果写回DDR存储器,得到列方向计算结果矩阵;将列方向计算结果矩阵按行分为多个行数据块,每个行数据块包括128K个数据点,依次将每个行数据块读取到SRAM存储器中,由FFT加速器进行行方向的FFT计算后按顺序读取计算结果并按行写回DDR存储器。
本实施例中,将N<1K,即不超过1K点FFT定义为小规模FFT;将1K<N<128K,即2K点到128K点之间的FFT定义为中等规模FFT;将128K<N<1M,即256K点到1M点之间的FFT定义为大规模FFT。
执行小规模FFT运算时,由于FFT加速器能够直接支持规模不超过1K点FFT计算,因此直接以DMA突发访问方式从DDR存储器中读取待运算数据,进行FFT计算后再将计算结果以突发访问方式写回到DDR存储器指定地址中,得到最终结果矩阵并退出计算。
执行中等规模FFT运算时,由于SRAM的存储器容量为1MB,初始数据矩阵或者中间结果矩阵可以完全存储到DSP的片上SRAM中,因此采用二维FFT计算实现N点一维FFT,并将初始数据矩阵、中间结果矩阵存储在SRAM中,由SRAM完成二维数据转置操作。
如图3所示,本实施例中执行中等规模FFT计算实现流程,即步骤(3)具体步骤,N点待运算数据视为N1*N2的矩阵形式存储在DDR存储器中,按行读取到SRAM存储器中进行列方向的FFT计算,进行列方向的N2次N1点一维FFT运算后将中间结果数据存储在FFT加速器的数据存储器中,中间结果数据对应位置进行旋转因子补偿后将列方向计算结果写入SRAM存储器中对应位置,对列方向计算结果进行N1次N2点一维FFT运算,将最终结果进行转置后写回DDR存储器中指定位置。具体实现步骤为:
(3.1)将DDR存储器中N点待运算数据视为210*2k-10的二维数据矩阵,按行顺序读取二维数据矩阵并以相同顺序存储到SRAM存储器中,得到初始数据矩阵;
(3.2)FFT加速器读取SRAM存储器中的初始数据矩阵并执行列方向上的2k-10次1K点FFT运算,进行旋转因子补偿后得到列方向运算结果矩阵,并写入SRAM存储器中对应位置;
(3.3)FFT加速器从SRAM存储器中顺序读取列方向运算结果矩阵并执行行方向上的1K次2k-10点FFT运算,得到最终运算结果矩阵并写入到SRAM存储器中对应位置;
(3.4)按列顺序从SRAM中读取最终结果矩阵并以行顺序写回DDR存储器中,完成N点FFT计算并退出计算。
本实施例中,步骤(3.2)的具体步骤为:
(3.2.1)以间隔寻址的方式且间隔为8*2k-10B从SRAM存储器中读取初始数据矩阵的一列数据至FFT加速器的数据存储器中;
(3.2.2)由FFT加速器进行1K点FFT运算,得到当前列数据的蝶形运算结果;对蝶形运算结果进行一级补偿旋转因子计算,得到当前列数据的计算结果;以间隔寻址的方式读取下一列数据至FFT加速器中,返回执行步骤(3.2.2),总计执行2k-10次后得到列方向FFT运算结果。
(3.2.3)将列方向FFT运算结果的每列数据以间隔寻址的方式且间隔为8*2k-10B写入SRAM存储器的对应位置中。
本实施例中,步骤(3.3)的具体步骤为:
(3.3.1)从SRAM存储器中顺序读取列方向运算结果的一行数据至FFT加速器中;
(3.3.2)由FFT加速器进行2k-10点FFT运算,得到当前行数据的运算结果;顺序读取下一行数据至FFT加速器中,返回步骤(3.3.2),总计执行1024次后得到最终运算结果矩阵;
(3.2.3)将最终运算结果矩阵的每行顺序写入SRAM存储器的对应位置中。
FFT规模在256K和1M之间时,即满足N=N1*N2≤1M且N1≤1K、N2≤1K,由于当运算数据的长度超过128K时,DSP的片上SRAM的存储容量为1MB,初始数据矩阵或者中间结果矩阵不能完全存储在SRAM中。本实施例中将待运算数据以TH1=128K为单位进行分块进行变换,分块为列数据块进行列方向的FFT计算转换后将结果进行行方向的FFT计算,行方向计算结果进行转置后得到最终计算结果,完成整个大规模FFT计算。
如图4所示,本实施例中执行大规模FFT的实现流程,即步骤(4)的具体实现步骤:
(4.1)将DDR存储器中N点待运算数据视为210*2k-10的二维数据矩阵,并将二维数据矩阵按列顺序分为m个列数据块,每个列数据块包含128K个数据点;按行顺序读取一个列数据块,转入执行步骤(4.2);
(4.2)按顺序将当前列数据块存储到SRAM存储器中,由FFT加速器执行列方向的FFT计算,进行旋转因子补偿后得到当前列数据块的计算结果,并将当前列数据块的计算结果写回DDR存储器中;返回步骤(4.2)读取下一个列数据块,直至完成所有列数据块的运算,得到列方向计算结果矩阵;
(4.3)按行顺序将DDR存储器中步骤(4.2)得到的列方向计算结果矩阵按行分为m个行数据块,每个行数据块包含128K个数据点,按行顺序读取一个行数据块,转入执行步骤(4.4);
(4.4)将当前行数据块按顺序存储到SRAM存储器中,由FFT加速器执行行方向的FFT计算,得到当前行数据块的行方向计算结果,按列顺序读取计算结果并按行顺序写回DDR存储器中;按行顺序读取下一个行数据块,返回执行步骤(4.4),直至完成所有行数据块的运算,得到最终计算结果矩阵,完成N点FFT计算并退出计算。
本实施例中,步骤(4.2)中得到当前列数据块的列方向计算结果的具体步骤为:
(4.2.1)以间隔寻址且间隔为1KB方式从SRAM中读取当前列数据块的一列数据至FFT加速器中;
(4.2.2)由FFT加速器进行1K点FFT运算,得到当前列数据的蝶形运算结果;对蝶形运算结果进行一级补偿旋转因子计算,得到当前列的运算结果,以间隔寻址且间隔为1KB方式将当前列的运算结果写入SRAM存储器中;以间隔寻址方式读取下一列数据至FFT加速器中,返回执行步骤(4.2.2),总计执行完t1次后得到当前列数据块的列方向计算结果,其中t1=128;
(4.2.3)将当前列数据块的列方向计算结果矩阵以间隔寻址的方式且间隔为1KB写入SRAM存储器的对应位置中。
本实施例中,步骤(4.4)中得到当前行数据块的行方向计算结果的具体步骤为:
(4.4.1)以顺序寻址的方式从当前行数据块中取出一行数据至FFT加速器中;
(4.4.2)由FFT加速器进行N3点FFT计算,其中得到当前行数据的运算结果;以顺序寻址的方式读取下一行数据至FFT加速器中,返回执行步骤(4.4.2),总计执行t2次后得到当前行数据块的行方向计算结果矩阵,其中
(4.4.3)将当前行数据块的行方向计算结果矩阵的每行顺序写入SRAM存储器的对应位置中。
图4中示出了执行一个t1*N1列数据块(图中虚线框内所示)和一个t2*N2的行数据块(图中虚线框内所示)的数据处理流程,其中t1=128,N1=1K,N点待运算数据按N1*N2的矩阵形式存储在DDR存储器中,计算时将顺序从DDR读取t1列数据存储到SRAM存储器中,由FFT加速器对t1*N1列数据块执行进行t1次列方向上的1维N1=1K点的FFT运算,即列方向的FFT运算,得到的中间数据存储在FFT加速器内部的数据存储器中,对中间数据的对应位置进行补偿旋转因子计算后将结果顺序写回DDR存储器,完成列方向的FFT计算;将t2*N2的行数据块按行顺序读取并写入SRAM存储器中,执行t2次行方向的1维N2点的FFT运算,即行方向的FFT运算,得到的中间结果存储在FFT加速器内部的数据存储器中,将行方向的FFT结果写入SRAM存储器中,行方向的FFT结果即为当前行数据块的最终计算结果,按行从SRAM存储器中读取最终结果并按列写回DDR存储器中。
如图5所示,本实施例中FFT加速器结构,包括:FFT数据访问及计算控制模块、总线控制模块和FFT计算模块。
由FFT数据访问及计算控制器通过命令总线从DSP内核接收运算规模及数据地址的配置数据和命令,根据配置数据输出控制信号控制FFT计算阵列运行并发送数据访问请求至总线控制模块;当FFT加速器完成计算后,立即向DSP内核发送完成中断信号;由总线控制器将FFT数据访问和计算控制器发送的数据访问请求转换为DDR总线协议的突发方式访问或者SRAM总线协议的访问;由FFT计算阵列执行所有的FFT运算。定点/浮点转换模块在数据输入阶段将定点格式的初始数据转换为IEEE-754标准的浮点格式,并在结果写回阶段将浮点结果转换为相应格式的定点结果。FFT计算阵列包括两个FFT执行单元FFT-PE和分别与两个执行单元FFT-PE连接的CORDIC补偿旋转因子单元,两个FFT执行单元FFT-PE分别为FFT-PE[1]和FFT-PE[2],两个FFT执行单元FFT-PE并行执行两行数据的蝶形运算或补偿旋转因子计算,CORDIC补偿旋转因子单元在FFT执行单元FFT-PE执行补偿旋转因子计算时提供补偿因子。
如图6所示,本实施例中FFT执行单元FFT-PE结构,包括并行蝶形运算部件、FFT计算控制逻辑单元、数据存储器以及旋转因子存储器。每个FFT执行单元FFT-PE直接完成规模不超过1K点FFT计算。并行蝶形运算部件设置两个并行的蝶形运算单元,并行完成不超过1K点的蝶形运算或补偿旋转因子计算;数据存储器包括第一组存储器和第二种存储器并设置为乒乓多体结构,保证FFT计算与数据存储器的初始化能够同时进行,通过重叠FFT计算和数据访问过程来提高FFT加速器的性能;旋转因子存储器存储旋转因子,进行蝶形运算时提供给并行蝶形运算部件。
本实施例中,初始数据、中间数据及运算结果存储在片外DDR存储器或片上SRAM存储器中,通过FFT数据访问及计算控制器控制发出数据访问请求,由总线控制器转换为DDR总线协议的突发方式访问或者SRAM总线协议的访问,将数据从DDR存储器或SRAM存储器读取出或写入。
本实施例中采用上述FFT加速器实现基于DSP芯片的可变长FFT计算方法,步骤为:
1)DSP内核通过外置总线接口将配置数据写入到FFT加速器的配置寄存器中;
配置数据包括初始数据起始地址(Addr_init)、SRAM中间数据地址(Addr_SRAM)、DDR中间数据地址(Addr_DDR)及结果数据地址(Addr_Result)、FFT运算规模N=2k(k为整数且2≤k≤20)、FFT运算次数、FFT与IFFT选择信号(Sel_FFTorIFFT)、实数与复数选择信号(Sel_RAELorCOMPLEX)、浮点和定点选择信号(Sel_FLOATorFIX)、定点格式信号(Num_Point)。
2)DSP内核通过外置总线接口向FFT加速器发送命令,启动FFT加速器的运行,FFT数据访问及计算控制器开始产生控制信号控制FFT加速器运行;
3)通过总线控制器的控制,以DMA方式从片外DDR存储器或片上SRAM存储器中读取数据到FFT执行单元FFT-PE的数据寄存器中;
4)启动FFT执行单元FFT-PE,开始FFT计算;
5)将计算结果写入到片外DDR存储器或片上SRAM存储器中指定的地址。
6)FFT加速器完成所有FFT计算后,通过中断返回FFT完成信号给DSP内核。
本实施例中,进行多个同等规模的小规模FFT、中等规模FFT或大规模FFT计算时,即批量规模的FFT计算时,通过FFT数据访问和计算控制器对FFT计算阵列及总线控制器的控制实现。
对于m个小规模FFT,初始数据和中间数据直接存储在DDR存储器中,需要启动次FFT执行单元FFT-PE。如图7所示,本实施例中执行批量的小规模FFT时状态转换流程,由FFT数据访问和计算控制器控制状态的转换,其中Cnt_rd为读计数器,记录读取到FFT-PE计算阵列中的运算数据的行数;Cnt_wrt为写计数器,记录写回到DDR中的计算结果的行数,且每行数据为1K点,具体状态执行步骤如下:
初始化:启动FFT数据访问和计算控制器并设置参数Sel_PE=0、Cnt_rd=0、Cnt_wrt=0、Addr_Rd=Addr_init、Addr_Wrt=Addr_Result,其中Sel_PE为两个FFT执行子模块FFT-PE中数据存储器的状态及启动顺序,Addr_Rd为读地址、Addr_Wrt为写地址;跳转到状态S1;
状态S1:启动从DDR存储器中读1行数据,数据的起始地址为Addr_Rd,并写入到FFT计算阵列的数据存储器中,数据写入与数据存储器的对应关系如下:
Cnt_rd[1:0]为2’b00:写入到FFT-PE[1]的第一组数据存储器中;
Cnt_rd[1:0]为2’b01:写入到FFT-PE[2]的第一组数据存储器;
Cnt_rd[1:0]为2’b10:写入到FFT-PE[1]的第二组数据存储器中;
Cnt_rd[1:0]为2’b11:写入到FFT-PE[2]的第二组数据存储器中;
同时更新读计数器Cnt_rd和读地址Addr_Rd,即Cnt_rd=Cnt_rd+1,Addr_Rd=Addr_Rd+1K;跳转到状态S2;
状态S2:等待总线控制状态器返回读1行数据完成信号,读1行数据完成后根据读计数器Cnt_rd、Sel_PE的值执行如下操作:
如果Cnt_rd<3且Sel_PE[0]=0且Sel_PE[1]=0,启动FFT-PE[1]对第一组数据存储器中的数据进行FFT计算,更新Sel_PE:Sel_PE++;
如果Cnt_rd<3且Sel_PE[0]=0且Sel_PE[1]=1,启动FFT-PE[1]对第二组数据存储器中、数据进行FFT计算,更新Sel_PE:Sel_PE++;
如果Cnt_rd<3且Sel_PE[0]=1且Sel_PE[1]=0,启动FFT-PE[2]对第一组数据存储器中数据进行FFT计算,更新Sel_PE:Sel_PE++;
如果Cnt_rd<3且Sel_PE[0]=1且Sel_PE[1]=1,启动FFT-PE[2]对第二组数据存储器中数据进行FFT计算,更新Sel_PE:Sel_PE++;
如果Cnt_rd<4且Cnt_rd<num_sFFT,跳转到状态S1,否则跳转到状态S3;
状态S3:FFT数据访问和计算控制器等待FFT-PE[1]、FFT-PE[2]计算完成,由FFT-PE[1]或者FFT-PE[2]返回1行(规模为N)FFT计算完成信号,收到完成信号后跳转到状态4;
状态S4:启动写1行(1K点)结果到DDR存储器,数据起始地址为Addr_Wrt。计算结果在数据存储器中的位置由写地址Cnt_Wrt确定,其对应关系如下:
Cnt_Wrt[1:0]为2’b00:读FFT-PE[1]的第一组数据存储器中的计算结果;
Cnt_Wrt[1:0]为2’b01:读FFT-PE[2]的第一组数据存储器中的计算结果;
Cnt_Wrt[1:0]为2’b10:读FFT-PE[1]的第二组数据存储器中的计算结果;
Cnt_Wrt[1:0]为2’b11:读FFT-PE[2]的第二组数据存储器中的计算结果;同时根据读Cnt_rd、Sel_PE的值执行如下操作:
如果Sel_PE<num_sFFT且Sel_PE[0]=0且Sel_PE[1]=0,启动FFT-PE[1]对数据存储器中第1组进行FFT计算,更新Sel_PE:Sel_PE++;
如果Sel_PE<num_sFFT且Sel_PE[0]=0且Sel_PE[1]=1,启动FFT-PE[1]对数据存储器中第2组进行FFT计算,更新Sel_PE:Sel_PE++;
如果Sel_PE<num_sFFT且Sel_PE[0]=1且Sel_PE[1]=0,启动FFT-PE[2]对数据存储器中第1组进行FFT计算,更新Sel_PE:Sel_PE++;
如果Sel_PE<num_sFFT且Sel_PE[0]=1且Sel_PE[1]=1,启动FFT-PE[2]对数据存储器中第2组进行FFT计算,更新Sel_PE:Sel_PE++;
更新写计算器和写地址:Cnt_wrt=Cnt_wrt+1,Addr_Wrt=Addr_Wrt+1K,跳转到状态S5;
状态S5:等待写1行结果完成,由总线控制状态器返回写1行结果数据完成信号,完成后如果读计数器Cnt_rd<num_sFFT,跳转到状态S1;如果读计数器Cnt_wrt<num_sFFT,跳转到状态S3;否则跳转到计算完成状态。
执行批量的中等规模或大规模FFT时,初始数据和中间数据存储在SRAM中,需要分别以行访问方式以及列访问方式读取数据。本实施例中,行访问时,状态转换和地址计算如上所述,即与数据存储在DDR存储器中转换方式相同,其中1行内数据以突发访问方式连续进行读写,每个数据的地址依次增加,每行访问完后地址增加1K。列访问时,状态转换如上所述,即与数据存储在DDR存储器中转换方式相同。
对于m个中等规模FFT计算,需要将数据分成个1MB的数据块,每个N点的数据分成行1K点的数据。如图7所示,本实施例中执行批量的中等规模FFT时状态转换流程,由FFT数据访问和计算控制器控制进行状态的转换,其中Cnt_block记录从DDR搬移数据到SRAM的1MB数据块数。
初始化:启动FFT数据访问和计算控制器并设置参数Cnt_block=0、Addr_init_Block=Addr_init、Addr_Result_Block=Addr_Result、Addr_SRAM=0,其中Cnt_block为块计算器,记录数据块Addr_init_Block为读地址,Addr_Result_Block为DDR起始地址,Addr_SRAM为数据在SRAM起始地址。
状态M1:启动从DDR存储器中读1MB数据块到SRAM存储器中,DDR起始地址为Addr_init_Block,更新块计算器和读地址即Cnt_block=Cnt_block+1,Addr_init_Block=Addr_init_Block+128K,跳转到状态M2;
状态M2:等待总线控制器返回读取1MB数据块完成,跳转到状态M3;
状态M3:启动SRAM中1K*128数据块的列方向FFT计算,与数据存储在SRAM存储器中(列访问)时方法相同,执行列方向上的1K点FFT且行数为128行,计算完成后增加一级补偿旋转因子的计算;跳转到状态M4;
状态M4:等待1MB数据块的列方向FFT计算完成,并将中间计算结果替换SRAM中的初始数据,完成后跳转到状态M5;
状态M5:启动1MB数据块的行方向FFT计算,与数据存储在SRAM存储器中行访问时方法相同,执行行方向点FFT且行数为行;跳转到状态M6;
状态M6:等待1MB数据块的行方向FFT计算完成,并将最终FFT计算结果替换SRAM中的中间计算结果,完成后跳转到状态M7;
状态M7:启动从SRAM存储器中读1MB结果搬移到DDR存储器中,以列方向从SRAM中读出数据并以行顺序存储到DDR存储器中实现数据块搬移,完成矩阵转置功能,DDR存储器起始地址为Addr_Result_Block,1MB结果搬移完成后地址更新为Addr_Result_Block=Addr_Result_Block+128K;跳转到状态M8;
状态M8:等待总线控制状态器返回搬移1MB数据块完成,跳转到状态M9;
状态M9:判断所有1MB数据块是否计算完成,如果块计数器Cnt_block<num_block,跳转到状态M1,否则完成FFT计算,返回给DSP芯片中断信号。
对于批量大规模FFT计算,需要将1行N点数据分成个1MB的数据块。如图8所示,本实施例中执行批量的大规模FFT时FFT数据访问和计算控制器的状态转换流程,其中Cnt_block_col记录从DDR搬移数据到SRAM的1MB列数据块数,Cnt_block_row记录从DDR搬移数据到SRAM的1MB行数据块数,Cnt_FFT记录执行N点FFT计算个数。
初始化:启动FFT数据访问和计算控制器并设置参数Cnt_block_col=0、Cnt_block_row=0、Cnt_FFT=0、Addr_SRAM=0、Addr_init_Block=Addr_init、Addr_Result_Block=Addr_Result、Addr_mid_RD_Block=Addr_DDR、Addr_mid_Wrt_Block=Addr_DDR;
状态B1:启动从DDR存储器中读1MB数据块到SRAM存储器中,DDR起始地址为Addr_init_Block,更新块计算器和读地址,即Cnt_block_col=Cnt_block_col+1,Addr_init_Block=Addr_init_Block+128K,跳转到状态B2;
状态B2:等待总线控制器返回搬移1MB数据块完成,跳转到状态B3;
状态B3:启动1MB数据块的列方向FFT计算,与数据存储在SRAM存储器中列访问时方法相同,即为执行列方向1K点FFT,行数为128行;完成后需要增加一级补偿旋转因子的计算,跳转到状态B4;
状态B4:等待1MB数据块的列方向FFT计算完成,并将列FFT变换后的中间结果替换SRAM中的初始数据,完成后跳转到状态B5;
状态B5:启动从SRAM存储器中读1MB列FFT变换后的中间结果块到DDR中,DDR起始地址为Addr_mid_Wrt_Block,Addr_mid_Wrt_Block=Addr_mid_Wrt_Block+128K,跳转到状态B6;
状态B6:等待总线控制状态器返回搬移1MB数据块完成,跳转到状态B7;
状态B7:判断所有1MB数据块是否计算完成,更新Cnt_block_col++,如果Cnt_block_col<num_block,跳转到状态B1,否则跳转到状态B8,开始行FFT计算。
状态B8:启动1MB数据块的行方向FFT计算,与数据存储在DDR存储器中行访问时方法基本相同,不同在于行方向FFT计算结果需要存储到SRAM中,本次FFT计算即为执行行方向点FFT,行数为行。DDR存储器起始地址为Addr_mid_RD_Block,同时更新读地址Addr_mid_RD_Block=Addr_mid_RD_Block+128K,跳转到状态B9;
状态B9:等待1MB数据块的行方向FFT计算完成,并将行方向FFT变换后的最终结果存储到SRAM中,完成后跳转到状态B10;
状态B10:启动从SRAM存储器中读1MB列FFT变换后的中间结果块到DDR中,DDR起始地址为Addr_Result_Block,Addr_Result_Block=Addr_Result_Block+128K。如图4中的步骤4.4所示,本次数据搬移以列的方向从SRAM中读出数据,并以行顺序存储到DDR存储器中,通过这种方式完成矩阵转置功能。跳转到状态B11;
状态B11:等待总线控制状态器返回搬移1MB数据块完成,完成后跳转到状态B12;
状态B12:判断所有1MB数据块的行方向FFT计算是否完成,同时更新Cnt_block_row++;如果Cnt_block_row<num_block,跳转到状态B8,否则跳转到状态B13。
状态B13:判断m行N点FFT计算是否完成,同时更新Cnt_FFT++;如果Cnt_FFT<m,跳转到状态B1,否则表示本次FFT计算完成。
上述只是本发明的较佳实施例,并非对本发明作任何形式上的限制。虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明。任何熟悉本领域的技术人员,在不脱离本发明技术方案范围的情况下,都可利用上述揭示的技术内容对本发明技术方案做出许多可能的变动和修饰,或修改为等同变化的等效实施例。因此,凡是未脱离本发明技术方案的内容,依据本发明技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均应落在本发明技术方案保护的范围内。
Claims (8)
1.一种基于DSP芯片的可变长度的FFT计算方法,其特征在于步骤为:
(1)判断存储在片外存储器中待运算数据的长度N,若N<N1,转入执行步骤(2);若N1<N<TH1,转入执行步骤(3);若TH1<N<TH2,转入执行步骤(4);其中N=2k,N1为DSP芯片内FFT执行装置能够直接支持的最大点数,TH1为片上存储器能够存储的最大点数,TH2=N1*N1;
(2)直接以DMA方式从片外存储器中读取初始数据,所述FFT执行装置执行N点一维FFT运算后将运算结果以DMA方式写回片外存储器中,退出计算;
(3)将所述待运算数据视为N1*N2的二维数据矩阵并按行顺序读取到片上存储器,在二维数据矩阵中行数为N1、列数为N2,其中N=N1*N2;所述FFT执行装置对片上存储器中数据矩阵执行二维FFT运算后得到最终结果矩阵,按列顺序读取所述最终结果矩阵并按行顺序写回片外存储器,退出计算;
(4)将所述待运算数据视为N1*N2的二维矩阵并按列分为多个列数据块,每个列数据块包含TH1个数据点,依次读取每个列数据块到片上存储器中并由所述FFT执行装置进行列方向的FFT计算,将计算结果顺序写回片外存储器;将所述计算结果按行分为多个行数据块,每个行数据块包含TH1个数据点,依次读取每个行数据块到片上存储器中,由所述FFT执行装置进行行方向的FFT计算,按列顺序读取计算结果并按行顺序写回片外存储器,退出计算。
2.根据权利要求1所述的基于DSP芯片的可变长度的FFT计算方法,其特征在于,所述步骤(3)的具体步骤为:
(3.1)将片外存储器中N点所述待运算数据视为N1*N2的二维数据矩阵,按行顺序读取所述二维数据矩阵并以相同顺序存储到片上存储器中,得到初始数据矩阵;
(3.2)所述FFT执行装置读取片上存储器中的所述初始数据矩阵并执行列方向上的N2次N1点FFT运算,进行旋转因子补偿后得到列方向运算结果矩阵,并写入片上存储器中对应位置;
(3.3)所述FFT执行装置从片上存储器中顺序读取所述列方向运算结果矩阵并执行行方向上的N1次N2点FFT运算,得到最终运算结果矩阵并顺序写入到片上存储器中对应位置;
(3.4)按列顺序从片上存储器中读取所述最终结果矩阵并以行顺序写回片外存储器中,得到最终结果矩阵,退出计算。
3.根据权利要求2所述的基于DSP芯片的可变长度的FFT计算方法,其特征在于,所述步骤(3.2)的具体步骤为:
(3.2.1)以间隔寻址的方式从片上存储器中读取所述初始数据矩阵的一列数据至所述FFT执行装置中;
(3.2.2)由所述FFT执行装置进行N1点FFT运算,得到当前列数据的蝶形运算结果;对所述蝶形运算结果进行一级补偿旋转因子计算,得到当前列数据的计算结果;以间隔寻址的方式读取下一列数据至所述FFT执行装置中,返回执行步骤(3.2.2),总计执行N2次后得到列方向运算结果矩阵;
(3.2.3)将所述列方向运算结果矩阵的每列数据以间隔寻址的方式写入片上存储器的对应位置中,转入执行步骤(3.3)。
4.根据权利要求3所述的基于DSP芯片的可变长度的FFT计算方法,其特征在于,所述步骤(3.3)的具体步骤为:
(3.3.1)从片上存储器中顺序读取所述列方向运算结果矩阵的一行数据至所述FFT执行装置中;
(3.3.2)由所述FFT执行装置进行N2点FFT运算,得到当前行数据的运算结果;顺序读取下一行数据至所述FFT执行装置中,返回执行步骤(3.3.2),总计执行N1次后得到最终运算结果矩阵;
(3.3.3)将所述最终运算结果矩阵的每行数据顺序写入片上存储器的对应位置中,转入执行步骤(3.4)。
5.根据权利要求1所述的基于DSP芯片的可变长度的FFT计算方法,其特征在于,所述步骤(4)的具体步骤为:
(4.1)将片外存储器中所述待运算数据视为N1*N2的二维数据矩阵,并将二维数据矩阵按列分为m个列数据块,每个列数据块包含TH1个数据点,其中按行顺序读取一个列数据块,转入执行步骤(4.2);
(4.2)将当前列数据块按顺序读取到片上存储器中,由所述FFT执行装置执行列方向的FFT计算,进行旋转因子补偿后得到当前列数据块的计算结果,并将所述当前列数据块的计算结果顺序写回片外存储器;按行顺序读取下一个列数据块,返回执行步骤(4.2),直至完成所有列数据块的运算,得到列方向计算结果矩阵;
(4.3)按行顺序将片外存储器中所述步骤(4.2)得到的列方向计算结果矩阵分为m个大行数据块,每个行数据块包含TH1个数据点,按行顺序读取一个行数据块,转入执行步骤(4.4);
(4.4)将当前行数据块按顺序读取到片上存储器中,由所述FFT执行装置执行行方向的FFT计算,得到当前行数据块的计算结果,按列读取所述当前行数据块的计算结果并按行写回片外存储器;按行顺序读取下一个行数据块,返回执行步骤(4.4);直至完成所有行数据块的运算,得到最终结果矩阵,退出计算。
6.根据权利要求5所述的基于DSP芯片的可变长度的FFT计算方法,其特征在于,所述步骤(4.2)中得到当前列数据块的计算结果的具体步骤为:
(4.2.1)以间隔寻址的方式从片上存储器中读取当前列数据块的一列数据至所述FFT执行装置中;
(4.2.2)由所述FFT执行装置进行N1点FFT运算,得到当前列数据的蝶形运算结果;对蝶形运算结果进行一级补偿旋转因子计算,得到当前列的运算结果;以间隔寻址的方式读取下一列数据至所述FFT执行装置中,返回执行步骤(4.2.2),总计执行完t1次后得到当前列数据块的列方向计算结果矩阵,其中
(4.2.3)将所述当前列数据块的列方向计算结果矩阵以间隔寻址的方式写入片上存储器的对应位置中,得到当前列数据块的计算结果。
7.根据权利要求5所述的基于DSP芯片的可变长度的FFT计算方法,其特征在于,所述步骤(4.4)中得到当前行数据块的计算结果的具体步骤为:
(4.4.1)以顺序寻址的方式从当前行数据块中取出一行数据至所述FFT执行装置中;
(4.4.2)由所述FFT执行装置进行N3点FFT计算,其中得到当前行数据的运算结果;以顺序寻址的方式读取下一行数据至所述FFT执行装置中,返回执行步骤(4.4.2),总计执行t2次后得到当前行数据块的行方向计算结果矩阵,其中
(4.4.3)将所述当前行数据块的行方向计算结果矩阵的每行数据顺序写入片上存储器的对应位置中,得到当前行数据块的计算结果。
8.根据权利要求1~7中任意一项所述的基于DSP芯片的可变长度的FFT计算方法,其特征在于:所述片上存储器为DDR存储器,所述片外存储器为SRAM存储器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410174461.0A CN103955446B (zh) | 2014-04-28 | 2014-04-28 | 基于dsp芯片的可变长度fft计算方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410174461.0A CN103955446B (zh) | 2014-04-28 | 2014-04-28 | 基于dsp芯片的可变长度fft计算方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103955446A CN103955446A (zh) | 2014-07-30 |
CN103955446B true CN103955446B (zh) | 2017-04-19 |
Family
ID=51332721
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410174461.0A Active CN103955446B (zh) | 2014-04-28 | 2014-04-28 | 基于dsp芯片的可变长度fft计算方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103955446B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102477093B1 (ko) | 2015-10-13 | 2022-12-13 | 삼성전자주식회사 | 푸리에 변환을 수행하는 방법 및 장치 |
CN105224505B (zh) * | 2015-10-29 | 2018-05-25 | 中国人民解放军国防科学技术大学 | 基于矩阵转置操作的fft加速器装置 |
CN105302644B (zh) * | 2015-10-29 | 2019-09-06 | 中国人民解放军国防科学技术大学 | 基于令牌任务调度策略的fft加速器装置 |
CN105488753B (zh) * | 2015-11-27 | 2018-12-28 | 武汉精测电子集团股份有限公司 | 一种对图像进行二维傅立叶变换或反变换的方法及装置 |
CN106021182B (zh) * | 2016-05-17 | 2018-11-30 | 华中科技大学 | 一种基于二维fft处理器的行转置架构设计方法 |
CN107066235B (zh) * | 2017-04-24 | 2021-05-14 | 北京华大信安科技有限公司 | 计算方法及装置 |
CN108765471B (zh) * | 2018-03-29 | 2021-12-07 | 北京航天自动控制研究所 | 一种基于运算资源负载均衡技术的dsp图像匹配方法 |
CN111784557A (zh) * | 2020-06-30 | 2020-10-16 | 安徽寒武纪信息科技有限公司 | 一种处理图像数据的方法、装置、板卡及可读存储介质 |
CN117389946B (zh) * | 2023-11-09 | 2024-05-28 | 合肥灿芯科技有限公司 | 一种可动态扩展点数的fft实现结构 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102004720A (zh) * | 2010-11-09 | 2011-04-06 | 无锡中星微电子有限公司 | 可变长快速傅立叶变换电路及实现方法 |
CN102567282A (zh) * | 2010-12-27 | 2012-07-11 | 北京国睿中数科技股份有限公司 | 通用dsp处理器中fft计算实现装置和方法 |
CN102945224A (zh) * | 2012-09-18 | 2013-02-27 | 西安电子科技大学 | 基于fpga的高速可变点fft处理器及其处理方法 |
-
2014
- 2014-04-28 CN CN201410174461.0A patent/CN103955446B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102004720A (zh) * | 2010-11-09 | 2011-04-06 | 无锡中星微电子有限公司 | 可变长快速傅立叶变换电路及实现方法 |
CN102567282A (zh) * | 2010-12-27 | 2012-07-11 | 北京国睿中数科技股份有限公司 | 通用dsp处理器中fft计算实现装置和方法 |
CN102945224A (zh) * | 2012-09-18 | 2013-02-27 | 西安电子科技大学 | 基于fpga的高速可变点fft处理器及其处理方法 |
Non-Patent Citations (11)
Title |
---|
A pipelined memory-efficient architecture for ultra-long variable-size FFT processors;Chen He等;《International conference on computer science and information technology,2008,ICCSIT 08,International conference on》;20080902;第357-361页 * |
A transpose-free in-place SIMD optimized FFT;James R.Geraci等;《ACM trasactions on architecture and code optimization(TACO)》;20121231;第9卷(第3期);第3章 * |
A unified co-processor architecture for matrix decomposition;窦勇等;《journal of computer science and technology》;20100715;第25卷(第4期);第874-885页 * |
dynamic configurable floating-point FFT pipelines and hybrid-mode cordic on fpga;Jie Zhou等;《Embedded software and systems,2008,ICESS 08,international conference on》;20080731;第616-620页 * |
FFTs in external of hierarchical memory;David H.Bailey等;《Proceedings of the 1989 ACM/IEEE conference on supercomputing》;19891231;第234-242页 * |
FPGA SAR processor with window memeory accesses;Yong Dou等;《2007 IEEE international conf. on application-specific systems,architectures and processors》;20070711;第95-100页 * |
novel memory reference reduction methods for FFT implementations on DSP processors;Yuke Wang等;《IEEE transtions on signal processing》;20070531;第55卷(第5期);第2338-2349页 * |
Transforming a linear algebra core to an FFT accelerator;Ardavan Pedram等;《2013 IEEE 24th international conference on application-specific systems,architectures and processors》;20130607;第175-184页 * |
二维FFT在TMS320系列DSP中的实现;董晖等;《雷达与对抗》;20020331;第34-38页 * |
基于FPGA的高精度科学计算加速器研究;雷元武等;《计算机学报》;20120115;第35卷(第1期);第112-122页 * |
并行cordic算法的研究及fpga实现;雷元武等;《计算机工程与科学》;20080815;第30卷(第8期);第75-78页 * |
Also Published As
Publication number | Publication date |
---|---|
CN103955446A (zh) | 2014-07-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103955446B (zh) | 基于dsp芯片的可变长度fft计算方法 | |
CN109992743B (zh) | 矩阵乘法器 | |
CN103955447B (zh) | 基于dsp芯片的fft加速器 | |
CN110415157B (zh) | 一种矩阵乘法的计算方法及装置 | |
CN107657581A (zh) | 一种卷积神经网络cnn硬件加速器及加速方法 | |
KR102486029B1 (ko) | 비트폭이 다른 연산 데이터를 지원하는 연산 유닛, 연산 방법 및 연산 장치 | |
CN105224505B (zh) | 基于矩阵转置操作的fft加速器装置 | |
CN111461311B (zh) | 基于众核处理器的卷积神经网络运算加速方法及装置 | |
CN107451097B (zh) | 国产申威26010众核处理器上多维fft的高性能实现方法 | |
US20100191791A1 (en) | Method and apparatus for evaluation of multi-dimensional discrete fourier transforms | |
CN108509270A (zh) | 一种国产申威26010众核处理器上K-means算法的高性能并行实现方法 | |
EP3931688B1 (en) | Data processing | |
CN107291666A (zh) | 一种数据处理方法及处理装置 | |
WO2019046727A1 (en) | PROVIDING FLEXIBLE MATRIX PROCESSORS FOR REALIZING NEURAL NETWORK CONVOLUTION IN MATRIX PROCESSOR-BASED DEVICES | |
CN106933777B (zh) | 基于国产申威26010处理器的基2一维fft的高性能实现方法 | |
US9582474B2 (en) | Method and apparatus for performing a FFT computation | |
JP2021128752A (ja) | インメモリコンピューティングに対するデータ配置のための方法及びその方法が適用されたメモリモジュール | |
CN104636315A (zh) | 面向gpdsp的矩阵lu分解向量化计算的方法 | |
US8539207B1 (en) | Lattice-based computations on a parallel processor | |
Meng et al. | PPOAccel: A high-throughput acceleration framework for proximal policy optimization | |
CN107111547A (zh) | 存储器访问单元 | |
CN106469134B (zh) | 一种用于fft处理器的数据无冲突存取方法 | |
US11620077B2 (en) | Method of accessing a memory, and corresponding circuit | |
CN104615582B (zh) | 面向gpdsp的大点数一维fft向量化计算的方法 | |
CN103699517B (zh) | 一种1-d/2-d混合架构fft处理器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |