快速傅立叶变换的TMS320F2812 DSP实现技术1

发布时间 : 星期六 文章快速傅立叶变换的TMS320F2812 DSP实现技术1更新完毕开始阅读

快速傅立叶变换的TMS320F2812 DSP实现技术

董建业,韩进

(山东科技大学信息科学与工程学院)

摘要: 介绍了FFT变换的原理和实现技术,并结合工程实践着重论述如何在以

TMS320F2812 DSP处理器为核心的硬件平台上应用TI公司的FFT变换库实现快速傅立叶变换。利用快速傅立叶变换将信号从时域变换到频域,然后进行频谱分析可以得到谐波的幅度和相位,以达到电力监控方面的应用,与小波变换等算法相比,FFT已经比较成熟而且易于实现。结果表明,在计算速度和计算精度等方面得到较好的结果。

关键词:数字信号处理器 快速傅立叶变换 谐波 TMS320F2812

Realization Technology of Fast Fourier Transforms based on TMS320F2812 DSP

Dong jianye , Han Jin

( Shandong University of Science and Technology College of Information Science and Engineering )

1 引言

快速傅里叶变换(Fast Fourier Transform)是实现离散傅里叶变换(DFT)的一种快速高效的运算方法,是数字信号处理中最为重要的工具之一,其广泛的应用于实时控制和信号处理等各个领域。由于快速傅里叶变换需要进行大量的乘累加运算,计算量较大,其在普通单片机上实现起来比较困难。DSP处理器技术的迅速发展,为快速傅里叶变换提供了一个很好的应用平台,因为大多数DSP芯片都能在一个指令周期内完成一次乘法和加法运算,而且提供专门的FFT指令,使得FFT算法在DSP芯片上的实现速度更快。本文将介绍快速傅里叶变换在TMS320F2812处理器上的实现方法,以及FFT变换在谐波分析方面的具体应用。

2 数字信号处理器TMS320F2812介绍

TMS320F2812是TI公司的一款用于控制的高性能、高性价比的32位定点DSP芯片。该芯片兼容TMS320LF2407指令系统 最高可在150MHz主频下工作,并带有18K×16位0等待周

期片上SRAM和128K×16位片上FLASH。其片上外设主要包括2×8路12位ADC(最快80ns转换时间)、2路SCI、1路SPI、1路McBSP、1路eCAN等,并带有两个事件管理模块(EVA、EVB),分别包括6路PWM/CMP、2路QEP、3路CAP、2路16位定时器(或TxPWM/TxCMP)。另外,该器件还有3个独立的32位CPU定时器,以及多达56个独立编程的GPIO引脚,可外扩大于1M×16位程序和数据存储器。TMS320F2812采用哈佛总线结构,具有密码保护机制,可进行双16×16乘加和32×32乘加操作,因而可兼顾控制和快速运算的双重功能。

[3]

3 FFT算法原理

FFT变换分为时间抽取算法和频率抽取算法两种,具体分有时域抽取和频域抽取的基2,基4,基8等算法,其基数越高运算量越少,但基数越增加,算法实现变得越复杂,其中基2算法最为实用。基于此本文重点介绍时域抽取的基2快速傅立叶算法。基2 FFT变换显著减少了DFT变换的复杂度,常用变换DFT与FFT计算复杂度对比如表1。

[2]

基二FFT变换原理: 表1 DFT与FFT计算复杂度对比如表 当用数字计算机计算信号序列x(n) Table 1. Comparison of Computational 的离散傅里叶变换时,变换公式: Complexity for direct DFT verses FFT.

N?1[4]

X(k)??x(n)Wn?0nkNFFT点直接计算 复数乘法 16384 65536 262144 M

基-2 FFT 复数乘法 448 1024 2304 复数加法 896 2048 4608 ??? (1)

数 128 M

复数加法 16256 65280 261632 k?0,1,2,...,n?1256 512 令信号序列的长度为N=2,其中M是正整数(若不满足这个

条件,可以人为地加上若干零值,使其达到 N=2),可以将时域信号序列x(n)分解成两部分,一是偶数部分x(2n),另一是奇数部分x(2n+1),其中n?0,1,2,...(N/2)?1。于是信号序列x(n)的离散傅里叶变换可以用两个 N/2抽样点的离散傅里叶变换来表示和计算。考虑到WN2=WN/2和离散傅里叶变换的周期性,式(1)可以写成

N2?1NX(k)??n?0N2x(2n)wN?2nkw?Nk2?1n?0x(2n?1)wN?G(k)?2N2?1nkwnk2nkN2H(k)???(2)

?1其中 G(k)??n?0x(2n)w???(3a) H(k)?2nkN?n?0x(2n?1)wN?????(3b)

