信号与系统实验教程(学生版)(4)

2019-04-14 21:39

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

>> k = -10:10;

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

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 series coefficients') >> xlabel('Frequency index k')

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

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

% Program2_1

% This program is used to evaluate 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 % Periodically extend x1(t) to form a periodic signal x = x + u(t-m*T) - u(t-1-m*T-dt); end

w0 = 2*pi/T;

N = 10; % The number of the harmonic components L = 2*N+1;

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

13

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

phi = angle(ak); % Evaluate the phase of ak

执行程序Program2_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就是为了提高计算精度。但是,计算机所花的计算时间越长。

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

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

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

?x(t)??ak???kejk?0t

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

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

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

Nx(t)?

?ak??Nkejk?0t

14

这个计算可用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:修改程序Program2_1,使之能够用有限项级数合成例题2-1所给的周期方波信号,并绘制出原始周期信号、合成的周期信号、信号的幅度谱和相位谱。

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

% Program2_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)

15

stem(k,phi,'r.'), title('The phase phi(k) of x(t)'), axis([-N,N,-2,2]), xlabel('Index k') N=12时,程序运行结果:

图2-1 程序运行结果

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

三、实验内容和要求

实验前,必须首先阅读本实验原理,读懂所给出的全部范例程序。实验开始时,先在计算机上运行这些范例程序,观察所得到的信号的波形图。并结合范例程序应该完成的工作,进一步分析程序中各个语句的作用,从而真正理解这些程序。

实验前,一定要针对下面的实验项目做好相应的实验准备工作,包括事先编写好相应的实验程序等事项。

练习1、周期信号的傅里叶级数

给定如下两个周期信号:

x1(t)1t?2?112

(1)、手工计算x1(t)傅里叶级数的系数:

信号x1(t) 在其主周期内的数学表达式为:

计算x1(t) 的傅里叶级数的系数的计算过程如下:

16

仅供参考ak?1T1T1/2?x1(t)e?jk?0tdt x1(t)=(t+1)*(u(t+1)-u(t))+(1-t)*(u(t)-u(t-1))

?T1/2计算小程序: k = -10:10;

ak = ak的表达式 % The expression of ak

通过计算得到的x1(t)的傅里叶级数的系数的数学表达式是:

(2)、用MATLAB计算的傅里叶级数的系数ak从-10到10共21个系数。仿照程序Program2_1,编写程序以计算x1(t)的傅里叶级数的系数。程序如下:

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

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

(3)、通过执行程序所得到的x1(t)的傅里叶级数的ak从-10到10共21个系数 与你手工计算的ak相比较,是否相同,如有不同,是何原因造成的?

答:

练习2、反复执行程序Program2_2,每次执行该程序时,输入不同的N值,并观察所合成的

周期方波信号。分析吉伯斯现象的特点,观察合成的信号波形中,是否会产生Gibbs现象?为什么?;

答:

四、实验报告要求

1、按要求完整书写你所编写的全部MATLAB程序

2、详细记录实验过程中的有关信号波形图(存于自带的U盘中),图形要有明确的标题。全部的MATLAB图形应该用打印机打印,然后贴在本实验报告中的相应位置,禁止复印件。

3、实事求是地回答相关问题,严禁抄袭。

本实验完成时间: 年 月 日

17


信号与系统实验教程(学生版)(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:托福口语难点如何逐个击破[有妙招]

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: