信号的傅立叶级数和频谱分析周期性矩形脉冲信号的分解与叠加讲解.docx
《信号的傅立叶级数和频谱分析周期性矩形脉冲信号的分解与叠加讲解.docx》由会员分享,可在线阅读,更多相关《信号的傅立叶级数和频谱分析周期性矩形脉冲信号的分解与叠加讲解.docx(25页珍藏版)》请在冰豆网上搜索。
![信号的傅立叶级数和频谱分析周期性矩形脉冲信号的分解与叠加讲解.docx](https://file1.bdocx.com/fileroot1/2023-6/9/de580c25-46bb-4e74-a575-4b027b0ee162/de580c25-46bb-4e74-a575-4b027b0ee1621.gif)
信号的傅立叶级数和频谱分析周期性矩形脉冲信号的分解与叠加讲解
成绩评定表
学生姓名
刘磊
班级学号
1203060315
专业
通信工程
课程设计题目
周期性矩形脉冲信号的分解与叠加
评
语
组长签字:
成绩
日期
2014年6月日
课程设计任务书
学院
信息科学与工程
专业
通信工程
学生姓名
刘磊
班级学号
1203060315
课程设计题目
信号的傅立叶级数和频谱分析——周期性矩形脉冲信号的分解与叠加
实践教学要求与任务:
1、学习Matlab软件及应用;
2、学习并研究信号的傅立叶级数和频谱分析有关理论;
3、利用Matlab编程,完成周期性矩形脉冲信号的分解与叠加课题;
4、写出课程设计报告,打印程序,给出运行结果。
工作计划与进度安排:
第1-2天:
1、学习使用Matlab软件、上机练习
2、明确课题内容,初步编程
第3-5天:
1、上机编程、调试
2、撰写课程设计报告书
3、检查编程、运行结果、答辩
4、上交课程设计报告
指导教师:
2014年6月日
专业负责人:
2014年6月日
学院教学副院长:
2014年6月日
目录
一、引言4
二、Matlab入门6
2.1Matlab7.0介绍6
2.2利用Matlab7.0编程完成习题设计6
三、Matlab7.0实现周期性矩形脉冲信号的分解与叠加8
3.1周期性矩形脉冲信号的分解与叠加的原理8
3.2指数形式的傅里叶级数8
3.3连续时间周期信号的傅里叶综合9
3.4吉布斯现象......................................10
3.5单边与双边频谱关系..............................11
四、运行代码…………………………………………………..12
五、编程实现.......................................18
六、结论26
七、参考文献28
一、引言
人们之间的交流是通过消息的传播来实现的,信号则是消息的表现形式,消息是信号的具体内容。
《信号与系统》课程是一门实用性较强、涉及面较广的专业基础课,该课程是将学生从电路分析的知识领域引入信号处理与传输领域的关键性课程,对后续专业课起着承上启下的作用.该课的基本方法和理论大量应用于计算机信息处理的各个领域,特别是通信、数字语音处理、数字图像处理、数字信号分析等领域,应用更为广泛。
近年来,计算机多媒体教序手段的运用逐步普及,大量优秀的科学计算和系统仿真软件不断涌现,为我们实现计算机辅助教学和学生上机实验提供了很好的平台。
通过对这些软件的分析和对比,我们选择MATLAB语言作为辅助教学工具,借助MATLAB强大的计算能力和图形表现能力,将《信号与系统》中的概念、方法和相应的结果,以图形的形式直观地展现给我们,大大的方便我们迅速掌握和理解老师上课教的有关信号与系统的知识。
MATLAB是当前最优秀的科学计算软件之一,也是许多科学领域中分析、应用和开发的基本工具。
MATLAB全称是MatrixLaboratory,是由美国Mathworks公司于20世纪80年代推出的数学软件,最初她是一种专门用于矩阵运算的软件,经过多年的发展,MATLAB已经发展成为一种功能全面的软件,几乎可以解决科学计算中的所有问题。
而且MATLAB编写简单、代码效率高等优点使得MATLAB在通信、信号处理、金融计算等领域都已经被广泛应用。
它具有强大的矩阵计算能力和良好的图形可视化功能,为用户提供了非常直观和简洁的程序开发环境,因此被称为第四代计算机语言。
MATLAB强大的图形处理功能及符号运算功能,为我们实现信号的可视化及系统分析提供了强有力的工具。
MATLAB强大的工具箱函数可以分析连续信号、连续系统,同样也可以分析离散信号、离散系统,并可以对信号进行各种分析域计算,如相加、相乘、移位、反折、傅里叶变换、拉氏变换、Z变换等等多种计算。
作为信号与系统的基本分析软件之一,利用MATLAB进行信号与系统的分析与设计是通信以及信息工程学科的学生所要掌握的必要技能之一。
通过学习并使用MATLAB语言进行编程实现课题的要求,对学生能力的培养极为重要。
尤其会提高综合运用所学理论知识进行分析问题、解决问题的能力,也便于将理论知识与实践相结合,并得以更好地掌握信号分析与处理的基本方法与实现。
这也将为后续相关的课程学习打下一定的基础,从而在以后相关课程设计与分析的时候达到对MATLAB的熟练应用与融会贯通。
二、Matlab入门
2.1Matlab7.0介绍
Matlab7.0比Matlab的老版本提供了更多更强的新功能和更全面、更方便的联机帮助信息。
当然也比以前的版本对于软件、硬件提出了更高的要求。
在国内外Matlab已经经受了多年的考验。
Matlab7.0功能强大,适用范围很广。
其可以用来线性代数里的向量、数组、矩阵运算,复数运算,高次方程求根,插值与数值微商运算,数值积分运算,常微分方程的数值积分运算、数值逼近、最优化方法等,即差不多所有科学研究与工程技术应用需要的各方面的计算,均可用Matlab来解决。
MATLAB7.0提供了丰富的库函数(称为M文件),既有常用的基本库函数,又有种类齐全、功能丰富多样的的专用工具箱Toolbox函数。
函数即是预先编制好的子程序。
在编制程序时,这些库函数都可以被直接调用。
无疑,这会大大提高编程效率。
MATLAB7.0的基本数据编程单元是不需要指定维数的复数矩阵,所以在MATLAB环境下,数组的操作都如数的操作一样简单方便。
而且,MATLAB7.0界面友好,用户使用方便。
首先,MATLAB具有友好的用户界面与易学易用的帮助系统。
用户在命令窗里通过help命令可以查询某个函数的功能及用法,命令的格式极为简单。
其次,MATLAB程序设计语言把编辑、编译、连接、执行、调试等多个步骤融为一体,操作极为简单。
除此之外,MATLAB7.0还具有强大的图形功能,可以用来绘制多姿多彩的图形,直观而形象。
综上,在进行信号的分析与仿真时,MATLAB7.0无疑是一个强大而实用的工具。
尤其对于信号的分析起到了直观而形象的作用,非常适合与相关课题的研究与分析。
2.2利用Matlab7.0编程完成习题设计
在熟悉了MATLAB7.0的基本界面之后,可以通过简单的编程与相关函数的调用,实现一些常用时间信号的可视化操作。
例如:
编程实现正弦波的仿真。
程序如下,直接在命令窗口键入如下程序:
t=0:
0.001:
2*pi;
w0=2;phi=0;
ft1=sin(w0*t+phi);
plot(t,ft1)
仿真图形如下:
图a
三.Matlab7.0实现周期性矩形脉冲信号的分解与叠加的设计
3.1周期性矩形脉冲信号的分解与叠加的原理
频域分析法即傅里叶分析法,它是变换域分析法的基石。
其中,傅里叶级数是变换域分析法的理论基础,傅里叶变换作为频域分析法的重要数学工具,具有明确的物理意义,在不同的领域得到广泛的应用
矩形形式的傅里叶级数为:
式中系数
、
称为傅里叶系数,可由下式求得。
其中,
为基波频率,
为n次谐波频率。
3.2指数形式的傅里叶级数
根据欧拉公式:
并考虑
和
奇偶性可将
改写为指数形式的傅里叶级数:
即周期信号可分解为一系列不同频率的虚指数信号之和,式中
称为傅里叶复系数,可由下式求得:
3.3连续时间周期信号的傅里叶综合
任何满足狄里赫里条件的周期信号,可以表示成式
或
的和式形式,
或
式常称为连续周期信号的傅里叶级数综合公式。
一般来说,傅里叶级数系数有无限个非零值,即任何具有有限个间断点的周期信号都一定有一个无限项非零系数的傅里叶级数表示。
但对数值计算来说,这是无法实现的。
在实际的应用中,但我们可以用有限项的傅里叶级数求和来逼近。
为了比较有限项谐波的逼近情况,本次课设编写了程序来绘制波形以给读者一个直观的感受。
调用xiebo.m函数文件,即可绘出周期矩形波信号各次谐波的合成波形。
如图2.1所示。
图2.1周期矩形脉冲信号的合成
由图2.1可见,当它所包含的谐波分量越多时,合成波形愈接近于原来的矩形波脉冲(。
由图2.1还可以看到,合成波形所包含的谐波分量愈多时,除间断点附近外,它越接近于原矩形波脉冲。
在间断点附近,随着所含谐波次数的增加,合成波形的尖峰愈接近间断点,但尖峰幅度并未明显减少。
可以证明,即使合成波形所含谐波次数
时,在间断点处仍有约9%的偏差,这种现象称为吉布斯(Gibbs)现象。
在傅里叶级数的项数取得很大时,间断点处尖峰下的面积非常小以致趋近于零,因而在均方的意义上合成波形同原波形的真值之间没有区别[4]。
3.4吉布斯现象
上一节中我们提到了吉布斯现象,本节我们将作重点来讨论。
我们知道满足狄里赫利条件的周期函数表示成的傅立叶级数都收敛。
狄里赫利条件如下:
1.在任何周期内,x(t)必须绝对可积;
2.在任一有限区间中,x(t)只能取有限个最大值或最小值;
3.在任何有限区间上,x(t)只能有有限个第一类间断点。
所谓的吉布斯现象就是:
在x(t)的不可导点上,如果我们只取x(t)等式右边的无穷级数中的有限项作和X(t),那么X(t)在这些点上会有起伏[1]。
具体现象如下图所示,以下分别为谐波次数为N=50,N=100,N=500合成波的情况。
图2.2不同时N值时的合成波
从上面的图像中可以看出,当N=500的时候,合成波与原来的方波拟合得非常好,但是在不可导的点上,即为x=-1.5,x=-0.5,x=0.5,x=1.5这样的点的时候,合成波会有较大的波动,这就是非常明显的吉布斯现象。
3.5单边与双边频谱关系
如前所述,周期信号可以分解成一系列正弦(余弦)信号或虚指数信号之和,为了直观地表示出信号所含各分量的振幅
或
,随频率的变化情况,通常以角频率为横坐标,以各次谐波的振幅
或虚指数函数
的幅度为纵坐标,画出如图3.1和3.2所示的各谐波的振幅
或
与角频率的关系图,称为周期信号的幅度(振幅)频谱,简称幅度谱。
图中每条竖线代表该频率分量的幅度,称为谱线。
各谱线顶点连线的曲线(如图中原点所示)称为频谱包络线,它反映了各谐波分量幅度随频率变化的情况。
图3.5.1中幅度谱为单边幅度谱(用
绘制的频谱)。
图3.2中幅度谱为双边幅度谱(用
绘制的频谱)。
类似地,也可画出各谐波初相角
与角频率的关系图,如图3.1和3.2中各谐波初相角
与角频率的关系图,称为相位频谱,简称相位谱。
图3.5.1中相位谱为单边相位谱。
图3.2中相位谱为双边相位谱。
如果
为实数,那么可用
的正负来表示
为0或
也可把幅度谱和相位谱画在一张图上。
由图可见,周期信号的谱线只出现在频率为
等原周期信号频率的整数倍的离散频率上,即周期信号的频谱是离散谱。
图3..5.1周期信号的双边幅度谱和相位谱
由此可见周期信号频谱具有三个特点:
(1)离散性,即谱线是离散的;
(2)谐波性,即谱线只出现在基波频率的整数倍上;
(3)收敛性,即谐波的幅度随谐波次数的增高而减小。
单边频谱和双边频谱的区别就是求值的范围不同,单边频谱求的是频率大于0的情况,而双边频谱求的是所有频率的情况,即包括频率小于0的情况,这个区别在上面的两张图中可以非常明显地看出来。
四.运行代码
4.1吉布斯效应
t=-2:
0.001:
2;
N=input('N=');%N为输入要达到的最高次谐波的次数
c0=0.5;
fN=c0*ones(1,length(t));
forn=1:
2:
N
fN=fN+cos(pi*n*t)*sinc(n/2);%sinc抽样函数
end
figure
plot(t,fN)
axis([-22-0.21.2])
4.2画方波
t=-2*pi/100:
pi/1024:
2*pi/100;
y=square(2*pi*30*t,50);%脉宽50
plot(t,y);
grid
ylim([-1.51.5])
4.3方波信号的合成
clearall;%将原来的信号清楚
closeall;%关闭该程序
N=200;dt=2/N;%数据点数和采样间隔
forn=1:
N%得到方波信号
if(n*dt+1>=2)%方波跳变
x(n)=1;
else
x(n)=-1;
end
end
figure
(1);%画振幅谱
subplot(211);plot((1:
N)*dt,x);holdon;%holdon稍等
plot((1:
N)*dt,zeros(1,N),'r');xlabel('时间/s');
title('振幅');
a=zeros(1,N);
b=zeros(1,N);
mm=floor(N/2)+1;
fork=0:
mm-1
a(k+1)=0;
b(k+1)=0;
fori=0:
N-1
a(k+1)=a(k+1)+2/N*x(i+1)*cos(2*pi*k*i/N);
b(k+1)=b(k+1)+2/N*x(i+1)*sin(2*pi*k*i/N);
end
c(k+1)=sqrt(a(k+1).^2+b(k+1).^2);
end
subplot(212);plot((0:
mm-1)/(N*dt),c);
title('Fourier变换');
xlabel(‘频率/HZ');ylabel('振幅');%绘制振幅谱
axis([02501]);
m=input('输入谐波最大阶数');%输入最大K值
if(m>floor(N/2)+1)
error('谐波次数必须小于频率对应的阶数');
end
if(mod(N,2)~=1)
a(mm)=a(mm)/2;
end%此时b(nn)为零a(nn)减半
fori=0:
N-1%合成信号
xx(i+1)=a
(1)/2;
fork=1:
m
xx(i+1)=xx(i+1)+a(k+1)*cos(2*pi*k*i/N)+b(k+1)*sin(2*pi*k*i/N);
end
end
figure
(2);
plot((1:
N)*dt,xx,(0:
N-1)*dt,x);%绘制合成信号与方波信号图便于比较
holdon;
plot((1:
N)*dt,zeros(1,N),'r');
xlabel('绘制横轴');ylabel('振幅An');title(‘信号合成图');
4.4方波的分解
clearall;
closeall;
N=200;dt=2/N;%数据点数和采样间隔
forn=1:
N%得到方波信号
if(n*dt>=1)%半个周期幅值分别为1、-1
x(n)=1;
else
x(n)=-1;
end
end
figure
(1);
plot((1:
N)*dt,x);axis([02-1.51.5]);holdon;
plot((1:
N)*dt,zeros(1,N),'r');xlabel('时间/s');ylabel('振幅');
title('原始信号');
a=zeros(1,N);
m=input('输入谐波的最高次数');
fork=0:
m-1
a(k+1)=0;
b(k+1)=0;
fori=0:
N-1
a(k+1)=a(k+1)+2/N*x(i+1)*cos(2*pi*k*i/N);
b=zeros(1,N);
b(k+1)=b(k+1)+2/N*x(i+1)*sin(2*pi*k*i/N);
end
An(k+1)=sqrt(a(k+1).^2+b(k+1).^2);
ph(k+1)=(atan(b(k+1)/a(k+1))+2*pi*k*i/N);%反正切函数,即求相位角
end
subplot(211);stem((0:
m-1)/(N*dt),An);
xlabel('频率(HZ)');ylabel('振幅(An)');
title('Fourier变换');
subplot(212);stem((0:
m-1)/(N*dt),ph);title('FourierFourier变换');
xlabel('频率(HZ)');ylabel('相位(rad)');
4.5周期矩形脉冲信号的幅度谱
n=-12:
12;
E=1;
t=1;
T=5*t;
w=2/T;
Fn=(E*t/T)*sinc(w*t*n/2);
stem(n,abs(Fn),'filled');
holdon
k=-12:
0.01:
12;
f=abs(E*t/T)*sinc(w*t*k/2);
plot(k,abs(f),'--');
4.6周期矩形脉冲信号的频谱
a. 取E=1,tao=1, 画出周期矩形脉冲的傅里叶级数的频谱;
n=-12:
12;
E=1;
t=1;
T=5*t;
w=2/T;
Fn=(E*t/T)*sinc(w*t*n/2);
stem(n,Fn,'filled');
holdon
k=-12:
0.01:
12;
f=abs(E*t/T)*sinc(w*t*k/2);
plot(k,f,'--');
五、编程实现
原始方波
输入谐波的最高次数5
输入谐波的最高次数25
输入谐波的最高次数50
输入谐波的最高次数100
周期信号幅度图
周期信号频谱图
六、结论
本次的信号与系统课程设计中,我查阅了相关资料,并且进行了反复练习。
由于是第一次做信号与系统的课程设计,对于相关设计过程和分析方法以及MATLAB软件的使用并不大熟练。
但功夫不负有心人,最终还算顺利完成,这对我以后学习相关的课程以及进行更高层次的信号与系统设计都奠定了一定的基础。
设计过程中,出现了各种各样的问题,有些是单一原因引起的,有的是综合原因引起的,这些都很考验我的毅力与坚持。
但是我掌握了研究这类问题的方法,即问题解决的过程就是要从问题所表现出来的情况出发,通过反复推敲,作出相应判断,逐步找出问题的症结所在,从而一举击破。
对于信号与系统课程设计,尤其在使用MATLAB软件进行相关信号的仿真与分析时,这种分析解决问题的能力就更为重要。
正所谓“纸上得来终觉浅,觉知此事要躬行。
”学习任何知识,仅从理论上去求知,而不去实践、探索是不够的。
通过为期数天的MATLAB课程设计,我对MATLAB这个仿真软件有了更进一步的认识和了解。
在这数天时间里,我通过自己摸索,查阅资料,并且在指导老师的指导下完成了常用连续时间信号的编程与仿真;并最终将课程设计报告总结完毕。
在整个设计过程中我懂得了许多东西,也培养了独立思考和设计的能力,树立了对知识应用的信心,相信会对今后的学习工作和生活有非常大的帮助,并且提高了自己的动手实践操作能力,使自己充分体会到了在设计过程中的成功喜悦。
虽然这个设计做的不是太成功,但是在设计过程中所学到的东西是这次课程设计的最大收获和财富,使我终身受益。
在没有做课程设计以前,觉得课程设计只是对知识的单纯总结,但是通过这次课程设计发现自己的看法有点太片面,课程设计不仅是对前面所学知识的一种检验,也是对自己能力的一种提高,通过这次课程设计使自己明白了原来的那点知识是非常欠缺的,要学习的东西还很多,通过这次课程设计,我明白学习是一个长期积累的过程,在以后的工作和生活中都应该不断的学习,努力提高自己的知识和综合素质。
希望以后像这样的课程设计可以多一点。
对于MATLAB软件的使用,本次的课程设计让我对于信号与系统这一门学科有了更深层次的理解,在分析并解决问题的过程中,巩固了该门学科的基础,对于相关知识的认知程度有了很大的提高。
实践是认识的基础,本次的课程设计对个人的影响意义深远。
七、参考文献
1:
梁虹.信号与线性系统分析---基于MATLAB的方法与实现.北京:
高等教育出版社,2006.
2:
郑君里,谷源涛.信号与系统:
MATLAB综合实验.北京:
高等教育出版社,2008.
3:
肖伟、刘忠.MATLAB程序设计与应用[M].北京:
清华大学出版社2005.