由此可见,式(3)是两个只含有N/2个点的离散傅里叶变换,G(k)仅包括原信号序列中的偶数点序列,H(k)则仅包括它的奇数点序列。虽然k=0,1,2,?,N-1,但是G(k)和H(k)的周期都是N/2,它们的数值以N/2周期重复。

因为WN/2N2?NN2N2?ek?j()??1,所以,WNN2k???WN。于是由式(3)和式(4)得到 :

kX(k)?G(k)?WNH(k)??(4a) X(k?k)?G(k)?WNH(k)???(4b) k?0,1,2.....N/2?1

因此,一个抽样点数为N 的信号序列 x(n)的离散傅里叶变换,可以由两个 N/2抽样点序列的离散傅里叶变换求出。依此类推,这种按时间抽取算法是将输入信号序列分成越来越小的子序列进行离散傅里叶变换计算,最后合成为N点的离散傅里叶变换。

通常公式(4)叫做蝶形运算。例如,N=8=2的抽样点的信号序列x(n)的离散傅里叶变换,可用图1所示的蝶形算法信号流图来计算。

由图可知:

① N=2M点的离散傅里叶变换的计算全由蝶形运算组成,需要M级运算,每级包括N/2

3

个蝶形运算,总共有

N2?M?N2N?log2个蝶形运算。所以,总的计算量为

N2N?log2次复数乘

法运算和Nlog2N次复数加法运算。

② FFT算法按级迭代进行,蝶形运算如图1,N抽样点的输入信号具有N个原始数据x0(n),经第一级运算后,得出新的N个数据x1(n),依此类推,级迭代直至最后的结果,在逐级迭代计算中,每个蝶形运算的输出数据存放在原来存贮输入数据的单元中,这样可以节省大量存放中间数据的寄存器。

③ 蝶形运算中加权系数WN随迭代级数成倍增加。由图2可以看出系数WN的变化规律。每级迭代的不同加权系数的数目比前一级迭代增加一倍,跨度间隔也增大一倍。

④ 输入数据序列x(n) 按照二进制数的码位倒位序重新排列。例如N=8中数“1”的二进制数为“001”,将其码位倒转变为“100”,即为十进制数“4”。

x(0) x(4) x(2) x(6) x(1) x(5) x(3) x(7) WN 0P

P

WN0 WN WN WN0 WN 20002x(0) x(1) x(2)

WN WN WN WN 3210WN x(3) x(4) x(5) x(6) x(7)

WN 图1 N=8点的基二快速傅里叶变换信号流图 Figure 1. FFT Flow Graph for N=8 points

4 FFT的TMS320F2812实现

要得到快速准确的变换结果有几个关键的地方:1、硬件调制和滤波电路2、周期采样 3、高效率的程序设计。 4.1 采样

将互感器采样到的交流电压电流信号首先经低通抗混叠滤波后,进入AD芯片转换,从而将时域的连续信号变换为离散信号。AD转换芯片采用AD7656,AD7656是高集成度、6个双极性高阻抗输入通道、16bit逐次逼近(SAR)型,每通道达250kSPS的采样率, 6通道可同步采样,可处理的输入信号最高可达8M。AD7656具有高速的并行和串行接口,允许其与DSP进行接口。3.3V驱动电压,其接口可以和DSP处理器直接相连而无需电平转换。 信号的采样频率应满足奈奎斯特定理,即采样频率应该大于等于信号包含最高频率的两倍:fs ≥2fh。采样频率过低,FFT运算在频域将会出现混淆现象,造成频谱失真,使之不能真实反映原来的信号,如果采样频率选择得过高,即采样间隔小,则一个周期里采样点数过多,造成数据存储量过大和计算时间太长[1]。

因为TMS320F2812主频较高,而且外扩了512M 字节SRAM,经过实验,对50Hz交流电选择每个周期采样128点,频谱分辨率为50Hz,由 TMS320F2812内部时间发生器来控制采样脉冲的产生,时间发生器配置好后,不需CPU的干预,这样做相比定时器控制可以减少对CPU的中断次数。由于在整个设计中还有一个单独的电镀计量模块ATT7022B,可以实时获取基波的频率,因而可以及时校正采样间隔,做到同步采样[3]。

4.2程序实现 TI公司提供了C28x的FFT变换库,程序采用汇编语言编写,计算效率非常高, FFT变换库采用了时域抽取的基2算法,分32位实FFT变换算法和复FFT变换算法,对N点

FFT变换计算量对比如表2。

AD采到的信号是实数信号,我们可以选择 表2 N点FFT变换计算量对比表

