目录
目录 ..................................................... 1 摘要 ..................................................... 2 一. DFT的简介 .......................................... 3 1.1概述 .............................................. 3 1.2.DFT的定义 ....................................... 3 1.3谱分析的原理....................................... 4 二. 用DFT对连续信号进行谱分析 .......................... 4 三. 用DFT进行谱分析的误差问题 .......................... 5 1.混叠现象 ............................................ 5 2.栅栏效应 ............................................ 5 3.截断效应 ............................................ 6 四.设计实现 ............................................. 6 1. 设计内容 ........................................... 6 2.用Matlab软件实现 ................................... 7 五.结果分析 ............................................ 11 六. 结束语 ............................................. 12 七 致谢 ................................................. 13
..
摘要
数字信号处理方法的一个重要用途是在离散时间域中确定一个连续时间信号的频谱,通常称为频谱分析,更具体的说它也包括能量谱或功率谱,所谓信号的谱分析就是计算信号的傅里叶变换,而DFT的实质是有限长序列傅里叶变换的有限点离散采样,从而实现了频域离散化,使数字信号处理可以在频域采样数值运算的方法进行,这样就大大提高了数字信号处理的灵活性,从而使信号的实时处理和设备的简化得以实现。利用Matlab软件对正余弦信号进行设计程序分析并画出频谱图,所以说DFT不仅在理论上有重要意义,而且在各种信号的处理中亦起着核心的作用,数字频谱分析可以应用在很广的领域。
关键字:Matlab 频谱分析DFT
..
一. DFT的简介
1.1概述
频谱是为了是信号从时域转到频域而对信号进行分析的方法,可分为幅值
谱、相位谱、实频谱、虚频谱、功率谱等,他们从不同方面描述了信号的特征,从而表示出信号的频谱信息,幅值谱和功率谱反应信号各频率的能量,相位谱可以反映信号各频率分量的初始相位,实频谱和虚频谱在工程中的应用相对比较少,而功率谱和幅值谱则比较广泛,通常在对正余弦信号进行谱分析时主要是用Matlab对其进行分析,从而使信号的实时处理和设备的简化得以实现,而DFT是一种时域和频域均离散化的变换,适合数值运算,成为计算机分析离散信号和系统的有力工具。
1.2.DFT的定义
设x(n)是一个长度为M的有限长序列,则定义x(n) 的N点离散傅里叶变换
为
X(k)=DFT[x(n)]=x(n)WNkn k=0,1,…,N-1 (1)
noN1X(k)的离散离散傅里叶逆变换为 x(n)=IDFT[X(k)]=1NX(k)WnoN1knN n=0,1,…,N-1 (2)
式中,,N称为DFT变换区间长度,NM,通常称(1)式和(2)式为离散傅里叶变换对。常用DFT[x(n)]和IDFT[X(k)]分别表示N点离散傅里叶变换和N点
nN离散傅里叶逆变换。
..
1.3谱分析的原理
数字信号处理方法的一个重要用途是在离散时间域中确定一个连续时间信号
的频谱,通常称为频谱分析,更具体的说它也包括能量谱或功率谱。数字频谱分析可以应用在很广泛的领域,频谱分析方法是基于以下的观测:如果连续时间信号g(t)是带限的,那么他的离散时间等效信号g(n)的DFT进行谱分析,
a然而,在大多数情况下g(t)是在t范围内定义的,因而,g(n)也
a就定义在n的无限范围内,要估计一个无限长信号的频谱是不可能的。实用的方法是:先用模拟连续信号g(t)通过一个抗混叠的模拟滤波器,然后
a把它采样成一个离散序列g(n)。假定反混叠滤波器的设计是正确的,则混叠效应可以忽略,又假设A/D变换器的字长足够长,则A/D变换的量化噪声也可忽略。 假定表征正余弦信号的基本参数,如振幅频率和相位不随时间变化,则此信号的傅里叶变换G(e)可以用计算它的DTFT得到:
G(e)=g(n)ejwn
njwjw实际上无限长序列,g(n)首先乘以一个长度为M的窗函数W(n),使它变成一个长为M的有限长序列,G(n)= g(n)W(n) ,对G(n)求出的DTFTG(e) 应该可以作为原连续模拟信号g(t)的频谱估计,然后求出G(e)在0w2ajwjw区间等分为N点的离散傅里叶变换。为保证足够的分辨率DFT的长度N选的比窗长度M大,其方法是截断了序列后面补上N-M个零。
二. 用DFT对连续信号进行谱分析
工程实际中,经常遇到连续信号xa(t),其频谱函数Xa(J)也是连续信号。
为了利用DFT对xa(t)进行频谱分析,先对xa(t)进行时域采样,得到x(n)
..
=xa(nT),在对x(n)进行DFT,得到的X(k)则是x(n)的傅里叶变换X(ejw)在频域区间[0,2]上的N点等间隔采样。这里x(n)和X(k)均为有限长序列。实际上对频谱很宽的信号,为防止时域采样后产生频谱混叠失真,可用预滤波器滤除幅度较小的高频成分,是连续信号的带宽小于折叠频率。对于持续时间很长的信号,采样点数太多,以致无法存储和计算,只好截取有限点进行DFT。即x(n)→xN(n)g(n)W(n)。最后进行频域采样,将xN(n)进行DFT得到
xN(k)=DFT[xN(n)],将xN(k)作为对xa(t)的谱分析结果。由此可知,用
DFT
对连续信号进行谱分析必然是近似的,其近似度与信号带宽采样频率和截取长度有关。
三. 用DFT进行谱分析的误差问题
DFT可以用来对连续信号和数字信号进行谱分析,但在实际分析过程中,要
对连续信号采样和截断,有时非时限数据序列也要截断,因此可能引起分析的误差。
1.混叠现象
对连续信号进行谱分析时,首先要对其采样,变成时域离散信号后才能用DFT进行谱分析。采样速率f必须满足采样定理,否则会在w=附近发生频谱混
s叠现象。这是用DFT分析结果必然在f必须满足FsFs/2附近产生较大误差。因此,理论上
2f。对FS确定的情况,一般在采样前进行预滤波,滤除高于折叠
c频率Fs/2的频率成分,以免发生频谱混叠现象。
2.栅栏效应
N点DFT是在频率区间[0, 2]上对时域离散信号的频谱进行N点等间隔采样,而采样点之间的频谱是看不到的。这就好像从N个栅栏缝隙中观看信号的频谱情况,仅得到N个缝隙中看到的频谱函数值,这就是栅栏效应。由于栅栏效
..
应可能漏掉大的频谱分量。故对于有限长序列,可以在原序列尾部补零;对于无限长序列,可以增大截取长度及DFT变换区间长度,从而使频域采样间隔变小,增大频域采样点数和采样点位置,使原来漏掉的某些频谱分量被检测出来。
3.截断效应
实际中遇到的序列x(n)可能是无限长的,用DFT对其进行谱分析师必须将其截断,形成有限长序列y(n)=x(n)w(n),长度为N。 w(n)=R函数。截断后对谱分析的影响主要表现在以下两点:
(1).泄露:原来序列x(n)的频谱是离散谱线,经截断后,是原来的离散谱线向附近展宽,通常称这种展宽为泄露。泄露可以是频谱变模糊,使谱分辨率降低。
(2).普间干扰:在主谱线两边形成很多旁瓣,引起不同频率分量间的干扰,特别是强信号谱的旁瓣可能湮没弱信号的主谱线,或者把强信号谱的旁瓣误认为是另一频率的信号的谱线,从而造成假信号,这样就会使谱分析产生较大偏差。 截断效应就是有以上两种影响对信号截断引起的。
N(n),称为矩形窗
四.设计实现
1. 设计内容
(1)对一个频率为10Hz,采样频率为64Hz的32点余弦序列进行谱分析,画出其频谱图;若将频率改为11Hz,其他参数不变,重新画出该序列的频谱图,观察频谱泄漏现象,分析原因;
(2)考察DFT的长度对双频率信号频谱分析的影响。设待分析的信号为 x(n)0.5sin(2f1n)sin(2f2n)0n15
令两个长度为16的正余弦序列的数字频率为f10.22及f20.34。取N为四个不同值16,32,64,128。画出四个DFT幅频图,分析DFT长度对频谱分辨率的影响。
..
(3)在上题中若把两个正弦波的频率取得较近,令 f10.22,f20.25 ,试问怎样选择FFT参数才能在频谱分析中分辨出这两个分量?
2.用Matlab软件实现
(1)当频率为10Hz时
F=input('输入信号频率'); t=0:0.001:0.2; x1=cos(2*pi*F*t); subplot(3,1,1); plot(t,x1); title('x1连续余弦信号'); n=0:31; x2=cos(2*pi*F*n*1/64);
subplot(3,1,2),stem(n,x2); xlabel('n'),ylabel('x1(n)'); title('x2采样后的余弦信号'); k=0:31;
X=abs(fft(x2,32)); subplot(3,1,3); stem(k,X); xlabel('k'),ylabel('X(k)');
string=[num2str(32),'点FFT幅频曲线']; title(strin);
当频率为11Hz时
..
F=input('输入信号频率'); t=0:0.001:0.2; x1=cos(2*pi*F*t); subplot(3,1,1); plot(t,x1); title('x1连续余弦信号'); n=0:31; x2=cos(2*pi*F*n*1/64);
subplot(3,1,2),stem(n,x2); xlabel('n'),ylabel('x1(n)'); title('x2采样后的余弦信号'); k=0:31;
X=abs(fft(x2,32)); subplot(3,1,3); stem(k,X); xlabel('k'),ylabel('X(k)');
string=[num2str(32),'点FFT幅频曲线']; title(strin)
(2) 当两个长度为16的正余弦序列的数字频率为f10.22及f20.34时 N1=16;N2=32;N3=64;N4=128; n=1:N-1; figure(1) f1=0.22,f2=0.34;
x=0.5*sin(2*pi*f1*n)+sin(2*pi*f2*n); subplot(4,2,1),stem(n,x); xlabel('n'),ylabel('x1(n)'); title('余弦系列'); X=abs(fft(x,N1));
..
subplot(4,2,2); k=0:N1-1; stem(k,X); xlabel('k'),ylabel('X(k)');
string=[num2str(N1),'点DFT幅频曲线']; title(string); X1=abs(fft(x,N1));
subplot(4,2,3),stem(n,x); xlabel('n'),ylabel('x2(n)'); title('余弦系列'); X=abs(fft(x,N2)); subplot(4,2,4); k=0:N2-1; stem(k,X); xlabel('k'),ylabel('X(k)');
string=[num2str(N2), '点DFT幅频曲线']; title(string); X2=abs(fft(x,N2));
subplot(4,2,5),stem(n,x); xlabel('n'),ylabel('x3(n)'); title(余弦系列' '); X=abs(fft(x,N2)); subplot(4,2,6); k=0:N2-1; stem(k,X); xlabel('k'),ylabel('X(k)');
string=[num2str(N3), '点DFT幅频曲线']; title(string); X3=abs(fft(x,N3));
subplot(4,2,7),stem(n,x); xlabel('n'),ylabel('x4(n)'); title('余弦系列'); X=abs(fft(x,N2)); subplot(4,2,8); k=0:N2-1; stem(k,X); xlabel('k'),ylabel('X(k)');
string=[num2str(N4), '点DFT幅频曲线']; title(string); X4=abs(fft(x,N4));
..
(3)当两个长度为16的正余弦序列的数字频率为f10.22及N1=16;N2=32;N3=64;N4=128; n=1:N-1; figure(1) f1=0.22,f2=0.25;
f20.25时
x=0.5*sin(2*pi*f1*n)+sin(2*pi*f2*n); subplot(4,2,1),stem(n,x); xlabel('n'),ylabel('x1(n)'); title('余弦系列'); X=abs(fft(x,N1)); subplot(4,2,2); k=0:N1-1; stem(k,X); xlabel('k'),ylabel('X(k)');
string=[num2str(N1), '点DFT幅频曲线']; title(string); X1=abs(fft(x,N1));
subplot(4,2,3),stem(n,x); xlabel('n'),ylabel('x2(n)'); title('余弦系列'); X=abs(fft(x,N2)); subplot(4,2,4); k=0:N2-1; stem(k,X); xlabel('k'),ylabel('X(k)');
string=[num2str(N2), '点DFT幅频曲线']; title(string); X2=abs(fft(x,N2));
subplot(4,2,5),stem(n,x); xlabel('n'),ylabel('x3(n)'); title('余弦系列
..
'); X=abs(fft(x,N2)); subplot(4,2,6); k=0:N2-1; stem(k,X); xlabel('k'),ylabel('X(k)');
string=[num2str(N3), '点DFT幅频曲线']; title(string); X3=abs(fft(x,N3));
subplot(4,2,7),stem(n,x); xlabel('n'),ylabel('x4(n)'); title('余弦系列' ); X=abs(fft(x,N2)); subplot(4,2,8); k=0:N2-1; stem(k,X); xlabel('k'),ylabel('X(k)');
string=[num2str(N4),] '点DFT幅频曲线'; title(string); X4=abs(fft(x,N4));
五.结果分析
(1) 当频率为10Hz时,它的DFT只有两个不等于零,这样DFT确实正确的
分辨了余弦信号的频率。但这样理想的结果只是恰好得到的。当把频率改成11Hz时,其他的都不变,用同样的程序计算此预先信号的频谱,可以得到频谱上有两个较大的峰值,其他点上的幅度也不再为零。由此
..
可知,信号的频谱峰值确实位于两者之间,本来是单一的11Hz频率的能量会分布到许多DFT频率上的现象称为频率泄露。
(2) 当两个长度为16的正余弦序列的数字频率为f10.22及f20.34时可
知:当频率不变时,要提高频谱分辨率可以增加采样点数N;如果保持采样点数N不变时,要提高频率分辨率,就必须降低采样频率。而且随着采样点数N的增大,频谱分辨率可提高。
(3) 当两个长度为16的正余弦序列的数字频率为f10.22及
f20.25时由
图可知:当采样点数N为32时最接近33,此时分辨率最好。因而,要增大频谱分辨率不仅与其窗函数的宽度N有关还与两频率差有关,随着N的增大,其频谱的分辨率增大,但当N增大到一定程度时它的频谱分辨率反而下降。
六. 结束语
通过此次课程设计我在老师的热心帮助下完成了正余弦信号的谱分析实验。
使我对数字信号处理这门课的理解得到了进一步的加深。在以往学习中,我学到的都是一些理论知识对Matlab软件的具体使用知识会一些表面上的没有很具体的掌握,在课程设计的过程中出现了很对问题,但经过一次一次的思考和检查以及与小组的讨论终于找出来问题的所在,也暴露出了我的知识欠缺和经验不足,由此可以知道只有将理论与实践结合才可以做出自己预想的结果。在这过程中,我不止一次遇到了难以突破的瓶颈,很多次在我想要糊弄过去的时候,都是通过合作让我完整的完成了这个过程。我又再一次的充满了高涨的热情,通过网上查找资料,与同学探讨,最终完成了课程设计。
总体来说这次的课程设计很成功,达到了预想的目的:学到了知识,提高了能力,完成了任务。有点缺憾是时间有限,不能进一步深入和扩散学习和研究。希望有时间可以对程序作更进一步的改进,也让我懂得了在今后的发展和学习实践中,一定要不懈努力,不厌其烦的发现问题的所在,只有这样,才能成功的做成想做的事。
..
七 致谢
两周的实训结束了,感慨很多。在两周里首先感谢杨老师老师给我们很多扎实的基本知识。感谢我的老师在课程设计上给予我的指导、提供给我的支持和帮助,这是我能顺利完成这次报告的主要原因;其次,感谢学校工程坊的实验室给我们良好的理论与实践知识,其次,我要感谢帮助过我的同学,他们也为我解决了不少我不太明白的设计中的难题。同时也感谢学院为我提供良好的做毕业设计的环境。
八 参考文献
(1)邹其洪.《MATLAB教程》.电子工业出版社,2005
(2)高西全 丁玉美.《数字信号处理》.西安电子科技大学出版社,2001 (3)程佩青.《数字信号处理》.清华大学出版社,2008
(4)陈怀琛.《MATLAB应用与提高》.西安电子科技大学出版社,2000 (5)徐以逃.《数字信号处理》.西安电子科技大学出版社,2002
因篇幅问题不能全部显示,请点此查看更多更全内容