您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > MATLAB信号处理
MATLAB信号处理学院:三峡大学计算机与信息学院姓名:学号:专业:电子信息科学与技术指导老师:分数:实验报告一、实验目的1.学会MATLAB的使用,掌握MATLAB的程序设计方法;2.掌握数字信号处理的基本概念、基本理论和基本方法;4.掌握用MATLAB进行快速傅里叶变换(FFT)的方法;5.学会用MATLAB对信号进行分析和处理并设计滤波器;二、实验环境:计算机Window7、MatlabR2012a三、实验题目:题目三:信号含有的频率分别为60Hz,180Hz,240Hz三种。1、请选择合适的采样频率和采样点数,用FFT分析该信号的频谱并正确显示。2、请设计一个数字滤波系统,使其输出只含有180Hz的信号,并显示滤波后的信号及其频谱。(IIR系统和FIR系统均可)四、实验原理:1FFT算法的实现原理:对于有限长序列x(n),若要求其N点的傅里叶变换(DFT)需要经过2N次复数乘法运算和N*(N-1)次复数加法运算。随着N的增加,运算量将急剧增加,而在实际问题中,N往往是较大的,如当N=1024时,完成复数乘法和复数加法的次数分别为百万以上,无论是用通用计算机还是用DSP芯片,都需要消耗大量的时间和机器内存,不能满足实时的要求。因此,DFT的这种运算只能进行理论上的计算,不适合对实时处理要求高的场合。因此,研究作为DSP的快速算法的FFT是相当必要的,快速傅里叶变换(FFT)是为提高DFT运算速度而采用的一种算法,快速算法的种类很多,而且目前仍在改进和提高,它是根据离散傅里叶变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。MATLAB提供了快速傅里叶变换算法FFT计算DFT的函数fft,其调用格式如下:Xk=fft(xn,N)参数xn为被变换的时域序列向量,N是DFT变换区间长度,当N大于xn的长度时,fft函数自动在xn后面补零。,当N小于xn的长度时,fft函数计算xn的前N个元素,忽略其后面的元素。2滤波器的设计:数字滤波器的设计可采用IIR系统或FIR。本实验采用fir系统的窗函数法。窗函数FIR滤波器的设计方法有窗函数法、频率取样法和最优化设计法。其中窗函数法是设计FIR滤波器最简单有效的方法,也是最常用的方法。在本设计中,所用到的滤波器的系数都是借助于窗函数法完成的。窗函数设计法是一种通过截短和计权的方法使无限长非因果序列成为有限长脉冲响应序列的设计方法。利用加窗函数进行截断和平滑,实现一个物理可实现且具有线性相位的FIR滤波器的设计目的。FIR滤波器的窗函数法设计过程为:式中:Hd(ejΩ)为逼近的理想滤波器频率响应;hd(k)为理想滤波器的单位脉冲响应,是无限长序列【3】。为获取实际应用的FIR滤波,需将hd(k)截断,用有限长的h(k)近似表示,用窗函数可以避免吉布斯现象h(k)=hd(k)ω(k),最后得到实际FIR滤波的频率响应H(ejΩ)。设计常用的窗函数有矩形窗、汉宁窗、海明窗、凯撒窗等。窗本设计选择凯撒窗实现.在MATLAB下,这些窗函数分别为:1.矩形窗:w=boxcar(n),产生一个n点的矩形窗函数。2.三角窗:w=triang(n),产生一个n点的三角窗函数。3.汉明窗:w=hamming(n),产生一个n点的汉明窗函数。4.汉宁窗:w=hanning(n),产生一个n点的汉宁窗函数。5.布莱克曼窗:w=Blackman(n),产生一个n点的布莱克曼窗函数。6.凯泽窗:w=Kaiser(n,beta),产生一个n点的凯泽窗数,其中beta为影响窗函数旁瓣的参数。五、实验代码:clc;clearall;closeall;N=1024;t=0:N-1;Fs=1000;T=1/Fs;x1=2*cos(2*pi*60*t*T);x2=cos(2*pi*180*t*T);x3=2*cos(2*pi*240*t*T);xn=x1+x2+x3;%FFT变换D=2*pi*Fs/N;k=floor(-(N-1)/2:(N-1)/2);X=fftshift(fft(xn,N));figure(1);subplot(1,2,1);plot(k*D,abs(X),'k');title('幅度频谱');xlabel('rad/s');subplot(1,2,2);plot(k*D,angle(X),'k');title('相位频谱');xlabel('rad/s');%滤波器设计Ap=0.25;As=20;%定义通带及阻带衰减dev=[10^(-As/20),(10^(Ap/20)-1)/(10^(Ap/20)+1),10^(-As/20)];%计算偏移量mags=[0,1,0];%带通fcuts=[70,150,200,240];%边界频率[N,Wn,beta,ftype]=kaiserord(fcuts,mags,dev,Fs);%估算FIR滤波器阶数hh2=fir1(N,Wn,ftype,kaiser(N+1,beta));%FIR滤波器设计[hn,w1]=freqz(hh2,1,1024);%求解数字滤波器的频率响应figure(2);stem(hh2);title('hh2波形')figure(3)%绘图subplot(2,1,1)plot(w1/pi,20*log10(abs(hn)));gridon;xlabel('频率w');ylabel('幅度/db');subplot(2,1,2);plot(w1/pi,angle(hn));gridon;xlabel('频率w');ylabel('相位/rad');y=filter(hh2,1,xn);%滤波y(1:ceil(N/2))=[];%群延时N/2,删除无用信号部分L=length(y);N=2^(nextpow2(L));Hw_2=fft(y,N);figure(4);subplot(2,1,1);plot(t(1:L),y);gridon;title('y=cos(2*pi*180*t)');xlabel('时间/s');subplot(2,1,2);plot((0:N-1)*Fs/L,abs(Hw_2));%查看信号频谱六、实验图形:FFT变换后频谱图滤波器频率响应带通滤波器滤波后频谱七、实验心得:通过此次实验,进一熟悉了MATLAB的基本操作,并且初步掌握了用MATLAB进行编程,计算。MATLAB的强大运算功能,可以解决数字信号处理过程中遇到的许多问题。作为实验课程,此次实验与数字信号处理这门课联系十分紧密,利用MATLAB可以很方便的进行FF变换和滤波器的设计,既可以加深对数字信号处理这门课程的理解,同时又可以提高个人的MATALB的应用水平。通过这次实验,我对课堂上所学到的理论知识的理解加深了许多,自己动脑、动手设计的能力也得到了较大提高。在这次课程设计的过程中,我对MATLAB语言有了更深的认识。现在仔细想想,这次课程设计使得我对MATLAB语言的理解与应用能力得到了较大的提升,也让我认识到只要深入学习,提升的空间永远是存在的。在设计的过程中我遇到了一些问题,如:编写源程序中出现了语法错误等。通过百度搜索,我发现了产生错误的原因并解决了问题完成了设计。经过反思我发现较大一部分错误是因为操作的不熟练造成的,这也让我明白了要保持设计的高效率必须经常练习。另一方面我也发现了动手实践的重要性。动手实践是理论知识得以灵活运用的必要前提,也是今后走上工作岗位之后能够很好的完成设计工作的技术保证。只有遇到实际问题并根据自己对课堂上获得的专业知识的理解来解决才能真正的提高自己的能力。这次程序设计让我获益匪浅,对MATLAB也有了进一步的认识:MATLAB功能强、使用灵活方便等。MATLAB是在国内外广泛使用的一种数字信号处理系统,相信除了以上优点,还有许多我还未发现,希望能在以后的学习中有更深入的认识。在此,我也要感谢一下黄瑶老师本学期在数字信号处理和MATLAB这两门课程中给予我指导和帮助。
本文标题:MATLAB信号处理
链接地址:https://www.777doc.com/doc-2887154 .html