复数FFT变换算法,以采样数据做为实部,虚 Table 2. Table of Computational Complexity 部填零,但是这样做对于一个N点序列要消耗 for N point FFT 2N个存储空间,并且计算周期较长,所以我们32位 实FFT(执行周期) 选用实FFT变换算法。实FFT变换算法根据输入实序列(2N点)的对称性,采用了优化算法,将2N点的实序列转换成一个N点的复序列,然后FFT对这个序列进行复数运算,计算结果是对应频域的N+1([0,N])点的复数序列,0点对应直流分量。N点对应奈奎斯特频率。整个计算过程只需要2N+2个存储空间,并且计算时间大大节省。

FFT变换中存在频谱泄露问题,这主要是由

[4]

[4]

FFT点数 128 256 512 Q31格式 6509 14756 33081 Q30格式 6763 15394 34615 32位 复FFT(执行周期) 128 256 512 11159 25901 59075 11671 27181 62146 与采样时突然截断和非周期采样而产生的,对非整次谐波的计算精度影响较大,对此有加窗和插值等算法可以减少泄露问题。但是由于一般电网信号主要含有整数次谐波并且在硬件电路设计中加入了电网频率捕获功能,近似精确的可以做到周期采样,这样不用加窗处理,利用FFT 算法就可以实现整数次谐波的精确检测。而且不加窗处理还可以节省FFT计算的时间[1]

应用TI公司FFT库进行FFT变换的程序流程如下: (1)采样 128点

(2)Q格式转换 TMS320F2812是定点处理器,必须要把浮点运算转换成为定点运算。输入信号转换为Q31格式,AD7656采样到的是16位整型数值,因此只需把AD转换的数据左移15位即可。

(3)倒位序为复数序列

(4)复数FFT计算 (5)分离

(6)求平方

下面给出FFT转化的程序的主要部分:

#define TWO_N 128 //128点FFT变换

#pragma DATA_SECTION(ipcb, \存储空间分配 #pragma DATA_SECTION(mag, \RFFT32 fft=RFFT32_128P_DEFAULTS; long ipcb[TWO_N+2],mag[TWO_N/2+1];

1路FFT变换的主要程序如下:

fft.ipcbptr=ipcb; //初始化FFT模块 fft.magptr=mag; fft.init(&fft); for(i=0;i<128;i++){

Qmidvar = _IQint(AD.ADSampleResult5[i]); //16位AD采样值转为位值 Qmidvar = Qmidvar << 16 ; //除以最大值 ipcb[i] =Qmidvar; //_IQ(Qmidvar); //转换为Q31的数

}

RFFT32_brev(ipcb,ipcb,TWO_N/2);//把N点实序列转成N点复序列,倒位序。 fft.calc(&fft);

fft.split(&fft); fft.mag(&fft);

4.3结果分析 通过三相电压源加入3次谐波,AD采样的部分数据如图2所示,经过FFT变换后的频谱如图3。0点表示直流分量,1点表示1次谐波,2点表示二次谐波,3点表示3次谐波。时域频率与频域的离散点的对应关系可由公式(5)求得:n= (fn×N)/fs (5)。

fn :被采样某种频率的信号 N :采样点数 fs :采样频率 n :频域对应点

[1]

从频谱图可以清楚的分辨出基波(1次谐波)和3次谐波分量。将FFT变换程序放在内部RAM, 一次不带BIOS的FFT变换时变换时间大约是227us,带BIOS是9路FFT变换所用时间是6~7ms,时间远小于20ms。

图2 原始采样数据图 图3 经过FFT后数据图

Figure 2. Graph of Primitive Sampling Data Figure 3. Graph of Data after FFT

5 结束语

介绍了快速傅立叶变换的原理以及它在谐波分析方面的应用,着重讲述了快速傅立叶变换在TMS320F2812 DSP 处理器上的实现技术,以及同步采样技术在减少频谱泄漏方面的应用。TMS320F2812 DSP处理器有较高的工作频率和丰富的片内外设,既能满足变换时间和精度的要求,又能满足控制方面的需求,两者结合非常适合电力监控、中低压电力保护、电机保护等方面的应用。

参考资料:

1、侯正信王、安国等译.《数字信号处理教程》北京:电子工业出版社,2004年1月. 2、程佩清.《数字信号处理教程》北京:清华大学出版社, 年? 3、《TMS320F2812处理器CPU与外设上》 清华大学出版社, 年? 4、TI 公司 FFT 技术文档 2002年5月

基金项目:国家自然科学基金重点资助项目(50539080)资助 作者简介:

董建业:1982,男,读硕士研究生,研究方向:数字信号处理与智能控制 韩 进:教授,硕士生导师

联系合同范文客服:xxxxx#qq.com(#替换为@)