1《测试信号分析与处理》课程试验报告试验名称:快速傅立叶变换算法(FFT)在信号频谱分析中的应用及滤波器的设计和实现试验目的:通过本试验,基本掌握FFT算法的实现原理,同时能利用MATLAB语言编写完成FFT算法,并对给定的信号进行频谱分析。按照给定的数字滤波器设计指标,完成相应数字滤波器的设计。试验设备:通用计算机+MATLAB6.0软件。试验步骤:1、产生给定的需要分析的周期性信号,利用FFT算法对产生的周期性信号进行频谱分析。2、按照给定的数字滤波器设计指标,设计完成相应的数字滤波器。试验内容:1、理解FFT算法的基本原理;2、掌握MATLAB编程的基本语言;3、会利用MATLAB语言实现FFT算法。4、利用实现的FFT算法对给定的周期性离散信号进行频谱分析,并绘出频谱图。5、理解数字滤波器设计指标,完成数字滤波器设计。试验的难点和要点:1、依据采样定理,对给定的信号选择合适的采样周期进行离散化。2、熟练使用MATLAB语言中的FFT库函数对采样信号进行傅立叶变换。3、利用MATLAB绘图语言绘制傅立叶变换后的信号频谱图。4、利用MATLAB语言设计完成给定指标的数字滤波器。2试验过程记录:1、利用FFT实现对信号频谱分析的基本原理(介绍试验内容中所涉及到的信号分析理论,注意介绍说明要规范和完整)(1)采样定理:一个在频率mf以上部分无频率分量存在的有限带宽信号,可以由小于或等于mf21的均匀时间间隔t上的取值唯一地确定。采样定理写成数学表达式即为:mft21这个定理说明如果在某一频率mf以上x(t)的傅立叶变换结果等于零,则关于x(t)的全部信息均包含在它的采样间隔小于或等于mf21的均匀采样信号里。或者说当以大于或等于的mf2频率对x(t)进行采样时,采样值x(n)中包含了x(t)在每一时刻的信息。(2)如果序列x(n)的长度LN2,其中L是整数(如果不满足此条件,可以人为地增补零值点来达到),在时域上按奇偶抽取分解成短序列的DFT,使最小DFT运算单元为2点。通常将FFT运算中最小DFT运算单元称为基(radix),因而把这种算法称为基-2时间抽取FFT(DIT-FFT)算法。将x(n)按n为奇偶分解成两个子序列,当n为偶数时,令n=2r;当n为奇数时,令n=2r+l;可得到12(2)(),(21)(),0,...,12Nxrxrxrxrr则其DFT可写成11222(21)00()(2)(21)NNrkrkNNrrXkxrWxrW12()()kNXkWXk1()Xk和2()Xk均分别是N/2点序列1()xn和2()xn的DFT,而且r与k的取值满足30,1,…,N/2-1。而X(k)是一个N点的DFT,因此上式只计算了X(k)的前N/2的值。由DFT和nkNW的性质可得到X(k)的后N/2的值为:212()()()222NkNNNNXkXkWXk12()()kNXkWXk表明,只要计算出两个N/2点的DFT1()xk和2()xk,经过线性组合,即可求出全部N点的X(k)。由于2MN,1/22MN仍为偶数,因而这样的分解可以继续进行下去,直到最后的单元只需要做2点DFT为止。若Xm(p)和Xm(q)为输入数据,1()mXp和1()mXq为输出数据,nkNW为旋转因子,则对于基-2DIT-FFT算法,蝶形运算的基本公式为11()()()()()(){kmmmNkmmmNXpXpXqWXqXpXqW(3)误差产生原因及分析对连续非周期信号的数字谱分析实质上是用有限长抽样序列的DFT(离散谱)来近似无限长连续信号的频谱,其结果必然会产生误差,主要的误差有:a.栅栏效应栅栏效应是由于频域的离散化引起的,使得频谱抽样间隔之间的频谱无法反映出来,因此是不可避免的。为了改善栅栏效应,提高频率分辨率,应当增加信号的有效数据长度T1和N。b.混叠效应当采样频率fs=1/T不够高时,采样信号相对原信号就会产生频谱的混叠,引起频谱失真。客服的办法是提高采样频率,设法满足采样定理,保证fs=2fm。c.频谱泄露频谱泄露又叫截断误差,是由于时域信号的截断引起的,减小频谱泄露的方法有两种,一是增加截断长度T1,二是改变窗口形状。42、试验实现流程分析(理解已有的频谱参考程序,完成信号频谱FFT算法实现流程图绘制)信号频谱分析算法实现流程:3、试验结果分析(修改信号生成形式和构成关系,并对信号频谱变化进行对比说明;修改数字滤波器设计指标,分析不同设计指标下滤波器的频谱特性差异。要求利用试验中的曲线图进行分析说明)信号频谱分析结果曲线分析:开始送入x(n),MN=2M倒序L=1,MJ=0,B-1P=2M-LJk=J,N-1,2LpNpNWBkXkXBkXWBkXkXkX)()()()()()(输出结束B2L-15原程序运行后结果:正弦波经过FFT变换后,得到的信号频带上有25HZ和50HZ两个峰值,再经反变换后还原成原模拟信号。改变信号形式:x=sin(2*pi*50*t)+2*sin(2*pi*25*t)6由频谱曲线得,50HZ的频谱幅值是25HZ的一半。改变信号形式为:x=sin(2*pi*200*t)+sin(2*pi*25*t)由曲线得,正弦波波动更快,200HZ和25HZ的对应幅值差较小栅栏效应:改变信号形式为:x=sin(2*pi*26*t)+sin(2*pi*25*t),信号频率为26HZ和25HZ,得到频谱如下:7原因分析:频谱的分辨率F=fs/Nfs=1000,本实验中采样点数为N=512,则F1.95HZ。因此当两频率在1.95HZ以内时将难以辨别,以上两个信号的频率几乎难以分辩。混叠效应:修改信号形式为,x=sin(2*pi*40*t)+sin(2*pi*36*t)由曲线得,信号出现一定程度的混叠,不利于频谱分析。8数字滤波器设计结果曲线分析:1.数字低通滤波器设计:1)冲激响应不变法:(T=1s)由上图得,低通滤波器在0.2πrad时误差为0.92dB,在0.3πrad时误差为15dB,因此滤波器符合设计要求。9(T=3s)改变T后发现,相比较与上图,频谱波形出现较大差别,频率愈高,差别越大。这是由于混叠现象引起的。2)双线性变换法10(T=1s)由上图得,低通滤波器在0.2πrad时误差为0.56dB,在0.3πrad时误差为15dB,因此滤波器符合设计要求。T=2s改变T后,曲线相比于上图,变化不大。因为双线性变换的T可任选。3)分析发现,对于冲激响应不变法,虽然有频率混叠现象,但因为是线性转换,曲线形状与原模拟示波器很相近。对于双线性不变法,由于转换的频率压缩作用,曲线的形状会偏离原模拟滤波器较大。2.数字高通滤波器设计fs=1000;wp=400*2/fs;ws=200*2/fs;rp=3;rs=1511通过低通滤波器频率转换而得。4、实验心得与体会(谈一下试验过程中的体会和想法)本次试验,通过对FFT滤波的matlab仿真,让自己对离散傅里叶变换、FFT算法以及滤波器的设计的相关知识有了更加深入的理解。同时通过对信号频率的修改与分析,我对采用有限长抽样序列的DFT来近似无限长连续信号的频谱误差有了更加深刻的理解,知道了栅栏效应、混叠效应的误差产生原因。最后,本次实验利用MATLAB分析处理信号的过程,让我感受到了MATLAB的强大的数据处理功能,激发了我对其浓厚的兴趣。