《信号处理课程设计时域采样点数和DFT维数对信号频谱的影响分析.doc》由会员分享,可在线阅读,更多相关《信号处理课程设计时域采样点数和DFT维数对信号频谱的影响分析.doc(17页珍藏版)》请在三一办公上搜索。
1、实践教学*兰州理工大学计算机与通信学院2015年春季学期信号处理课程设计 题 目: 时域采样点数和DFT维数对信号频谱的影响分析 专业班级: 通信工程12级2班 姓 名: 学 号: 指导教师: 成 绩:中文摘要在我们生活的世界里充满了各种各样的周期现象,如日常生活中常见的昼夜更替、四季循环、温度气压等气象因素的反复变化,河水水位的周期性涨落,地面植物的岁月枯荣以及科学技术中诸如太阳活动的十一年周期起伏,地磁场的日常变化,重力仪上所反映的固体潮、交流电、电磁波和机械振动等无一不是周期现象。离散傅里叶变换在诸如数字通信、语音处理、图像处理、医学影像、雷达、地震、自动控制等领域中已经得到非常广泛的应
2、用,但一般都以卷积和相关运算以及对连续时间信号和序列进行谱分析为基础。 在现代数字信号处理中,信号的频域分析比时域分析更加具有清晰的物理概念和深刻含义(如检测、滤波、压缩等方面),因而在信息技术领域得到了广泛的应用。信号频谱分析是将信号源发出的信号强度按频率顺序展开,使其成为频率的函数,并考察变化规律,称为频谱分析。频谱分析主要分析信号是由哪些频率的正弦信号叠加得到的,以及这些正弦信号的振幅。通常信源输出的是模拟信号,然后模拟信号要经过采用、量化和编码才能实现数字信号。数字信号处理的核心是离散傅里叶变换(DFT),DFT实现了信号从时域到频域的转换。使得DFT从理论走到实践的是FFT技术,FF
3、T的出现大大减少了DFT的运算量,使得数字信号处理成为可能。关键字:快速傅里叶变换 频率域采样 离散傅里叶变换 Matlab实现 目 录前言1一、频谱分析、DFT及FFT的基本原理21.1频谱分析原理2 1.1.1信号频谱分析基本思想21.1.2信号频谱分析基本原理说明21.1.3信号频谱分析意义及应用场合21.2 DFT的基本原理31.3FFT的基本原理3二、时域采样点数和DFT维数对信号频谱的影响的详细设计42.1 DFT与FFT的比较42.2 对信号频谱的影响的详细设计5三改进与建议9四、设计总结12参考文献13致谢14前言在现代数字信号处理中,信号的频域分析比时域分析更加具有清晰的物理
4、概念和深刻含义(如检测、滤波、压缩等方面),因而在信息技术领域得到了广泛的应用。信号频谱分析是将信号源发出的信号强度按频率顺序展开,使其成为频率的函数,并考察变化规律,称为频谱分析。频谱分析主要分析信号是由哪些频率的正弦信号叠加得到的,以及这些正弦信号的振幅。数字信号处理是一门理论和实践密切结合的课程,为了深入地掌握课程内容,应当在学习理论的同时进行上机实验。上机实验不仅可以帮助同学们,深入地理解和消化基本理论,而且能够锻炼独立解决问题的能力。通常信源输出的是模拟信号,然后模拟信号要经过采用、量化和编码才能实现数字信号。数字信号处理的核心是离散傅里叶变换(DFT),DFT实现了信号从时域到频域
5、的转换。使得DFT从理论走到实践的是FFT技术,FFT的出现大大减少了DFT的运算量,使得数字信号处理成为可能。连续时间傅里叶变换和连续时间傅里叶级数变换为连续时间信号的频域分析提供了基础。一、 频谱分析、DFT及FFT的基本原理1.1 频谱分析原理所谓信号的频谱分析就是计算信号的傅里叶变换。连续信号与系统的傅里叶分析显然不便于直接用计算机进行计算,使其应用受到限制,而DFT是一种时域和频域均离散化的变换,适合数值运算,成为分析离散信号和系统的有力工具。实际工程中,经常遇到的连续信号Xa(t),其频谱函数Xa(jW)也是连续函数。数字计算机难于处理,因而我们采用DFT来对连续时间信号的傅里叶变
6、换进行逼近,进而分析连续时间信号的频谱。信号频谱分析就是利用MATLAB实现快速傅里叶变换的分析的方法,通过DSP数字信号处理器对实时采集到的信号进行FFT运算后实现时域与频域的转换,频谱分析主要分析信号是由哪些频率的正弦信号叠加得到的,以及这些正弦信号的振幅,所以FFT运算结果反映的是频域中各频率分量幅值的大小。 不同信号的傅里叶分析理论与方法有差别,目前常用的是FFT分析法,在特定的时间段中队时域信号进行FFT变换,得到频域信息并获取相对于频率的幅度、相位信息,适用于非周期信号和持续时间很短的瞬态信号的频谱测量。1.1.1 信号频谱分析基本思想先将实时信号的采样值送入DSP系统,DSP程序
7、对这些采样值进行FFT变换,经运算求出对应的信号频谱数据,并将结果送到PC机屏幕上进行显示,使DSP硬件系统完成一台信号频谱分析仪的功能,如下流程所示 :在A/D端加入输入信号装在并运行FFT程序读入AD采样值进行FFT运算求信号的DFT将计算结果送入PC机显示时域信号及频谱图1.1.2信号频谱分析基本原理说明一个模拟信号,经过ADC采样之后,就变成了数字信号。采样定理告诉我们,采样频率要大于信号频率的两倍。采样得到的数字信号,然后做FFT变换。N个采样点,经过FFT之后,就可以得到N个点的FFT结果。为了方便进行FFT运算,通常N取2的整数次方。假设采样频率为Fs,信号频率F,采样点数为N。
8、那么FFT之后结果就是一个为N点的复数。每一个点就对应着一个频率点。这个点的模值,就是该频率值下的幅度特性。若原始信号的峰值为A,那么FFT的结果的每个点(除了第一个点直流分量之外)的模值就是A的N/2倍。而第一个点就是直流分量,它的模值就是直流分量的N倍。而每个点的相位就是在该频率下的信号的相位。第一个点表示直流分量(即0Hz),而最后一个点N的再下一个点(实际上这个点是不存在的,这里是假设的第N+1个点,也可以看做是将第一个点分做两半分,另一半移到最后)则表示采样频率Fs,这中间被N-1个点平均分成N等份,每个点的频率依次增加。例如某点n所表示的频率为:Fn=(n-1)*Fs/N。由上面的
9、公式可以看出,Fn所能分辨到频率为Fs/N,如果采样频率Fs为1024Hz,采样点数为1024点,则可以分辨到1Hz。1024Hz的采样率采样1024点,刚好是1秒,也就是说,采样1秒时间的信号并做FFT,则结果可以分析到1Hz,如果采样2秒时间的信号并做FFT,则结果可以分析到0.5Hz。如果要提高频率分辨力,则必须增加采样点数,也即采样时间。频率分辨率和采样时间是倒数关系。假设FFT之后某点n用复数a+bi表示,那么这个复数的模就是An=a*a+b*b的二次开方,相位就是Pn=atan2(b,a)。根据以上的结果,就可以计算出n点(n1,且n=N/2)对应的信号的表达式为:An/(N/2)
10、*cos(2*pi*Fn*t+Pn),即2*An/N*cos(2*pi*Fn*t+Pn)。对于n=1点的信号,是直流分量,幅度即为A1/N。由于FFT结果的对称性,通常我们只使用前半部分的结果,即小于采样频率一半的结果。1.1.3信号频谱分析意义及应用场合频谱分析的意义是很明确的,就是分析信号的频率构成。更确切地说就是用来分析信号中都含有哪几种正弦波成份。反过来说就是,该信号可以用哪几种频率的正弦波来合成出来。方波信号、正弦波信号、三角波信号以及白噪声信号等这些信号的频域与时域间关系明确,并且具有一定特性,熟练掌握这些典型信号的频谱分析可为实际工程分析做参考。频谱分析在工程测试中应用广泛,譬如
11、研究噪声频谱寻找噪声污染源;又如在机床齿轮机器故障诊断中,通过测量齿轮箱上的振动信号,进行频谱分析,确定最大频率分量,再根据机床转速和转动链找出故障齿轮;再譬如螺旋桨设计中,可通过频谱分析确定螺旋桨的固有频率和临界转速,确定其转速范围等等。1.2 DFT的基本原理设有限长序列x (n) 长为N(0nN-1),其离散傅里叶变换是一个长为N的频率有限长序列(0kN-1),其正变换为 0kN-1 ()离散傅里叶变换的实质是:把有限长序列当做周期序列的主值序列进行DFS变换,x(n)、X(k)的长度均为N,都是N个独立值,因此二者具有的信息量是相等的。已知x(n)可以唯一确定X(k),已知X(k)可以
12、唯一确定x(n)。虽然离散傅里叶变换是两个有限长序列之间的变化,但它们是利用DFS关系推导出来的,因而隐含着周期性。构造离散傅里叶变换的Matlab实现程序如下: functionXk=dft(xn,N) n=0:1:N-1; k=n; WN=exp(-j*2*pi/N); nk=n*k; WNnk=WN.nk; Xk=xn*WNnk1.3 FFT的基本原理离散傅里叶变换在时域和频域都在离散有限的特点,使其成为信号分析与处理中的一种最基本的也是常用的变换。FFT并不是与DFT不同的另外一种变换,而是为了减少DFT计算次数的一种快速有效的算法。快速傅里叶变换使DFT得运算效率提高数个数量级,为数
13、字信号处理技术应用于各种信号的实时处理创造了良好条件,大大推动了数字信号处理技术的发展。Matlab提供了用于快速计算DFT的FFT函数,其调用格式为:y=fft(x);或y=fft(x,N);FFT函数用来计算序列x(n)的N点DFT,如果序列的长度小于N,则函数在序列的尾部补零至N点,而当序列的长度大于N时,函数对序列进行截断。为了提高运算速度,通常将N取为2的整数次幂。测试fft函数和DFT.m自编函数的运算速度,加以对比。 clear all;close all;clc;K=input(K=);N=2K;n=0:N-1;x=randn(1,2K);tic,X=fft(x,N),toct
14、ic,X=DFT(n,x,N),toc当输入K=10时,fft函数的运行时间为0.007640s,DFT.m的运行时间为40858192s;当输入K=11时,fft函数的运行时间为0.020030s.DFT.m的运行时间为21.465218s;当输入K=12时,fft函数的运行时间为0.152170s,DFT.m的运行时间为94.95501s。可见,当DFT点数越多时,FFT算法表现出的高效率优势就越明显。二使用MATLAB仿真分析时域采样点数和DFT维数对信号频谱的影响的详细设计2.1 DFT与FFT的比较用MATLAB语言编写计算序列x(n)的N点DFT的m函数文件dft.m。并与MATL
15、AB中的内部函数文件fft.m作比较。 解: x (n) 的N点DFT的m函数文件dft.m functionXk=dft(xn,N) n=0:1:N-1; k=n; WN=exp(-j*2*pi/N); nk=n*k; WNnk=WN.nk; Xk=xn*WNnkMatlab中的内部函数文件fft.m文件function varargout = fft(varargin)if nargout = 0 builtin(fft, varargin:);else varargout1:nargout = builtin(fft, varargin:);end运算量估计:对于N=点序列进行时间抽选奇
16、偶分解FFT计算,需分M级,每级计算N/2个蝶。每一级需N/2次复乘、N次复加,因此总共需要进行:复乘: 复加:直接计算N点的DFT,需要次复乘、N(N-1)次复加。N值越大,时间抽选奇偶分解FFT算法越优越。例如当N=2048点时,时间抽选奇偶分解FFT算法比直接计算DFT速度快300多倍可以用一下Matlab程序比较DFT和FFT的运算时间N=2048;M=11;x=1:M,zeros(1,N-M);t=cputime;y1=fft(x,N);Time_fft=cputime-tt1=cputime;y2=dft(x,N);Time_dft=cputime-t1t2=cputime;运行结
17、果:Time_fft =0.0469Time_dft =15.2031由此可见FFT算法比直接计算DFT速度快得多。2.2 时域采样点数和DFT维数对信号频谱的影响的详细设计确定信号作如下谱分析:截取使成为有限长序列N(),(长度N自己选)写程序计算出的N点DFT ,画出时域序列图xnn和相应的幅频图。解:1)求x(n)的前10点数据对应的X(ejw)、X(k)。MATLAB程序如下:N=10;n=0:1:N-1;xn=cos(0.48*pi*n)+cos(0.52*pi*n);Xk=dft(xn,N);subplot(3,1,1)stem(n,xn,.k);title(时域序列图xn);xl
18、abel(n);axis(0,10,-2.5,2.5);w=2*pi*(0:1:2047)/2048;Xw=xn*exp(-j*n*w);subplot(3,1,2);plot(w/pi,abs(Xw);title(幅频特性曲线X(ejw);xlabel(w);axis(0,1,0,10);subplot(3,1,3)k1=0:1:9;w1=2*pi/10*k1;stem(w1/pi,abs(Xk),.k);title(频域序列图Xk);xlabel(频率(单位:pi));axis(0,1,0,10);x(n)的前10点数据对应的x(n)、X(ejw)、X(k)如图1-1所示。图1-1 x(n
19、)的前10点数据对应的x(n)、X(ejw)、X(k)由图可见,由于截断函数的频谱混叠作用,X(k)不能正确分辨w1=0.48、w2=0.52这两个频率分量。2)将x(n)补零至100点,求N=100点的X(ejw)、X(k)。MATLAB主要程序如下:N=10;n=0:N-1;xn=cos(0.48*pi*n)+cos(0.52*pi*n);N1=100;n1=0:N1-1;x1=xn(1:10) zeros(1,90);subplot(3,1,1)stem(n1,x1,.k);title(时域序列图x1);xlabel(n);axis(0,100,-2.5,2.5);w=2*pi*(0:2
20、047)/2048;X1=x1*exp(-j*n1*w);subplot(3,1,2);plot(w/pi,abs(X1);title(幅频特性曲线X(ejw);xlabel(w);axis(0,1,0,10);subplot(3,1,3)Xk=dft(x1,N1);k1=0:1:49;w1=2*pi/100*k1;stem(w1/pi,abs(Xk(1:1:50),.k);title(频域序列图Xk);xlabel(频率(单位:pi));axis(0,1,0,10);x(n)补零至100点对应的x(n)、X(ejw)、X(k)如图1-2所示。图1-2 x(n)补零至100点对应的x(n)、X
21、(ejw)、X(k)x(n)补零至100点对应的x(n)、X(ejw)、X(k)如图1-2所示。由图可见,x(n)补零至100点,只是改变X(k)的密度,截断函数的频谱混叠作用没有改变,这时的物理分辨率使X(k)仍不能正确分辨w1=0.48、w2=0.52这两个频率分量。这说明,补零仅仅是提高了计算分辨率,得到的是高密度频谱,而得不到高分辨率谱。3)x(n)的前100点数据,求N=100点的X(ejw)、X(k)。MATLAB主要程序如下:N=100;n=0:1:N-1;xn=cos(0.48*pi*n)+cos(0.52*pi*n);Xk=dft(xn,N);subplot(3,1,1)st
22、em(n,xn,.k);title(时域序列图xn);xlabel(n);axis(0,100,-2.5,2.5);w=2*pi*(0:1:2047)/2048;Xw=xn*exp(-j*n*w);subplot(3,1,2);plot(w/pi,abs(Xw);title(幅频特性曲线X(ejw);xlabel(w);axis(0,1,0,50);subplot(3,1,3);k1=0:1:49;w1=2*pi/100*k1;stem(w1/pi,abs(Xk(1:1:50),.k);title(频域序列图Xk);xlabel(频率(单位:pi));axis(0,1,0,50);100点x(
23、n)对应的x(n)、X(ejw)、X(k)如图1-3所示图1-3 100点x(n)对应的x(n)、X(ejw)、X(k)由图可见,截断函数的加宽且为周期序列的整数倍,改变了频谱混叠作用,提高了物理分辨率,使X(k)能正确分辨w1=0.48、w2=0.52这两个频率分量。这说明通过增加数据的记录长度Tp来提高物理分辨率可以得到分辨率谱。三改进与建议由图1-1、图1-2、图1-3可以看出。当取0=n=9时,从相应的图中几乎无法看出有关信号频谱的信号;将x(n)补90个零点后作N=100点的DFT,从相应的X(k)图中可以看出,这时的谱线相当密,故称为高密度谱线图,但是从中很难看出信号的频谱部分;对
24、x(n)加长取样数据,得到长度为N=100的序列,此时相应的X(k)图中可以清晰地看到信号的频谱成分,这称为高分辨频谱。为了得到更高的分辨率,增加N点的取值进行改进取x(n)的前128点数据,求N=128点的X(ejw)、X(k)。MATLAB主要程序如下:N=128;n=0:1:N-1;xn=cos(0.48*pi*n)+cos(0.52*pi*n);Xk=dft(xn,N);subplot(3,1,1)stem(n,xn,.k);title(时域序列图xn);xlabel(n);axis(0,100,-2.5,2.5);w=2*pi*(0:1:2047)/2048;Xw=xn*exp(-j
25、*n*w);subplot(3,1,2);plot(w/pi,abs(Xw);title(幅频特性曲线X(ejw);xlabel(w);axis(0,1,0,70);subplot(3,1,3);k1=0:1:63;w1=2*pi/128*k1;stem(w1/pi,abs(Xk(1:1:64),.k);title(频域序列图Xk);xlabel(频率(单位:pi));axis(0,1,0,70);128点x(n)对应的x(n)、X(ejw)、X(k)如图1-4所示 图1-4 128点x(n)对应的x(n)、X(ejw)、X(k) 128点x(n)的数据对应的x(n)、X(ejw)、X(k)如
26、图1-4所示。由图可见,截断函数虽然进一步加宽,但不是周期序列的整数倍,所以尽管X(k)能正确分辨w1=0.48、w2=0.52这两个频率分量,但还呈现频谱泄露。分辨率提高了,但仍出现了频谱泄露现象,故要求N取值为周期序列的整数倍。取x(n)的前150点数据,求N=150点的X(ejw)、X(k)。N=150;n=0:1:N-1;xn=cos(0.48*pi*n)+cos(0.52*pi*n);Xk=dft(xn,N);subplot(3,1,1)stem(n,xn,.k);title(时域序列图xn);xlabel(n);axis(0,100,-2.5,2.5);w=2*pi*(0:1:20
27、47)/2048;Xw=xn*exp(-j*n*w);subplot(3,1,2);plot(w/pi,abs(Xw);title(幅频特性曲线X(ejw);xlabel(w);axis(0,1,0,80);subplot(3,1,3);k1=0:1:74;w1=2*pi/150*k1;stem(w1/pi,abs(Xk(1:1:75),.k);title(频域序列图Xk);xlabel(频率(单位:pi));axis(0,1,0,80);15点x(n)对应的x(n)、X(ejw)、X(k)如图1-5所示 图1-5 150点x(n)对应的x(n)、X(ejw)、X(k) 150点x(n)的数据
28、对应的x(n)、X(ejw)、X(k)如图1-4所示。由图可见,截断函数进一步加宽,X(k)也正确清晰分辨w1=0.48、w2=0.52这两个频率分量,达到了很好的效果。四设计总结计算机是进行数字信号处理的主要工具,计算机只能处理有限长序列,这就决定了有限长序列处理在数字信号处理中的重要地位。离散傅里叶变换建立了有限长序列与其近似频谱之间的联系,在理论上具有重要意义。离散傅里叶变换DFT在数字通信、语音处理、图像处理、谱估计、仿真、系统分析、雷达、光学影像、地震等各个领域得到广泛应用,但是这都是以卷积和相关运算,对连续信号和序列进行谱分析为基础的。 通过该课程设计,我们受益匪浅,对DFT在进行
29、频谱的分析上有了根深刻的理解和掌握。DFT实现了频域采样,同时DFT存在快速算法FFT,所以在实际应用中,可以利用计算机,用DFT来逼近连续时间信号的傅里叶变换,进而分析连续时间信号频谱。同时知道了补零点的作用,其仅仅是提高了计算分辨率,得到的是高密度频谱,并不能得到高分辨率谱,要提高频率分辨率,则要通过增加数据记录长度来提高物理分辨率。 在编程实现中,遇到了一些问题,为此我们翻阅一些了参考书,并通过讨论一一解决。期间我们不仅学到了许多课本上的知识,还有课本以外的内容,学到了许多课本上所没提到的东西,这些东西都让我们耳目一新,开阔了视野,拓宽了知识面。从以前仅仅掌握离散傅里叶变换的概念,到现在
30、渐渐领悟到离散傅里叶变换的一些实际应用,更明白它在实际设计中的作用,从理论到实践的逐步过渡,增了动手能力。知道了到团队精神的重要性,大家互相讨论,分工合作,享受了合作的乐趣。数字信号处理作为我们专业一个极其重要的课程,同学们都对相应的数字信号课程设计给予同样的重视,我也不例外。最初拿到课程设计题目时,还是感到有一定的难度的,毕竟MATLAB软件接触不多,然后经过各种不同科目的课程设计,我很快打消了内心的害怕,因为我相信,只要肯努力,一切都会有一个好结果的。通过这次课程设计,让我对数字信号处理知识有了进一步的认识,通过对MATLAB的应用,让我对MATLAB程序也有了了解,并且培养了我的独立思考
31、、解决问题的能力。参考文献1丁玉美.数字信号处理.西安:西安电子科技大学出版社,20082任淑萍. 信号频谱的误差分析及MATLAB实现. 机械工程与自动化:2014,4:47-493万永革. 数字信号处理的MATLAB实现,北京:科学出版社,20084张德丰. MATLAB数字信号处理与应用,北京:清华大学出版社,20105陶红艳.数字信号处理及MATLAB实现(第二版).北京:清华大学出版社.2008.1.p98-123.6王刚.数字信号处理原理及实现.北京:清华大学出版社.2008.3.p96-105.7王宏志.数字信号处理原理及其MATLAB实现(第2版).北京:电子工业出版社.200
32、9.7.p63-100.致谢经过几周的努力,我们的课程设计终于完成了,这意味着这一阶段艰苦的热烈的付出即将告一段落。在整个课程设计中,我在学习上和思想上都受益匪浅,这除了自身的努力外,与指导的老师、同学和朋友的关心、支持和鼓励是分不开的,在这次课程设计的撰写过程中,我得到了许多人的帮助,在此,我表示深深地感谢。首先我要感谢我的老师在课程设计上给予我的指导、提供给我的支持和帮助,这是我能顺利完成这次报告的主要原因,更重要的是老师帮我解决了许多技术上的难题,让我能把系统做得更加完善。在此期间,我不仅学到了许多新的知识,而且也开阔了视野,提高了自己的设计能力。其次,我要感谢帮助过我的同学,他们也为我解决了不少我不太明白的难题。同时也感谢学院为我提供良好的做课程设计的环境。 进行过程中得到老师的悉心指导,在课程设计中,老师帮我分析思路,开拓视角,在我遇到困难想放弃的时候给予我最大的支持和鼓励。老师严谨求实的治学态度,踏实坚韧的工作精神,将使我终生受益。再多华丽的言语也显得苍白。最后,谨向老师致以诚挚的谢意和崇高的敬意。