数实际上是完成两个多项式的乘法运算。例如,两个多项式p1和p2分别为:
3232p1?s?2s?3s?4 和 p2?4s?3s?2s?1
这两个多项式在MATLAB中是用它们的系数构成一个行向量来表示的,如果用x来表示多项式p1,h表示多项式p2,则x和h分别为 x = [1 2 3 4] h = [4 3 2 1] 在MATLAB命令窗口依次键入
>> x = [1 2 3 4];
>> h = [4 3 2 1]; >> y=conv(x,h)
在屏幕上得到显示结果:
y = 4 11 20 30 20 11 4 这表明,多项式p1和p2的乘积为:
p3?4s?11s?20s?30s?20s?11s?4
65432 正如前所述,用MATLAB处理连续时间信号时,独立时间变量t的变化步长应该是很小的,假定用符号dt表示时间变化步长,那么,用函数conv()作两个信号的卷积积分时,应该在这个函数之前乘以时间步长方能得到正确的结果。也就是说,正确的语句形式应为:y = dt*conv(x,h)。
对于定义在不同时间段的两个时限信号x(t),t0 ≤ t ≤ t1,和h(t),t2 ≤ t ≤ t3。 如果用y(t)来表示它们的卷积结果,则y(t)的持续时间范围要比x(t)或h(t)要长,其时间范围为t0+t2 ≤ t ≤ t1+t3。这个特点很重要,利用这个特点,在处理信号在时间上的位置时,可以很容易地将信号的函数值与时间轴的位置和长度关系保持一致性。
根据给定的两个连续时间信号x(t) = t[u(t)-u(t-1)]和h(t) = u(t)-u(t-1),编写程序,完成这两个信号的卷积运算,并绘制它们的波形图。范例程序如下:
% Program
t0 = -2; t1 = 4; dt = 0.01; t = t0:dt:t1; x = u(t)-u(t-1); h = t.*(u(t)-u(t-1));
y = dt*conv(x,h); % Compute the convolution of x(t) and h(t) subplot(221)
plot(t,x), grid on, title('Signal x(t)'), axis([t0,t1,-0.2,1.2]) subplot(222)
plot(t,h), grid on, title('Signal h(t)'), axis([t0,t1,-0.2,1.2])
subplot(212)
t = 2*t0:dt:2*t1; % Again specify the time range to be suitable to the % convolution of x and h.
plot(t,y), grid on, title('The convolution of x(t) and h(t)'), axis([2*t0,2*t1,-0.1,0.6]), xlabel('Time t sec') 程序运行结果
8
图1-7 程序运行结果图
在有些时候,做卷积和运算的两个序列中,可能有一个序列或者两个序列都非常长,甚至是无限长,MATLAB处理这样的序列时,总是把它看作是一个有限长序列,具体长度由编程者确定。实际上,在信号与系统分析中所遇到的无限长序列,通常都是满足绝对可和或绝对可积条件的信号。因此,对信号采取这种截短处理尽管存在误差,但是通过选择合理的信号长度,这种误差是能够减小到可以接受的程度的。若这样的一个无限长序列可以用一个数学表达式表示的话,那么,它的长度可以由编程者通过指定时间变量n的范围来确定。
例如,对于一个单边实指数序列x[n] = 0.5nu[n],通过指定n的范围为0 ≤n ≤ 100,则对应的x[n]的长度为101点,虽然指定更宽的n的范围,x[n]将与实际情况更相符合,但是,注意到,当n大于某一数时,x[n]之值已经非常接近于0了。对于序列x[n] = 0.5nu[n],当n = 7时,x[7] = 0.0078,这已经是非常小了。所以,对于这个单边实指数序列,指定更长的n的范围是没有必要的。当然,不同的无限长序列具有不同的特殊性,在指定n的范围时,只要能够反映序列的主要特征就可以了。
9、关于MATLAB工具在信号处理中应用的补充
在绘制信号的波形图时,有时我们需要将若干个图形绘制在图一个图形窗口中,这就需要使用MATLAB的图形分割函数subplot(),其用法是在绘图函数stem或plot之前,使用图形分割函数subplot(n1,n2,n3),其中的参数n1,n2和n3的含义是,该函数将把一个图形窗口分割成n1xn2个子图,即将绘制的图形将绘制在第n3个子图中。
常用的图形控制函数axis([xmin,xmax,ymin,ymax]):图型显示区域控制函数,其中xmin为横轴的显示起点,xmax为横轴的显示终点,ymin为纵轴的显示起点,ymax为纵轴的显示终点。 有时,为了使图形具有可读性,需要在所绘制的图形中,加上一些网格线来反映信号的幅度大小。MATLAB中的grid on/grid off可以实现在你的图形中加网格线。
grid on:在图形中加网格线。 grid off:取消图形中的网格线。
x = input(‘Type in signal x(t) in closed form:’)
9
三、实验内容及步骤
实验前,必须首先阅读本实验原理,读懂所给出的全部范例程序。实验开始时,先在计算机上运行这些范例程序,观察所得到的信号的波形图。并结合范例程序应该完成的工作,进一步分析程序中各个语句的作用,从而真正理解这些程序。
实验前,一定要针对下面的实验项目做好相应的实验准备工作,包括事先编写好相应的实验程序等事项。
练习1:结合编写的阶跃函数编写一门函数(门宽为4幅度为1)写出程序并会出门函数信号的
波形;
练习2:结合实验原理的信号的基本运算的程序,编写程序绘制m=sin(t);g=sin(2t-pi/2);x[n]=[1
2 5 6 3 ];x[(1/2)n-1];的四个信号的波形,并分析图形的变换过程。
练习3:根据周期函数的定义以及实验原理中延拓的方法实现脉冲函数(脉冲宽度1周期2
幅度1)并绘制其图形;
练习4:利用MATLAB内部所带的卷积工具对两个门函数进行卷积,分别绘制出两个门函
数和卷积后的波形,并分析门函数卷积的规律,
(一个门函数门宽为1幅度1另一个门函数门宽为2幅度为1,进行两者卷积)
四、实验报告要求
1、按要求完整书写你所编写的全部MATLAB程序
2、详细记录实验过程中的有关信号波形图(存于自带的U盘中),图形要有明确的标题。全部的MATLAB图形应该用打印机打印,然后贴在本实验报告中的相应位置,禁止复印件。
3、实事求是地回答相关问题,严禁抄袭。
10
实验二 周期信号的傅里叶级数及Gibbs现象
一、实验目的
1、掌握连续时间周期信号的傅里叶级数的物理意义和分析方法;
2、观察截短傅里叶级数而产生的“Gibbs现象”,了解其特点以及产生的原因; 3、掌握连续周期时间信号傅里叶变换的分析方法及其物理意义;
二、实验原理及方法
1、连续时间周期信号的傅里叶级数CTFS分析
任何一个周期为T1的正弦周期信号,只要满足狄利克利条件,就可以展开成傅里叶级数。 其中三角傅里叶级数为:
?x(t)?a0??[ak?1?kcos(k?0t)?bksin(k?0t)] 2.1
或: x(t)?a0?2?T1?ck?1kcosk(?0t??k) 2.2
其中?0?,称为信号的基本频率(Fundamental frequency),a0,ak,和bk分别是信号
x(t)的直流分量、余弦分量幅度和正弦分量幅度,ck、?k为合并同频率项之后各正弦谐波分
量的幅度和初相位,它们都是频率k?0的函数,绘制出它们与k?0之间的图像,称为信号的频谱图(简称“频谱”),ck-k?0图像为幅度谱,?k-k?0图像为相位谱。
三角形式傅里叶级数表明,如果一个周期信号x(t),满足狄里克利条件,那么,它就可以被看作是由很多不同频率的互为谐波关系(harmonically related)的正弦信号所组成,其中每一个不同频率的正弦信号称为正弦谐波分量 (Sinusoid component),其幅度(amplitude)为ck。也可以反过来理解三角傅里叶级数:用无限多个正弦谐波分量可以合成一个任意的非正弦周期信号。
指数形式的傅里叶级数为:
11
?x(t)??ak???kejk?0t 2.3
其中,ak为指数形式的傅里叶级数的系数,按如下公式计算: ak?1T1T1/2?x(t)e?jk?0tdt 2.4
?T1/2指数形式的傅里叶级数告诉我们,如果一个周期信号x(t),满足狄里克利条件,那么,它就可以被看作是由很多不同频率的互为谐波关系(harmonically related)的周期复指数信号所组成,其中每一个不同频率的周期复指数信号称为基本频率分量,其复幅度(complex amplitude)为ak。这里“复幅度(complex amplitude)”指的是ak通常是复数。
上面的傅里叶级数的合成式说明,我们可以用无穷多个不同频率的周期复指数信号来合成任意一个周期信号。然而,用计算机(或任何其它设备)合成一个周期信号,显然不可能做到用无限多个谐波来合成,只能取这些有限个谐波分量来近似合成。
假设谐波项数为N,则上面的和成式为:
Nx(t)??ak??Nkejk?0t 2.5
显然,N越大,所选项数越多,有限项级数合成的结果越逼近原信号x(t)。本实验可以比较直观地了解傅里叶级数的物理意义,并观察到级数中各频率分量对波形的影响包括“Gibbs”现象:即信号在不连续点附近存在一个幅度大约为9%的过冲,且所选谐波次数越多,过冲点越向不连续点靠近。这一现象在观察周期矩形波信号和周期锯齿波信号时可以看得很清楚。 例题1、给定一个周期为T1 = 2s的连续时间周期方波信号,如图所示,其一个周期内的数学表达式为:
?1, x1(t)???0,0?t?11?t?2
-2 -1 1 x(t) 0 1 2 t
解:首先,我们根据前面所给出的公式,计算该信号的傅里叶级数的系数。 ak?1T1T1/2图2.1 周期方波信号
11?jk?0t?x?T1/21(t)e?jk?0tdt?e?20k2dt?1?j2k?01?e0?jk?0td(?jk?0t)?e?jk?0t10?j2k?0?e?jk?0?1?j2k?0?e?jk2?0e?jk2?0?ej?0?j2k?0ksin(?0)?jk?02?e2 k?0sin(k?2)因为:?0 = 2π/T1 = π,代入上式得到:ak?(?j)
kk?
12