1、自本 1004 班 邓静 28号 基于 DSP的 FFT 滤波器设计 1 引言 随着数字技术与计算机技术的发展,数字信号处理 (DSP)技术已深入到各个学科领域。近些年来,数字信号处理技术同数字计算器、大规模集成电路等,有了突飞猛进的发展。 在数字信号处理中,离散傅里叶变换 (Discrete Time Fourier Transform,DFT)是常用的变换方法,它在数字信号处理系统中扮演着重要角色。由离散傅里叶变换发现频率离散化,可以直接用来分析信号的频谱、计数滤波器的频率响应,以及实现信号通过线系 统的卷积运算等,因而在信号的频谱分析方面有很大的作用。 由于 DFT 的运算量太大,即使是
2、采用计算机也很难对问题进行实时处理,所以经过很多学者的不懈努力,便出现了通用的快速傅里叶变换( FFT)。快速傅里叶变换( Fast Fourier Transform, FFT)并不是与离散傅里叶变换不同的另一种变换,而是为了减少 DFT 计算次数的一种快速有效的算法。对 FFT 算法及其实现方式的研究是很有意义的。目前, FFT己广泛应用在频谱分析、匹配滤波、数字通信、图像处理、语音识别、雷达处理、遥感遥测、地质勘探和无线保密通讯等众 多领域。在不同应用场合,需要不同性能要求的 FFT处理器。在很多应用领域都要求 FFT 处理器具有高速度、高精度、大容量和实时处理的性能。因此,如何更快速、
3、更灵活地实现 FFT 变得越来越重要。 数字信号处理器( DSP)是一种可编程的高性能处理器。它不仅是一种适用于数字信号处理,而且在图像处理、语音处理、通信等领域得到广泛的应用。 DSP处理器中集成有高速的乘法硬件,能快速的进行大量的乘法加法运算 1。 本文主要介绍基于 DSP 用 FFT变换实现对信号的频谱分析。研究离散傅里叶变换以及快速傅里叶变换的原理及算法。快速傅里 叶变换和离散傅里叶变换的基本理论是一样的,它根据离散傅里叶变换的奇、偶、虚、实等特性,对离散傅里叶变换进行了改进。在计算机系统或者数字系统中广泛应用者快速傅里叶变换,这是一个巨大的进步。本文主要解决的问题就是如何对信号的频谱
4、进行研究,使FFT 更广泛的应用于科学研究。 2 快速傅里叶变换( FFT) 2.1 FFT 算法基本原理 快速傅里叶变换( FFT)是离散傅里叶变换的快速算法,它是根据离散傅里叶变换的奇、偶、虚、实等特性,对离散傅里叶变换的算法进行改进获得的,它对离散傅里叶变换并没有新的发现。 有限长序列 x(n)及其频域表示 X(k)可由以下离散傅立叶变换得出 10x( k) =D F T x( n) = ( )N nkNn x n W01kN ( 1) 101x( n) =I D F T X ( k) = ( )N nkNn X k WN 01kN ( 2) 其中 2j nknk NNWe 。式( 1)
5、称为离散傅立叶正变换,式( 2)称为离散傅立叶逆变换, x(n)与 X(k)构成 了离散傅立叶变换对。 根据上述公式,计算一个 X(k),需要 N次复数乘法和 N-1次复数加法,而计算全部 X(k)( 01kN ),共需要 2N 次复数乘法和 N(N-1)次复数加法。实现一次复数乘法需要四次实数乘法和两次实数加法,一次复数加法需要两次实数加法,因此直接计算全部 X(k)共需要 4 2N 次实数乘法和 2N(2N-1)次实数加法。当 N较大时,对实时信号处理来说,对处理器计 算速度有十分苛刻的要求,于是如何减少计算离散傅里叶变换运算量的问题变得至关重要。 为减少运算量,提高运算速度,就必须改进算
6、法。计算 DFT过程中需要完成的运算的系数里,存在相当多的对称性。通过研究这种对称性,可以简化计算过程中的运算,从而减少计算 DFT所需的时间。 如前所述, N点的 DFT的复乘次数等于 2N 。显然,把 N点的 DFT分解为几个较短的 DFT,可是乘法的次数大大减少。另外,旋转因子 mNW 具有明显的周期性和对 称性,其周期为: 22()j m lN j mm lN mNNNNW e e W 其对称性表现为: m N mNNWW 或 *N m mNNWW FFT算法就是不断地把长序列的 DFT分解成几个短序列的 DFT,并利用 mNW的周期性和对称性来减少 DFT的运算次数。 nkNW 具有
7、以下固有特性: (1) nkNW 的周期性: ( ) ( Nnk n N k n kN N NW W W ) (2) nkNW 的对称性: ()nk nk n n N kN N NW W W( ) (3) nkNW 的可约性: / ,nnN N n N NnW W W W 另外, / 2 ( / 2 )1,N k N kN N NW W W 。 利用 nkNW 的上述特性,将 x(n)或 X(k)序列按一定规律分解成短序 列进行运算,这样可以避免大量的重复运算,提高计算 DFT的运算速度。算法形式有很多种,但基本上可以分为两大类,即按时间抽取 (Decimation In Time, DIT)
8、FFT算法和按频率抽取 (Decimation In Frequency, DIF)FFT算法 。 2.2 基 -2FFT算法 如果序列 x(n)的长度 2MN ,其中 M是整数 (如果不满足此条件,可以人为地增补零值点来达到 ),在时域上按奇偶抽取分解成短序列的 DFT,使最小 DFT运算单元为 2点。通常将 FFT运算中最小 DFT运算单元称为基 (radix),因而把这种算法称为基 -2时间抽取 FFT(DIT-FFT)算法 4。 将 x(n)按 n为奇偶分解成两个子序列,当 n为偶数时,令 n=2r;当 n为奇数时,令 n=2r+l;可得到 12( 2 ) ( ) , ( 2 1 )
9、( ) , 0 , ., 12Nx r x r x r x r r ( 3) 则其 DFT 可写成 11222 ( 2 1 )00( ) ( 2 ) ( 2 1 )NNr k r kNNrrX k x r W x r W 11222 ( 2 1 )1200( ) ( )NNrk r kNNrrx r W x r W 1122/ 2 / 200( 2 ) ( 2 1 )NNr k r kNNrrx r W x r W 12( ) ( )kNX k W X k ( 4) 1()Xk和 2()Xk均分别是 N/2点序列 1()xn和 2()xn的 DFT,而且 r与 k的取值满足 0,1, ,N/2
10、-1。而 X(k)是一个 N点的 DFT,因此式( 4)只 计算了 X(k)的前 N/2的值。由 DFT和 nkNW 的性质可得到 X(k)的后 N/2的值为: 212( ) ( ) ( )2 2 2NkNN N NX k X k W X k 12( ) ( )kNX k W X k( 5) 式( 4)和式( 5)表明,只要计算出两个 N/2 点的 DFT 1()xk和 2()xk,经过线性组合,即可求出全部 N 点的 X(k)。由于 2MN , 1/ 2 2MN 仍为偶数,因而这样的分解可以继续进行下去,直到最后的单元只需要做 2点 DFT 为止。 若 Xm(p)和 Xm(q)为输入数据,
11、1()mXp 和 1()mXq 为输出数据, nkNW 为旋转因子,则对于基 -2DIT-FFT 算法,蝶形运算的基本公式为 11( ) ( ) ( )( ) ( ) ( )km m m Nkm m m NX p X p X q WX q X p X q W 其图形表示如图 1所示,称 Xm(P)为上结点, Xm(q)为下结点。 图 1 时间抽取蝶形运算单元 对于一个 8点的 FFT,根据上述算法可以得到一个完整的 N=8的基 -2DIT-FFT的运算流图,如图 2所示。 图 2 N=8 DIT-FFT运算流图 根据上述算法原理及运算流图,可以得出基 -2DIT-FFT的基本特点,特点如下。
12、(1)级数分解:对于 2MN 。共分了 M级,每级包含 N/2个蝶形运算单元,总共所需蝶形运算个数为2log22NNMN 。 (2)运算量估计:每个蝶形运算需要一次复数乘法和两次复数加 (减 )法, N点 FFT共需要2log2N N次复数乘法, 2logNN 次复数加 (减 )法。实 际上有些蝶形运算不需要做复乘。 (3)原位运算:当数据输入到存储器以后,每一组蝶形运算后,结果仍然存放在这同一组存储器中的同一位置,不需要另辟存储单元,直到最后输出。 (4)位码倒序:由图 2可以看到, FFT输出的 X(k)的次序正好是顺序排列的,即 X(0),X(1), ,X(7),而输入 X(n)是按 x
13、(0), X(4), ,X(7)的倒序存入存储单元,即为倒序输入,正序输出。这种顺序看起来相当杂乱,然而它是有规律的,即位码倒序规则。 (5)旋转因子的确定:由 8点 FFT的三次迭代运算可以看出 kNW 的变化。在第一级迭代中,只有一种类型的蝶形运算系数,即 08W ,参加蝶形运算的两个数据点间隔为 l;在第二级迭代中,有两种类型的蝶形运算系数,分别是 08W 和 28W ,参加蝶形运算的两个数据点间隔为 2;在第三级迭代中,有四种类型的蝶形运算系数,分别是 08W , 18W , 28W , 38W ,参加蝶形运算的两个数据点间隔 4。可见,每次迭代的蝶形类型比前一迭代增加一倍,间隔也增大
14、一倍。最后一次迭代的蝶形类型最多,参加蝶形运算的两个数据点的间隔也最大,为 N/2。 3 FFT 算法的 DSP 的实现 3.1 基于 DSP 实现 FFT 变换频谱分析 3.1.1DSP 芯片和编程工具 CCS 2.0 的简介 (1)TMS320C5402 简介 TMS320C5402 是 TI 公司为了实现低功耗、高性能而专门设计的定点 DSP芯片。它有如下的特点:具有运算速度快,指令周期可以达 10ns 以内;优化的CPU 结构,内部有 1 个 40 位的算术逻辑单元, 2 个 40 位的累加器, 2 个 40 位加法器, 1 个 17 17 的乘法器和 40 位的桶形移位器。有 4 条
15、内部总线和 2 个地址产生器。先进的 DSP 结构可以高效快速实现数字信号处理中的各种算法的运算。它不仅具有标准的串行口和时分复用 (TDM)串行口,还提供了自动缓冲串行DBSP 和与外部处理器通信的 HPI 的主机接口。 HPI 可以与外部标准的微处理器直接接口。 (2)CCS2.0 简介 DSP 编程工具 CCS 是继“一体化的 DSP 解决方案 “后, TI 公司为了巩固其在 DSP 业界的地位而在开发工具方面的一次重拳出击。 CCS 集成了开发环境,使得 DSP 代码开发过程从编程、编译到调试代码的性能测试都集成在一个环境下进行,而且各项功能都有了一定程度的提升,简化了开发过程,该工具
16、主要集成了以下几个软件工具: (1)DSP 代码产生工具 (包括 C 编译器、汇编优化器、汇编器和连接器 )。 CCS不仅支持高级语言 C 编程、汇编语言编程,还支持高级语言 C 汇编语言混合模式编程,降低了代码开发难度; (2)软件模拟器 (SIMULATOR)。模拟整个硬件的开发过程,使得系统的实现更加可靠; (3)实时基础软件。 DSP/BIOS 和主机目标机之间的实时数据交换软件 RTDX,它们所提供的实时分析功能为目标系统提供了一个实时窗口,不仅可以直接实时显示原始数据,还可以对原始数据进行处理。在传统的主机调试器必须通过在应用程序中插入断点,中断应用程序运行才能与目标系统交换数据,
17、这种方法不仅麻烦,而且所得到的数据只是应用程序在高速运行中的一个侧面,为故障诊断和系统性能评测等带来了许多不便。利用 RTDX 技术,就可以在不中断应用 程序的前提下完成主机与目标机之间的实时数据交换,另外 RTDX 完成主机与目标机数据交换所使用的是 DSP 内部的仿真逻辑和 JTAG 接口,它不占用 DSP 系统的总线、串口等 I/O 资源,所以可以在应用程序背景下运行对 DSP 系统的影响很小 7-8。 3.2.2 利用 DSP 中的 FFT 函数 进行频谱分析 ( 1)启动 CCS,在 CCS 中建立一个 C 源文件和一个命令文件,并将这两个文件添加到工程,再编译并装载程序: 阅读 D
18、sp 原理及应用中 fft 用 dsp 实现的有关程序。 双击 ,启动 CCS的仿真平台的配着选项。选择 C5502 Simulator。 ( 3)启动 ccs2 后建立工程文件 FFT.pjt ( 4)建立源文件 FFT.c 与链接文件 FFT.cmd ( 5)将这两个文件加到 FFT.pjt 这个工程中。 ( 6)创建 out 文件 ( 7)加载 out 文件 ( 8)加载数据 ( 9)改变参数 用 View/Graph/Time/Frequency 打开一个图形观察窗口;设置该图形窗口变量及参数 , 采用双踪观察在启动地址分别为 0x3000H 和 0x3080H,长度为 128 的单元中数值的变化,数值类型为 16 位有符号整型变量,这两段存储单元中分 别存放的是经 A/D转换后的语音信号和对该信号进行 FFT变换的结果。