FFT算法的应用研究.doc
《FFT算法的应用研究.doc》由会员分享,可在线阅读,更多相关《FFT算法的应用研究.doc(19页珍藏版)》请在咨信网上搜索。
1、数字信号处理课程设计报告FFT算法的应用研究专 业: 通信工程 班 级: 通信11级 组 次: 第20组 姓名及学号: 吴杨生 2011013847 姓名及学号: 朱泽章 2011013864 组 员承 担 任 务吴杨生共同完成任务朱泽章共同完成任务指导教师评价意见FFT算法的应用研究一、设计目的MATLAB是一种功能强大、效率高、交互性好的数值和可视化计算机高级语言,它将数值分析、矩阵运算、信号处理和图形显示有机地融合为一体,形成了一个极其方便、用户界面友好的操作环境。经过多年的发展,已经发展成为一种功能全面的软件,几乎可以解决科学计算中所有问题。MATLAB软件还提供了非常广泛和灵活的用于
2、处理数据集的数组运算功能。FFT算法的应用研究很广泛,数字信号也有很多,本次课程设计采取对语音信号进行FFT算法的的应用研究:录制一段个人自己的语音信号,并对录制的信号进行采样;画出采样后语音信号的时域波形和频谱图;在Matlab环境下编写基2 DIT-FFT算法;利用自己编写的算法对已采集的语音信号进行频谱分析,并画出语音信号的时域与频谱图,并与Matlab数字信号处理工具箱中的fft函数进行对比研究,验证自编算法的正确性二、设计任务对语音信号进行FFT算法的的应用研究三、设计原理1系统总体流程图本设计要求录制一段个人自己的语音信号,并对录制的信号进行采样;画出采样后语音信号的时域波形和频谱
3、图;在Matlab环境下编写基2 DIT-FFT算法;利用自己编写的算法对已采集的语音信号进行频谱分析,并画出语音信号的时域与频谱图,并与Matlab数字信号处理工具箱中的fft函数进行对比研究,验证自编算法的正确性。所以得到系统总体流程图如图1所示。语音信号采集完成信号时域图完成信号频率响应编写fft程序,画出信号频谱图实现输入信号的倒序实现一级中不同种蝶形算运实现一级中相同种蝶形运算与Matlab自带的FFT比较图1 系统总体流程图2 FFT运算规律及编程思想2.1语音信号的采集利用PC机自带的录音机,录制一段语音信号,保存格式为wave的文件,并将其保存在电脑中。在MATLAB中,fn=
4、input( Enter WAV filename:,s); x,fs,nb=wavread(fn,n1 n2); 用于读取语音,采样值放在向量x中,fs表示采样频率(Hz),nb表示采样位数。n1 n2表示读取从n1点到n2点的值(若只有一个n的点则表示读取前n点的采样值)。sound(x,fs,nb); 用于对声音的回放。向量x则就代表了一个信号(也即一个复杂的“函数表达式”)也就是说可以像处理一个信号表达式一样处理这个声音信号。采集到语音信号之后,需要对语音信号进行分析,如语音信号的时域分析、频谱分析、谱图分析。2.2 DIT-FFT算法的基本原理快速傅里叶变换(FFT)是为提高DFT运
5、算速度而采用的一种算法。对一个有限长度序列x(n)的N点的DFT为:所以,要求N点的DFT,需要N2次的复数乘法运算,N*(N-1)次复数乘法运算算。随着N的增加,运算量将急剧增加,而在实际问题中,N往往是较大的,如当N=1024时,完成复数乘法和复数加法的次数分别为百万以上,无论是用通用计算机还是用DSP芯片,都需要消耗大量的时间,不能满足实时的要求,,不适合于对实时处理要求高的场合。为了能实时处理DFT,要想减少DFT的运算量可以有两个途径:第一是降N,N的值减小了,运算量就减少了;第二是利用旋转因子的周期性,对称性和可约性。利用这两个途径实现DFT的快速傅里叶变换(FFT),FFT算法基
6、本上可分为按时间抽取的FFT算法(DIT-FFT)和按频率抽取的FFT算法(DIF-FFT)。旋转因子的性质:(1)周期性(2)共轭对称性(3)可约性本次课设要求用用基2的按时间抽取的FFT算法(DIT-FFT)实现FFT功能,设序列x(n)的长度为N,且N满足N=2M,M为正整数。若N不能满足上述关系,可以将序列x(n)补零实现。按时间抽取基2-FFT算法的基本思路是将N点序列按时间下标的奇偶分为两个N/2点序列,计算这两个N/2点序列的N/2点DFT,计算量可减小约一半;每一个N/2点序列按照同样的划分原则,可以划分为两个N/4点序列,最后,将原序列划分为多个2点序列,将计算量大大降低。按
7、时间下标的奇偶将N点x(n)分别抽取组成两个N/2点序列,分别记为x1(n)和x2(n),将x(n)的DFT转化为x1(n)和x2(n)的DFT的计算。利用旋转因子的可约性,即:用蝶形运算可表示为如图2所示:图2 DIT-FFT蝶形运算流图符号以此类推,还可以把x1(n)和x2(n)按n值得奇偶分为两个序列,这样就达到了降N得目的,从而减少了运算量。FFT对DFT的数学运算量改进:直接采用DFT进行计算,运算量为N2次复数乘法和N*(N-1)次复数乘法。当采用M次FFT时,由N=2M求得M=logN,运算流图有M级蝶形,每一级都由N/2个蝶形运算构成,这样每一级蝶形运算都需要N/2次复数乘法和
8、N次复数加法。M级运算共需要复数乘法次数为C=N/2*M,复数加法次数为C=N*M。当N值较大时,FFT减少运算量的特点表现的越明显。2.3 DIT-FFT算法的运算规律及编程思想为了编写DIT-FFT算法的运算程序,首先要分析其运算规律,总结编程思想并绘出程序框图。1. 原位计算对点的FFT共进行M级运算,每级由N/2个蝶形运算组成。在同一级中,每个蝶的输入数据只对本蝶有用,且输出节点与输入节点在同一水平线上,这就意味着每算完一个蝶后,所得数据可立即存入原输入数据所占用的数组元素(存储单元),这种原位(址)计算的方法可节省大量内存。2. 蝶形运算实现FFT运算的核心是蝶形运算,找出蝶形运算的
9、规律是编程的基础。蝶形运算是分级进行的;每级的蝶形运算可以按旋转因子的指数大小排序进行;如果指数大小一样则可从上往下依次蝶算。对点的FFT共有M级运算,用L表示从左到右的运算级数(L=1,2,M )。第L级共有个不同指数的旋转因子,用R表示这些不同指数旋转因子从上到下的顺序(R=0,1,B-1)。第R个旋转因子的指数,旋转因子指数为P的第一个蝶的第一节点标号k从R开始,由于本级中旋转因子指数相同的蝶共有个,且这些蝶的相邻间距为,故旋转因子指数为P的最后一个蝶的第一节点标号k为:,本级中各蝶的第二个节点与第一个节点都相距B点。应用原位计算,蝶形运算可表示成如下形式: (J)= (J)+ (J+B
10、)* (J+B)= (J)-(J+B)* 总结上述运算规律,可采用如下运算方法进行DIT-FFT运算。首先读入数据,根据数据长度确定运算级数M,运算总点数,不足补0处理。然后对读入数据进行数据倒序操作。数据倒序后从第1级开始逐级进行,共进行M级运算。在进行第L级运算时,先算出该级不同旋转因子的个数(也是该级中各个蝶形运算两输入数据的间距),再从R=0开始按序计算,直到R=B-1结束。每个R对应的旋转因子指数,旋转因子指数相同的蝶从上往下依次逐个运算,各个蝶的第一节点标号k都是从R开始,以为步长,到(可简取极值N-2)结束。考虑到蝶形运算有两个输出,且都要用到本级的两个输入数据,故第一个输出计算
11、完毕后,输出数据不能立即存入输入地址,要等到第二个输出计算调用输入数据完毕后才能覆盖。这样数据倒序后的运算可用三重循环程序实现。整个蝶形运算流程图如图3所示。图3 整个蝶形运算流程图送入x(n),MN=2M倒序L=1:MB=2(L-1)J=0:B-1P=J*2(M-L) K=J:2L:N-1T=A(K)+A(K+B)*WNPA(K+B)=A(K)-A(K+B)*WNPA(K)=T输出开始 结束束束3.序列倒序为了保证运算输出的X(k)按顺序排列,要求序列x(n)倒序输入,即在运算前要先对输入的序列进行位序颠倒。如果总点数为的x(n)的顺序数是用M位二进制数表示,则倒序数只需将顺序数的二进制位倒
12、置即可,按照这一规律用硬件电路和汇编语言很容易产生倒序数。但用MATLAB等高级语言实现倒序时,直接倒置二进制数位的方法不可取,还须找出产生倒序的十进制规律。将十进制顺序数用I表示,与之对应的二进制数用IB表示。十进制倒序数用J表示,与之对应的二进制数用JB表示。JB是IB的位倒置结果,十进制顺序数I增加1,相当于IB最低位加1且逢2向高位进1,即相当于JB最高位加1且逢2向低位进1。JB的变化规律反映到J的变化分二种情况:如果JB的最高位是0,则直接由加1得到下一个倒序值;如果JB的最高位是1,则要先将最高位变0,再在次高位加1。但次高位加1时,同样要判断0、1值,如果是0 ,则直接加1,否
13、则要先将次高位变0,再判断下一位。依此类推,直到完成最高位加1,逢2向右进位的运算。利用这一算法可按顺序数I的递增顺序,依次求得与之对应的倒序数J。为了节省内存,数据倒序可原址进行,当I = J时不需要交换,当I J时需要交换数据。另外,为了避免再次调换前面已经调换过的一对数据,只对IJ的情况进行数据交换即可实现数据倒序操作。图3中数据倒序的程序流程图如图4所示。例如,N=8时,序列倒序结果如表1所示。表1 码位倒序(N=8)自然顺序 二进制 倒位序二进制 倒位顺序0 0 0 0 0 0 0 0 1 0 0 1 1 0 0 4 2 0 1 0 0 1 0 2 3 0 1 1 1 1 0 6 4
14、 1 0 0 0 0 1 1 5 1 0 1 1 0 1 5 6 1 1 0 0 1 1 3 7 1 1 1 1 1 1 7 图4 倒序流程图LH=N/2 J=1 N1=N-1I=0,N-1数据交换算倒序数YNIJ?T=A(J)A(J)=A(I)A(I)=TK=N/2JK?J=J+KNJ=J-K K=K/2Y四、设计过程3 Matlab程序实现3.1源程序fs=input(输入采样频率fs=); %语音信号采样频率为fsN1=input(输入所需变换的起点N1=);N2=input(输入所需变换的终点N2=);fn=input( Enter WAV filename:,s); %获取一个*.w
15、av的文件x,fs,nb=wavread(fn,N1 N2); %读取语音信号的数据sound(x,fs,nb); %播放语音信号%n=N2-N1+1;%当语音信号文件较大时用这两条%x1=reshape(x,1,2*n);%语句替换x1=x;x1=x;y1=fft(x1);figure(1)plot(x1) %做原始语音信号的时域图形title(语音信号时域波形)xlabel(n);ylabel(幅值);M=nextpow2(x1); % 求x的长度对应的2的最低幂次m N=2M;if length(x1)N x1=x1,zeros(1,N-length(x1); % 若x的长度不是2的幂,
16、补零到2的整数幂 end %数据倒序操作J=0;%给倒序数赋初值for I=0:N-1;%按序交换数据和算倒序数 if I=K; J=J-K;K=K/2; end J=J+K;end %x1; y=x1; % 将x倒序排列作为y的初始值 WN=exp(-i*2*pi/N); for L=1:M B=2L/2;%第L级中,每个蝶形的两个输入数据相距B个点,每级有B个不同的旋转因子 for J=0:B-1 % J代表了不同的旋转因子 p=J*2(M-L); WNp=WNp; for k=J+1:2L:N % 本次蝶形运算的跨越间隔为2L kp=k+B; % 蝶形运算的两个因子对应单元下标的关系 t
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FFT 算法 应用 研究
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【胜****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【胜****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。