西安交大数字信号处理实验详解.docx

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
西安交大数字信号处理实验详解

数字信号处理实验——快速傅里叶变换学院:班级:姓名: 学号:快速傅里叶变换一、实验目的在理论学习的基础上,通过本实验加深对快速傅立叶变换的理解;熟悉并掌握按时间抽取FFT算法的程序;了解应用FFT进行信号频谱分析过程中可能出现的问题,例如混淆、泄漏、栅栏效应等,以便在实际中正确应用FFT。二、实验要求记录下实验内容中各种情况下的X (k)值,做出频谱图并深入讨论结果,说明参数的变化对信号频谱产生哪些影响。频谱只做模特性,模的最大值=1,全部归一化;打印出用C语言(或MATLAB 语言)编写的FFT源程序,并且在每一小段处加上详细的注释说明;用C语言(或MATLAB 语言)编写FFT程序时,要求采用人机界面形式:N , T , f 变量均由键盘输入,补零或不补零要求设置一开关来选择。三、实验内容仔细分析教材第六章‘时间抽取法FFT ’的算法结构,编制出相应的用FFT进行信号分析的C语言(或MATLAB 语言)程序;用FFT程序计算有限长度正弦信号分别在以下情况下所得的DFT结果并进行分析和讨论:信号频率f=50Hz,采样点数N=32,采样间隔T=0.000625s信号频率f=50Hz,采样点数N=32,采样间隔T=0.005s信号频率f=50Hz,采样点数N=32,采样间隔T=0.0046875s信号频率f=50Hz,采样点数N=32,采样间隔T=0.004s信号频率f=50Hz,采样点数N=64,采样间隔T=0.000625s信号频率f=250Hz,采样点数N=32,采样间隔T=0.005s将c)信号后补32个0,做64点FFT四、程序编写FFT运算:先进行采样,后对采样序列进行码位倒置,再进行蝶形算法。1.采样用for循环来将采样点逐个存入数组x(j)中。for j=0:1:N-1x(j+1)=sin(2*pi*f*j*T); end2.补零采用insert语句对是否补零来进行判断,如果补零,就将补零数加到采样点数,且补零的那些点在数组中都存为0。insert=input(是否补0?[0-否;1-是]:); if insert==1 ZERO=input(补零数:); for j=N:1:N+ZERO-1x(j+1)=0; endN=N+ZERO; end3.码位倒置M为fft运算的级数,在这里被用为表示数组中数据下表的二进制代码位数上限。用for循环来实现对数组中的每个数据进行处理。其中dec2bin()函数将十进制代码转换为二进制代码,fliplr()将二进制的矩阵进行左右对称的翻转,即实现了码位倒置,bin2dec()在讲二进制代码转换为十进制代码。M=log2(N); for t=1:1:N s=dec2bin(t-1,M); s=fliplr(s); s=bin2dec(s); A(s+1)=x(t); end4.fft蝶形运算 对fft运算采用了三个for循环来实现。第一个循环实现fft每一级的运算,所以它的范围应该为1—M,循环一次做一级的fft运算。第二个循环实现每一级运算中的分组,所以其分组与所处的运算级数有关,例如第一级有16的组,第二级有8个组,所以其上限为2^(L-1)-1。第三个循环实现每一个组中的fft运算,但每个组中进行的fft运算次数与分组有关,所以运算时对要进行蝶形运算的采样点的下标要用k和级数来控制,而对于系数W与分组和级数有关。for L=1:1:M %级数for J=0:1:(2^(L-1)-1) %分组for k=(J+1):2^L:N %组内fft运算 T=A(k)+A(k+2^(L-1))*exp((-i*2*pi*J*2^(M-L))/N);A(k+2^(L-1))=A(k)-A(k+2^(L-1))*exp((-i*2*pi*J*2^(M-L))/N);A(k)=T; endendend5.归一化对采样点的幅值去绝对值,再用每一个绝对值除以其中的最大值,这样就可以得到归一化后的图形x=abs(A); y=max(x); X=x/y;6.画图用for循环来实现采样点的幅值与采样点的对应绘图。Axis()规定图形的纵轴范围(0,1)和横轴范围(0,N)。for j=1:1:Nstem(j-1

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档