基于DSP的FFT算法实现_第1页
基于DSP的FFT算法实现_第2页
基于DSP的FFT算法实现_第3页
基于DSP的FFT算法实现_第4页
基于DSP的FFT算法实现_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于dsp的fft算法实现1、 fft的原理快速傅氏变换(fft)是离散傅氏变换的快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。它对傅氏变换的理论并没有新的发现,但是对于在计算机系统或者说数字系统中应用离散傅立叶变换,可以说是进了一大步。 设x(n)为n项的复数序列,由dft变换,任一x(m)的计算都需要n次复数乘法和n-1次复数加法,而一次复数乘法等于四次实数乘法和两次实数加法,一次复数加法等于两次实数加法,即使把一次复数乘法和一次复数加法定义成一次“运算”(四次实数乘法和四次实数加法),那么求出n项复数序列的x(m),即n点dft变换大约就需要

2、n2次运算。当n=1024点甚至更多的时候,需要n2=1048576次运算,在fft中,利用wn的周期性和对称性,把一个n项序列(设n=2k,k为正整数),分为两个n/2项的子序列,每个n/2点dft变换需要(n/2)2次运算,再用n次运算把两个n/2点的dft变换组合成一个n点的dft变换。这样变换以后,总的运算次数就变成n+2(n/2)2=n+n2/2。继续上面的例子,n=1024时,总的运算次数就变成了525312次,节省了大约50%的运算量。而如果我们将这种“一分为二”的思想不断进行下去,直到分成两两一组的dft运算单元,那么n点的dft变换就只需要nlog2n次的运算,n在1024点

3、时,运算量仅有10240次,是先前的直接算法的1%,点数越多,运算量的节约就越大,这就是fft的优越性。数字信号处理器(dsp)是一种可编程的高性能处理器,近年来发展很快它不仅适用于数字信号处理,而且在图像处理、语音处理、通信等领域得到了广泛的应用通用的微处理器在运算速度上很难适应信号实时处理的要求联沪处理器中集成有高速的乘法器硬件,能快速地进行大量数据的乘法和加法运算。快速傅里叶变换(fft)的出现使得dfr在实际应用中得到了广泛的应用2、 基于dsp的fft算法实现 用c语言实现fft算法/*fft programe*/#include "typedef.h" #inc

4、lude "math.h" struct compx ee(struct compx b1,struct compx b2)    struct compx b3 ;    b3.real=b1.real*b2.real-b1.imag*b2.imag ;    b3.imag=b1.real*b2.imag+b1.imag*b2.real ;    return(b3);void fft(struct compx*xin,int n) 

5、0;  int f,m,nv2,nm1,i,k,j=1,l ;    /*int f,m,nv2,nm1,i,k,j=n/2,l;*/    struct compx v,w,t ;    nv2=n/2 ;    f=n ;    for(m=1;(f=f/2)!=1;m+)            ;   

6、     nm1=n-1 ;        /*变址运算*/    for(i=1;i<=nm1;i+)            if(i<j)                    t=x

7、inj;            xinj=xini;            xini=t ;                k=nv2 ;        while(k&

8、lt;j)                    j=j-k ;            k=k/2 ;                j=j+k ;  

9、;                  int le,lei,ip ;        float pi ;        for(l=1;l<=m;l+)              &#

10、160;     le=pow(2,l);            / 这里用的是l而不是1              lei=le/2 ;            pi=3.14159 ;   

11、;         v.real=1.0 ;            v.imag=0.0 ;            w.real=cos(pi/lei);            w.imag

12、=-sin(pi/lei);            for(j=1;j<=lei;j+)                            /*double p=pow(2,m-l)*j;  

13、0;               double ps=2*pi/n*p;                  w.real=cos(ps);            

14、0;     w.imag=-sin(ps);*/                for(i=j;i<=n;i=i+le)                        &#

15、160;           /*  w.real=cos(ps);                      w.imag=-sin(ps);*/           

16、         ip=i+lei ;                    t=ee(xinip,v);                  

17、0; xinip.real=xini.real-t.real ;                    xinip.imag=xini.imag-t.imag ;                    xini.real

18、=xini.real+t.real ;                    xini.imag=xini.imag+t.imag ;                        

19、;        v=ee(v,w);                            return ;/*main programe*/#include<math.h>#include<stdio.h>#include<stdlib.h>#inc

20、lude "typedef.h" float result257;struct compx s257;int num=256 ;const float pp=3.14159 ;main()    int i=1 ;    for(;i<0x101;i+)            si.real=sin(pp*i/32);        si.i

21、mag=0 ;            fft(s,num);        for(i=1;i<0x101;i+)            resulti=sqrt(pow(si.real,2)+pow(si.imag,2);    3、icetek-f2812-a的实验板调试步骤1实验准备(1)连接实验设备: (

22、2)准备信号源进行ad 输入。取出2 根实验箱附带的信号线(如右图,两端均为单声道语音插头)。用1 根信号线连接实验箱底板上信号源i模块(图10-1 中单实线框中部分)的“波形输出”插座(图10-1中的3 或4)和“a/d 输入”模块(图10-1中虚线框中部分)的“adcin0”插座(图10-1 中的a),注意插头要插牢、到底。这样,信号源i的输出波形即可送到icetek-f2812-a评估板的ad 输入通道0。用1 根信号线连接实验箱底板上信号源ii模块(图10-1中双实线框中部分)的“波形输出”插座(图10-1 中的c或d)和“a/d 输入”模块的“adcin1”插座(图10-1中的b),

23、注意插头要插牢、到底。这样,信号源ii的输出波形即可送到icetek-f2812-a评估板的ad 输入通道1。设置信号源i:-调整拨动开关“频率选择”(图10-1 中的5)拨到“100hz1khz”档(图10-1中10)。-将“频率微调”(图10-1 中的6)顺时针调到头(最大)。-调整拨动开关“波形选择”(图10-1 中的7)拨到“三角波”档(图10-1 中的11)。-将“幅值微调”(图10-1 中的8)顺时针调到头(最大)。设置信号源ii:-调整拨动开关“频率选择”(图10-1 中的e)拨到“100hz1khz”档(图10-1 中的j)。-将“频率微调”(图10-1 中的f)顺时针调到头(

24、最大)。-调整拨动开关“波形选择”(图10-1 中的g)拨到“正弦波”档(图10-1 中的k)。-将“幅值微调”(图10-1 中的h)顺时针调到头(最大)。将两个信号源的电源开关(图10-1 中的2和b)拨到“开”的位置。2设置code composer studio 2.21在硬件仿真(emulator)方式下运行请参看本书第一部分、四、2。3启动code composer studio 2.21请参看本书第一部分、五、2。选择菜单debugreset cpu。4打开工程文件-工程目录:c:icetek-f2812-a-edulabdsp281x_exampleslab0305-ad adc

25、.pjt。-在项目浏览器中,双击adc.c,打开adc.c 文件,浏览该文件的内容,理解各语句作用。5编译、下载程序。6打开观察窗口-选择菜单“view”、“graph”、“time/frequency”做如下设置,然后单击“ok”按钮;-选择菜单“view”、“graph”、“time/frequency”做如下设置(图10-3),然后单击“ok”按钮;-在弹出的图形窗口中单击鼠标右键,选择“clear display”。通过设置,我们打开了两个图形窗口观察两个通道模数转换的结果。7 设置信号源由于模数输入信号未经任何转换就进入dsp,所以必须保证输入的模拟信号的幅度在0-3v之间。必须用示波器检测信号范围,保证最小值0v最大值3

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论