基于Matlab的频谱分析.docx
- 文档编号:9252925
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:20
- 大小:209.88KB
基于Matlab的频谱分析.docx
《基于Matlab的频谱分析.docx》由会员分享,可在线阅读,更多相关《基于Matlab的频谱分析.docx(20页珍藏版)》请在冰豆网上搜索。
基于Matlab的频谱分析
编号
学士学位论文
基于MATLAB的信号波形与频谱分析
学生姓名:
汪娟
学号:
20080204030
系部:
物理系
专业:
电子信息科学与技术
年级:
2008级
指导教师:
黄晓俊
完成日期:
2012年5月2日
中文摘要
利用DFT分析信号频谱的基本流程,阐述了频谱分析过程中误差形成的原因及减小分析误差的主要措施。
实例列举了基于MATLABGUI编制的信号分析系统,集成了常用的信号分析方法,系统界面友好,使用方便,与传统处理方法相比效率更高。
关键词:
MATLABGUI;信号分析;频谱分析
AnalysisofSignalWaveformandFrequencySpectrumBasedonMATLAB
Abstract
TheuseofDFTanalysisofsignalspectrumbasicprocess,elaboratedspectralanalysisintheprocessofformationandreduceerroranalysiserrormeasures.TheexamplescitedMATLABGUIsystembasedonthesignalanalysissystem,integratedwiththecommonlyusedmethodofsignalanalysis,thesystemfriendlyinterface,convenientuse,comparedwiththetraditionalprocessingapproachesmoreefficient.
Keywords:
MATLABGUI;signalanalysis;spectrumanalysis
引言
信号的频谱分析是利用傅里叶分析的方法,求出与时域描述相对应的频域描述,从中找出信号时域波形相对应的频率函数,从中找出描述该信号频谱结构的变化规律,以达到特征提取的目的。
不同信号的傅里叶分析有不同的理论与方法,但实际信号分析一般没有解析式,直接利用公式进行傅里叶分析非常困难。
DFT是一种时域和频域均离散化的傅里叶变换,适合数值计算且有快速算法,是分析信号的有力工具,本文以几种典型信号为例,介绍利用DFT分析信号频谱的基本流程,并通过GUI界面(图形用户界面)实现信号频谱分析的动态设计,以实现系统的信号频谱分析。
1.信号的概述
1.1信号的定义
广义地说,信号就是随时间和空间变化的某种物理量或物理现象。
例如在通信工程中,一般将语言、文字、图像、数据等统称为消息,在消息中包含着一定的信息。
通信就是从一方向另一方传送消息,给对方以信息。
但传送消息必须借助于一定形式的信号(光信号、电信号等)才能传送和进行各种处理。
因而,信号是消息的载体,是消息的表现形式,是通信的客观对象,而消息是信号的内容。
若信号表现为电压、电流、电荷、磁链,则称为电信号,它是现代科学技术中应用最广泛的信号。
信号通常是时间变量t的函数。
信号随时间变量t变化的函数曲线称为信号的波形。
应当注意,信号与函数在概念的内涵与外延上是有区别的。
信号一般是时间变量t的函数,但函数并不一定都是信号,信号是实际的物理量或物理现象,而函数则可能只是一种抽象的数学定义。
信号的特性可从两方面来描述,即时域特性与频域特性。
信号的时域特性指的是信号的形,出现时间的先后,持续时间的长短,随时间变化的快慢和大小,重复周期的大小等。
信号时域特性的这些表现,反映了信号中所包含的信息内容。
1.2信号的分类
(1)确定性信号与随机性信号
确定性信号:
具有确定的函数形式,在任意时刻都有确定的函数值与之对应,如图1.1的正弦信号。
图1.1正弦信号
随机性信号:
实际传输的信号往往具有无法预知的不确定性,这种信号称为不确定性信号或随机性信号。
在观测随机物理现象的数据时可以遇到这种信号,但我们无法用精确地数学关系式描述这种信号。
对它进行观测时,每次的结果都不一样。
也就是说,任何一次观测只能代表许多可能产生的结果之一。
(2)连续时间信号和离散时间信号
连续时间信号:
在所讨论信号的持续时间内,任取一个时刻都有相应的函数值与之对应,独立变量可以连续取值,这种信号称为连续时间信号,并用连续时间变量t把该信号表示为x(t)。
离散时间信号:
若仅在某些不连续的规定瞬时给出函数值,而在其他的时间没有定义,则称为离散时间序列或信号。
如图1.2所示。
图1.2离散时间信号
(3)周期信号与非周期信号
按一定的时间T周而复始,无始无终的信号叫做周期信号,而且是无始无终的信号。
其表达式可以写成
(1)
满足上式的最小T值叫做该信号的周期,只要给出此信号在任一周期内的变化过程,便可确知它在任意时刻的数值。
非周期信号在时间上不具有周而复始的特性。
若令周期信号的周期T趋于无限大,则成为非周期信号。
(4)能量信号和功率信号
信号f(t)的能量定义为信号电压或电流在1
电阻上消耗的能量,
即:
(2)
式f(t)为实数时的情况。
通常把能量为有限值的信号叫做能量有限信号简称能量信号。
信号平均功率的定义是信号电压或电流在1
电阻上消耗的功率,
即:
(3)
式中,括号内的量是信号幅度的平方在一个周期的积分在除以周期的长度。
对它取
时的极限就是信号的平均功率。
当P为有限值时,叫做功率有限信号并简称功率信号。
1.3信号频谱的误差分析
利用DFT(实际是用FFT)对连续或离散信号进行频谱分析时,如果信号连续一般要进行采样和截断,即使信号离散也往往需要进行加窗截断。
用有限的离散数据进行DFT变换,得到有限个DFT数据值,与原信号的频谱肯定不同,这种不同就是分析误差。
下面按信号频谱分析的基本流程,分别介绍误差形成的原因及减小分析误差的主要措施,为实际分析过程中适当选择参数提供理论依据。
(1)混叠现象
对连续信号进行频谱分析时,先要对信号进行采样,理论上要求采样频率fs必须大于两倍信号的最高频率。
在满足采样定理条件下,采样序列的数字频谱能准确反映连续信号的模拟频谱,否则会发生频谱混叠现象。
严格地讲,实际信号的持续时间有限、频谱无限,为了尽可能减少频谱混叠,信号在采样之前一般都要进行预滤波处理。
预滤波也不可能是理想低通,所以频谱混叠不可避免。
在实际工作中,为了减小频谱混叠的影响,可通过适当提高防混叠滤波器的指标和适当增大采样频率来实现,采样频率常取信号最高频率的2.5~3倍。
(2)截断效应
利用计算机对离散序列或连续信号的采样序列进行DFT运算时,往往要进行截断,即将离散序列进行加窗处理。
对离散序列的加窗实际上是将离散序列与窗函数相乘,加窗后信号的频谱是加窗前信号的频谱与窗函数频谱的卷积,造成截断后信号的频谱与截断前信号的频谱不同,这就是所谓截断效应。
截断效应对频谱分析的影响主要表现在两个方面:
第一频谱泄漏原序列经截断后,频谱会向两边展宽,通常称这种展宽为泄漏。
频谱泄漏使频谱变模,分辨率变差,泄漏程度与窗函数幅度谱主瓣宽度有关。
窗型一定,窗口越长,主瓣越窄,频谱泄漏越小。
窗口长度一定,矩形窗主瓣最窄,频谱泄漏最小,但其旁瓣的幅度最大。
第二谱间干扰对原序列截断,频谱不仅会向附近展宽,还会形成许多旁瓣,引起不同频率间的干扰,简称谱间干扰。
特别是强信号谱的旁瓣可能湮没弱信号的主谱或误认为是另一假信号的主谱线。
矩形窗的旁瓣幅度大,谱间干扰严重。
相对而言,布莱克曼窗的旁瓣幅度比矩形窗小,谱间干扰小,但其主瓣过渡带宽,分辨率差。
采样频率或采样周期是在满足混叠误差前提下选取的,当采样频率或采样周期确定后,适当增加窗口长度有利于减小截断效应。
工程上,可用试探法确定窗口长度M,即将M加倍,分别进行DFT运算,直到相邻两个长度的计算结果接近,取长度较小的M,这样既可满足截断效应要求,又可使存储单元最小且运fs或大于且接近该值的2的整数幂。
在窗口算速度最快。
如对频率分辨率F0有要求,则窗口长度M可在F0长度一定情况下,如果希望引起频谱扩展的过渡带窄,可选矩形窗,但其旁瓣大,谱间干扰严重。
若选布莱克曼窗,旁瓣幅度小,谱间干扰相对较小,但主瓣过渡带更宽,分辨率会进一步下降。
(3)栅栏效应
对加窗后的序列进行DFT运算时,DFT长度必须大于或等于加窗序列的长度,否则会作自动截断处理。
实际的DFT运算一般采用FFT算法,其长度取大于或等于加窗序列的2的整数幂,不足进行补零处理,得到的DFT值是对加窗序列的连续谱进行等间隔取样的结果。
这就好比通过一个有很多缝隙的栅栏去观察一个连续频谱,很多地方会被栅栏挡住,故称栅栏效应。
在加窗序列的尾部补零可使频谱的取样点更密,相当于加密了栅栏的缝隙,使原来看不到的谱分量可能看得到,减小了栅栏效应,但由于被观察的连续谱并没有发生变化,故频率分辨率并没有提高,最多只能说可视分辨率提高了。
要提高信号的频率分辨率,选择主瓣窄的截断窗可有一定的改善,但谱间干扰会更严重,根本上只能通过增加原始信号的长度来实现。
2.信号的频谱分析
2.1软件介绍
2.1.1MATLAB软件介绍
MATLAB是MatrixLaboratory的缩写,是MathWorks公司于1984年推出的一套面向工程和科学计算的高性能软件,它具有强大的矩阵计算能力和良好的图形可视化功能,为用户提供非常直观和简洁的程序开发环境。
经过不断的扩充和完善,它已成为各类科学研究与工程应用中的标准工具,它集数值分析,矩阵运算,信号处理与图形显示于一体,构成了一个界面友好的用户环境。
它的信号处理工具箱包含了各种经典的和现代数字信号处理技术,是一个非常优秀的算法研究与辅助设计的工具。
2.1.2GUI软件介绍
图形用户界面GUI(GraphicsUserInterface)是由各种图形对象,如图形窗口、图轴、菜单、按钮、文本框等构建的用户界面,是人机交流信息的工具和方法。
GUI设计可以采用两种方法,一种是利用GUIDE(GraphicsUserInterfaceDesignEnvironment)工具进行设计。
这种方法的优点是上手容易,缺点是对于有些复杂功能的实现比较困难。
另一种方法是基本代码法,即在M文件中用MATLAB代码写出所有的图形对象控件所对应的代码(这里的M文件可以是函数文件也可以是脚本文件),通过各个参数的控制可以灵活地实现所需要的功能。
这种方法的缺点是上手困难,优点是功能强大,可以实现许多复杂的功能,而且调试程序也比较容易。
2.2信号的频谱分析
2.2.1信号谱分析的原理
信号谱分析是“数字信号处理”课程主要内容之一,它的实质就是通过信号的傅里叶变换(FT)来分析信号的频谱结构,信号的傅里叶变换(FT)可以借助于DFT用计算机仿真方法实现。
DFT的实质是序列傅里叶变换的有限点离散采样,这就使得有限长序列的频谱可以在频域采用数字运算方法进行,大大增加了数字信号处理的灵活性;另一方面,DFT有多种快速算法(FFT),使得DFT成为对信号进行谱分析的一个重要工具。
信号按时间是否连续可分为连续时间信号和离散时间信号,按周期性可分为周期信号和非周期信号。
那么在时域内信号可分为4大类:
离散非周期信号(有限长序列),连续周期信号(周期序列),连续非周期信号(一般模拟信号),连续周期信号。
2.2.2信号谱编程思路
设
为周期为N的周期序列,截取其一个周期对应的主值序列,则有
(4)
对主值序列进行N点DFT得到其离散谱
,即
(5)
由周期序列的离散傅里叶级数(DFS)及其主值序列的DFT之间的关系
(6)
可知道周期序列的离散傅里叶级数是以为周期进行周期延拓得到的。
由周期序列的傅里叶变换FT和DFS之间的关系
(7)
由于
是以为N周期的离散谱,所以周期序列的傅里叶变换的
是以
为周期的离散谱,一个周期内有N条谱线,第K条谱线位于
处,傅里叶变换
的幅度大小与离散傅里叶级数
成正比。
基于以上基本理论;利用MATLAB用离散傅里叶变换(DFT)对离散周期信号进行谱分析的程序流程如图2.1所示:
图2.1谱分析流程图
3.信号系统频谱分析实例
3.1系统设计
(1)主界面设计
本系统采用GUIDE工具进行设计。
先是主界面的设计,其功能主要是将各子模块有机联系到一起,使界面美观,便于操作。
设置StaticText控件String属性为“信号分析”作为主界面的标题;利用Listbox作为下拉实验选项控件;利用PushButton作为运行按钮,当选择某一项实验时,在运行按钮上同步显示所选择的实现项目。
3.2周期信号的系统界面设计
本系统所设计的频谱分析系统共有四个模块,连续周期信号的频谱分析模块如图2.2所示。
在主界面选择连续周期信号,点击运行按钮即可进入对应的该模块,以图形界面形式显示,其中右边是波形窗口,右上半部分显示的是时域波形,右下半分部分显示的幅频特性,点击并拖放时域信号的波形可以改变其基频和振幅;左边是参数调节窗口,首先可选择波形的种类,有常见的正弦波、方波,另外还可以自定义周期信号,当信号选择自定义时,即会弹出一个自定义输入的对话框,可自行输入信号表达式;此外可以通过键盘输入设定基波频率;点击信息按钮即可显示相关的帮助信息;最后还有个关闭按钮可以关闭直接关闭该界面。
图2.2连续周期信号频谱分析
图2.3所示的是离散周期信号的频谱分析界面,图2.3中是周期的正弦信号,可以通过波形拖动鼠标来改变信号的周期和幅度,也可以通过键盘输入来调整信号的参数,当参数发生改变时其幅频特性的变化趋势将同步显示。
图2.3离散周期信号频谱分析
其主要程序代码如下:
functionpushbutton1_Callback(hObject,eventdata,handles)
globalflagcontentsvalscyc
cyc=str2num(get(handles.edit2,'string'));%获取用户填入的周期信息
ap=str2num(get(handles.edit3,'string'));%获取信号的幅值
ifflag==1
samp=0.1;%离散采样时间
else
samp=0.0002;%采样间隔短,连续信号
end
t=-100:
samp:
100;%产生时间向量
axes(handles.axes1);%选中坐标轴
ifstrcmp(contents{val},'正弦波')%下拉框内容判断
s=ap*sin(2*pi/cyc*t);
plot(t,s);
title('正弦波');
elseifstrcmp(contents{val},'方波')%下拉框内容判断
s=square(2*pi/cyc*t);
plot(t,s);
title('周期方波');
axis([min(t)max(t)min(s)-1max(s)+1]);
end
3.3非周期信号的系统界面设计
连续非周期信号频谱分析模块如图2.4所示。
图2.4连续非周期信号频谱分析
图2.5所示的离散非周期信号的频谱分析界面,该分析系统能实现常见的门信号、单边指数信号、阶跃信号等离散非周期信号的频谱分析,对信号的参数也能进行很方便的调整,日后也可扩充对自定义的非周期信号进行频谱分析。
图2.5离散非周期信号频谱分析
其主要程序代码如下:
functionpushbutton1_Callback(hObject,eventdata,handles)
globals1s2tval
ifval==1
samp=0.001;
else
samp=0.1;
end
t=-100:
samp:
100;
s1=zeros(1,length(t));
s2=zeros(1,length(t));
s3=zeros(1,length(t));%初始化3个信号矩阵
str=get(handles.popupmenu1,'string');
val=get(handles.popupmenu1,'value');
a1=str2num(get(handles.edit3,'string'));
a2=str2num(get(handles.edit10,'string'));
a3=str2num(get(handles.edit12,'string'));
switchstr{val}
case'门信号'
kd1=str2num(get(handles.edit18,'string'));
gd1=str2num(get(handles.edit2,'string'));
p1=find(t==round(-kd1/2));
p2=find(t==round(kd1/2));
s1(p1:
p2)=gd1;
axes(handles.axes1);
plot(t,s1);
title('1号门信号');
kd2=str2num(get(handles.edit6,'string'));
gd2=str2num(get(handles.edit7,'string'));
p11=find(t==round(-kd2/2));
p22=find(t==round(kd2/2));
s2(p11:
p22)=gd2;
axes(handles.axes2);
plot(t,s2);
title('2号门信号');
kd3=str2num(get(handles.edit8,'string'));
gd3=str2num(get(handles.edit9,'string'));
p13=find(t==round(-kd3/2));
p23=find(t==round(kd3/2));
s3(p13:
p23)=gd3;
axes(handles.axes3);
plot(t,s3);
title('3号门信号');
case'单边指数信号'
a1=str2num(get(handles.edit3,'string'));
b1=str2num(get(handles.edit4,'string'));
s1=a1*exp(b1*t);
axes(handles.axes1);
plot(t,s1);
title('1号实指数信号');
a2=str2num(get(handles.edit10,'string'));
b2=str2num(get(handles.edit11,'string'));
s2=a2*exp(b2*t);
axes(handles.axes2);
plot(t,s2);
title('2号实指数信号');
a3=str2num(get(handles.edit12,'string'));
b3=str2num(get(handles.edit13,'string'));
s3=a1*exp(b3*t);
axes(handles.axes3);
plot(t,s3);
title('3号实指数信号');
case'阶跃信号'
jy1=str2num(get(handles.edit5,'string'));
jy2=str2num(get(handles.edit14,'string'));
jy3=str2num(get(handles.edit15,'string'));
s1=double(t>=jy1);
s2=double(t>=jy2);
s3=double(t>=jy3);%逻辑类型转换为double型。
axes(handles.axes1);
plot(t,s1);
title('1号阶跃信号');
axes(handles.axes2);
plot(t,s2);
title('2号阶跃信号');
axes(handles.axes3);
plot(t,s3);
title('3号阶跃信号');
otherwise
msgbox('操作错误!
');
end
v=get(handles.popupmenu1,'value');
if(a1<=0&&v==2)
cla(handles.axes4);
else
f1=fftshift(abs(fft(s1)));
axes(handles.axes4);
plot(f1);
title('1号信号频谱');
axis([1length(f1)min(f1)-1max(f1)+1]);
end
if(a2<=0&&v==2);
cla(handles.axes5);
else
f2=fftshift(abs(fft(s2)));
axes(handles.axes5);
plot(f2);
title('2号信号频谱');
axis([1length(f2)min(f2)-1max(f2)+1]);
end
if(a3<=0&&v==2)
cla(handles.axes6);
else
f3=fftshift(abs(fft(s3)));
axes(handles.axes6);
plot(f3);
title('3号信号频谱');
axis([1length(f3)min(f3)-1max(f3)+1]);
End
3.4系统界面分析结果
信号的频域分析是《信号与系统》比较大的知识模块,四种类型的信号其频谱各具特点,一般来讲,若信号时域连续,则频域是非周期的,若时域离散,则频域是周期的,本文的频谱分析系统中能够直接对比得出这样的结论。
另外随着时域参数的变化,对应的频谱也会发生相应的变化,例如,对于连续周期信号来讲,时域幅度越大,对应频域的幅度越大,若时域的频率大,则对应的频域高频分量越多;对于连续的非周期信号来讲,若时域信号的脉宽越宽,则频域带宽越窄,反之则越宽。
在本系统中,点击时域波形拖动鼠标就能调整时域信号的幅度和频率等参数,而与此同时其对应的频谱变化特性也同步显示出来,因而能够很方便的通过具体的波形变换直观体现出这些规律,通过理论的讲解和实际的演示,图文并茂,容易理解记住时域、频域对应的一些关系及变换的规律。
4.结论
MATLAB软件是目前全世界范围内非常流行的具有很强的科学计算和图形界面的软件系统。
利用MATLAB的强大运算功能,可以解决数字信号处理过程中遇到的许多问题。
本文给出了基于MATLAB软件实现信号DFT变换和FFT频谱分析的方法。
利用MATLAB软件方法,使得设计方便,快捷,大大减轻了工作量。
并且,在信号DFT变换中可以清楚得看到DFT变换结果和截取长度之间的关系。
通过编程仿真可以得到信号的幅频特性曲线,便于对信号进行谱分析。
随着MATLAB软件版本的不断提高,其功能越来越强大,在数字信号处理,数字图像处理,仿真,自动控制等领域的应用也会有越来越广阔的前景。
MATLAB的GUID
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Matlab 频谱 分析
![提示](https://static.bdocx.com/images/bang_tan.gif)