一种混合基 DFT 和 IDFT 快速实现方法及装置 技术领域 本发明涉及移动通信领域, 特别是涉及数字信号处理系统 DFT(Discrete Fourier Transform, 离散傅立叶变换 ) 和 IDFT(Inverse Discrete Fourier Transform, 离散傅立叶 逆变换 ) 算法定点实现的一种高速硬件实现方案。
背景技术
在数字信号处理中, 特别是对于有限长序列, DFT 是一种尤为重要的数学变换, 其 实质是有限长序列傅立叶变换的有限点离散采样, 开辟了频域离散化的道路, 使数字信号 处理可以在频域采用数字运算的方法进行, 大大增加了数字信号处理的灵活性。 DFT 在数字 通信、 语音信号处理、 图像处理、 功率谱估计、 地震以及数值分析等各个领域都有广泛的应 用。 其中, 称不能使用基 2 类快速 FFT(Fast Fourier Transform, 快速傅立叶变换 ) 算法来 计算的 DFT 为一般数 DFT 运算。 目前计算一般数 DFT 的算法大概有两类, 一类是混合基算法, 以 Cooley-Tukey 算 法理论为基础, 基 2 类的 FFT 算法也是以此理论为基础修改得到 ; 另一类就是以快速卷积算 法理论为基础的, 代表算法是素因子算法 (PFA) 和 Winograd 付里叶变换算法 (WFTA)。 这两 类算法的设计思想都是想通过把大点数的 DFT 转化成小点数的 DFT 进行运算来达到减少运 算复杂度的目的, PFA 和 WFTA 算法则都要求所分解的小长度之间互素, 因为只有互素, 这两 种算法才能发挥出通过不断嵌套直到最后调用小点数 DFT 进行运算来节省计算复杂度的 目的, 且 PFA 算法的映射过程较为复杂。
混合基 DFT 算法是把大点数据进行分解, 得到多个不同因子的乘积, 再根据小点 数 DFT 公式计算不同因子的 DFT。 其原理见文献 《self-sorting mixed-radix fast fourier transforms》 , C TEMPERTON Journal of computational physics(Print)52 : 11, 1-23, Elsevier, 1983, 整个算法过程简单, 便于实现, 且混合基算法不要求分解的小长度之间互 素, 相对于直接运算 DFT, 复杂度得到了减小。
现有混合基 DFT 算法通常采用两个存储器并在之间进行乒乓操作, 实现每一级的 运算, 如图 1 所示, 从存储器 1 中读取数据, 经过蝶形运算后, 结果数据存入存储器 2, 完成第 一级运算, 然后从存储器 2 读数, 经过蝶形运算后, 存入存储器 1 中, 完成第二级运算, 如此 切换, 完成各级运算, 但这种处理方法需要在前面一级运算完成后才能进行后面一级运算, 所需要时间量为所有各级运算耗时之和, 导致其处理所耗时间很长。
发明内容
本发明所解决的问题是提供一种计算速度更快、 处理时间更短的高速混合基 DFT 实现方法及装置。
为解决以上问题, 本发明提供一种混合基 DFT 和 IDFT 快速实现方法, 包括以下步 骤:
步骤 A : 初始化, 并为第一级 DFT 运算产生整序读数地址 ;所述初始化为 : 在混合基 DFT 运算之前根据系统需要处理的点数计算各级中间缓 存大小, 为每一级 DFT 运算预生成两个中间缓存, 为每一级 DFT 运算生成一个蝶形运算次数 计数器 Bt, 清零 Bt ;
优选地, 两个中间缓存大小相等。
所述产生整序读数地址的方法进一步包括以下步骤 :
步骤 a : 求顺序基底权值, 方法为 :
各 级 DFT 运 算 基 底 为 f1, f2, f3…… fN, 则每个基底对应的权值为1 ≤ j ≤ N-1, 而 XN = 1 ;
步骤 b : 求出读数地址, 方法为 :
由最大级数 N 确定地址宽度, 表示为 [N, …, 2, 1], 左边为高地址位, 右边为低地址 位; 地址位对应的进位门限和权值分别为 λN,…, λ2, λ1 和 XN,…, X2, X1 ;
其中, λN,…, λ2, λ1 等于对应的 f1, f2, f3…… fN 值 ;
假定各个地址位上的初始值都为 0, 每个时钟从最低地址位加 1, 满足进位原则时 进位, 则每个时钟读取数据的地址为, 当前各地址位上的数与其对应的权值乘积之和 ;
所述进位原则为 : 当前地址位上的数达对应进位门限时向高位进 1 位。
步骤 B : 判断当前 DFT 运算的级数是否小于最大级数 N, 若是进入下一步, 否则转到 步骤 G ;
步骤 C : 当前级 DFT 运算读数并进行蝶形运算, 将蝶形运算结果存储于一个中间缓 存, 当前级蝶形运算计数器 Bt 加 1 ;
步骤 D : 判断是否满足进入下一级运算条件, 若满足, 则当前级 DFT 运算转换中间 缓存, 即将其后蝶形运算结果存储于另一个中间缓存, 同时进入步骤 E 和 F ; 否则, 进入步骤 E;
步骤 E : 判断当前级 DFT 运算是否结束, 即判断其蝶形运算次数 Bt 是否达到当前 级蝶形运算的最大次数 mi, 若 Bt ≤ mi, 则重复步骤 C 至 D, 否则, 结束当前级 DFT 运算
步骤 F : 进入下一级 DFT 运算, 下一级 DFT 运算从当前级 DFT 运算的中间缓存读数, 重复步骤 B 至 D
步骤 G : 最后一级的处理 ;
首先获得最后一级处理的相关参数 fi, pi, mi, qi, 其中 i = N ; 然后由数据读取控制 模块选择, 从前一级的中间缓存中连续读数据, 读数地址为每份中再每隔 pi-1-1 取一个点, 总共可以取 fi 个点 ;
优选地, 混合基 IDFT 快速实现方法与以上所述 DFT 实现方法基本相同, 区别之处 在于 :
1) 在初始化开始的时候, 配置相关指示信号, 使能 IDFT 运算 ;
2) 各级 DFT 运算在进行的蝶形运算的时候, 每一次蝶形运算的结果乘以 1/fi, fi 为当前级的基底 ;
为解决以上问题, 本发明还提供了一种混合基 DFT 和 IDFT 快速实现装置, 包括接 口单元、 控制单元、 地址整序单元和级运算处理单元 ;
所述接口单元, 包含外部输入输出数据存储器和参数存储模块, 存储外部输入输出数据 ; 将外部送入数据, 存入输入输出数据存储器中, 并在相关参数存储模块中根据相应 参数配置寄存器, 指示启动 DFT 或者 IDFT 运算, 并指明各级运算的基底 ;
进一步地, 所述接口单元还可以包括旋转因子存储模块, 存储各级蝶形运算所需 旋转因子 ; 将蝶形运算的旋转因子进行预保存可以避免在计算时再计算蝶形运算的旋转因 子, 可以进一步提高计算速度。
所述控制单元, 完成接口和功能时钟的切换, 实现外部对整个模块的控制 ( 包括 数据和相关参数的输入输出 ), 并控制级间流水线处理时各级的启动, 同时在计算结束时产 生中断 ; 启动计算过程, 并控制启动第一级处理单元, 开始从接口单元的输入输出数据模块 按整序方法读数, 并统计当前级蝶形运算次数 Bt, 同时判断 Bt 是否满足 mod((fi+1-1)×pi/ fi+1, Bt) = 0, 若满足, 则控制启动下一级的运算, 并将下一级作为控制模块统计蝶形运算 次数的当前级, 重新统计该级的次数和判断。若不满足, 则继续统计 ;
所述地址整序单元, 为第一级 DFT 运算产生整序读数地址, 进一步包括顺序基底 权值计算单元和读数地址产生单元 ;
所述顺序基底权值计算单元计算基底权值, 各级 DFT 运算基底为 f1, f2, f3…… fN, 则每个基底对应的权值为
1 ≤ j ≤ N-1, 而 XN = 1 ;所述读数地址产生单元产生读数地址, 具体为 :
由最大级数 N 确定地址宽度, 表示为 [N,…, 2, 1], 左边为高地址位, 右边为低地 址位 ; 地址位对应的进位门限和权值分别为 λN,…, λ2, λ1(λN,…, λ2, λ1 等于对应的 f1, f2, f3…… fN 值 ) 和 XN,…, X2, X1 ;
假定各个地址位上的初始值都为 0, 每个时钟从最低地址位加 1, 满足进位原则时 进位, 则每个时钟读取数据的地址为, 当前各地址位上的数与其对应的权值乘积之和 ;
所述进位原则为 : 当前地址位上的数达对应进位门限时向高位进 1 位。
所述级运算处理单元, 完成相应级数的数据处理和中间结果存储, 进一步包含两 个中间缓存, 中间缓存控制模块, 蝶形运算模块 ;
所述两个中间缓存用于存储蝶形运算结果, 并在中间缓存控制模块的控制下, 交 替存储数据 ;
优选地, 两个中间缓存大小相等。
所述蝶形运算模块完成处理数据和相应旋转因子的读取, 并完成本级基底对应的 蝶形运算, 每一级运算, 调用该级蝶形运算模块, 进行相应的蝶形运算 ;
所 述 中 间 缓 存 控 制 模 块 控 制 蝶 形 运 算 结 果 存 入 中 间 缓 存 中, 当 Bt 满 足 mod((fi+1-1)×pi/fi+1, Bt) = 0 时, 中间缓存控制模块控制切换中间存储, 将后续计算结果 切换至另一个中间缓存存储。当另一个中间缓存的数据也满足此条件时, 再切换回原先的 中间缓存, 交替反复, 直到本级计算完成。
与现有技术相比, 本发明为第一级 DFT 运算产生整序读数地址, 便于在后续计算 中原地址读数, 并为每级 DFT 运算配置二个中间缓存用于存储蝶形运算数据, 采用级间流 水控制, 不会等到当前级处理完成后再进行下一级运算, 而是在进行当前级运算时, 当满足 下一级运算条件时即开始进行下一级运算, 极大提高了计算速度, 节省了处理时间, 且与现 有技术相比所需的整体存储量不会增大。附图说明
图 1 是现有技术混合基 DFT 算法乒乓操作示意图 图 2 是本发明混合基 DFT 和 IDFT 快速实现方法优选实施例流程图 图 3 是本发明混合基 DFT 和 IDFT 快速实现装置优选实施例结构图 图 4 是本发明级运算处理单元内部结构图具体实施方式
为了使本发明的目的、 技术方案及优点更加清楚明白, 以下结合附图及实施例, 对 本发明混合基 DFT 和 IDFT 快速实现方法及装置作进一步详细说明。
假设总数据点数为 K, 依混合基算式把 K 点数据分解成 N 个小点数, 得到 N 个因子 的乘积, 表示为 其中, N 为 K 点数据处理的最大级数 ; fi 表示第 i 级运算的因子,也即是第 i 级 DFT 运算的基底, i 表示当前级。
以下的描述中, 一些参数定义为 :
mi 表示当前级蝶形运算的最大次数。
pi 表示前 i 级因子的乘积 ( 包含第 i 级 ), 即 pi = f1f2… fi。
qi 表示 i 级后剩下因子的乘积, qi = K/pi。
图 2 是本发明混合基 DFT 和 IDFT 快速实现方法优选实施例流程图, 该方法包括以 下步骤 :
步骤 A : 初始化, 并为第一级 DFT 运算产生整序读数地址 ;
所述初始化为 : 在混合基 DFT 运算之前根据系统需要处理的点数计算各级中间缓 存大小, 为每一级 DFT 运算预生成两个中间缓存, 为每一级 DFT 运算生成一个蝶形运算次数 计数器 Bt, 清零 Bt ;
优选地, 两个中间缓存大小相等 ;
所述产生整序读数地址的方法包括以下步骤 :
步骤 a : 求顺序基底权值 ;
各 级 DFT 运 算 基 底 为 f1, f2, f3…… fN, 则每个基底对应的权值为1 ≤ j ≤ N-1, 而 XN = 1 ;
步骤 b : 求出读数地址 ;
由最大级数 N 确定地址宽度, 表示为 [N,…, 2, 1], 左边为高地址位, 右边为低地 址位 ; 地址位对应的进位门限和权值分别为 λN,…, λ2, λ1(λN,…, λ2, λ1 等于对应的 f1, f2, f3…… fN 值 ) 和 XN,…, X2, X1 ;
假定各个地址位上的初始值都为 0, 每个时钟从最低地址位加 1, 满足进位原则时 进位, 则每个时钟读取数据的地址为, 当前各地址位上的数与其对应的权值乘积之和 ; 所述进位原则为 : 当前地址位上的数达对应进位门限时向高位进 1 位。
步骤 B : 判断当前 DFT 运算的级数 i 是否小于最大级数 N, 若是进入下一步, 否则转 到步骤 G ;
步骤 C : 当前级 DFT 运算读数并进行蝶形运算, 将蝶形运算结果存储于一个中间缓 存, 当前级蝶形运算次数计数器 Bt 加 1 ;
步骤 D : 判断是否满足进入下一级运算条件, 若满足, 则当前级 DFT 运算转换中间 缓存, 即将其后蝶形运算结果存储于另一个中间缓存, 同时进入步骤 E 和 F ; 否则, 进入步骤 E;
所 述 判 断 是 否 满 足 进 入 下 一 级 运 算 的 条 件 为 蝶 形 运 算 次 数 Bt 是 否 满 足 mod((fi+1-1)×pi/fi+1, Bt) = 0 ;
步骤 E : 判断当前级 DFT 运算是否结束, 即判断其蝶形运算次数 Bt 是否达到 mi, 若 Bt ≤ mi, 重复步骤 C 至 D, 否则, 结束当前级 DFT 运算。
步骤 F : 进入下一级 DFT 运算, 下一级 DFT 运算从当前级 DFT 运算的中间缓存读数, 重复步骤 B 至 D
步骤 G : 最后一级的处理 ;
首先获得最后一级处理的相关参数 fi, pi, mi, qi, 其中 i = N ; 然后由数据读取控制 模块选择, 从前一级的中间缓存中连续读数据, 读数地址为每份中再每隔 pi-1 取一个点, 总 共可以取 fi 个点。
优选地, 混合基 IDFT 快速实现方法与以上所述 DFT 实现方法基本相同, 区别之处在于 : 1) 在初始化开始的时候, 配置相关指示信号, 使能 IDFT 运算 ;
2) 各级 DFT 运算在进行的蝶形运算的时候, 每一次蝶形运算的结果乘以 1/fi, fi 为当前级的基底 ;
优选地, 在各级 DFT 运算开始时, 先计算本级蝶形运算旋转因子并保存, 在进行蝶 形运算时直接调用, 将蝶形运算的旋转因子进行预保存可以避免在计算时再计算蝶形运算 的旋转因子, 可以进一步提高计算速度。
图 3 是本发明混合基 DFT 和 IDFT 快速实现装置优选实施例结构图, 该装置包括接 口单元、 控制单元、 地址整序单元和级运算处理单元 ;
所述接口单元, 包含外部输入输出数据存储器和参数存储模块, 存储外部输入输 出数据 ; 将外部送入数据, 存入输入输出数据存储器中, 并在相关参数存储模块中根据相应 参数配置寄存器, 指示启动 DFT 或者 IDFT 运算, 并指明各级运算的基底 ;
进一步地, 所述接口单元还可以包括旋转因子存储模块, 预先存储各级蝶形运算 所需旋转因子 ; 将蝶形运算的旋转因子进行预保存可以避免在计算时再计算蝶形运算的旋 转因子, 可以进一步提高计算速度。
所述控制单元, 完成接口和功能时钟的切换, 实现外部对整个模块的控制 ( 包括 数据和相关参数的输入输出 ), 并控制级间流水线处理时各级的启动, 同时在计算结束时产 生中断 ; 启动计算过程, 并控制启动第一级处理单元, 开始从接口单元的输入输出数据模块 按整序方法读数, 并统计当前级蝶形运算次数 Bt, 同时判断 Bt 是否满足 mod((fi+1-1)×pi/ fi+1, Bt) = 0, 若满足, 则控制启动下一级的运算, 并将下一级作为控制模块统计蝶形运算 次数的当前级, 重新统计该级的次数和判断。若不满足, 则继续统计。
所述地址整序单元, 为第一级 DFT 运算产生整序读数地址, 进一步包括顺序基底 权值计算单元和读数地址产生单元 ;
所述顺序基底权值计算单元计算基底权值, 各级 DFT 运算基底为 f1, f2, f3…… fN, 1 ≤ j ≤ N-1, 而 XN = 1 ;则每个基底对应的权值为
所述读数地址产生单元产生读数地址, 产生方式为 :
由最大级数 N 确定地址宽度, 表示为 [N,…, 2, 1], 左边为高地址位, 右边为低地 址位 ; 地址位对应的进位门限和权值分别为 λN,…, λ2, λ1(λN,…, λ2, λ1 等于对应的 f1, f2, f3…… fN 值 ) 和 XN,…, X2, X1 ;
假定各个地址位上的初始值都为 0, 每个时钟从最低地址位加 1, 满足进位原则时 进位, 则每个时钟读取数据的地址为, 当前各地址位上的数与其对应的权值乘积之和。
所述进位原则为 : 当前地址位上的数达对应进位门限时向高位进 1 位。
所述级运算处理单元, 完成相应级数的数据处理和中间结果存储, 进一步包含两 个中间缓存, 中间缓存控制模块, 蝶形运算模块, 如图 4 所示 ;
所述两个中间缓存, 用于存储蝶形运算结果, 并在中间缓存控制模块的控制下, 交 替存储数据 ;
优选地, 所述两个中间缓存大小相等 ;
所述蝶形运算模块完成处理数据和相应旋转因子的读取, 并完成本级基底对应的 蝶形运算, 每一级运算, 调用该级蝶形运算模块, 进行相应的蝶形运算 ;
所 述 中 间 缓 存 控 制 模 块 控 制 蝶 形 运 算 结 果 存 入 中 间 缓 存 中, 当 Bt 满 足 mod((fi+1-1)×pi/fi+1, Bt) = 0 时, 中间缓存控制模块控制切换中间存储, 将后续计算结果 切换至另一个中间缓存存储。当另一个中间缓存的数据也满足此条件时, 再切换回原先的 中间缓存, 交替反复, 直到本级计算完成。
尽管本发明详细通过实施例详细介绍了混合基 DFT 快速实现方法及装置, 但混合 基 IDFT 快速实现方法及装置只需根据 DFT 快速实现方法及装置作简单变形, 因此 IDFT 快 速实现方法及装置也在本发明保护范围之内。
以上所举实施例, 对本发明的目的、 技术方案和优点进行了进一步的详细说明, 所 应理解的是, 以上所举实施例仅为本发明的优选实施方式而已, 并不用以限制本发明, 凡在 本发明的精神和原则之内对本发明所作的任何修改、 等同替换、 改进等, 均应包含在本发明 的保护范围之内。