您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > matlab仿真实验报告
MatLab仿真试验报告2008211208班08211106号史永涛班内序号:01实验一:数字信号的FFT分析一.实验目的通过本次实验,应该掌握:(1)用傅立叶变换进行信号分析时基本参数的选择。(2)经过离散时间傅立叶变换(DTFT)和有限长度离散傅立叶变换(DFT)后信号频谱上的区别,前者DTFT时间域是离散信号,频率域还是连续的,而DFT在两个中都是离散的。(3)离散傅立叶变换的基本原理、特性,以及经典的快速算法(基2时间抽选法),体会快速算法的效率。(4)获得一个高密度频谱和高分辨率频谱的概念和方法,建立频率分辨率和时间分辨率的概念,为将来进一步进行时频分析(例如小波)的学习和研究打下基础。(5)建立DFT从整体上可看成是由窄带相邻滤波器组成的滤波器组的概念,此概念的一个典型应用是数字音频压缩中的分析滤波器,例如DVDAC3和MPEGAudio。对于第一个小题目二.实验任务1、实验内容及要求(1)离散信号的频谱分析:设信号此信号的0.3pi和0.302pi两根谱线相距很近,谱线0.45pi的幅度很小,请选择合适的序列长度N和窗函数,用DFT分析其频谱,要求得到清楚的三根谱线三.实验分析(1)可先做图,得到时域序列的图像(2)要得到三根谱线,则先用FFT得到时域信号x(n)的频谱X(N),(3)对时域做图时,应使用离散傅立叶变换,才可得到相互离散的谱线(4)要得到题目要求的三根谱线,应选择合适的窗函数的宽度与幅度,否则无法得到0.45pi处的谱线,同时进行变换时,要选择合理的fft点数,否则无法将0.3pi和0.302pi两根谱线相分离。(5)我没有直接得角频率,而是通过式子w=2*pi/k*[0:1:k-1],得到角频率,然后根据ω=ΩT,(T=1/Fs),可得到Ω和f,从而得到最后的结果。00010450303024().*cos(.)sin(.)cos(.)xnnnn四.实验代码及波形图k=1000;n=[1:1:k];x=0.001*cos(0.45*n*pi)+sin(0.3*n*pi)-cos(0.302*n*pi-pi/4);subplot(2,1,1);stem(n,x,'.');title('时域序列');xlabel('n');ylabel('x(n)');xk=fft(x,k);w=2*pi/k*[0:1:k-1];%数字角频率subplot(2,1,2);stem(w/pi,abs(xk));axis([00.502]);%关键代码设置窗函数的宽度与限幅title('1000点dft');xlabel('数字频率');ylabel('|xk(k)|');所得实验图像为:如图,得到了清晰的0.3pi,0.302pi,0.45pi处的谱线,完成了实验要求。对于第二个小题目:二.实验任务DTMF信号频谱分析:用计算机声卡采用一段通信系统中电话双音多频(DTMF)拨号数字0~9的数据,采用快速傅立叶变换(FFT)分析这10个号码DTMF拨号时的频谱。三.实验分析(1)对于题目要求的用计算机声卡采集0-9的DTMF,可使用第二题中的到的自己手机号码的DTMF(2)画出所得脉冲DTMF信号的时域波形(3)用离散傅立叶变换,得到信号的频谱(4)同样应注意选择合适的FFT点数,以及窗函数的宽度和幅度。四.实验代码和波形图[x,Fs,bits]=wavread('syt.wav');N=1:1:Fs;subplot(2,1,1);plot(x);title('时域波形');xlabel('n');ylabel('x(n)');n=Fs*2xk=fft(x,n);k=0:1:n-1;w=2*pi/n*k;subplot(2,1,2);stem(w/pi,abs(xk),'.');title('音频信号频谱');xlabel('数字频率');axis([0201000])所得实验图像为如图,得到了一个总的频谱图,完成了实验的任务要求。五.实验中遇到的问题及解决方法(1),在得到三根清晰的频谱时,不知道如何选择合适的FFT取样点数,只好不断进行取点实验,花费了不少时间,最后还是通过询问同学以及上网查找资料,才得到了最佳取样点,N=1000。(2)在分析这10个号码DTMF拨号时的频谱,不会使用wavread函数,老是弄错等号左边的格式,后经查询资料才学会使用wavread函数。六.心得体会在实际的数字系统中,DFT是一种得到了广泛应用的、重要的信号处理手段。其之所以重要,不仅仅得益于DFT能够更好地适应于数字系统的两个基本特征并拥有严格的定义和明确的物理含义,同时还在于其具备了快速计算方法,为FFT(fastfouriertransform),FFT极大地降低了DFT的运算量。因此我们应当了解DFT的原理,掌握FFT的使用方法,同时应会利用matlab软件求解较为简单的FFT,从而分析一些信号的频谱掌握傅立叶变化的原理特性,为以后的学习打下基础。本次试验是在离散信号时域波形的基础上,对离散信号做傅里叶变换而得到频域波形进行分析。在进行变换时要合理的选择fft点数,以及窗函数的宽度与幅度。通过本次试验,我基本掌握了用傅立叶变换进行信号分析时基本参数的选择,离散傅立叶变换的基本原理、特性,以及经典的快速算法,为以后dsp及matlab的学习打下了基础。这个实验难度虽然比后两个实验略小,但由于之前没有实际使用过matlab仿真dsp,因此需要先从头学起,掌握一些常用的函数和操作,从而也为之后的两个实验打下了基础。实验二DTMF信号的编码一、实验目的(1)复习和巩固IIR数字滤波器的基本概念;(2)掌握IIR数字滤波器的设计方法;(3)掌握IIR数字滤波器的实现结构;(4)能够由滤波器的实现结构分析滤波器的性能(字长效应);(5)了解通信系统电话DTMF拨号的基本原理和IIR滤波器实现方法。对于第一个小题目二.实验任务1)把您的联系电话号码通过DTMF编码生成为一个.wav文件。(a)根据ITUQ.23建议,DTMF信号的技术指标是:传送/接收率为每秒10个号码,或每个号码100ms。(b)每个号码传送过程中,信号存在时间至少45ms,且不多于55ms,100ms的其余时间是静音。(c)在每个频率点上允许有不超过±1.5%的频率误差。任何超过给定频率±3.5%的信号,均被认为是无效的,拒绝接收。(其中关键是不同频率的正弦波的产生。可以使用查表方式模拟产生两个不同频率的正弦波。正弦表的制定要保证合成信号的频率误差在±1.5%以内,同时使取样点数尽量少)三.实验分析(1)本实验用IIR数字滤波器产生双音多频DTMF拨号信号的产生和恢复,演示IIR数字滤波器在通信系统中的应用。DTMF信号是将拨号盘上的0~F共16个数字,用音频范围的8个频率来表示的一种编码方式。8个频率分为高频群和低频群两组,分别作为列频和行频。每个字符的信号由来自列频和行频的两个频率的正弦信号叠加而成。频率组合方式如下图所示。频率1209Hz1336Hz1477Hz1633Hz697Hz123A770Hz456B852Hz789C941Hz*0#D则以此为基础,可得到各数字的DTMF。(2)通过设置占空比,使传送号码时,信号存在的时间满足题目的要求。(3)可以使用查表方式模拟产生两个不同频率的正弦波。正弦表已满足对于频率误差的要求四.实验代码及波形图N=800;total_x=[];tm=[49,50,51,65;52,53,54,66;55,56,57,67;42,48,35,68];n=1:N;%用于设置占空比fs=8000;%用于频率变换lf=[697770852941];hf=[120913361477];x1=sin(2*pi*lf(1)*n/fs)+sin(2*pi*hf(1)*n/fs);%1x2=sin(2*pi*lf(1)*n/fs)+sin(2*pi*hf(3)*n/fs);%3x3=sin(2*pi*lf(2)*n/fs)+sin(2*pi*hf(2)*n/fs);%5x4=sin(2*pi*lf(3)*n/fs)+sin(2*pi*hf(2)*n/fs);%8x5=sin(2*pi*lf(1)*n/fs)+sin(2*pi*hf(1)*n/fs);%1x6=sin(2*pi*lf(2)*n/fs)+sin(2*pi*hf(2)*n/fs);%5x7=sin(2*pi*lf(1)*n/fs)+sin(2*pi*hf(2)*n/fs);%2x8=sin(2*pi*lf(2)*n/fs)+sin(2*pi*hf(3)*n/fs);%6x9=sin(2*pi*lf(1)*n/fs)+sin(2*pi*hf(2)*n/fs);%2xa=sin(2*pi*lf(3)*n/fs)+sin(2*pi*hf(1)*n/fs);%7xb=sin(2*pi*lf(2)*n/fs)+sin(2*pi*hf(1)*n/fs);%4total_x=[x1,x2,x3,x4,x5,x6,x7,x8,x9,xa,xb];x11=[x1,zeros(1,800)];x22=[x2,zeros(1,800)];x33=[x3,zeros(1,800)];x44=[x4,zeros(1,800)];x55=[x5,zeros(1,800)];x66=[x6,zeros(1,800)];x77=[x7,zeros(1,800)];x88=[x8,zeros(1,800)];x99=[x9,zeros(1,800)];xaa=[xa,zeros(1,800)];xbb=[xb,zeros(1,800)];x=[x11,x22,x33,x44,x55,x66,x77,x88,x99,xaa,xbb];x=x/max(abs(x));plot(x);sound(x);wavwrite(x,fs,'syt.wav')所得图像为:如图,得到了11个数字DTMF编码的时域波形,完成了题目的要求。对于第二个小题目二.实验任务对所生成的DTMF文件进行解码。(1)DTMF信号解码可以采用FFT计算N点频率处的频谱值,然后估计出所拨号码。但FFT计算了许多不需要的值,计算量太大,而且为保证频率分辨率,FFT的点数较大,不利于实时实现。因此,FFT不适合于DTMF信号解码的应用。(2)由于只需要知道8个特定点的频谱值,因此采用一种称为Goertzel算法的IIR滤波器可以有效地提高计算效率。其传递函数为:三.实验分析(1)解码的过程的核心是使用Goertzel算法,由于只有8种可能的音频要检测,所以需要8个算式给出的滤波器,每个滤波器调谐到这8个频率之上,在相应的频率上的频谱值最大,可设置一个门限来判断,大于门限才予以正确,判断出在频率表中的行和列,在找出对应的ASCII码。根据人们的经验,对DTMF信号最205点的FFT最好,而且各个频率对应的K值都已经算好了(如K=18对应696hz;K=20对应770hz;K=22对应852HZ);则根据频谱图上的在K为多少时频率最大,则对应出相应的频率,在对应出相应的数字。(2)使用Goertzel算法画出每个声音信号对应的8个频率,得到其中最大的两个频率,即一个为行频,一个为列频。(3)将这两个频率与原频率方式表进行对比,确定这两个频率与表中哪两个频率最为接近,从而得到由这两个频率确定的一个数字。(4)编码过程中,可以使用一个pause函数,使解码得到的频谱和数字逐一显示,使过程更为清晰。四.实验代码及波形图k=[1820222431343842];%要求的DFT样本序号N=205;disp(['接收端检测到的号码为'])fornn=1:11m=800*(nn-1);X=goertzel(total_x(m+1:m+N),k+1);%用Goertzel算法计算八点DFT样本val=abs(X);%列出八点DFT向量stem(k,val,'.');grid;xlabel('k');ylabel('|x(k)|')set(gc
本文标题:matlab仿真实验报告
链接地址:https://www.777doc.com/doc-3967265 .html