TMS320C54X系列DSP上FFT运算的实现(转)

关键词:DSP, TMS320C54X,FFT

摘  要:在电子设备中数字信号处理技术越来越多地得到应用,而FFT运算是数字信号处理技术的基石,FFT运算主要由DSP来完成,DSP的FFT运算程序的编写是一项重要工作,但FFT算法程序的编写调试费时费力。TI公司提供了以TMS320C54x系列芯片为基础的DSPLIB库函数,包含FFT运算,使在TMS320C54x系列芯片上进行FFT运算变得容易,本文就DSPLIB函数库进行介绍并就使用方法进行详细说明。

1引言

    TMS320C54x系列芯片是TMS320C5000平台下的定点DSP芯片。54X系列芯提供了低成本、低功耗、高性能的处理能力,在各个领域应用日益广泛。

    在使用DSP进行数字信号处理工作时,经常使用快速付立叶变换(FFT)以进行各种信号的分析,但FFT算法程序的编写调试费时费力。为此TI公司提供了以TMS320C54x系列芯片为基础的DSPLIB库函数,在CCS2开发系统内包含DSPLIB库函数,也可在网站上免费下载,经使用证明DSPLIB函数库使用方便、速度快、运行可靠、功能全面,为在TMS320C54X系列上进行FFT运算提供了极大的方便。本文就FFT函数库进行介绍并就使用方法进行说明[1]。

2 DSPLIB库函数[2]

2.1 DSPLIB库函数功能

    TMS320C54X系列函数库(DSPLIB)是对C语言编程可调用优化的DSP函数库,它含有50个通用目的的信号处理程序,全部由汇编语言编写,并可由C语言调用,方便C语言与汇编语言混合编程。这些程序用在计算强度大、执行速度重要的实时运算中。通过使用这些程序,可以取得较用C语言编写的相关程序快的多的运行速度,另外通过使用现成的程序可以使开发速度大大加快。DSPLIB可进行的运算有:FFT运算、滤波与卷积运算、自适应滤波运算、相关运算、数学函数运算、三角函数运算、矩阵运算等。

2.2 DSPLIB库函数的FFT运算

    DSPLIB库函数提供的FFT运算程序全部由汇编语言编写,充分发挥DSP的硬件特性,运算速度很快。下面以复数FFT运算程序为例进行介绍。

    快速傅立叶变换在作N点傅立叶变换运算时,输入数据常常是一连串的复数。 不过在许多实际应用上,这些需要被处理的数据都属于实数,即便如此,我们还是可以利用复数运算的DFT。 因为一个简单的方法就可以将实数数据转换成复数数据,原本的实数数据成为复数的实部,而属于复数虚部的部分则全部填上零,如此一来我们就可以直接应用复数FFT了。DSPLIB库函数提供的FFT运算程序可进行8~1024点的FFT运算。输入数据的存放以自然顺序依次排放,实部在前虚部在后,以8点运算为例,如图1左侧。g[8]为要进行FFT运算的实数数组,间隔插入虚部后形成复数数组X[16]。

图1 输入数据码位倒序运算

2.3 码位倒序

    DSPLIB函数库提供FFT运算为基2时间抽取算法,码位倒序的作用是使在时域采样的按自然序列排列的N点输入数据的排列顺序发生变化,然后作为FFT运算的输入数据,以使FFT运算结果按自然序列排列。

void cbrev(int *src,int *dst,int size)。

    cbrev函数读取N点实数采样数据,如图1(FFT运算点数为8)中数组g[N],将其转换为码位倒序的排列,因为FFT运算为复数运算,将码位倒序后的数组g[N]赋给复数数组的实部Xr。Xr为实部Xi为虚部,共同构成FFT运算的输入数据X[2N]。FFT运算的输入输出复数都放在同一数组中,有2N个单元。假如进行256点FFT运算, 使用cbrev函数进行码位倒序运算形式为:cbrev(X,X,256),即可将采样数据转换成码位倒序形式,并放入X[2N]数组实数部分。为进行实数FFT运算输入数据虚部需置零。

2.4 FFT运算的归一化

    除非输入信号幅度非常小,否则FFT运算结果可能导致溢出,为防止溢出的发生,FFT运算提供了归一化功能(可选择),就是输出结果被运算长度N所除。在FFT运算进行归一化后,进行FFT逆运算就不需要归一化了。

2.5 FFT运算

    FFT运算可直接调用函数void cfft(DATA x,nx,short scale),x[2*nx]为输入输出数据存储数组,nx为FFT运算长度,scale为归一化设置变量,scale=1是进行归一化运算,scale=0是不进行归一化运算。

3 DSPLIB库函数的使用

    CCS2进行安装后,产生ti子目录,结果如图2。DSPLIB函数库C语言可调用函数相关程序都保存在54x_src子目录下,头文件放在include子目录下。以256点为例,说明其使用方法。 

    在dsplib.h、tms320.h头文件中定义了许多运算中要用到的变量、函数,应用程序主函数必须用#include语句包含此头文件。下面以一简单程序说明DSPLIB的使用。在此程序中输入数据放在x[512]数组中,运算后结果仍存在x[512]数组中。

应用程序:

 

    尽管程序相当简单,但CCS2开发环境设置对初次接触的使用者仍很困难,主要注意的地方是,由于DSPLIB安装在固定子目录上,而应用程序可能在其它目录上,程序编译连接时,可能找不到DSPLIB中相应相应程序。为使程序正常运行,需对工程的Bulid Options选项中两个地方进行设置。其一是编译时打不开或找不到dsplib.h、tms320.h文件,此时可以在compiler标签下选中preprocessor选项,在Include Search Path栏中填入dsplib.h、tms320.h所在子目录(本例为:c: ic5400dsplibinclude);另一种情况是,连接时找不到FFT运算相应的汇编程序,编译错误提示有些函数为未定义变量,此时可在linker标签下选中basic选项,在Library Search Path栏中填入54xdsp.lib、rts.lib库文件所在路径(本例可填入:c: ic5400dsplib;c: ic5400cgtools。两路径分别含有54xdsp.lib、rts.lib库文件),在Include Library栏填入两库文件(本例为:54xdsp.lib;rts.lib)。至此完成设置,编译连接时可将应用程序及DSPLIB中程序连接起来,程序可以正常编译。

4 结束语

    DSPLIB函数库经在TMS320C54X系列DSP上使用,证明其运行可靠,使用方便,由于采用汇编语言编写,运算速度很快。此函数库极大提高软件开发的速度,是软件开人员的较好选择。

参考文献:

[1] 王念旭等.DSP基础与应用系统设计.北京.北京航空航天大学出版社,2001.

[2] Texas Instruments Inc. TMS320C54x DSP Library Programmer’s Reference.

posted on 2014-03-11 19:33  刘强126126  阅读(2507)  评论(0编辑  收藏  举报

导航