您的当前位置:首页正文

实验三 周期信号的频谱分析

2024-01-18 来源:个人技术集锦
实验三 周期信号的频谱分析

一、实验目的

1、掌握连续时间周期信号的傅里叶级数的物理意义和分析方法; 2、观察截短傅里叶级数而产生的“Gibbs现象”,了解其特点以及产生的原因; 3、掌握各种典型的连续时间非周期信号的频谱特征 二、原理说明:

1、连续时间周期信号的傅里叶级数分析

任何一个周期为T1的正弦周期信号,只要满足狄利克利条件,就可以展开成傅里叶级数。

其中三角傅里叶级数为:

x(t)a0[akcos(k0t)bksin(k0t)] 2.1

k1或: x(t)a0ck1kcos(k0tk) 2.2

其中02,称为信号的基本频率(Fundamental frequency),a0,ak,和bk分别是T1信号x(t)的直流分量、余弦分量幅度和正弦分量幅度,ck、k为合并同频率项之后各正弦谐波分量的幅度和初相位,它们都是频率k0的函数,绘制出它们与k0之间的图像,称为信号的频谱图(简称“频谱”),ck-k0图像为幅度谱,k-k0图像为相位谱。 三角形式傅里叶级数表明,如果一个周期信号x(t),满足狄里克利条件,那么,它就可以被看作是由很多不同频率的互为谐波关系(harmonically related)的正弦信号所组成,其中每一个不同频率的正弦信号称为正弦谐波分量 (Sinusoid component),其幅度(amplitude)为ck。也可以反过来理解三角傅里叶级数:用无限多个正弦谐波分量可以合成一个任意的非正弦周期信号。

指数形式的傅里叶级数为:

x(t)kaekjk0t 2.3

其中,ak为指数形式的傅里叶级数的系数,按如下公式计算:

1 akT1T1/2T1/2x(t)ejk0tdt 2.4

指数形式的傅里叶级数告诉我们,如果一个周期信号x(t),满足狄里克利条件,那么,它就可以被看作是由很多不同频率的互为谐波关系(harmonically related)的周期复指数信号所组成,其中每一个不同频率的周期复指数信号称为基本频率分量,其复幅度(complex amplitude)为ak。这里“复幅度(complex amplitude)”指的是ak通常是复数。

上面的傅里叶级数的合成式说明,我们可以用无穷多个不同频率的周期复指数信号来合成任意一个周期信号。然而,用计算机(或任何其它设备)合成一个周期信号,显然不可能做到用无限多个谐波来合成,只能取这些有限个谐波分量来近似合成。

假设谐波项数为N,则上面的和成式为:

x(t)kNaekNjk0t 2.5

显然,N越大,所选项数越多,有限项级数合成的结果越逼近原信号x(t)。本实验可以比较直观地了解傅里叶级数的物理意义,并观察到级数中各频率分量对波形的影响包括“Gibbs”现象:即信号在不连续点附近存在一个幅度大约为9%的过冲,且所选谐波次数越多,过冲点越向不连续点靠近。这一现象在观察周期矩形波信号和周期锯齿波信号时可以看得很清楚。

2、傅里叶级数的MATLAB计算

设周期信号x(t)的基本周期为T1,且满足狄里克利条件,则其傅里叶级数的系数可由式2.4计算得到。式2.4重写如下:

1akT1基本频率为: 0T1/2T1/2x(t)ejk0tdt

2 T1对周期信号进行分析时,我们往往只需对其在一个周期内进行分析即可,通常选择主周期(Principle period)。假定x1(t)是x(t)中的主周期,则

1akT1T1/2T1/2x(t)e1jk0tdt

计算机不能计算无穷多个系数,所以我们假设需要计算的谐波次数为N,则总的系数个数为2N+1个。在确定了时间范围和时间变化的步长即T1和dt之后,对某一个系数,上述系数的积分公式可以近似为:

11jk0tjk0takx(t)edtx(t)edt/T1 1nT1Tn1/2 [x(t1),x(t2),x(tM)][ejk0t1T/2,ejk0t2,ejk0tM]dt/T1

对于全部需要的2N+1个系数,上面的计算可以按照矩阵运算实现。MATLAB实现系数计

算的程序如下:

dt = 0.01;

T = 2; t = -T/2:dt:T/2; w0 = 2*pi/T;

