基于DSP的FFT算法进行频谱分析毕业论文

更新时间:2023-03-08 07:14:16 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《数字信号处理与DSP应用》

课程论文

论 文 题 目: 基于DSP用FFT变换 进行频谱分析

作 者: 仇亚军

学 号: 2011160901

专 业: 集成电路工程

班 级: 机电6班

课程指导教师: 黄乡生

基于DSP用FFT变换进行分析

摘要: 随着计算机和微电子技术的飞速发展,基于数字信号处理的频谱分析已

经应用到各个领域并且发挥着重要作用。信号处理方法是当前机械设备故障诊断中重要的技术基础之一,分析结果的精确程度是诊断成功与否的关键因素。研究频谱分析是当前主要的发展方向之一。数字信号处理基本上从两个方面来解决信号的处理问题:一个是时域方法,即数字滤波;另一个是频域方法,即频谱分析.

本文主要介绍了离散傅里叶变换以及快速傅里叶变换,通过对DFT以及FFT算法进行研究,从基础深入研究和学习,掌握FFT算法的关键。通过对DSP芯片工作原理以及开发环境的学习,掌握CCS的简单调试和软件仿真,在DSP芯片上实现对信号的实时频谱分析。

关键词: DFT;FFT;频谱分析;DSP;

Spectrum Analysis through FFT Based on DSP

Abstract: With the development of computer and micro-electronic technology, the analysis of spectrum through FFT which based on DSP has applied to many areas and played a very important role. Signal processing method is a important part of the basic technology at the present mechanical equipment fault. The precise degree of analysis result is the key factor of whether the diagnostic is success or not. Study about the spectrum analysis is one of the mainly develop directions. However, DSP is basiclly from two respects to solve the problem of signal processing: one is time-domain, the so-called digital filter; another is spectrum-domain, the so-called spectrum analysis.

The passage is mainly introduced FFT and DFT, by studying about the algorithm of FFT and DFT, studying deeply from the basic and learning, grasping the key of FFT algorithm. By learning the working principle of DSP chip and develop environment, grasping the basic debugging and software simulating of CCS, achieving the presently spectrum analysis of signal on DSP chip.

Key words: DFT; FFT; Spectrum analysis ;DSP

1 绪论

1.1 引言

随着数字技术与计算机技术的发展,数字信号处理(DSP)技术已深入到各个学科领域。近些年来,数字信号处理技术同数字计算器、大规模集成电路等,有了突飞猛进的发展。

在数字信号处理中,离散傅里叶变换(Discrete.Time Fourier Transform,DFT)是常用的变换方法,它在数字信号处理系统中扮演着重要角色。由离散傅里叶变换发现频率离散化,可以直接用来分析信号的频谱、计数滤波器的频率响应,以及实现信号通过线系统的卷积运算等,因而在信号的频谱分析方面有很大的作用。

由于DFT的运算量太大,即使是采用计算机也很难对问题进行实时处理,所以经过很多学者的不懈努力,便出现了通用的快速傅里叶变换(FFT)。快速傅里叶变换(Fast Fourier Transform,FFT)并不是与离散傅里叶变换不同的另一种变换,而是为了减少DFT计算次数的一种快速有效的算法。对FFT算法及其实现方式的研究是很有意义的。目前,FFT己广泛应用在频谱分析、匹配滤波、数字通信、图像处理、语音识别、雷达处理、遥感遥测、地质勘探和无线保密通讯等众多领域。在不同应用场合,需要不同性能要求的FFT处理器。在很多应用领域都要求FFT处理器具有高速度、高精度、大容量和实时处理的性能。因此,如何更快速、更灵活地实现FFT变得越来越重要。

数字信号处理器(DSP)是一种可编程的高性能处理器。它不仅是一种适用于数字信号处理,而且在图像处理、语音处理、通信等领域得到广泛的应用。DSP处理器中集成有高速的乘法硬件,能快速的进行大量的乘法加法运算[1]。 1.2 频谱分析的技术发展

频谱分析在生产实践和科学研究中获得日益广泛的应用。例如,对汽车、飞机、轮船、汽轮机等各类旋转机械、电机、机床等机器的主体或部件进行实际运行状态下的谱分析,可以提供设计数据和检验设计效果,或者寻找振源和诊断故障,保证设备的安全运行等;在声纳系统中,为了寻找海洋水面船只或潜艇,需要对噪声信号进行谱分析,以提供有用信息,判断舰艇运动速度、方向、位置、大小等。因此对谱分析方法的研究,受到普遍注意和重视,是当前信号处理技术中一个十分活跃的课题。

