一种 FFT/DFT 倒序方法和装置 【技术领域】
本发明涉及通信领域, 尤其涉及一种 FFT/DFT 倒序方法和装置。背景技术 FFT( 快 速 傅 里 叶 变 换, Fast Fourier Transform) 和 DFT( 离 散 傅 里 叶 变 换, Discrete Fourier Transform) 广泛应用于进行信号处理的通信系统中, 尤其是涉及 OFDM 的 LTE、 CMMB、 DVB、 DAB 等通信系统中。传统的 FFT/DFT 算法, 无论是时间抽取 (DIT) 还是 频率抽取 (DIF) 算法, 在对抽取的信号进行 FFT/DFT 过程中, 都需要对存储单元中的输入数 据或者输出数据进行一次倒序操作。输入数据可以是正序输入存储到存储单元中, 蝶形运 算结束后再对存储单元中的数据进行一次倒序操作得到最终结果, 或者首先对输入数据进 行一次倒序操作存储到存储单元中, 而后蝶形运算得到最终结果。
传统的倒序操作通常是缓存所有的数据, 而后逐个顺序的读出数据, 每个数据计 算相应的倒序后地址, 然后按倒序后地址写回缓存。 或者是按倒序的顺序逐个的读出数据, 再按顺序逐个写回缓存。例如 N = p1p2...pm 点的 DFT, 若按基 p1, 基 p2, ..., 基 pm 的顺序进
行 m 级的 DFT 运算, 那么对于 N 点的数据 ( 地址编号 0 到 N-1), 每个数据可以得到其地址编 号唯一的 p1, p2, ..., pm 混合进制表示方式, 第 k 个数据有唯一的地址表示方式 :
k = cmkcm-1, 0 ≤ cik ≤ pik-1 k...c2kc1k = cmkpm-1...p1+cm-1, kpm-2...p1+...+c2kp1+c1k
上式的进位方式为从右向左进位, 第 k 个数据倒序后的地址为 :
k′= c1kc2k...cm-1, kcmk = c1kpm-1...p1+c2kpm-2...p1+...+cm-1, kp1+cmk
上式的进位方式同样为从右向左进位 ; 如果采用从左向右进位, 则倒序后地址 k′= cmkcm-1,k...c2kc1k, 该数据倒序后地址的比特序列和该数据倒序前地址的比特序列相 同, 但由于倒序后采用从左向右的进位方式, 因此, 倒序后的实际地址已变。 例如 : 若倒序前 后都采用从右向左的进位表示方式, 且 p1 = p2 = ... = pm = 2, c1kc2k...cmk 为数据倒序前 的二进制地址, 那么将该地址的二进制位串左右颠倒得到的二进制位串 cmkcm-1,k...c1k 即为 第 k 个数据倒序后的二进制地址。
但现有的倒序方法由于通常采用串行顺序实现, 即需要对每个数据计算倒序后的 地址, 并依次进行倒序, 这样在 FFT/DFT 点数较多时进行倒序操作需要消耗的时间也比较 大。例如 : LTE 系统中的 2048 点 FFT 需要消耗 2048 个时钟周期的时间。在 FFT/DFT 采用 矢量处理器计算实现时, 倒序需要消耗的时间甚至会数倍于矢量处理器蝶形运算时间, 导 致矢量处理器的利用率大大降低。 发明内容
本发明提供一种 FFT/DFT 倒序方法及装置, 减少了数据的 FFT/DFT 倒序时间, 提高 了矢量处理器的利用效率。
一种 FFT/DFT 倒序方法, 包括 :
A、 在对信号进行 FFT/DFT 过程中, 将存储单元中数据地址最低位相同的数据分别组成数据序列, 并在各数据序列内部, 各数据按数据地址从小到大排列, 各数据序列之间, 各数据按数据地址最低位从小到大排列 ;
B、 对各数据序列分别执行 : 将未经过排序处理的最低地址位相同的数据分别组 成数据子序列, 并在各数据子序列内部, 各数据按数据地址从小到大排列, 各数据子序列之 间, 各数据按未经过排序处理的最低地址位从小到大排列, 其中, 所述未经过排序处理的最 低地址位指各数据的数据地址中不相同地址位的最低位 ;
C、 对各数据子序列, 返回步骤 B 中将未经过排序处理的最低地址位相同的数据分 别组成数据子序列的步骤, 直到得到的各数据子序列中的数据小于设定值 ;
D、 对步骤 C 中得到的各数据子序列分别进行序列内倒序。
其中, 当采用基 2 算法的 FFT/DFT 时, 所述步骤 D 中的进行序列内倒序具体为 : m
对数据子序列中的 N = 2 个数据, 将第 K 个数据排列到第 K’ 位, 其中, 第 K 个数 据的数据地址为二进制位串 c1kc2k...cm-1,kcmk, 地址进位方式为从右向左进位, 则倒序后的 地址 K’ 为二进制位串 c1kc2k...cm-1, 进位方式为从左向右进位。 kcmk,
其中, 当采用混合基算法的 FFT/DFT 时, 所述步骤 D 中的进行序列内倒序具体为 :
对数据子序列中的 N = p1p2...pm 个数据, 将第 K 个数据排列到第 K’ 位, 其中, 第 K 个数据的数据地址为混合进制位串 c1kc2k...cm-1, 地址进位方式为从右向左进位, 则倒 kcmk, 序后的地址 K’ 为混合进制位串 c1kc2k...cm-1, 进位方式为从左向右进位。 kcmk,
其中, 当采用基 2 算法的 FFT/DFT 时, 所述将存储单元中数据地址最低位相同的数 据分别组成数据序列, 并在各数据序列内部, 各数据按数据地址从小到大排列, 各数据序列 之间, 各数据按数据地址最低位从小到大排列具体为 :
将存储单元中的数据按照数据地址从小到大依次提取数据地址最低位为 0 的数 据组成第一数据序列, 按照数据地址从小到大依次提取数据地址最低位为 1 的数据组成第 二数据序列 ;
将第一数据序列排列在前, 第二数据序列排列在后。
其中, 当采用混合基 p1p2...pm 算法的 FFT/DFT 时, 所述将存储单元中数据地址最 低位相同的数据分别组成数据序列, 并在各数据序列内部, 各数据按数据地址从小到大排 列, 各数据序列之间, 各数据按数据地址最低位从小到大排列具体为 :
将存储单元中的数据按照数据地址从小到大依次分别提取数据地址最低位为 0 到 pm-1-1 的数据组成 pm 个数据序列 ;
将各数据子序列按照数据地址最低位从小到大排列。
其中, 当所述设定值小于等于 3 时, 则不必执行步骤 D。
一种 FFT/DFT 倒序装置, 包括 :
数据序列划分模块, 用于在对信号进行 FFT/DFT 过程中, 将存储单元中数据地址 最低位相同的数据分别组成数据序列, 并在各数据序列内部, 各数据按数据地址从小到大 排列, 各数据序列之间, 各数据按数据地址最低位从小到大排列 ;
数据子序列划分模块, 用于对各数据序列分别执行 : 将未经过排序处理的最低地 址位相同的数据分别组成数据子序列, 并在各数据子序列内部, 各数据按数据地址从小到 大排列, 各数据子序列之间, 各数据按未经过排序处理的最低地址位从小到大排列, 对得到 的各数据子序列, 返回继续执行将未经过排序处理的最低地址位相同的数据分别组成数据子序列的步骤, 直到得到的各数据子序列中的数据小于设定值, 其中, 所述未经过排序处理 的最低地址位指各数据的数据地址中不相同地址位的最低位 ;
序列内倒序模块, 用于对数据子序列最终得到的各数据子序列分别进行序列内倒 序。
其中, 当采用基 2 算法的 FFT/DFT 时, 序列内倒序模块, 具体用于对数据子序列 m 中的 N = 2 个数据, 将第 K 个数据排列到第 K’ 位, 其中, 第 K 个数据的数据地址为二进制 位串 c1kc2k...cm-1,kcmk, 地址进位方式为从右向左进位, 则倒序后的地址 K’ 为二进制位串 c1kc2k...cm-1, 进位方式为从左向右进位。 kcmk,
其中, 当采用混合基算法的 FFT/DFT 时, 序列内倒序模块, 具体用于对数据子序列 中的 N = p1p2...pm 个数据, 将第 K 个数据排列到第 K’ 位, 其中, 第 K 个数据的数据地址为 混合进制位串 c1kc2k...cm-1,kcmk, 地址进位方式为从右向左进位, 则倒序后的地址 K’ 为混合 进制位串 c1kc2k...cm-1, 进位方式为从左向右进位。 kcmk,
本发明提供的 FFT/DFT 倒序方法, 通过对存储单元中的数据按数据地址最低位到 最高位依次数据划分, 得到数据子序列, 并对数据子序列进行序列内倒序, 得到最终的数据 倒序结果。采用本发明的方法, 相对传统的 FFT/DFT 倒序方法, 节省了倒序时间, 提高了矢 量处理器的利用效率。 附图说明 图 1 为本发明实施例提供的 FFT/DFT 的倒序方法流程图 ;
图 2 为本发明实施例提供的 N = 24 = 16 点的 FFT 的倒序方法流程图 ;
图 3 为本发明实施例提供的 16 点 FFT 倒序过程示意图 ;
图 4 为本发明实施例提供的 N = 261 = 2048 点 FFT 的倒序方法流程图 ;
图 5 为本发明实施例提供的 2048 点 FFT 倒序过程示意图 ;
图 6 为 2 倍数据压缩装置示意图 ;
图 7 为单步 32 点倒序装置的示意图 ;
图 8 为本发明实施例提供的采用基 2、 基 3、 基 5 计算的 N = 30 点 FFT/DFT 的倒序 方法流程图 ;
图 9 为本发明实施例提供的采用基 2、 基 3、 基 5 计算的 N = 30 点 FFT/DFT 的倒序 过程示意图 ;
图 10 为本发明实施例提供的 N = 1200 点 FFT 的倒序方法流程图 ;
图 11 为本发明实施例提供的 1200 点 FFT 倒序过程示意图 ;
图 12 为本发明实施例提供的 p 倍数据压缩装置示意图 ;
图 13 为本发明实施例提供的单步 12 点倒序装置的示意图 ;
图 14 为本发明实施例提供的 FFT/DFT 倒序装置结构图。
具体实施方式
基于现有的 FFT/DFT 倒序方法, 在进行傅里叶变换时, 需要对存储单元中各数据 地址中的每一数据计算倒序后地址, 并将该数据存入倒序后地址中, 需要消耗大量的时间。
本发明实施例提供一种 FFT/DFT 的倒序方法及装置, 通过对存储单元中数据按照数据地址最低位到最高位依次进行数据分组, 第一次分别将最低位相同的数据划分为一个 数据序列, 并顺序对各数据序列排序 ; 再分别对每一个划分的数据序列, 将次低位相同的数 据划分为一个数据子序列, 并按顺序对各数据子序列进行排序, 对各数据子序列, 再按照地 址第三低位进行划分, 并排序, 依次类推, 直到划分的数据子序列中的数据小于设定值, 对 各数据子序列的数据直接进行序列内排序, 得到最终的数据倒序排列。 采用本发明的方法, 不需要对存储单元中的每一个数据地址中的数据进行倒序后地址计算, 节省了 FFT/DFT 倒 序操作的时间。
如图 1 所示, 为本发明实施例提供的 FFT/DFT 的倒序方法流程图, 具体包括 :
S101、 在对信号进行 FFT/DFT 过程中, 将存储单元中数据地址最低位相同的数据 分别组成数据序列, 并在各数据序列内部, 各数据按数据地址从小到大排列, 各数据序列之 间, 按数据地址最低位从小到大排列, 并称数据地址最低位已经过排序处理 ;
例如 : 对 于 点 数 为 N = p1p2...pm 的 FFT/DFT, N = p1p2...pm 表 示 采 用 基 p1, 基 p2, ..., 基 pm 的顺序进行 FFT/DFT 运算, 则数据地址同样采用混合进制 p1p2...pm 表示, 则数 据地址最低位共有 pm 个值, 为 0 到 pm-1, 即对于数据个数为 N = p1p2...pm 的 FFT/DFT, 按照 存储单元中数据地址从小到大依次提取数据地址最低位分别为 0 到 pm-1 的数据, 组成 pm 个 数据序列, 并对各数据序列按数据地址最低位从小到大排列 ; S102、 分别对每一个数据序列, 将未经过排序处理的最低地址位相同的数据分别 组成数据子序列, 并在各数据子序列内部, 各数据按数据地址从小到大排列, 各数据子序列 之间, 各数据按数据地址相同位的前一地址位从小到大排列, 其中, 未经过排序处理的最低 地址位指各数据的数据地址中不相同地址位的最低位 ;
并且经过该步处理后, 则该最低地址位就为经过排序处理 ;
例如对步骤 S101 中得到的数据地址最低位为 0 的数据序列, 则数据地址中不相同 的地址位为次低位至最高位, 将未经过排序处理的最低地址位, 即次低位相同的数据分别 组成数据子序列, 地址次低位共有 pm-1 个值, 为 0 到 pm-1-1, 即按照数据地址从小到大对地址 最低位为 0 的数据序列分别提取次低位地址为 0 的数据, 组成第一数据子序列, 再按照数据 地址从小到大依次提取次低位地址为 1 的数据, 组成第二数据子序列, 依次类推, 直到按照 数据地址从小到大依次提取次低位地址为 pm-1-1 的数据, 组成第 pm-1 数据子序列, 则在每一 数据子序列内部, 各数据按数据地址从小到大排列, 对各数据子序列按照次低位从小到大 排列 ;
依次对步骤 S101 中得到的数据地址最低位为 1 到 pm-1 的数据序列均进行上述处 理;
S103、 对各数据子序列, 继续根据步骤 S102 中的方法进行数据子序列的划分, 直 到得到的各数据子序列中的数据小于设定值 ;
对步骤 S102 中得到的数据各数据子序列, 继续按照上一步骤的将未经过排序处 理的最低地址位的值进行序列划分, 划分方法和步骤 S102 中数据序列的划分方法相同, 直 到最后划分的各数据子序列中的数据小于设定值 ;
S104、 对步骤 S103 中最终得到的各数据子序列, 分别进行序列内倒序。
其中, 当设定值为 3 时, 即在步骤 S103 中, 可以返回步骤 S102 中一直进行数据序 列的划分, 直到最后得到的数据子序列只有两个数据, 因为各数据子序列中的数据是按地
址从小到大排列, 因此不用对该两个数据进行序列内的倒序, 即得到最终的倒序排列的数 据。这样可以不必执行步骤 S104。但这样最后得到的各数据子序列越来越短, 这样在进行 最后几次的分组操作时, 每次消耗较多的时间 ;
因此, 设定值的选择一般大于 3, 当划分的数据子序列内的数据到达或小于设定值 时, 就可以不再对数据子序列进行划分, 而直接执行步骤 S104, 对各数据子序列内的数据进 行序列内倒序, 这样可以将最后的几次效率低下的序列划分操作合并为一步实现。
当采用基 2 算法的 FFT/DFT 时, 步骤 S104 中的进行序列内倒序具体为 : m
对数据子序列中的 N = 2 个数据, 将第 K 个数据排列到第 K’ 位, 其中, 第 K 个数 据的数据地址为二进制位串 c1kc2k...cm-1,kcmk, 地址进位方式为从右向左进位, 则倒序后的 地址 K’ 为二进制位串 c1kc2k...cm-1, 进位方式为从左向右进位。 kcmk,
当采用混合基算法的 FFT/DFT 时, 步骤 S104 中的进行序列内倒序具体为 :
对数据子序列中的 N = p1p2...pm 个数据, 将第 K 个数据排列到第 K’ 位, 其中, 第 K 个数据的数据地址为混合进制位串 c1kc2k...cm-1, 地址进位方式为从右向左进位, 则倒 kcmk, 序后的地址 K’ 为混合进制位串 c1kc2k...cm-1, 进位方式为从左向右进位。 kcmk,
具体的序列内倒序可以采用单步倒序装置实现, 单步倒序装置采用两个地址数相 同的寄存器组成, 第一寄存器的每一数据输出端连接对应的第二寄存器的数据输入端。例 如第 2 个数据, 如果倒序后的地址为第 8 位, 则将第一寄存器中的地址 1 的数据输出端连 接第二寄存器的地址 7 的数据输入端, 第一寄存器中的每一地址均与倒序后对应的地址连 接, 即可以实现单步倒序装置。 当 采 用 基 2 算 法 的 FFT/DFT 时, 第 一 寄 存 器 的 地 址 c1kc2k...cm-1,kcmk( 二 进 制位串, 进位方式为从右向左进位 ) 数据输出端连接第二寄存器的地址 c1kc2k...cm-1, 进位方式为从右向左进位 ) 的数据输入端。进行序列内 kcmk( 二进制位串, kcmkc1kc2k...cm-1, 倒序, 即将第一寄存器的数据按上述寄存器地址的连接关系输入第二寄存器, 即完成序列 内的倒序。
当 采 用 混 合 基 算 法 的 FFT/DFT 时, 第 一 寄 存 器 的 地 址 c1kc2k...cm-1,kcmk( 混 合 进制位串, 进位方式为从右向左进位 ) 数据输出端连接第二寄存器的地址 c1kc2k...cm-1, 进位方式为从左向右进位 ) 的数据输入端。进行序列 kcmk( 混合进制位串, kcmkc1kc2k...cm-1, 内倒序, 即将第一寄存器的数据按上述寄存器地址的连接关系输入第二寄存器, 即完成序 列内的倒序。
例如各数据子序列中只有 32 个数据时, 并且采用基 2 的 FFT/DFT 算法, 采用单 步倒序装置, 第一寄存器的每一数据输出端连接对应的第二寄存器的数据输入端, 将第一 寄存器中地址 0 的数据连接第二寄存器的地址 0, 第一寄存器中地址 1 的数据连接第二 寄存器的地址 16, 第一寄存器地址 2 的数据连接第二寄存器的地址 7, 第一寄存器地址 n(c5c4c3c2c1, 从右向左进位 ) 的数据连接第二寄存器的地址 m(c5c4c3c2c1, 从左向右进 位 )。
假设采用混合基 N = p1p2...pm 的 FFT/DFT 算法, 采用单步倒序装置, 则第一寄存器 的第 n 个数据 ( 地址 p1p2...pm, 从右向左进位 ) 输入第二寄存器的第 m 位 ( 地址 p1p2...pm, 从左向右进位 )。
实施例一
下面以 16 点 FFT 为例, 详细说明本发明实施例提供的 FFT 倒序方法。
如图 2 所示, 为本发明实施例提供的 N = 24 = 16 点的 FFT 的倒序方法流程图, 具 体包括 :
N = 16, 即存储器中共存储 16 个数据, 需要 16 个数据地址, 16 个数据地址采用基 2 表示为 c4c3c2c1, FFT 倒序即是要对 16 个数据地址每一个确定倒序后的地址, 并将该数 据地址中的数据存储到倒序后的地址中。
S201、 按数据地址从小到大的顺序依次从存储单元的 N 个数据中, 提取数据地址 最低位为 0 的数据组成第一数据序列, 再依次提取数据地址最低位为 1 的数据组成第二数 据序列, 并将第一数据序列排列在前, 第二数据序列排列在后 ;
即按数据地址从小到大的顺序依次从 16 个数据中提取 c1 为 0 的数据组成第一数 据序列, 提取 c1 为 1 的数据组成第二数据序列 ;
在具体的实现中, 可以采用数据压缩装置, 从 16 个数据中先提取 c1 为 0 的 8 个数 据, 只需要一个时钟周期, 再提取 c1 为 1 的 8 个数据, 又只需一个时钟周期 ; 因此, 该步需要 2 个时钟周期 ;
S202、 对每一数据序列的 M 个数据继续执行 : 按数据地址从小到大的顺次, 依次提 取数据地址次低位为 0 的数据组成第一数据子序列, 并提取数据地址次低位为 1 的数据组 成第二数据子序列, 并将第一数据子序列排在 M 个数据的前半部分, 第二子序列排在 M 个数 据的后半部分 ;
即对第一数据序列按数据地址从小到大的顺序, 依次从 8 个数据中提取 c2 为 0 的 数据组成第一数据子序列, 提取 c2 为 1 的数据组成第二数据子序列, 并将第一数据子序列 排在 8 个数据的前半部分, 第二数据子序列排在 8 个数据的后半部分 ;
S203、 对步骤 S202 中得到的每一个数据子序列继续执行 : 按照数据地址从小到大 的顺次, 依次提取数据地址第三低位为 0 的数据组成第三数据子序列, 并提取数据地址第 三低位为 1 的数据组成第四数据子序列, 并将第三数据子序列排在该子序列的前半部分, 第四子序列排在该子序列的后半部分 ;
对第一数据子序列, 按数据地址从小到大的顺序, 从 4 个数据中提取 c3 为 0 的数 据组成第三数据子序列, 提取 c3 为 1 的数据组成第四数据子序列, 并将第三数据子序列排 在该 4 个数据的前半部分, 第四数据子序列排在该 4 个数据的后半部分, 即完成对该 16 个 数据的倒序。
如图 3 所示, 为本发明实施例提供的 16 点 FFT 倒序过程示意图 ;
采用这种倒序方法, 即实现了 16 点数据的 FFT 倒序过程, 相对传统的倒序过程, 需 要对每一个数据计算倒序后的数据地址, 需要 16 个时钟周期, 采用本发明的方法, 在步骤 S201 中, 只需要 2 个时钟周期, 步骤 S202 中, 每一次提取需要 1 个时钟周期, 共提取 4 次, 需 要 4 个时钟周期, 步骤 S203 中, 共需要 8 个时钟周期, 因此, 采用本发明的方法, 需要 14 个 时钟周期, 相对于传统的倒序方法, 节省了时间。尤其对点数较多的 FFT 变换, 节省的时间 更多。
实施例二
如图 4 所示, 为本发明实施例提供的 N = 261 = 2048 点 FFT 的倒序方法流程图, 具 体包括 :S401 : 将 2048 个数据从存储器中按数据地址从小到大依次提取地址最低位为 0 的 数据组成第一数据序列, 再提取数据地址最低位为 1 的数据组成第二数据序列, 并且第一 数据子序列排列在前, 第二数据子序列排列在后 ;
其中, 具体的提取方法可以采用数据压缩装置, 将 2048 个数据按数据地址从小到 大依次输入数据压缩装置中, 进行提取。
其中, 数据压缩装置可以采用 2 倍数据压缩装置, 2 倍数据压缩装置具体示意图如 图 6 所示, 采用两个寄存器组成, 第一寄存器的地址 0 数据输出端连接第二寄存器的地址 0 数据输入端, 第一寄存器的地址 2 数据输出端连接第二寄存器的地址 1 数据输入端, 第一寄 存器的地址 4 数据输出端连接第二寄存器的地址 2 数据输入端, 依次类推, 第一寄存器的地 址 2n-2 数据输出端连接第二寄存器的地址 n-1 数据输入端。
其中, 数据压缩装置的 n 可以任意设置, 如采用 n = 1024 的数据压缩装置, 则提取 地址最低位为 0 的数据组成第一数据序列, 只需要一个时钟周期, 再提取地址最低位为 1 的 数据组成第二数据序列, 又只需一个时钟周期。本步只需要两个时钟周期即可完成。
若采用 n = 32 的数据压缩装置, 则需要按数据地址从小到大每次输入 64 个连续 数据到数据压缩装置中进行地址最低位为 0、 以及地址最低位为 1 的数据提取, 64 个周期后 即可获得两个长度为 1024 的数据序列, 且第一数据序列的地址最低位为 0, 第二数据地址 最低位为 1。 S402 : 对每一个数据序列执行 : 将数据序列的 1024 个数据按地址从小到大依次提 取地址次低位为 0 的数据组成第一数据子序列, 再提取数据地址次低位为 1 的数据组成第 二数据子序列, 将第一数据子序列排列在前, 第二数据子序列排列在后 ;
此步中, 数据压缩装置的 n 最大可以设置为 1024/2, 如采用 n = 512 的数据压缩装 置, 则对每一个数据序列只需要两个周期即可实现第一数据子序列、 第二数据子序列的提 取, 本步骤则只需要 4 个周期即可完成。
若采用 n = 32 的数据压缩装置, 则对每一个数据序列的 1024 个数据, 则需要 32 个周期完成第一数据子序列、 第二数据子序列的提取, 本步骤则需要 64 个周期完成。
S403、 对步骤 S402 得到的 2 个数据子序列, 依次对每一个数据子序列, 根据数据地 址从小到大的顺序, 依次提取数据地址第三低位为 0 的数据组成第三数据子序列, 再依次 提取数据地址第三低位为 1 的数据组成第四数据子序列, 将第三数据子序列排列在前, 第 四数据子序列排列在后 ;
第三、 第四数据子序列中的数据个数均为 256, 完成这一步骤如果采用 n = 32 的压 缩装置同样需要 64 个时钟周期 ;
S404、 继续对上一步骤得到的每一个数据子序列, 按数据地址从小到大的顺序, 依 次提取数据地址第四低位为 0 的数据组成第五数据子序列, 再依次提取数据地址第四低位 为 1 的数据组成第六数据子序列, 并将第五数据子序列排列在前, 第六数据子序列排列在 后;
第五、 第六数据子序列中的数据个数为 128 个, 完成这一步骤如果采用 n = 32 的 压缩装置同样需要 64 个时钟周期 ;
S405、 继续对上一步骤得到的每一个数据子序列, 按数据地址从小到大的顺序, 依 次提取数据地址第五低位为 0 的数据组成第七数据子序列, 再依次提取数据地址第六低位
为 1 的数据组成第八数据子序列, 并将第七数据子序列排列在前, 第八数据子序列排列在 后;
第七、 第八数据子序列中的数据个数为 64 个, 完成这一步骤同样 n = 32 的压缩装 置同样需要 64 个时钟周期 ;
S406、 继续对上一步骤得到的每一个数据子序列, 按数据地址从小到大的顺序, 依 次提取数据地址第六低位为 0 的数据组成第九数据子序列, 再依次提取数据地址第七低位 为 1 的数据组成第十数据子序列, 并将第九数据子序列排列在前, 第十数据子序列排列在 后;
第九、 第十数据子序列中的数据个数为 32 个, 完成这一步骤同样 n = 32 的压缩装 置同样需要 64 个时钟周期 ;
S407、 将步骤 S406 中得到的每一个数据子序列中的数据进行序列内的倒序, 得到 最终的倒序存储的数据。
序列内排序可以采用单步倒序装置实现, 如图 7 所示, 为单步 32 点倒序装置的示 意图, 采用两个寄存器组成, 第一寄存器的地址 0 的数据输出端连接第二寄存器的地址 0 数 据输入端, 第一寄存器的地址 1 的数据输出端连接第二寄存器的地址 16 数据输入端, 第一 寄存器的地址 2 数据输出端连接第二寄存器的地址 8 数据输入端, 等等。 当然, 也可以在步骤 S401 到步骤 S406 中的任意步骤, 当划分的数据子序列中的数 据到达或小于设定值时, 直接执行步骤 S407, 进行序列内倒序。
当不执行步骤 S406, 对步骤 S405 得到的每一个数据子序列, 执行步骤 S407, 则在 步骤 S407 中的对序列内的数据进行序列内倒序时, 则需要采用单步 64 点倒序装置。
当然, 单步倒序装置也可以设计成任意点数的单步 n 点倒序装置, 但 n 越大, 需要 的硬件资源越多, 需要的倒序时间越少, 综合考虑倒序时间以及需要的硬件资源, 可以在点 数较多时, 先采用步骤 S401 ~ S406 的分组方式, 将 N 点序列分为若干个子序列, 对每一个 子序列的序列内倒序, 因为点数较少, 则可以采用单步倒序装置直接实现, 这样就可以综合 考虑硬件资源以及节省了倒序时间。
如图 5 所示, 为本发明实施例提供的 2048 点 FFT 倒序过程示意图。
采用上述倒序方法, 如果采用 n = 32 的 2 倍数据压缩装置, 且步骤 S407 中采用单 步 32 点倒序装置, 最终需要消耗的时间为 64*7 = 448 个时钟周期, 相比现有的 FFT 倒序需 要 2048 个时钟周期, 节省了倒序时间。
上述实施例只给出了基 2 的 FFT/DFT 的倒序方法, 下面详细描述对混合基的 FFT/ DFT 的倒序方法。
实施例三
如图 8 所示, 为本发明实施例提供的采用基 2、 基 3、 基 5 计算的 N = 30 点 FFT/DFT 的倒序方法流程图, 具体包括 :
N = 30, 即存储器中共存储 30 个数据, 需要 30 个数据地址, 30 个数据地址采用混 合基表示为 c3c2c1,
S801、 按数据地址从小到大的顺序依次从 N 个数据中, 分别提取数据地址最低位 为 0 的数据组成第一数据序列, 最低位为 1 的数据组成第二数据序列, 最低位为 2 的数据组 成第三数据序列, 最低位为 3 的数据组成第四数据子序列, 最低位为 4 的数据组成第五数据
子序列, 并将五个数据序列按数据地址最低位从小到大排列 ;
因为地址 c3c2c1 采用顺序为基 2、 基 3、 基 5 的表示方法, 因此, 最低位 c1 可能是 0 ~ 4, 倒数第二位 c2 可能是 0 ~ 2, 倒数第三位 c3 可能是 0、 1;
此步骤中, 从 30 个数据中, 分别依次提取 c1 为 0 ~ 4 的数据组成五个数据子序列, 并将子序列按 c1 从小到大排列 ;
完成此步, 需要采用 5 个时钟周期 ;
S802、 对每一个数据子序列, 执行 : 按数据地址从小到大的顺次依次从每一个数据 子序列的 M 个数据中, 分别提取数据地址次低位为 0 ~ 2 的数据组成三个数据子序列, 并将 三个子序列按数据地址次低位从小到大排列 ;
此步骤中, 从每一个子序列的 6 个数据中, 分别依次提取 c2 为 0 ~ 2 的数据组成 三个数据子序列, 并将数据子序列按 c2 从小到大排列, 完成对 30 个点数据的倒序。
完成此步, 对每一个数据子序列, 需要 3 个时钟周期, 因此, 此步共需要 15 个时钟 周期。
如图 9 所示, 为本发明实施例提供的采用基 2、 基 3、 基 5 计算的 N = 30 点 FFT/DFT 的倒序过程示意图。 采用这种倒序方法, 在步骤 S801 中需要 5 个时钟周期, 在步骤 S802 中需要 15 个 时钟周期, 共需要 20 个时钟周期, 相比传统倒序方法需要 30 个时钟周期, 节省了倒序时间。 尤其对点数较多的 DFT 变换, 节省的时间更多。
实施例四
下面以 1200 点 FFT 为例, 详细介绍混合基的 FFT 倒序方法。
如图 10 所示, 为本发明实施例提供的 N = 1200 点 FFT 的倒序方法流程图, 采用的 地址表示方式为基顺序为基 3、 基 2、 基 2、 基 2、 基 2、 基 5、 基 5。
S1001、 将 1200 个数据从存储器中按数据地址从小到大依次分别提取最低位为 0 ~ 4 的数据组成五个数据子序列, 并将五个数据子序列按地址最低位值从小到大排列 ;
其中, 数据压缩装置可以采用 p 倍数据压缩装置, p 倍数据压缩装置具体示意图如 图 12 所示, 采用两个寄存器组成, 第一寄存器的地址 0 数据输出端连接第二寄存器的地址 0 数据输入端, 第一寄存器的地址 p 数据输出端连接第二寄存器的地址 1 数据输入端, 依次 类推, 第一寄存器的地址 pn-p 数据输出端连接第二寄存器的地址 n-1 数据输入端 ;
其中, p 可以根据需要设置, p 倍数据压缩装置的作用即是从每 p 个数据中提取一 个数据, n 同样可以根据需要设置 ;
例如 : 在步骤 S1001 中, 最低位地址为 0 ~ 4, 因此需要提取低位为 0 的数据组成数 据子序列, 则需要每 5 个数据中提取一个数据, 因此需要采用 p = 5 的 5 倍数据压缩装置 ;
S1002、 对每一个数据子序列执行 : 将数据序列的 240 个数据按数据地址从小到大 依次输入数据压缩装置中, 分别提取数据地址次低位为 0 ~ 4 的数据组成五个数据子序列, 并将五个数据子序列按数据地址次低位从小到大的顺序排列 ;
S1003、 对上述步骤中的每一个数据子序列, 共 48 个数据, 根据数据地址第三低位 依次进行数据提取组成数据子序列, 并将各数据子序列按数据地址第三低位从小到大的顺 序排列 ;
具体的提取方式和步骤 S1002 中相同, 数据地址第三低位共 2 个值, 0、 1, 因此分别
根据第三低位地址为 0 提取, 第三低位地址为 1 进行提取 ;
S1004、 对上述步骤中得到的的每一个数据子序列, 共 24 个数据, 根据数据地址第 四低位依次进行数据提取组成数据子序列, 并将各数据子序列按数据地址第四低位从小到 大的顺序排列 ;
经过此步划分后, 得到的每个数据子序列中的数据个数为 12 ;
S1005、 将得到的每一个数据子序列中的数据进行序列内的倒序, 得到最终的倒序 数据。
其中, 各序列内数据的倒序同样可以采用单步倒序装置实现, 在本步中, 每一个数 据子序列中包含 12 个数据, 可以采用 12 点单步倒序装置实现。
如图 13 所示, 为单步 12 点倒序装置的示意图, 采用两个寄存器组成, 第一寄存器 的地址 0 的数据输出端连接第二寄存器的地址 0 数据输入端, 第一寄存器的地址 1 的数据 输出端连接第二寄存器的地址 6 数据输入端, 第一寄存器的地址 2 数据输出端连接第二寄 存器的地址 3 数据输入端, 第一寄存器地址 3 数据输出端连接第二寄存器地址 9 数据输入 端, 第一寄存器地址 n 数据输出端连接第二寄存器地址 m 数据输入端, 地址采用基 3、 基 2、 基 2 表示, 则 n 采用混合进制位串表示 (c3c2c1, 从右向左进位 ), n = c3*2*2+c2*2+c1, m 采用混合进制位串表示 (c3c2c1, 从左向右进位 ), m = c3+c2*2+c1*2*2。
同样, 可以对步骤 S704 得到的每一个子序列再进行数据提取, 则进一步又将每一 个子序列分成两个子序列, 则之后每一个子序列中包含 6 个数据, 则可以采用 6 点单步倒序 装置实现序列内倒序, 或者一直划分, 直到每个数据子序列中只包含 2 个数据, 则不需要进 行序列内倒序, 就得到最终的倒序数据。
当然, 也可以在步骤 S1001-S1004 中任意步骤后, 直接执行步骤 S1005, 对得到的 数据子序列进行序列内倒序。
如图 11 所示, 为 1200 点 FFT 倒序过程示意图。
本发明实施例还提供一种 FFT/DFT 倒序装置, 如图 14 所示, 包括 :
数据序列划分模块 141, 用于在对信号进行 FFT/DFT 过程中, 将存储单元中数据地 址最低位相同的数据分别组成数据序列, 并在各数据序列内部, 各数据按数据地址从小到 大排列, 各数据序列之间, 各数据按数据地址最低位从小到大排列 ;
数据子序列划分模块 142, 用于对各数据序列分别执行 : 将未经过排序处理的最 低地址位相同的数据分别组成数据子序列, 并在各数据子序列内部, 各数据按数据地址从 小到大排列, 各数据子序列之间, 各数据按未经过排序处理的最低地址位从小到大排列, 对 得到的各数据子序列, 返回继续执行将未经过排序处理的最低地址位相同的数据分别组成 数据子序列的步骤, 直到得到的各数据子序列中的数据小于设定值, 其中, 所述未经过排序 处理的最低地址位指各数据的数据地址中不相同地址位的最低位 ;
序列内倒序模块 143, 用于对数据子序列最终得到的各数据子序列分别进行序列 内倒序。
其中, 当采用基 2 算法的 FFT/DFT 时, 序列内倒序模块 143, 具体用于对数据子序 m 列中的 N = 2 个数据, 将第 K 个数据排列到第 K’ 位, 其中, 第 K 个数据的数据地址为二进 制位串 c1kc2k...cm-1,kcmk, 地址进位方式为从右向左进位, 则倒序后的地址 K’ 为二进制位串 c1kc2k...cm-1, 进位方式为从左向右进位。 kcmk,其中, 当采用混合基算法的 FFT/DFT 时, 序列内倒序模块 143, 具体用于对数据子 序列中的 N = p1p2...pm 个数据, 将第 K 个数据排列到第 K’ 位, 其中, 第 K 个数据的数据地 址为混合进制位串 c1kc2k...cm-1,kcmk, 地址进位方式为从右向左进位, 则倒序后的地址 K’ 为 混合进制位串 c1kc2k...cm-1, 进位方式为从左向右进位。 kcmk,
显然, 本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精 神和范围。这样, 倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围 之内, 则本发明也意图包含这些改动和变型在内。