实现如下:
y=subs(f,t,*t);ezplot(y)
〔4〕.倒相
连续信号的倒相是指将信号f(t)以横轴为对称轴对折得到-f(t)。
实现如下:
y=-f;ezplot(y)
对于以上的命令,可在画图命令之后参加坐标轴的调整的命令(即参加axis()命令),以使画出的图形更明晰、直观。
2、离散时间序列的时域变换
与连续信号不同的是,在MATLAB中,离散序列的时域变换不能用符号运算来实现,而必须用向量表示的方法,即在MATLAB中离散序列的变换需表示成两个向量的变换。
1〕.离散序列反折
离散序列的反折,即是将表示离散序列的两向量以零时刻的取值为基准点,以纵轴为对称轴反折,向量的反折可用MATLABA中的fliplr函数来实现,详细实现如下:
function[f,k]=lsfz(f1,k1)
f=fliplr(f1);k=-fliplr(k1);%调用此函数实现向量f1和k1的反折
stem(k,f,’filled’)
axis([min(k)-1,max(k)+1,min(f)-0.5,max(f)+0.5])
2〕.离散序列的平移
离散序列的平移可看作是将离散序列的时间序号向量平移,而表示对应时间序号点的序列样值不变,当序列向左挪动k0个单位时,所以时间序号向量都减小k0个单位,反之那么增加k0个单位。
实现如下:
function[f,k]=lsyw(ff,kk,k0)
k=kk+k0;f=ff;
stem(k,f,’filled’)
axis([min(k)-1,max(k)+1,min(f)-0.5,max(f)+0.5])
3〕.离散序列的倒相
离散序列的倒相可看作是将表示序列样值的向量取反,而对应的时间序号向量不变,得到的离散时间序列。
实现如下:
function[f,k]=lsdx(ff,kk)
f=-ff;
k=kk;
stem(k,f,’filled’)
axis([min(k)-1,max(k)+1,min(f)-0.5,max(f)+0.5])
这些时域变换,我们可以把我们在第一节中描绘过的信号带入其中,来看看信号时域变换的结果如何。
除此以外,我们通过时域变换也可以锻炼我们描绘信号的才能,一些复杂信号,往往都是一些简单信号经过一系列的时域变换得到。
前面的内容,其实是给以下的学习做的准备,我们在理解如何描绘信号以后,接下来就只要把信号带入卷积运算中就可以了。
在MATLAB中,conv()函数可以帮助我们快速求出两个离散序列的卷积和。
conv函数的调用格式为:
f=conv(f1,f2)
其中f1为包含序列f1(k)的非零样值点的行向量,f2为包含序列f2(k)的非零样值点的行向量,向量f那么返回序列f(k)=f1(k)*f2(k)的所有非零样值点行向量。
在求信号卷积之前,我们先来看看在MATLAB中conv()这个程序是如何来实现的。
我们可以通过看它的流程图来理解,流程图如图3.5所示:
图3.5conv()函数流程图
由于conv是针对离散时间序列的函数,我们先从离散的信号入手[12]。
1、离散时间信号的卷积
我们试举一例来看conv的功能,序列f1(k)和f2(k)如下所示:
f1(k)=1,(0≤k≤2)f2(k)=k,(0≤k≤3)
那么调用conv()函数求上述两序列的卷积和的MATLAB命令为:
f1=ones(1,3);
f2=0:
3;
f=conv(f1,f2)
运行结果为:
f=013653
由这个例子可以看出,函数conv()不需要给定序列f1(k)和f2(k)非零样值点的时间序号,也不返回序列f(k)=f1(k)*f2(k)的非零样值点的时间序号。
因此,要正确地标识出函数conv()的计算结果向量f,我们还必须构造序列f1(k)、f2(k)及f(k)的对应序号向量。
我们可以看出f(k)的序号向量k是由序列f1(k)和f2(k)的非零样值点的起始序号及他们的时域宽度决定的。
在此,我们自己可以构造一个实用一点的函数dconv(),该函数实现的功能为:
可以在计算出卷积f(k)的同时,还可以绘出序列f1(k)、f2(k)及f(k)在时域内的波形图。
并返回f(k)的非零样值点的对应向量。
程序如下所示:
function[f,k]=dconv(f1,f2,k1,k2)
%thefunctionofcomputef=f1*f2
%f:
卷积序列f(k)对应的非零样值向量
%k:
序列f(k)的对因序号向量
%f1:
序列f1(k)非零样值向量
%f2:
序列f2(k)非零样值向量
%k1:
序列f1(k)的对应序号向量
%k2:
序列f2(k)的对应序号向量
f=conv(f1,f2)%计算序列f1与f2的卷积和f
k0=k1
(1)+k2
(1);%计算序列f非零样值的起点位置
k3=length(f1)+length(f2)-2;%计算卷积和f的非零样值的宽度
k=k0:
k0+k3%确定卷积和f非零样值的序号向量
subplot(2,2,1)
stem(k1,f1)%在子图1绘序列f1(k)时域波形图
title('f1(k)')
xlabel('k')
ylabel('f1(k)')
subplot(2,2,2)
stem(k2,f2)%在子图2绘序列f2(k)时波形图
title('f2(k)')
xlabel('k')
ylabel('f2(k)')
subplot(2,2,3)
stem(k,f);%在子图3绘序列f(k)的波形图
title('f1(k)与f2(k)的卷积和f(k)')
xlabel('k')
ylabel('f(k)')
对于下面两个离散序列,我们可以调用dconv()函数来求离散序列的卷积。
MATLAB命令如下:
f1=[12-1-3-24];
k1=1:
6;
f2=ones(1,5);
k2=-2:
2;%f1,f2两个信号的向量表示
[f,k]=dconv(f1,f2,k1,k2)%子函数调用
运行程序可以绘制出波形图如图3.6所示。
图3.6离散序列的卷积
需要注意的是,调用conv()函数计算序列卷积时,该函数将向量f1和f2以外的序列样值均视为零,因此,当序列f1(k)或f2(k)为无限长序列时调用conv()函数就可能出现误差。
假如碰到无限长序列时候,我们必须将其截断才能求带入到conv()函数中。
此时,函数将把截断区域外的区间视为零,故conv()计算出的卷积只有局部是真实的。
2、连续信号的卷积
在第一章中我们对连续信号的卷积(卷积积分)做了分析,卷积积分运算实际上可用信号的分段求和来实现。
用MATLAB实现连续信号f1(t)与f1(t)卷积的过程如下:
1.将连续信号f1(t)与f1(t)以时间间隔Δ进展取样,得到离散序列f1(kΔ)与f1(kΔ);
2.构造与f1(kΔ)和f1(kΔ)相对应的时间向量k1和k2(注意,此时时间序号向量k1和k2的元素不再是整数,而是取样时间间隔Δ的整数倍的时间间隔点);
3.调用conv()函数计算卷积积分f(t)的近似向量f(nΔ);
4.构造f(nΔ)对应的时间向量k。
根据以上步骤我们自己可以比拟容易写出求连续信号卷积的函数程序sconv(),该函数实现的功能为:
在计算连续信号的卷积的同时绘出信号及卷积结果的波形,程序如下:
function[f,k]=sconv(f1,f2,k1,k2,p)
%计算连续信号卷积积分f(t)=f1(t)*f2(t)
%f:
卷积积分f(t)对应的非零样值向量
%k:
f(t)的对应时间向量
%f1:
f1(t)的非零样值向量
%f2:
f2(t)的非零样值向量
%k1:
f1(t)的对应时间向量
%k2:
f2(t)的对应时间向量
%p:
取样时间间隔
f=conv(f1,f2);%计算需要序列f1与f2的卷积和f
f=f*p;%将f进展采样
k0=k1
(1)+k2
(1);%计算序列f非零样值的起点位置
k3=length(f1)+length(f2)-2;%计算卷积和f的非零样值的宽度
k=k0:
p:
k3*p;%确定卷积和f非零样值的时间向量
subplot(2,2,1)
plot(k1,f1)%在子图1绘f1(t)时域波形图
title('f1(t)')
xlabel('t')
ylabel('f1(t)')
subplot(2,2,2)
plot(k2,f2)%在子图2绘f2(t)时域波形图
title('f2(t)')
xlabel('t')
ylabel('f2(t)')
subplot(2,2,3)
plot(k,f)%画卷积f(t)的时域波形
title('f(t)=f1(t)*f2(t)')
xlabel('t')
ylabel('f(t)')
给定下面两个连续信号,我们调用sconv()函数来求两连续信号的卷积。
f1(t)=2[U(t)-U(t-4)]f2(t)=U(t)-U(t-2)
MATLAB命令如下:
p=0.01;
k1=0:
p:
4;f1=2*ones(1,length(k1))
k2=0:
p:
2;f2=ones(1,length(k2))%f1,f2两个信号的向量表示
[f,k]=sconv(f1,f2,k1,k2,p)%子函数调用
运行程序,绘制卷积结果波形如图3.7所示。
图3.7连续时间信号的卷积
为了能比拟纯熟的运用MATLAB计算卷积,我们可以将我们比拟熟悉的信号都带入到上面的程序中去,当然也可以自己描绘一些信号来求其卷积。
四、实验设备:
计算机MATLAB软件
五、实验的预习:
1、认真阅读教科书中有关卷积的这局部内容,理解其原理和计算方法。
2、理解MATLAB的相关知识,包括它的功能,简单的函数用法等等。
六、实验内容及详细步骤:
1.在教师提示和引导下用MATLAB来表示常见信号
翻开电脑,双击桌面上的matlab6.5的快捷方式,进入到MATLAB界面,然后进入编辑界面【file】-【new】,或者直接点击新建空白页按钮,可以看到出现一个命名为untitled的编辑窗口,这就是我们的程序输入窗口。
我们先做准备工作,敲入一些简单的信号并输出,理解一下它的功能。
常见连续信号的表示:
阶跃信号门信号正弦信号指数信号等等
常见离散序列的表示:
随机离散序列单位阶跃序列正弦序列离散时间指数序列
将描绘各个信号的函数键入以后,保存到MATLAB根目录下的work文件夹中,并按照各个信号的性质进展命名。
然后对各个函数运行一下,看是否和实际的函数一致。
编译程序【debug】-【run】,或者直接按F5就可以进展。
程序不大,编译很快就会完成,成功的编译会出现名为figure的窗口,可以看到信号的波形。
2.针对一些信号做一下时域变换
时域变换主要是在时域范围内对信号进展信号的平移、反折、倒相以及信号的尺度变换。
1)、移位
y=subs(f,t,t-t0);
ezplot(y)
2)、反折
y=subs(f,t,-t);
ezplot(y)
3)、尺度变换
y=subs(f,t,a*t)
ezplot(y)
4)、倒相
y=-f
ezplot(y)
给定一个信号,对此信号做以上这些时域变换操作,将写好的程序保存到根目录work文件夹中,然后对程序进展编译运行,编译成功后,观察图形窗口中显示的波形与原来信号的波形之间的关系。
对信号做时域的变换可以增加学生对MATLAB的认识,也可以稳固对信号的表示。
同时我们也可以用这些变换来表示一些复杂的信号。
3.利用MATLAB计算两个信号的卷积
在MATLAB中我们采用它自带的函数conv()来对信号进展卷积
1)、求离散序列的卷积
翻开一个空白编辑窗口,先将要卷积的两个信号表示出来,然后将两个信号带入到conv()函数中,键入画图命令stem()函数。
把写好的程序存入到MATLAB根目录下的work文件夹中,按F5进展编译运行。
观察输出序列并记录下来。
改变输入序列重做上面的实验,保存,编译,观察和记录输出序列。
同样观察波形在幅度和时域范围的变化。
需要注意的是,调用conv()函数计算序列卷积和时,该函数将向量f1和f2以外的序列样值均视为零,因此,当序列f1(k)或f2(k)为无限长序列时调用conv()函数就可能会产生误差。
所以我们必须对诬无限长序列进展截断到(1~n),再调用conv()函数。
而conv()函数会将0~n以外均视为零,conv()计算出的卷积和样值点只有局部是真是的。
这里为了方便求解,把求卷积和过程和绘图命令写在同一个函数dconv中,在计算离散卷积时只要调用函数就可以了。
2)、求连续信号的卷积
翻开一个空白编辑窗口,先将要卷积的两个信号表示出来,然后将两个信号带入到conv()函数中,再敲入画图命令plot()函数。
把写好的程序存入MATLAB根目录下的work文件夹中,按F5进展编译运行,编译成功后可以观察波形窗口的输出波形,记录下来。
为了能更加深大家的印象,可以换不同的信号来做卷积运算。
只需要把信号表示局部做更改就可以了。
做上面一样的操作,观察记录波形。
同样,我们可以把计算卷积和画图的操作写成一个函数sconv,而使用时只需表示信号,再调用此函数就可以了。
波形要观察和记录的内容:
1、波形在幅度上的变化;
2、波形在时域范围内的变化;
4.验证信号卷积特性:
卷积的特性有:
交换律、结合律、分配律。
这里主要验证它的结合律和分配律。
1)、验证结合律
要验证结合律,我们要把其中两个信号先进展卷积,再与第三个信号相卷积。
将写好的程序保存,编译运行,将得到的信号保存下来。
将刚刚用过的三个信号调换位置,重复上面的操作。
将程序保存,编译运行。
可以看到所得信号与上面保存的信号是一样的。
说明卷积满足结合律。
2)、验证分配律
要验证分配律,我们先把两个信号相加,表示出来,然后与第三个信号相卷积。
写好程序,保存,编译运行。
再把这两个信号分别与第三个信号进展卷积,然后再把两个信号叠加。
保存程序,编译运行。
观察比拟前后两个程序的输出。
输出一致,说明卷积满足分配律。
建议:
将实验中的程序保存,而且把输出波形都以图片.jpg的格式保存下来,我们可以方便的比拟实验的结果(如在验证卷积特性时,等式左右两边的波形图应该是一样的),在实验报告中也会用到。
七、考虑题
1、某系统的冲激响应为
,系统的鼓励为
,试编程求出该系统的零状态响应,并绘出响应波形。
2、实验中没有用连续信号来验证卷积的性质,试仿照离散序列的程序写出用连续信号验证卷积结合律特性的程序,并用简单信号来证明程序正确性。
八、实验报告要求:
(1)简述实验目的记实验原理。
(2)按照实验步骤上的实验过程,把重要的程序和实验结果都记录下来。
(3)总结实验中的主要结论。
(4)答复考虑题。
(5)实验心得体会。