1965年库利首次提出了快速傅里叶变换(FFT)算法,FFT和频谱分析很快发展成为机械设备故障诊断、振动分析、无线电通信、信息图象处理和自动控制等多种学科重要的理论基础。然而长期的应用和近年来的理论分析表明:经快速傅立叶变换得到的离散频谱,频率、幅值和相位均可

能产生较大误差,单谐波加矩形窗时最大误差从理论上分析可达36.4%;即使加其他窗时,也不能完全消除此影响,在加汉宁(Hanning)窗时,只进行幅值恢复时的最大幅值误差仍高达15.3%,相位误差高达90度。因此,频谱分析的结果在许多领域只能定性而不能精确的定量分析和解决问题,大大限制了该技术的工程应用,特别是在机械振动和故障诊断中的应用受到极大限制。

从70年代中期,有关学者开始致力于频谱校正理论的研究以期解决离散频谱误差较大的问题。1975年John C.Burges等从事电学领域研究工作的学者采用插值法对加矩形窗的离散化频谱进行校正,解决了电学中的离散高次谐波参数的精确测量问题。1983年Thomas Grandke提出了加Hanning窗的内插法,进一步提高了离散高次谐波参数的分析精度。1993年,丁康和谢明提出了三点卷积法幅值校正法,提高了频率间隔较大的信号的离散频谱幅值精度,解决了工程实际中的一些问题。1994年,谢明、丁康等提出和发展了比例频谱校正方法,使内差法系统地发展成为一种通用的频谱校正方法,解决了频率间隔较大的离散化频谱幅值、相位和频率的精确求解问题,并开始对离散频谱的校正方法和误差分析进行了深入系统的分析和研究。1996年,余佳兵,史铁林等提出了采用复调制细化谱分析将已产生频谱干涉的密集频率成分分离开,消除干涉,再用比例法进行校正以解决密集频率成分的离散频谱的校正问题。1997年,谢明、丁康等分析了离散频谱中的负频率成分和多频谱成分的干涉现象,提出了离散频谱中用相位和幅值综合判定和识别单频率成分的方法,实现了单频率成分和频率间隔较大的多频率成分的自动识别和自动校正,并提出了在不采长样的基础上利用轴系旋转识别和校正两个己发生干涉的密集频率成分的自动判定和校正的方法。1998年刘渝提出了一段信号作N点和N/2点的校正方法,利用相位信息可以得到比较精确的频率。1999年,丁康、谢明等提出了对连续时域信号分前后两段作傅里叶变换,利用其对应离散谱线的相位差校正出谱峰处的准确频率和相位的校正方法一相位差校正法,该方法可在不知道窗谱函数表达式的情况下,直接用其相位差进行频率和相位校正。2001年,徐培民、杨积东、闻邦椿提出了自动识别和修正离散频谱中两临近谱峰参数的方法,不仅能识别间距不到一个频率分辨率的两个密集频率成分,而且能识别峰间距为1-6个频率的临近谱峰参数[2]。 1.3 本论文主要研究的内容

本文主要介绍基于DSP用FFT变换实现对信号的频谱分析。研究离散傅里叶变换以及快速傅里叶变换的原理及算法。快速傅里叶变换和离散傅里叶变换的基本理论是一样的,它根据离散傅里叶变换的奇、偶、虚、实等特性,对离散傅里叶变换进行了改进。在计算机系统或者数字系统中广泛应用者快速傅里叶变换,这是一个巨大的进步。本文主要解决的问题就是如何对信号的频谱进行研究,使FFT更广泛的应用于科学研究。

2 离散傅里叶变换(DFT)

2.1 离散傅里叶变换的定义

设x(n)是一个长度为M的有限长序列,则x(n)的N点离散傅立叶变换为:

N?1kn?x(n)WNX(k)=DFT[x(n)]=n?0,k=0,1,...,N-1。 (1)

X(k)的离散傅里叶逆变换为:

1N?1?knx(n) =IDFT[X(k)]= NX(k)Wn??0N,k=0,1,...,N-1 (2)

