基于Matlab的频谱分析.docx
《基于Matlab的频谱分析.docx》由会员分享,可在线阅读,更多相关《基于Matlab的频谱分析.docx(16页珍藏版)》请在冰豆网上搜索。
基于Matlab的频谱分析
数字信号处理课程设计
题目:
基于Matlab的频谱分析
学院:
专业:
班级:
学号:
姓名:
指导教师:
摘要
MATLAB是一个数据分析和处理功能十分强大的工程实用软件,运用它来进行信号的分析和处理相当便捷。
本文介绍了在Matlab环境中如何采集语音信号和语音信号采集后的频谱分析处理,并通过实例析了语音信号处理的Matlab。
并以理想正弦分布的纹理图像的Matlab仿真和正弦纹理图像的频谱特征分析为例,叙述了基于傅立叶能量谱的纹理图像分析的基本原理和基本过程。
编写了程序,获得了具有理想正弦分布的空域纹理图像,并对其频谱特征进行了分析。
并且根据离散傅里叶变换DFT的定义,推导出一种用DFT计算离散信号幅值谱的方法,通过MATLAB仿真验证了该方法的有效性。
关键词:
MATLAB;频谱分析;傅里叶变换;信号分析
Abstract
MATLABisverypowerfulandpracticalengineeringsoftwarewhichisusedindataanalysisandprocessingfractionanduseittoanalysisandprocessvoicesignalwhichisveryconvenient.
ThispaperdescribestheMatlabenvironmenthowtocollectandprocessspeechsignalandthroughexampleanalysisofthespeechsignalprocessinginMatlab.
ThentaketheMatlabsimulationofidealsinusoidtextureimageandanalysisofitsspectrumcharacteristicsforexample;basicprinciplesandprocessofanalyzingthetextureimagebasedonFourierenergyspectrumweredescribed.Theprogramwaswrittenforobtainingspatialdomaintextureimagewithidealsinusoiddistribution.Anditsspectrumcharacteristicswereanalyzed.Moreover,accordingtothedefinitionofDFT,acalculationmethodofamplitudespectrumforperiodicsignalisderivedinthispaper.ThroughsimulationofamplitudespectrumcalculationinMATLAB,theefficiencyofthemethodisvalidatedtosatisfytheneedforproject.Intheend,theproblemsofspectrumleakageandpicketfenceeffectareexplainedandthecorrespondingsolutionisproposed.
Keywords:
MATLAB;SpectrumAnalysisFFT;signalanalysis
第1章绪论
1.1课题背景
随着信息时代和数字世界的到来,数字信号处理己成为当今一门极其重要的学科和技术领域,数字信号处理在通信、语音、图像、自动控制、医疗和家用电器等众多领域得到了广泛的应用。
任意一个信号都具有时域与频域特性,信号的频谱完全代表了信号,因而研究信号的频谱就等于研究信号本身。
通常从频域角度对信号进行分析与处理,容易对信号的特性获得深入的了解。
因此,信号的频谱分析是数字信号处理技术中的一种较为重要的工具。
1.2研究意义
信号处理几乎涉及到所有的工程技术领域,而频谱分析又是信号处理中一个非常重要的分析手段。
一般的频谱分析都依靠传统频谱分析仪来完成,价格昂贵,体积庞大,不便于工程技术人员的携带。
虚拟频谱分析仪改变了原有频谱分析仪的整体设计思路,用软件代替了硬件,使工程技术人员可以用一部笔记本电脑到现场就可轻松完成信号的采集、处理及频谱分析。
1.3本文研究内容
信号的频谱分析就是利用傅里叶分析的方法,求出与时域描述相对应的频域描述,从中找出信号频谱的变化规律,以达到特征提取的目的。
不同信号的傅里叶分析理论与方法,在有关专业书中都有介绍。
但实际的待分析信号一般没有解析式,直接利用公式进行傅里叶分析非常困难.DFT是一种时域和频域均离散化的傅里叶变换,适合数值计算且有快速算法,是分析信号的有力工具。
DFT及FFT是数字信号处理的重要内容。
DFT是FFT的基础,FFT是DFT的快速算法,在MATLAB中可以利用函数FFT来计算序列的离散傅里叶变换DFT。
基于此首先介绍了Matlab软件;其次给出了基于Matlab软件的DFT和FFT频谱分析的方法,利用Matlab软件方法,使得设计方便、快捷,大大减轻了工作量;最后结合实例给出了仿真结果。
本文将重点介绍基于MATLAB的频谱分析设计。
第2章频谱分析背景知识
2.1时域抽样定理
时域抽样定理给出了连续信号抽样过程中信号不失真的约束条件:
对于基带信号,信号抽样频率大于等于2倍的信号最高频率,即。
时域抽样是把连续信号变成适于数字系统处理的离散信号。
对连续信号以间隔T抽样,则可得到的离散序列为。
图1连续信号抽样的离散序列
若,则信号与的频谱之间存在:
其中:
的频谱为,的频谱为。
由
可见,信号时域抽样导致信号频谱的周期化。
(rad/s)为抽样角频率,为抽样频率。
数字角频率Ω与模拟角频率ω的关系为:
Ω=ωT。
2.2离散傅立叶变换(DFT)
离散傅里叶变换(DFT),是连续傅里叶变换在时域和频域上都离散的形式,将时域信号的采样变换为在离散时间傅里叶变换(DTFT)频域的采样。
在形式上,变换两端(时域和频域上)的序列是有限长的,而实际上这两组序列都应当被认为是离散周期信号的主值序列。
即使对有限长的离散信号作DFT,也应当将其看作经过周期延拓成为周期信号再作变换有限长序列
的离散傅立叶变换(DFT)为
逆变换为
2.3快速傅立叶变换(FFT)
在各种信号序列中,有限长序列占重要地位。
对有限长序列可以利用离散傅立叶变换(DFT)进行分析。
DFT不但可以很好的反映序列的频谱特性,而且易于用快速算法(FFT)在计算机上进行分析。
有限长序列的DFT是其z变换在单位圆上的等距离采样,或者说是序列傅立叶的等距离采样,因此可以用于序列的谱分析。
FFT是DFT的一种快速算法,它是对变换式进行一次次分解,使其成为若干小数据点的组合,从而减少运算量。
MATLAB为计算数据的离散快速傅立叶变换,提供了一系列丰富的数学函数,主要有Fft、Ifft、Fft2、Ifft2,Fftn、ifftn和Fftshift、Ifftshift等。
当所处理的数据的长度为2的幂次时,采用基-2算法进行计算,计算速度会显著增加。
所以,要尽可能使所要处理的数据长度为2的幂次或者用添零的方式来添补数据使之成为2的幂次。
Fft函数调用方式:
、Y=fft(X);
、Y=fft(X,N);
、Y=fft(X,[],dim)或Y=fft(X,N,dim)。
函数Ifft的参数应用与函数Fft完全相同。
时间抽取算法 令信号序列的长度为N=2,其中M是正整数,可以将时域信号序列x(n)分解成两部分,一是偶数部分x(2n),另一是奇数部分x(2n+1),其中。
于是信号序列x(n)的离散傅里叶变换可以用两个N/2抽样点的离散傅里叶变换来表示和计算。
因此,一个抽样点数为N的信号序列x(n)的离散傅里叶变换,可以由两个N/2抽样点序列的离散傅里叶变换求出。
依此类推,这种按时间抽取算法是将输入信号序列分成越来越小的子序列进行离散傅里叶变换计算,最后合成为N点的离散傅里叶变换。
频率抽取算法 按频率抽取的FFT算法是将频域信号序列X(k)分解为奇偶两部分,但算法仍是由时域信号序列开始逐级运算,同样是把N点分成N/2点计算FFT,可以把直接计算离散傅里叶变换所需的N次乘法缩减到次。
实际上,频率抽取算法与时间抽取算法的信号流图之间存在着转置关系,如将流图适当变形,可以得出多种几何形状。
实际上,频率抽取算法与时间抽取算法的信号流图之间存在着转置关系,如将流图适当变形,可以得出多种几何形状。
除了基2的FFT算法之外,还有基4、基8等高基数的FFT算法以及任意数为基数的FFT算法。
第3章设计内容与步骤
3.1考察序列x(n)有限个样本的频谱
为了说明高密度频谱和高分辨率频谱之间的区别,考察序列x(n)有限个样本的频谱。
当
时,求x(n)的DFT.
当
时,求x(n)的DFT.
程序:
functionDFTX1%定义DFTX1
N=input('请输入离散信号的长度:
');
n=0:
N-1;k=0:
N-1;%序列范围
xn=cos(0.48*n*pi)+cos(0.52*n*pi);%定义序列
WN=exp(-j*2*pi/N);%设定wn因子
nk=n'*k;%赋值nk转置为n行1列矩阵,与k相乘
WNnk=WN.^nk;%矩阵点幂
Xk=xn*WNnk;%DFT结果
subplot(2,1,1)
stem(n,xn);%绘制离散图
title('x(n):
');
gridon;
subplot(2,1,2)
stem(k,abs(Xk));%绘制离散图
title('x(n)的DFT:
');
gridon;
>>DFTX1
请输入离散信号的长度:
10
>>DFTX1
请输入离散信号的长度:
100
频谱图:
图20≤n≤10时的DFT的频谱图
图30≤n≤100时的DFT的频谱图
3.2用DFT计算序列的幅度频谱样值
已知一模拟信号
,现在采样率
进行采样。
用DFT计算当序列长度分别为L=100,L=20时,N=200点的幅度频谱样值并通过作图与理论上准确的频谱样值进行比较。
程序:
L1=100;L2=20;%对L1L2赋值
t1=0:
L1-1;x1=exp(-t1/20);
t2=0:
L2-1;x2=exp(-t2/20);
N=0:
199;%定义N的范围
WN=exp(-j*2*pi/length(N));%设定wn因子
nk1=t1'*N;nk2=t2'*N;%赋值nk1nk2转置为t1t2行1列矩阵,与N相乘
WNnk1=WN.^nk1;WNnk2=WN.^nk2;%矩阵点幂
Xk1=x1*WNnk1;%DFT结果
Xk2=x2*WNnk2;%DFT结果
subplot(4,1,1)
stem(t1,x1);
title('序列长度L=100时x(n)图:
');gridon;
subplot(4,1,3)
stem(t2,x2);
title('序列长度L=20时x(n)图:
');gridon;
subplot(4,1,2)
stem(N,abs(Xk1));
title('序列长度L=100时x(n)的DFT图:
');gridon;
subplot(4,1,4)
stem(N,abs(Xk2));
title('序列长度L=20时x(n)的DFT图:
');gridon;
实验图:
图4序列长度L=100时的DFT的频谱图
图5序列长度L=20时的DFT的频谱图
3.3采样含三个频谱分量的连续信号
一个连续信号含三个频谱分量,经采样得以下序列:
(1)N=64,df分别为
、1/64,观察其频谱;
程序:
functiondftx3(df)%定义DFTX3
N=64;
k=0:
127;%定义k的范围
n=0:
N-1;%定义n的范围
xn=sin(2*pi*0.15*n)+cos(2*pi*(0.15+df)*n)+cos(2*pi*(0.15+2*df)*n);%定义序列
WN=exp(-j*2*pi/length(k));%设定wn因子
nk=n'*k;%赋值nk转置为n行1列矩阵,与k相乘
WNnk=WN.^nk;%矩阵点幂
Xk=xn*WNnk;%DFT结果
subplot(2,1,1)
plot(n,xn);
title('df=1/16,长度为N=64的有限序列x(n)图:
');gridon;
subplot(2,1,2)
plot(abs(Xk(1:
64)));
title('取上图x(n)做128点的DFT图:
');gridon;
>>dftx3(1/16)
>>dftx3(1/64)
>>
实验图:
图6df=1/16,N=64,当x(n)做128点的DFT的图
图7df=1/64,N=64,当x(n)做128点的DFT的图
(2)N=64、128,df为1/64,做128点得FFT,其结果有何不同?
程序:
n1=0:
63;n2=0:
127;df=1/64;
x1=sin(2*pi*0.15*n1)+cos(2*pi*(0.15+df)*n1)+cos(2*pi*(0.15+2*df)*n1);%定义x1序列
x2=sin(2*pi*0.15*n2)+cos(2*pi*(0.15+df)*n2)+cos(2*pi*(0.15+2*df)*n2);%定义x2序列
y1=fft(x1,128);%对x1序列进行128点fft
y2=fft(x2,128);%对x2序列进行128点fft
subplot(3,1,1)
plot(n2,x2);
title('有限序列x(n):
');gridon;
subplot(3,1,2)
plot(abs(y1(1:
64)));
title('取有限序列x(n)长度N=64的128点FFT图:
');gridon;
subplot(3,1,3)
plot(abs(y2(1:
64)));
title('取有限序列x(n)长度N=128的128点FFT图:
');gridon;
实验图:
图8df=1/16,当N=64和N=128的128点的DFT的图
3.4处理被噪声污染的信号
被噪声污染的信号,较难看出所包含得频率分量,如一个由50Hz和120Hz正弦信号构成的信号,受零均值随机噪声的干扰,数据采样率为1000Hz,试用FFT函数来分析其信号频率成分,要求:
(1)画出时域波形;
(2)分析信号功率谱密度。
注:
在MATLAB中,可用函数rand(1,N)产生均值为0,方差为1,长度为N的高斯随机序列。
t=0:
0.001:
1;%定义t的范围以及采样间隔
x=sin(2*pi*50*t)+sin(2*pi*120*t)+rand(size(t));%定义x序列
subplot(2,1,1)
plot(x(1:
50));
title('由50Hz和120Hz正弦信号构成且受噪声污染的信号图:
');gridon;Y=fft(x,512);
subplot(2,1,2)
plot(abs(Y).^2);
title('受污染信号功率谱密度图:
');gridon;
图9受污染信号功率密度图
第4章结论
本文主要是基于高级面向对象开发语言MATLAB的基本特征,以及MATLAB强大的工具箱功能,实现信号的预处理和频谱分析。
在做信号的频谱分析时,合适的选择截断长度和采样间隔显得很重要。
若选取的截断长度不是信号周期T的整数倍的话,就会产生频谱的泄露(对于周期信号而言如此,但非周期信号无论如何都会产生泄露);另外,对于采样间隔Fs的选取也很重要,Ts选的太小易产生频谱的混叠,所以为了尽量避免混叠Fs应大于等于2Fm。
第5章收获与体会
通过这次课程设计,我基本掌握了周期信号频谱分析的方法,更加熟练了matlab的应用。
也认识到了学习数字信号处理这门课,在听老师讲课的基础上,还要注重动手实践,要学会举一反三,通过实践来更好的理解课堂上讲的理论知识,更好的理解反过来也帮助我们提高了自己的实践能力。
能够提高我独立思考,解决学习问题的能力,对以前学过的知识掌握得更加牢固,同时也增加了MATLAB编程的信心。
并且了解了产生泄露和混频的原因,学会了信号分析的另一种手段—————频谱分析。
参考文献
[1]唐向宏,岳恒立,郑雪峰.MATLAB及在电子信息类课程中的应用(第2版)[M].北京:
电子工业出版社,2009.6
[2]高西全,丁玉美.数字信号处理(第三版)[M].西安:
西安电子科技大学出版社,2008
[3]薛山.MATLAB基础教程[M].北京:
清华大学出版社,2011.3
[4]程佩青,数字信号处理教程[M].北京:
清华大学出版社,1999年
[5]陈怀琛,数字信号处理教程—MATLAB释义与实现[M],北京:
电子工业出版社,2004.12