一、实验目的1、掌握连续时间周期信号的傅里叶级数的物理意义和分析方法;2、观察截短傅里叶级数而产生的“Gibbs 现象”,了解其特点以及产生的原因;3、掌握连续时间傅里叶变换的分析方法及其物理意义;4、学习利用MATLAB 语言编写计算CTFS 和CTFT 的仿真程序。
基本要求:掌握并深刻理傅里叶变换的物理意义,掌握信号的傅里叶变换的计算方法,掌握利用MATLAB 编程完成相关的傅里叶变换的计算。
二、实验原理及方法1、连续时间周期信号的傅里叶级数CTFS 分析任何一个周期为T 1的正弦周期信号,只要满足狄利克利条件,就可以展开成傅里叶级数。
其中三角傅里叶级数为:∑∞=++=1000)]sin()cos([)(k k k t k b t k a a t x ωω 9.1或: ∑∞=++=100)cos()(k k kt k ca t x ϕω 9.2其中102T πω=,称为信号的基本频率,k k b a a ,和,0分别是信号)(t x 的直流分量、余弦分量幅度和正弦分量幅度,k k c ϕ、为合并同频率项之后各正弦谐波分量的幅度和初相位,它们都是频率0ωk 的函数,绘制出它们与0ωk 之间的图像,称为信号的频谱图(简称“频谱”),k c -0ωk 图像为幅度谱,k ϕ-0ωk 图像为相位谱。
指数形式的傅里叶级数为:∑∞-∞==k tjk kea t x 0)(ω 9.3其中,k a 为指数形式的傅里叶级数的系数,按如下公式计算:⎰--=2/2/1110)(1T T tjk k dt e t x T a ω 9.4 假设谐波项数为N ,则上面的和成式为:∑-==NNk tjk kea t x 0)(ω 9.5显然,N 越大,所选项数越多,有限项级数合成的结果越逼近原信号x(t)。
2、连续时间信号傅里叶变换----CTFT傅里叶变换在信号分析中具有非常重要的意义,它主要是用来进行信号的频谱分析的。
傅里叶变换和其逆变换定义如下:⎰∞∞--=dt et x j X tj ωω)()( 9.6⎰∞∞-=ωωπωd e j X t x tj )(21)( 9.7 连续时间傅里叶变换主要用来描述连续时间非周期信号的频谱。
任意非周期信号,如果满足狄里克利条件,那么,它可以被看作是由无穷多个不同频率(这些频率都是非常的接近)的周期复指数信号e j ωt 的线性组合构成的,每个频率所对应的周期复指数信号e j ωt 称为频率分量其相对幅度为对应频率的|X(j ω)|之值,其相位为对应频率的X(j ω)的相位。
给定一个连续时间非周期信号x(t),它的频谱也是连续且非周期的。
对于连续时间周期信号,也可以用傅里变换来表示其频谱,其特点是,连续时间周期信号的傅里叶变换时有冲激序列构成的,是离散的——这是连续时间周期信号的傅里叶变换的基本特征。
3、连续周期信号的傅里叶级数CTFS 的MATLAB 实现 3.1 傅里叶级数的MATLAB 计算设周期信号x(t)的基本周期为T 1,且满足狄里克利条件,则其傅里叶级数的系数可由式9.4计算得到。
式9.4重写如下:⎰--=2/2/1110)(1T T tjk k dt et x T a ω基本频率为: 102T πω=对周期信号进行分析时,我们往往只需对其在一个周期内进行分析即可,通常选择主周期。
假定x 1(t)是x(t)中的主周期,则⎰--=2/2/11110)(1T T tjk k dt e t x T a ω 计算机不能计算无穷多个系数,所以我们假设需要计算的谐波次数为N ,则总的系数个数为2N+1个。
在确定了时间范围和时间变化的步长即T 1和dt 之后,对某一个系数,上述系数的积分公式可以近似为:∑⎰---==ntjk n T T t jk k T dt e t x dt e t x T a 12/2/11/)()(10110ωω 121/],,[)](),(),([02010T dt e e et x t x t x M t jk t jk t jk M ⋅⋅=---ωωωΛΛ对于全部需要的2N+1个系数,上面的计算可以按照矩阵运算实现。
MATLAB 实现系数计算的程序如下:dt = 0.01;T = 2; t = -T/2:dt:T/2; w0 = 2*pi/T;x1 = in put(‘Type in the periodic signal x(t) over one period x1(t)=’); N = input(‘Type in the number N=’); k = -N:N; L = 2*N+1; ak = x1*exp(-j*k*w0*t’)*dt/T;例1:给定一个周期为T 1 = 2s 的连续时间周期方波信号,如图所示,其一个周期内的数学表达式为:⎩⎨⎧<<≤≤=21,010,1)(1t t t x% Program2_1clear, close all T = 2; dt = 0.00001; t = -2:dt:2; x1 = u(t) - u(t-1-dt); x = 0;for m = -1:1x = x + u(t-m*T) - u(t-1-m*T-dt);endw0 = 2*pi/T;N = 10; L = 2*N+1;for k = -N: N;ak(N+1+k) = (1/T)*x1*exp(-j*k*w0*t')*dt;endphi = anglel(ak); % Evaluate the phase of ak 执行程序Program2_1后,就完成了信号的傅里叶级数的系数的计算,在命令窗口键入>> ak图9.1 周期方波信号命令窗口就可以显示傅里叶级数的21个系数:在程序Program2_1中添加相应的计算| ak |和绘图语句,就可以绘制出信号的幅度谱和相位谱的谱线图。
3.2 周期信号的合成以及Gibbs 现象从傅里叶级数的合成式(Synthesis equation )∑∞-∞==k tjk kea t x 0)(ω可以看出,用无穷多个不同频率和不同振幅的周期复指数信号可以合成一个周期信号。
然而,我们无法用计算机实现对无穷多个周期复指数信号的合成。
但是,用有限项来合成却是可行的,在实际应用中,多半也就是这么做的。
然而,这样做的一个必然结果,就是引入了误差。
如果一个周期信号在一个周期有内断点存在,那么,引入的误差将除了产生纹波之外,还将在断点处产生幅度大约为9%的过冲(Overshot ),这种现象被称为吉伯斯现象(Gibbs phenomenon )。
为了能够观察到合成信号与原信号的不同以及Gibbs 现象,我们可以利用前面已经计算出的傅里叶级数的系数,计算出截短的傅里叶级数:∑-==NNk tjk kea t x 0)(ω这个计算可用L = 2N+1次循环来完成:t N r j k e r a x x 0)1()(22ω--⋅+=其中r 作为循环次数,x2在循环之前应先清零。
完成这一计算的MATLAB 程序为:x2 = 0; L = 2*N+1;for r = 1:L;x2 = x2+ak(r)*exp(j*(r-1-N)*w0*t); end;完成了所有的计算之后,就可以用绘图函数:plot()和stem()将计算结果包括x1, x2, abs(ak)和angle(ak)以图形的形式给出,便于我们观察。
例 2:修改程序Program2_1,使之能够用有限项级数合成例 1所给的周期方波信号,并绘制出原始周期信号、合成的周期信号、信号的幅度谱和相位谱。
% Program2_2% This program is used to compute the Fourier series coefficients ak of a periodic square waveclear,close allT = 2; dt = 0.00001; t = -2:dt:2; x1 = u(t)-u(t-1-dt); x = 0; for m = -1:1x = x + u(t-m*T) - u(t-1-m*T-dt); % Periodically extend x1(t) to form a periodic signalendw0 = 2*pi/T;N = input('Type in the number of the harmonic components N = :'); L = 2*N+1; for k = -N:1:N;ak(N+1+k) = (1/T)*x1*exp(-j*k*w0*t')*dt; endphi = angle(ak); y=0;for q = 1:L; % Synthesiz the periodic signal y(t) from the finite Fourier series y = y+ak(q)*exp(j*(-(L-1)/2+q-1)*2*pi*t/T); end;subplot(221),plot(t,x), title('The original signal x(t)'), axis([-2,2,-0.2,1.2]), subplot(223),plot(t,y), title('The synthesis signal y(t)'), axis([-2,2,-0.2,1.2]), xlabel('Time t'), subplot(222)k=-N:N; stem(k,abs(ak),'k.'), title('The amplitude |ak| of x(t)'), axis([-N,N,-0.1,0.6])subplot(224)stem(k,phi,'r.'), title('The phase phi(k) of x(t)'), axis([-N,N,-2,2]), xlabel('Index k') 4 用MATLAB 实现CTFT 计算MATLAB 进行傅里叶变换有两种方法,一种利用符号运算的方法计算,另一种是数值计算,本实验要求采用数值计算的方法来进行傅里叶变换的计算。
严格来说,用数值计算的方法计算连续时间信号的傅里叶变换需要有个限定条件,即信号是时限信号(Time limited signal ),也就是当时间|t|大于某个给定时间时其值衰减为零或接近于零,这个条件与前面提到的为什么不能用无限多个谐波分量来合成周期信号的道理是一样的。