?j2?式中,

WN?eN,N称为DFT变换区间长度,N≥M。

2.2 离散傅里叶变换的基本性质 2.2.1线性性质

如果x1(n)和x2(n)是两个有限长序列,长度分别为N1和N2,且 y(n)?ax1(n)?bx2(n)。

式中,a、b为常数,取N?max[N1,N2],则y(n)的N点DFT为:

Y(k)?DFT[y(n)]N?aX1(k)?bX2(k) 0≤k≤N—1 其中,X1(k)和X2(k)分别为x1(n)和x2(n)的N点DFT。 2.2.2 循环移位性质

(1)序列的循环移位

设x(n)为有限长序列,长度为M,M≤N,则x(n)的循环移位定义为 y(n)?x((n?m))NRN(n) (4) (2)时域循环移位定理

设x(n)是长度为M(M≤N)的有限长序列,y(n)为x(n)的循环移位,即 y(n)?x((n?m))NRN(n)

y(k)?DFT[y(n)]?kmN?WMX(k) 其中 X(k)?DFT[x(n)]N 0≤k≤N—1 (3)频域循环移位定理

3)5)( (

如果 X(k)?DFT[x(n)]N 0≤k≤N—1 Y(k)?x((k?l))NRN(k)

nly(n)?IDFT[Y(k)]?WNNx(n) (6) 则

2.2.3 循环卷积定理

有限长序列x1(n)和x2(n)的长度分别为N1和N2,N≥max[N1,N2],x1(n)和x2(n)的N点循环卷积为:

?x(n)?x(n)x(n)21M=0 ○*=

则x(n)的N点DFT为:

N?1x2(m)x1((n?m))NRN(n)

X(k)?DFT[x(n)]N?X1(k)X2(k) (7) 2.2.4 共轭对称性

如果序列x(n)的DFT为X(k),则x(n)的实部和虚部(包括j)的DFT分别为X(k)的共轭对称分量和共轭反对称分量;而x(n)的共轭对称分量和反共轭对称分量的DFT分别为X(k)的实部和虚部乘以j[3]。

3 快速傅里叶变换(FFT)

3.1 FFT算法基本原理

快速傅里叶变换(FFT)是离散傅里叶变换的快速算法,它是根据离散傅里叶变换的奇、偶、虚、实等特性,对离散傅里叶变换的算法进行改进获得的,它对离散傅里叶变换并没有新的发现。

有限长序列x(n)及其频域表示X(k)可由以下离散傅立叶变换得出

nkx(k)=DFT[x(n)]=?x(n)WNn?0N?1 0?k?N?1 (8)

1N?1?nkx(n)=IDFT[X(k)]=?X(k)WNNn?0 0?k?N?1 (9)

其中WnkN?e?j2?nkN。式(8)称为离散傅立叶正变换,式(9)称为离散傅立叶逆变换,x(n)与X(k)

构成了离散傅立叶变换对。

根据上述公式,计算一个X(k),需要N次复数乘法和N-1次复数加法,而计算全部

20?k?N?1NX(k)( ),共需要次复数乘法和N(N-1)次复数加法。实现一次复数乘法需要四次实

数乘法和两次实数加法,一次复数加法需要两次实数加法,因此直接计算全部X(k)共需要4N次实数乘法和2N(2N-1)次实数加法。当N较大时,对实时信号处理来说,对处理器计算速度有十分苛刻的要求,于是如何减少计算离散傅里叶变换运算量的问题变得至关重要。

为减少运算量,提高运算速度,就必须改进算法。计算DFT过程中需要完成的运算的系数里,存在相当多的对称性。通过研究这种对称性,可以简化计算过程中的运算,从而减少计算DFT所需的时间。

如前所述,N点的DFT的复乘次数等于N。显然,把N点的DFT分解为几个较短的DFT,可是乘

mWN法的次数大大减少。另外,旋转因子具有明显的周期性和对称性,其周期为:

?j2?(m?lN)N?j2?mN22Wm?lNN?e?em?WN

其对称性表现为:

?mN?mN?m*mW?W[W]?WNNNN 或

mWNFFT算法就是不断地把长序列的DFT分解成几个短序列的DFT,并利用的周期性和对称性来

减少DFT的运算次数。

nkWN具有以下固有特性:

nknk(n?N)kn(k?N)WW?W?WNNNN(1)的周期性: nk?nknknn(N?k)WW?(W)?WNNNN(2)的对称性: nknnWW?W,W?WN/nNNn (3)N的可约性:NN/2(k?N/2)kW??1,W??WNNN另外,。

nkWN利用的上述特性,将x(n)或X(k)序列按一定规律分解成短序列进行运算,这样可以避免

大量的重复运算,提高计算DFT的运算速度。算法形式有很多种,但基本上可以分为两大类,即按时间抽取(Decimation In Time,DIT)FFT算法和按频率抽取(Decimation In Frequency,DIF)FFT算法。

3.2 基-2FFT算法

如果序列x(n)的长度N?2,其中M是整数(如果不满足此条件,可以人为地增补零值点来达

M

到),在时域上按奇偶抽取分解成短序列的DFT,使最小DFT运算单元为2点。通常将FFT运算中最小DFT运算单元称为基(radix),因而把这种算法称为基-2时间抽取FFT(DIT-FFT)算法[4]。

将x(n)按n为奇偶分解成两个子序列,当n为偶数时,令n=2r;当n为奇数时,令n=2r+l;可得到

x(2r)?x1(r),x(2r?1)?x2(r),r?0,...,N?12 (10)

则其DFT可写成

2rk(2r?1)kX(k)??x(2r)WN??x(2r?1)WNr?0r?0N?12r?0N?12r?0N?12N?12

2rk(2r?1)k??x1(r)WN??x2(r)WNN?12r?0N?12r?0

rkrk??x(2r)WN/2??x(2r?1)WN/2

k?X(k)?WX2(k) (11) 1N

X1(k)和X2(k)均分别是N/2点序列x1(n)和x2(n)的DFT,而且r与k的取值满足0,1,?,N/2-1。

nkW而X(k)是一个N点的DFT,因此式(11)只计算了X(k)的前N/2的值。由DFT和N的性质可得到X(k)

的后N/2的值为:

Nk?NNNX(k?)?X1(k?)?WN2X2(k?)k?X(k)?W2221NX2(k) (12)

式(11)和式(12)表明,只要计算出两个N/2点的DFT x1(k)和x2(k),经过线性组合,即

MM?1可求出全部N点的X(k)。由于N?2,N/2?2仍为偶数,因而这样的分解可以继续进行下去,

直到最后的单元只需要做2点DFT为止。

nkX(p)X(q)Wm?1m?1N若Xm(p)和Xm(q)为输入数据,和为输出数据,为旋转因子,则对于基

-2DIT-FFT算法,蝶形运算的基本公式为

{

其图形表示如图1所示,称Xm(P)为上结点,Xm(q)为下结点。

kXm?1(p)?Xm(p)?Xm(q)WNkXm?1(q)?Xm(p)?Xm(q)WN

图1 时间抽取蝶形运算单元

对于一个8点的FFT,根据上述算法可以得到一个完整的N=8的基-2DIT-FFT的运算流图,如图2所示。

图2 N=8 DIT-FFT运算流图

根据上述算法原理及运算流图,可以得出基-2DIT-FFT的基本特点,特点如下。

MN?2(1)级数分解:对于。共分了M级,每级包含N/2个蝶形运算单元,总共所需蝶形运算个数为

NN?M??log2N22。

N?log2N2(2)运算量估计:每个蝶形运算需要一次复数乘法和两次复数加(减)法,N点FFT共需要次

复数乘法,N?log2N次复数加(减)法。实际上有些蝶形运算不需要做复乘。

(3)原位运算:当数据输入到存储器以后,每一组蝶形运算后,结果仍然存放在这同一组存储器中的同一位置,不需要另辟存储单元,直到最后输出。

(4)位码倒序:由图2可以看到,FFT输出的X(k)的次序正好是顺序排列的,即X(0),X(1),?,X(7),而输入X(n)是按x(0),X(4),?,X(7)的倒序存入存储单元,即为倒序输入,正序输出。这种顺序看起来相当杂乱,然而它是有规律的,即位码倒序规则。

kWN(5)旋转因子的确定:由8点FFT的三次迭代运算可以看出的变化。在第一级迭代中,只有一种0W8类型的蝶形运算系数,即,参加蝶形运算的两个数据点间隔为l;在第二级迭代中,有两种类02WW型的蝶形运算系数,分别是8和8,参加蝶形运算的两个数据点间隔为2;在第三级迭代中,有0123WWWW8888四种类型的蝶形运算系数,分别是,,,,参加蝶形运算的两个数据点间隔4。可见,

每次迭代的蝶形类型比前一迭代增加一倍,间隔也增大一倍。最后一次迭代的蝶形类型最多,参加蝶形运算的两个数据点的间隔也最大,为N/2。

4 FFT算法的MATLAB仿真及DSP的实现

4.1 MATLAB仿真

4.1.1 相关的MATLAB功能函数简介

(1)图像显示函数:plot,x轴和y轴均为线性刻度。 (2) 图形生成函数:figure,生成图形窗口。

(3)FFT函数:fft(S),其中S为加窗后的一个帧信号。因为实时信号FFT的频域样值关于中

点(即采样频率的1/2)对称,所以fft(S)给出的矩阵数据只有前半部分有用。

(4)复数取共轭函数:conj(Z),其中Z是fft的结果。该函数在求X(m,k)(是个复数)的幅度

时是有用的。

(5) randn:产生正态分布的随机数或矩阵的函数[5-6]。 4.2.2 用FFT变换进行频谱分析在MATLAB软件上的验证

为了验证FFT算法的正确性,在这里设定一个由f1=50Hz,f2=200Hz正弦波组成的信号

y?sin(2?f1t)?sin(2?f2t),给信号加上一个高斯白噪声。以FS=1000Hz的采样频率进行采样,进行N=2048点的FFT分析。在MATLAB软件上进行编程仿真,我们可以得到信号的时域波形(如图3所示)和谱分析曲线(如图4所示)。

图3 时域波形

图4 FFT谱分析结果

由图4可以看出,只有f1和f2是有用的信号,其余的是由我们所加上的高斯白噪声干扰所产生的误差。由此可以得出,FFT算法是正确的。 4.2 基于DSP实现FFT变换频谱分析 4.2.1DSP芯片和编程工具CCS 2.0的简介

(1)TMS320C5402简介

TMS320C5402是TI公司为了实现低功耗、高性能而专门设计的定点DSP芯片。它有如下的特

点:具有运算速度快,指令周期可以达10ns以内;优化的CPU结构,内部有1个40位的算术逻辑单元,2个40位的累加器,2个40位加法器,1个17×17的乘法器和40位的桶形移位器。有4条内部总线和2个地址产生器。先进的DSP结构可以高效快速实现数字信号处理中的各种算法的运算。它不仅具有标准的串行口和时分复用(TDM)串行口,还提供了自动缓冲串行DBSP和与外部处理器通信的HPI的主机接口。HPI可以与外部标准的微处理器直接接口。

(2)CCS2.0简介

DSP编程工具CCS是继“一体化的DSP解决方案\后,TI公司为了巩固其在DSP业界的地位而在开发工具方面的一次重拳出击。CCS集成了开发环境,使得DSP代码开发过程从编程、编译到调试代码的性能测试都集成在一个环境下进行,而且各项功能都有了一定程度的提升,简化了开发过程,该工具主要集成了以下几个软件工具:

(1)DSP代码产生工具(包括C编译器、汇编优化器、汇编器和连接器)。CCS不仅支持高级语言C编程、汇编语言编程,还支持高级语言C汇编语言混合模式编程,降低了代码开发难度;

(2)软件模拟器(SIMULATOR)。模拟整个硬件的开发过程,使得系统的实现更加可靠; (3)实时基础软件。DSP/BIOS和主机目标机之间的实时数据交换软件RTDX,它们所提供的实时分析功能为目标系统提供了一个实时窗口,不仅可以直接实时显示原始数据,还可以对原始数据进行处理。在传统的主机调试器必须通过在应用程序中插入断点,中断应用程序运行才能与目标系统交换数据,这种方法不仅麻烦,而且所得到的数据只是应用程序在高速运行中的一个侧面,为故障诊断和系统性能评测等带来了许多不便。利用RTDX技术,就可以在不中断应用程序的前提下完成主机与目标机之间的实时数据交换,另外RTDX完成主机与目标机数据交换所使用的是DSP内部的仿真逻辑和JTAG接口,它不占用DSP系统的总线、串口等I/O资源,所以可以在应用程序背景下运行对DSP系统的影响很小[7-8]。 4.2.2利用DSP中的FFT函数进行频谱分析

启动CCS 2.0,用Project/Open打开 “ExpFFTAD50.pjt”工程文件;双击“expFFTAD50.pjt”及“Source”可查看各源程序;加载“exp FFTAD50.out”;在主程序中,K++设置断点;单击“Run”运行程序,程序将运行至断点处停止,如图5所示。

图5 设置断点

用View/Graph/Time/Frequency打开一个图形观察窗口;设置该图形窗口变量及参数,如图6所示。

采用双踪观察在启动地址分别为0x3000H和0x3080H,长度为128的单元中数值的变化,数值类型为16位有符号整型变量,这两段存储单元中分别存放的是经A/D转换后的语音信号和对该信号进行FFT变换的结果。

图6 参数设置

单击“Animate”(或按F10)运行程序;调整观察窗口并观察输入信号波形及其FFT变换结果;单击“Halt”暂停程序运行,可以得到语音信号的时域波形和对该信号进行FFT变换谱分析的静态图像,如图7、图8所示。

图7 频谱分析结果(一)

图8 频谱分析结果(二)

图7和图8分别为输入语音信号频率大小不同情况下的结果;其中中上面的波形为语音信号的时域波形,下面的波形为对该信号进行FFT变换后的谱分析结果。

由此我们可以得出:数字信号处理(DSP)能够对信号进行实时分析,以便我们对各种信息能够更及时的了解,这也是它的优越性所在,使得他在我们的生活生产中有着更广泛的应用。

附录

EXPFFTAD50.C

extern void InitC5402(void); extern void OpenMcBSP(void); extern void CloseMcBSP(void); extern void READAD50(void); extern void WRITEAD50(void);

/*********************************************************************** ** Main Function Program

***********************************************************************/ #include \ #include \

void kfft(pr,pi,n,k,fr,fi,l,il) int n,k,l,il;

double pr[],pi[],fr[],fi[]; { int it,m,is,i,j,nv,l0;

double p,q,s,vr,vi,poddr,poddi; for (it=0; it<=n-1; it++) { m=it; is=0;

for (i=0; i<=k-1; i++)

{ j=m/2; is=2*is+(m-2*j); m=j;} fr[it]=pr[is]; fi[it]=pi[is]; }

pr[0]=1.0; pi[0]=0.0; p=6.283185306/(1.0*n); pr[1]=cos(p); pi[1]=-sin(p); if (l!=0) pi[1]=-pi[1]; for (i=2; i<=n-1; i++)

{ p=pr[i-1]*pr[1]; q=pi[i-1]*pi[1]; s=(pr[i-1]+pi[i-1])*(pr[1]+pi[1]); pr[i]=p-q; pi[i]=s-p-q; }

for (it=0; it<=n-2; it=it+2) { vr=fr[it]; vi=fi[it];

fr[it]=vr+fr[it+1]; fi[it]=vi+fi[it+1]; fr[it+1]=vr-fr[it+1]; fi[it+1]=vi-fi[it+1]; }

m=n/2; nv=2;

for (l0=k-2; l0>=0; l0--) { m=m/2; nv=2*nv;

for (it=0; it<=(m-1)*nv; it=it+nv) for (j=0; j<=(nv/2)-1; j++) { p=pr[m*j]*fr[it+j+nv/2]; q=pi[m*j]*fi[it+j+nv/2]; s=pr[m*j]+pi[m*j];

s=s*(fr[it+j+nv/2]+fi[it+j+nv/2]); poddr=p-q; poddi=s-p-q; fr[it+j+nv/2]=fr[it+j]-poddr; fi[it+j+nv/2]=fi[it+j]-poddi; fr[it+j]=fr[it+j]+poddr; fi[it+j]=fi[it+j]+poddi; } } if (l!=0)

for (i=0; i<=n-1; i++) { fr[i]=fr[i]/(1.0*n); fi[i]=fi[i]/(1.0*n); }

if (il!=0)

for (i=0; i<=n-1; i++)

{ pr[i]=sqrt(fr[i]*fr[i]+fi[i]*fi[i]); if (fabs(fr[i])<0.000001*fabs(fi[i])) { if ((fi[i]*fr[i])>0) pi[i]=90.0; else pi[i]=-90.0; } else

pi[i]=atan(fi[i]/fr[i])*360.0/6.283185306; } }

void main(void) {

int i,n,k=0;

double x[128],pr[128],pi[128],fr[128],fi[128],mo[128];

int xm,zm;

for (;;) {

px = (int*)0x3000; for (i=0; i<=n-1; i++) READAD50();

InitC5402(); /* initialize C5402 DSP */ OpenMcBSP();

int *px = (int*)0x3000; int *pz = (int*)0x3080; n=128;

{

xm=*px; x[i]=xm/32768.0; pr[i]=x[i]; pi[i]=0; px++;

}

kfft(pr,pi,128,7,fr,fi,0,1);

pz = (int*)0x3080; for (i=0;i<=n-1;i++) {

mo[i] = sqrt(fr[i]*fr[i]+fi[i]*fi[i]); zm = (int)(mo[i]*1000.0); *pz = zm; pz++;

}

k++;

} }

/*********************************************************************** ** End of File –– ExpFFTAD50.c

***********************************************************************/

结论

本论文学习和研究了离散傅里叶变换(DFT)和快速傅里叶变换(FFT)的算法,把重点放在了时间抽取法基-2FFT算法上。以及在DSP基础上用FFT变换对信号进行频谱分析。明确了FFT在DSP芯片上的实现的关键。基于DSP的快速傅里叶变换频谱分析的研究使FFT能够有效的在DSP芯片上实现,有助于我们能够更及时的了解信息,对我们的生活生产以及科技研究有很大的帮助。

自从快速傅里叶变换(FFT)出现以后,频谱分析技术便很快的发展起来,而且越来越贴近我们的生活生产,如医疗器械,无线电通信等等。但是我们对频谱分析技术的研究并未达到最高的层次,未来发展具有很广阔的空间。

参考文献

[1]方勇.数字信号处理—原理与实践[M].北京:清华大学出版社.2006. [2]丁康,张晓飞.频谱校正理论的发展[J].振动工程学报.2000

[3]高西全,丁玉美. 数字信号处理[M].西安:西安电子科技大学出版社. 2008 [4]孙仲康.快速傅里叶变换及其应用[M]. 北京:人民邮电出版社.1982. [5]郑阿奇.MATLAB实用教程[M].北京:电子工业出版社.2009.

[6]郭仕剑,王宝顺,贺志国,杨可心.MATLAB7.X数字信号处理[M]。北京:中国邮电出版社.2006 [7]赵桂芳等.基于DSP的快速傅立叶变换的实现[J].黄石理工学院学报.2007

[8]乔瑞萍,崔涛,张芳娟.TMS32054xDSP原理及应用[M].西安:西安电子科技大学出版社.2005: [9]杨宇,叶宇风,王洪.基于DSP的实时信号频谱分析模块设计[J].电子测量技术.2006年4月第二期

[10] 汪安民.TMS320C54x DSP实用技术[M].清华大学出版社,2002

参考文献

[1]方勇.数字信号处理—原理与实践[M].北京:清华大学出版社.2006. [2]丁康,张晓飞.频谱校正理论的发展[J].振动工程学报.2000

[3]高西全,丁玉美. 数字信号处理[M].西安:西安电子科技大学出版社. 2008 [4]孙仲康.快速傅里叶变换及其应用[M]. 北京:人民邮电出版社.1982. [5]郑阿奇.MATLAB实用教程[M].北京:电子工业出版社.2009.

[6]郭仕剑,王宝顺,贺志国,杨可心.MATLAB7.X数字信号处理[M]。北京:中国邮电出版社.2006 [7]赵桂芳等.基于DSP的快速傅立叶变换的实现[J].黄石理工学院学报.2007

[8]乔瑞萍,崔涛,张芳娟.TMS32054xDSP原理及应用[M].西安:西安电子科技大学出版社.2005: [9]杨宇,叶宇风,王洪.基于DSP的实时信号频谱分析模块设计[J].电子测量技术.2006年4月第二期

[10] 汪安民.TMS320C54x DSP实用技术[M].清华大学出版社,2002

本文来源:https://www.bwwdw.com/article/k0c.html

Top