x1 = input(‘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;

需要强调的是,时间变量的变化步长dt的大小对傅里叶级数系数的计算精度的影响非常大,dt越小,精度越高,但是,计算机计算所花的时间越长。

例题1:给定一个周期为T1 = 2s的连续时间周期方波信号,如图所示,其一个周期内的数学表达式为:

x1(t)1,0,0t1

1t2-2 -1 1 x(t) 0 1 2 t 解:首先,我们根据前面所给出的公式,计算该信号的傅里叶级数的系数。

T1/21图1 周期方波信号

10jkt1e1jkt1100jktjkted(jkt)edtakx(t)edt01j2k02j2k0T1T/200001e1ej2k0jk0kj02ekj02ej2k0kj02ksin(0)jk02e2 k0sin(因为:0 = 2π/T1 = π,代入上式得到:ak(j)kkk)2

在MATLAB命令窗口,依次键入:

>> k = -10:10; >> ak = ((-j).^k).* (sin((k+eps)*pi/2)./((k+eps)*pi)) % The expression of ak

eps 叫做机器的浮点运算误差限!PC机上eps的默认值为2.2204*10^(-16)。若某个量的绝对值小于eps,就认为这个量为0

ak =

Columns 1 through 4

-0.0000 0 + 0.0354i -0.0000 0 +

0.0455i

Columns 5 through 8

-0.0000 0 + 0.0637i -0.0000 0 +

0.1061i

Columns 9 through 12

-0.0000 0 + 0.3183i 0.5000 0 -

0.3183i

Columns 13 through 16

-0.0000 0 - 0.1061i -0.0000 0 -

0.0637i

Columns 17 through 20

-0.0000 0 - 0.0455i -0.0000 0 -

0.0354i

Column 21

-0.0000

从MATLAB命令窗口,我们得到了该周期信号从a10到a10共21个系数。

紧接着再键入以下命令:

>> subplot(221)

>> stem(k,abs(ak),'k.') >> title('The Fourier

coefficients')

>> xlabel('Frequency index k')

series

就得到一幅如右图所示的描述ak与k之间的关系的

图形。

以上是我们通过手工计算得到的这个周期信号的傅里叶级数表达式及其频谱图,下面给出完成傅里叶级数系数计算的相应MATLAB范例程序。

% Program3_1

% This program is used to evaluate the Fourier series coefficients ak of

a periodic square wave

clear, close all

T = 2; dt = 0.0001; t = -2:dt:2; x1 = ut(t) - ut(t-1-dt); x = 0;

for m = -1:1 % Periodically extend x1(t) to form a

periodic signal

x = x + ut(t-m*T) - ut(t-1-m*T-dt); end

w0 = 2*pi/T;

N = 10; % 谐波次数 L = 2*N+1;

for k = -N: N; % Evaluate the Fourier series coefficients

ak

ak(N+1+k) = (1/T)*x1*exp(-j*k*w0*t')*dt; end

phi = angle(ak); % ak相位

执行程序Program3_1后,就完成了信号的傅里叶级数的系数的计算,在命令窗口键入

>> ak

命令窗口就可以显示傅里叶级数的21个系数:

ak =

Columns 1 through 4

0.0000 + 0.0000i 0.0000 + 0.0354i 0.0000 - 0.0000i 0.0000 + 0.0455i Columns 5 through 8

0.0000 - 0.0000i 0.0000 + 0.0637i 0.0000 - 0.0000i 0.0000 + 0.1061i Columns 9 through 12

0.0000 - 0.0000i 0.0000 + 0.3183i 0.5000 0.0000 - 0.3183i Columns 13 through 16

0.0000 + 0.0000i 0.0000 - 0.1061i 0.0000 + 0.0000i 0.0000 - 0.0637i Columns 17 through 20

0.0000 + 0.0000i 0.0000 - 0.0455i 0.0000 + 0.0000i 0.0000 - 0.0354i

Column 21

0.0000 - 0.0000i

将这里的ak之值同前面手工计算得到的ak比较,可见两者是完全相同的。 再次特别提示:程序中,时间变量的变化步长dt的大小对傅里叶级数系数的计算精度的影响非常大,dt越小,精度越高,本程序中的dt之所以选择0.00001就是为了提高计算精度。但是,计算机所花的计算时间越长。

在程序Program3_1中添加相应的计算| ak |和绘图语句,就可以绘制出信号的幅度谱和相位谱的谱线图。

3、 周期信号的合成以及Gibbs现象

从傅里叶级数的合成式(Synthesis equation)

x(t)kaekjk0t

可以看出,用无穷多个不同频率和不同振幅的周期复指数信号可以合成一个周期信号。然而,我们无法用计算机实现对无穷多个周期复指数信号的合成。但是,用有限项来合成却是可行的,在实际应用中,多半也就是这么做的。然而,这样做的一个必然结果,就是引入了误差。

如果一个周期信号在一个周期有内断点存在,那么,引入的误差将除了产生纹波之外,还将在断点处产生幅度大约为9%的过冲(Overshot),这种现象被称为吉伯斯现象(Gibbs phenomenon)。

为了能够观察到合成信号与原信号的不同以及Gibbs现象,我们可以利用前面已经计算出的傅里叶级数的系数,计算出截短的傅里叶级数:

x(t)kNaekNjk0t

这个计算可用L = 2N+1次循环来完成:

x2x2ak(r)ej(r1N)0t

其中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-1所示的周期方波信号,这种信号在一个周期内有两个断点,用有限项级数合成这个信号时,吉伯斯现象的特征非常明显,便于观察。 例题2:修改程序Program3_1,使之能够用有限项级数合成例题2-1所给的周期方波信号,并绘制出原始周期信号、合成的周期信号、信号的幅度谱和相位谱。

为此,只要将前述的for循环程序段和绘图程序段添加到程序Program2_1中即可,范例程序如下:

% Program3_2

% This program is used to compute the Fourier series coefficients ak of a periodic square wave

clear,close all

T = 2; dt = 0.00001; t = -2:dt:2; x1 = u(t)-u(t-1-dt); x = 0; for m = -1:1

x = x + u(t-m*T) - u(t-1-m*T-dt); % Periodically extend x1(t) to form a periodic signal

end

w0 = 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; end

phi = 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')

在用这个程序观察吉伯斯现象时,可以反复执行该程序,每次执行时,输入不同之N值,比较所的图形的区别,由此可以观察到吉伯斯现象的特征。

三、实验内容

实验前,必须首先阅读本实验原理,读懂所给出的全部范例程序。实验开始时,先在计算机上运行这些范例程序,观察所得到的信号的波形图。并结合范例程序应该完成的工作,进一步分析程序中各个语句的作用,从而真正理解这些程序。 实验前,一定要针对下面的实验项目做好相应的实验准备工作,包括事先编写好相应的实验程序等事项。

Q3-1 编写程序Q3_1,绘制下面的信号的波形图:

111n x(t)cos(0t)cos(30t)cos(50t)sin()cos(n0t)

352n1n其中,0 = 0.5π,要求将一个图形窗口分割成四个子图,分别绘制cos(0t)、cos(30t)、

cos(50t) 和x(t) 的波形图,给图形加title,网格线和x坐标标签,并且程序能够接受从键盘输入的和式中的项数。 抄写程序Q3_1如下:

执行程序Q3_1所得到的图形如下:

Q3-2 给程序Program3_1增加适当的语句,并以Q3_2存盘,使之能够计算例题1中的周期方波信号的傅里叶级数的系数,并绘制出信号的幅度谱和相位谱的谱线图。 通过增加适当的语句修改Program3_1而成的程序Q3_2抄写如下: 执行程序Q3_2得到的图形

Q3-3 反复执行程序Program3_2,每次执行该程序时,输入不同的N值,并观察所合成的周期方波信号。通过观察,你了解的吉伯斯现象的特点是:

4、周期信号的傅里叶级数与GIBBS现象

给定如下两个周期信号:

x1(t)1x2(t)1t2112

t20.20.22

Q3-4 仿照程序Program3_1,编写程序Q3_4,以计算x1(t)的傅里叶级数的系数。 程序Q3_4如下:

执行程序Q3_4所得到的x1(t)的傅里叶级数的ak从-10到10共21个系数如下:

Q3-5 仿照程序Program3_1,编写程序Q3_5,以计算x2(t) 的傅里叶级数的系数(不绘图)。 程序Q3_5如下:

执行程序Q3_5所得到的x2(t)的傅里叶级数的ak从-10到10共21个系数如下:

与你手工计算的ak相比较,是否相同,如有不同,是何原因造成的?

Q3-6 仿照程序Program3_2,编写程序Q3_6,计算并绘制出原始信号x1(t) 的波形图,用有限项级数合成的y1(t) 的波形图,以及x1(t) 的幅度频谱和相位频谱的谱线图。 编写程序Q3_6如下:

执行程序Q3_6,输入N = 10所得到的图形如下:

反复执行程序Q3_6,输入不同的N值,观察合成的信号波形中,是否会产生Gibbs现象?为什么?;

四、 实验报告要求

1.实验目的。 2.实验内容

3.请写出实验过程中曾出现的问题和你的解决方法,你对实验有何感想和体会?

因篇幅问题不能全部显示,请点此查看更多更全内容