课程设计(论文)_快速傅里叶变换程序设计.doc





《课程设计(论文)_快速傅里叶变换程序设计.doc》由会员分享,可在线阅读,更多相关《课程设计(论文)_快速傅里叶变换程序设计.doc(16页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1 设计任务描述1.1 设计题目 快速傅里叶变换程序设计 设计要求1.2.1 设计目的1理解FFT的算法以及利用DSP实现的方法。2能熟练的调试程序并能观察其结果。3熟悉TMS320C54x系列DSP芯片的软件设计方法。 根本要求1研究FFT原理以及利用DSP实现的方法。2编写FFT程序。3调试程序,观察结果。2 设计思路2.1 FFT算法原理假设给定由个信号样本0,1,-1组成的信号序列,DFT可用式2-1给出: =0,1,-1 2-1式2-1中,称为旋转因子或蝶形因子,=。从中可以看出:当信号样本为复数时,计算单个需经过次复数乘法和-1次复数加法运算,相当于4次实数乘法和22-1次实数加法
2、。完成全部点DFT共需次复数乘法和-1复数加法运算。可见,随着不断增加,整个DFT运算量是相当庞大的,而FFT算法通过对计算过程的深入分析,利用旋转因子具有的周期性与对称性,实现了降低运算复杂度的目的。当序列长度为偶数时,信号序列可被分解为奇、偶两个子序列,相应的点DFT被分解为两个/2点的DFT: =0,1, ,/2-1 2-2 =0,1, ,/2-1 2-3式2-2和2-3中,和分别表示分解后得到的/2点偶序列点奇序列的DFT。式2-2和式2-3说明,只要求出和,前/2点和后/2点的DFT就得到了,整个序列的DFT也就得到了。这样做的好处是计算点DFT只需要约/2次复数乘法,总运算量约为直
3、接DFT运算量的一半同理,当/2为偶数时,每个/2点的DFT又可被分解成两个/4点的DFT,进一步减少了DFT运算的复杂度。依次类推,直到不能继续分解为止。分解结束时,最小DFT的点数称为称为基数,当=为正整数时,经过-1次分解,点DFT最终可被分解为/2个两点的DFT,即得到基数为2的FFT运算,使得DFT所需复数乘法次数降至。2.2 基2FFT的蝶形运算流图基2FFT的蝶形运算过程可用图2-1所示,此时=8,=3。图2-1 8点基2FFT运算过程观察图2-1,根据DFT的基2FFT算法,可以总结出以下几条规律:1点FFT运算从输入端开始,逐级进行,共需经过级运算;在第=1,2,级中存在个相
4、似的蝶形运算组除输入数据不同外;每个组内蝶形运算的个数为,参与每个蝶形运算的两个输入数据相距个点。2中间数据的存储,可采用原位存储法。即每次蝶形运算的结果存储在与原数据相同的内存单元内。3为了保证输出数据按自然数序排列,在进行FFT之前输入数据需要按照特定的顺序存放,通过位倒序寻址可以满足这种要求。2.2.1 输入、输出序列的倒位序规律由流程图2-1可以看出,当进行原位运算时,发现当运算完成后,FFT的输出按自然顺序排列在存储单元中,即按,的顺序排列;但是这是输入却不是按自然顺序存储的,而是按,的顺序存入存储单元,这种方式就称之为倒位序。当用二进制表示这个顺序时,它正好是“码位倒置的顺序。例如
5、,原来的自然顺序应是的地方,现在存放,用二进制码表示这一规律时,那么是在处存放,出存放,即将自然顺序的二进制码位倒置过来,第一位码变成最末位码,这样倒置以后的顺序正是输入所需要的顺序。表2-1中列出的是=8时按码位倒置规律所得的顺序,其结果与按时间抽取算法FFT流程图中的输入顺序是一致的。同理,当=256时,亦可以采用同样的方法进行位倒序操作。表2-1 码位倒置顺序自然顺序二进码表示码位倒置倒位序00000000100110042010010230111106410000115101101561100113711111172. 蝶距的计算设=,那么整个运算流图中包含级蝶形运算,每一级那么有个蝶
6、形单元。蝶距即每个蝶形单元两个输入出节点的序号差。以为例,结合图2-1可知共包含3级蝶形运算,每一级蝶形单元的蝶距如下:第一级,蝶距为1,可以看作由得到:第二级,蝶距为2,可以看作由得到;第三级,蝶距为4,可以看作由得到。因此得:第级蝶形单元的蝶距为:。2. 旋转因子的计算由FFT算法原理过程可知,假设=,那么共有级蝶形运算,各级蝶形运算中旋转因子分别如下:第级的旋转因子为=0,1,;第-1级的旋转因子为=0,1,;第一级的旋转因子为=0,1,。由此可见, 第级蝶形运算中旋转因子为,=0,1,。2.3 FFT算法的DSP的实现方法设FFT运算的输入数据为实数,那么2点实数FFT算法的实现步骤为
7、:第一步,把2实数输入序列组合成点的复数序列。然后把该复数序列进行位倒序操作后存储在输入区。第二步,进行的FFT运算。第三步,把点FFT输出拆成2的复数序列,这2的复数序列对应于2点时实数输入序列的DFT输出。第四步,结果输出及功率谱计算。3 软件流程图结束程序初始化开始送入数据调入系数表输入数据位码倒置FFT的蝶形运算是否发生溢出出?归一化输入数据结束?各图形输出4 各局部程序设计及参数计算4.1 初始化程序#includemath.h#define N 128void InitForFFT();void MakeWave();void finv(int N1,float *xr,float
8、 *xi);int INPUTN,DATAN;float fWaveRN,fWaveIN,wN;float sin_tabN,cos_tabN;int Mum;初始化程序是对采样点数N、各个子程序、数据实部和虚部、输入输出以及正余弦表进行定义,在后面的程序中运用时就不用再进行定义了。4.2 子程序 旋转因子、蝶距运算void FFT(float XrN,float XiN) int S,B;int m,j,k;float X,Y;finv(N,Xr,Xi);for(m=1;m=Mum;m+)B=(int)(pow(2,m-1)+0.5);for(j=0;jB;j+)S=j*(int)(pow(
9、2,Mum-m)+0.5);for(k=j;k=N-1;k+=(int)(pow(2,m)+0.5)该子程序是时间抽取法FFT程序,要求采样点数为2的整数幂次方,Xr和Xi分别为输入序列的实部和虚部。S为旋转因子的幂数,B为蝶形图运算输入数据的距离,也即各级旋转因子的个数。finv(N,Xr,Xi)语句是实现倒序运算函数,对输入序列倒序。B=(int)(pow(2,m-1)+0.5)语句计算出蝶距 B=2(m-1),语句计算出旋转因子的幂数S=2(Num-1)。4.2.2 蝶形图变换X=Xrk+B*cos_tabS+Xik+B*sin_tabS;Y=Xik+B*cos_tabS-Xrk+B*s
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 论文 快速 傅里叶变换 程序设计

限制150内