信号与系统实验.docx

上传人:b****2 文档编号:2714109 上传时间:2023-05-04 格式:DOCX 页数:33 大小:278.27KB
下载 相关 举报
信号与系统实验.docx_第1页
第1页 / 共33页
信号与系统实验.docx_第2页
第2页 / 共33页
信号与系统实验.docx_第3页
第3页 / 共33页
信号与系统实验.docx_第4页
第4页 / 共33页
信号与系统实验.docx_第5页
第5页 / 共33页
信号与系统实验.docx_第6页
第6页 / 共33页
信号与系统实验.docx_第7页
第7页 / 共33页
信号与系统实验.docx_第8页
第8页 / 共33页
信号与系统实验.docx_第9页
第9页 / 共33页
信号与系统实验.docx_第10页
第10页 / 共33页
信号与系统实验.docx_第11页
第11页 / 共33页
信号与系统实验.docx_第12页
第12页 / 共33页
信号与系统实验.docx_第13页
第13页 / 共33页
信号与系统实验.docx_第14页
第14页 / 共33页
信号与系统实验.docx_第15页
第15页 / 共33页
信号与系统实验.docx_第16页
第16页 / 共33页
信号与系统实验.docx_第17页
第17页 / 共33页
信号与系统实验.docx_第18页
第18页 / 共33页
信号与系统实验.docx_第19页
第19页 / 共33页
信号与系统实验.docx_第20页
第20页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

信号与系统实验.docx

《信号与系统实验.docx》由会员分享,可在线阅读,更多相关《信号与系统实验.docx(33页珍藏版)》请在冰点文库上搜索。

信号与系统实验.docx

信号与系统实验

实验一  常见信号的MATLAB表示

一、实验目的

1.熟悉常见信号的意义、特性及波形

2.学会使用MATLAB表示信号的方法

3.学会使用MATLAB绘制信号波形

二、实验原理

信号一般是随时间而变化的某些物理量。

按照自变量的取值是否连续,信号分为连续时间信号和离散时间信号,一般用

来表示。

若对信号进行时域分析,就需要绘制其波形,如果信号比较复杂,则手工绘制波形就变得很困难,且难以精确。

MATLAB强大的图形处理功能及符号运算功能,为实现信号的可视化及其时域分析提供了强有力的工具。

根据MATLAB的数值计算功能和符号运算功能,在MATLAB中,信号有两种表示方法,一种是用向量来表示,另一种则是用符号运算的方法。

在采用适当的MATLAB语句表示出信号后,就可以利用MATLAB中的绘图命令绘制出直观的信号波形了。

下面分别介绍连续时间信号和离散时间信号的MATLAB表示及其波形绘制方法。

1、连续时间信号

所谓连续时间信号,是指其自变量的取值是连续的,并且除了若干不连续的点外,对于一切自变量的取值,信号都有确定的值与之对应。

从严格意义上讲,MATLAB并不能处理连续信号。

在MATLAB中,是用连续信号在等时间间隔点上的样值来近似表示的,当取样时间间隔足够小时,这些离散的样值就能较好地近似出连续信号。

在MATLAB中连续信号可用向量或符号运算功能来表示。

⑴.向量表示法

对于连续时间信号

,可以用两个行向量f和t来表示,其中向量t是用形如

的命令定义时间范围的向量,其中,

为信号起始时间,

为终止时间,p为时间间隔。

向量f为连续信号

在向量t所定义的时间点上的样值。

例如:

对于连续信号

,我们可以将它表示成行向量形式,同时用绘图命令plot()函数绘制其波形。

其程序如下:

t1=-10:

0.5:

10; %定义时间t的取值范围及取样间隔(p=0.5),t1是一个维数为41的行向量

f1=sin(t1)./t1;    %定义信号表达式,求出对应采样点上的样值,

                       %同时生成与向量t1维数相同的行向量f1

figure

(1);             %打开图形窗口1

plot(t1,f1);           %以t1为横坐标,f1为纵坐标绘制f1的波形

t2=-10:

0.1:

10;     %定义时间t的取值范围及取样间隔(p=0.1),t2是一个维数为201的行向量

f2=sin(t2)./t2;     %定义信号表达式,求出对应采样点上的样值,同时生成与向量t2维数相同的行向%量f2

figure

(2);           %打开图形窗口2

plot(t2,f2);            %以t2为横坐标,f2为纵坐标绘制f2的波形

运行结果如下:

图1-1

图1-2

说明:

●   plot是常用的绘制连续信号波形的函数。

●   严格说来,MATLAB不能表示连续信号,所以,在用plot()命令绘制波形时,要对自变量t进行取值,MATLAB会分别计算对应点上的函数值,然后将各个数据点通过折线连接起来绘制图形,从而形成连续的曲线。

因此,绘制的只是近似波形,而且,其精度取决于t的取样间隔。

t的取样间隔越小,即点与点之间的距离越小,则近似程度越好,曲线越光滑。

例如:

图1-1是在取样间隔为p=0.5时绘制的波形,而图1-2是在取样间隔p=0.1时绘制的波形,两相对照,可以看出图1-2要比图1-1光滑得多。

●   在上面的f=sin(t)./t语句中,必须用点除符号,以表示是两个函数对应点上的值相除。

   ⑵.符号运算表示法

如果一个信号或函数可以用符号表达式来表示,那么我们就可以用前面介绍的符号函数专用绘图命令ezplot()等函数来绘出信号的波形。

例如:

对于连续信号

,我们也可以用符号表达式来表示它,同时用ezplot()命令绘出其波形。

其MATLAB程序如下:

symst ;                 %符号变量说明

f=sin(t)/t;               %定义函数表达式

ezplot(f,[-10,10]);        %绘制波形,并且设置坐标轴显示范围

运行结果如下:

图1-3

⑶. 常见信号的MATLAB表示

对于普通的信号,应用以上介绍的两种方法即可完成计算函数值或绘制波形,但是对于一些比较特殊的信号,比如单位阶跃信号ε(t)、符号函数sgn(t)等,在MATLAB中这些信号都有专门的表示方法。

●        单位阶跃信号

单位阶跃信号的定义为:

      

单位阶跃信号是信号分析的基本信号之一,在信号与系统分析中有着非常重要的作用,通常,我们用它来表示信号的定义域,简化信号的时域表示形式。

例如:

可以用两个不同延时的单位阶跃信号来表示一个矩形门信号,即:

在MATLAB中,可通过多种方法得到单位阶跃信号,下面分别介绍之。

方法一:

调用Heaviside(t)函数

在MATLAB的SymbolicMathToolbox中,有专门用于表示单位阶跃信号的函数,即Heaviside(t)函数,用它即可方便地表示出单位阶跃信号以及延时的单位阶跃信号,并且可以方便地参加有关的各种运算过程。

例①.用MATLAB画出单位阶跃信号的波形,其程序如下:

ut=sym('Heaviside(t)');     %定义单位阶跃信号(要用符号函数定义法)

ezplot(ut,[-2,10])          %绘制单位阶跃信号在-2~10范围之间的波形

运行结果如下:

例②.用MATLAB画出信号

的波形

其程序如下:

f=sym('Heaviside(t+2)-3*Heaviside(t-5)');  %定义函数表达式

ezplot(f,[-4,20])                       %绘制函数在-2~10范围之间的波形

运行结果如下:

                                                                    

方法二:

数值计算法

在MATLAB中,有一个专门用于表示单位阶跃信号的函数,即stepfun()函数,它是用数值计算法表示的单位阶跃函数

其调用格式为:

stepfun(t,t0)    

其中,t是以向量形式表示的变量,t0表示信号发生突变的时刻,在t0以前,函数值小于零,t0以后函数值大于零。

有趣的是它同时还可以表示单位阶跃序列

,这只要将自变量以及取样间隔设定为整数即可达到。

有关单位阶跃序列

的表示方法,我们后面有专门论述,下面通过一个例子来说明如何调用stepfun()函数来表示单位阶跃函数。

例①:

用stepfun()函数表示单位阶跃信号,并绘出其波形

程序如下:

t=-1:

0.01:

4;               %定义时间样本向量

t0=0;                    %指定信号发生突变的时刻

ut=stepfun(t,t0);           %产生单位阶跃信号

plot(t,ut)                 %绘制波形

axis([-1,4,-0.5,1.5])        %设定坐标轴范围

运行结果如下:

例②:

绘出门函数

的波形

程序如下:

    t=-4:

0.01:

4;            %定义时间样本向量

t1=-2;                  %指定信号发生突变的时刻

u1=stepfun(t,t1);         %产生左移位的阶跃信号ε(t+2)

t2=2;                  %指定信号发生突变的时刻

u2=stepfun(t,t2);         %产生右移位的阶跃信号ε(t-2)

g=u1-u2;               %表示门函数

plot(t,g)                %绘制门函数的波形

axis([-4,4,-0.5,1.5])       %设定坐标轴范围-4

运行结果如下:

●        符号函数

符号函数的定义为:

     

在MATLAB中有专门用于表示符号函数的函数sign(),由于单位阶跃信号ε(t)和符号函数两者之间存在以下关系:

,因此,利用这个函数就可以很容易地生成单位阶跃信号。

下面举个例子来说明如何利用sign()函数生成单位阶跃信号,并同时绘制其波形。

举例:

利用sign()函数生成单位阶跃信号,并分别绘出两者的波形

 MATLAB程序如下:

   

t=-5:

0.01:

5;              %定义自变量取值范围及间隔,生成行向量t

f=sign(t);                %定义符号信号表达式,生成行向量f

figure

(1);                %打开图形窗口1

plot(t,f),                 %绘制符号函数的波形

axis([-5,5,-1.5,1.5])        %定义坐标轴显示范围

s=1/2+1/2*f;             %生成单位阶跃信号

figure

(2);                %打开图形窗口2

plot(t,s), 

axis([-5,5,-0.5,1.5])        %定义坐标轴显示范围

   运行结果如下:

   2、离散时间信号

   离散时间信号又叫离散时间序列,一般用

表示,其中变量k为整数,代表离散的采样时间点(采样次数)。

在MATLAB中,离散信号的表示方法与连续信号不同,它无法用符号运算法来表示,而只能采用数值计算法表示,由于MATLAB中元素的个数是有限的,因此,MATLAB无法表示无限序列;另外,在绘制离散信号时必须使用专门绘制离散数据的命令,即stem()函数,而不能用plot()函数。

下面通过一些常用离散信号来说明如何用MATLAB来实现离散信号的表示,以及可视化。

●        单位序列δ(k)

单位序列δ(k)的定义为

          

下面是用MATLAB绘制单位序列δ(k)的MATLAB程序:

k1=-5;k2=5;       %定义自变量的取值范围

k=k1:

k2;       %定义自变量的取值范围及取样间隔(默认为1),并生成行向量

n=length(k);      %取向量的维数

f=zeros(1,n);      %生成与向量k的维数相同的零矩阵,给函数赋值

f(1,6)=1;         %在k=0时刻,信号赋值为1

stem(k,f,'filled')    %绘制波形

axis([k1,k2,0,1.5])  %定义坐标轴显示范围

运行结果如下:

如果要绘制移位的单位序列δ(k+k0)的波形,只要将以上程序略加修改即可,例如要绘制信号δ(k+3)的图形,可将以上程序改为:

k1=-5;k2=5;       %定义自变量的取值范围

k0=3;            %定义平移量

k=k1:

k2;       %定义自变量的取值范围及取样间隔(默认为1),并生成行向量

n=length(k);       %取向量的维数

f=zeros(1,n);       %生成与向量k的维数相同的零矩阵,给函数赋值

f(1,-k0-k1+1)=1;   %在k=k0时刻,信号赋值为1

stem(k,f,'filled')     %绘制波形

axis([k1,k2,0,1.5])   %定义坐标轴显示范围

●        单位阶跃序列ε(k)

单位阶跃序列ε(k)的定义为

     下面是绘制单位阶跃序列ε(k+k0)的MATLAB程序:

k1=-3;k2=10;           

k0=0;

k=k1:

-k0-1;              

kk=-k0:

k2;               

n=length(k);              %取k=k0点以前向量的维数

nn=length(kk);            %取k=k0点以后(含k=k0点)向量的维数

u=zeros(1,n);             %在k=k0以前,信号赋值为零

uu=ones(1,nn);            %在k=k0以后,信号赋值为一

stem(k,u,'filled')           %绘制k=k0以前信号的波形

holdon                  %保持图形窗口,以便绘制多个图形

stem(kk,uu,'filled')         %绘制k=k0以后(含k=k0点)信号的波形

holdoff                  %图形窗口解冻

axis([k1,k2,0,1.5])         %设置坐标轴显示范围

运行结果如下:

注意:

以上介绍了几个常用的绘图命令:

plot,ezplot,stairs,stem,其中,绘制连续信号得到光滑的曲线时用plot命令;显示连续信号中的不连续点时用stairs命令较好;绘制离散信号波形用stem命令;当绘制用MATLAB符号表达式表达的信号时要用ezplot命令。

三、  实验内容

1、 分别用MATLAB的向量表示法和符号运算功能,表示并绘出下列连续时间信号的波形:

       ⑴

       ⑵ 

       ⑶ 

       ⑷ 

2、 分别用MATLAB表示并绘出下列离散时间信号的波形:

       ⑴ 

       ⑵

       ⑶ 

       ⑷ 

 

3、 已知信号f(t)的波形如下图所示,试用MATLAB绘出满足下列要求的信号波形。

  

   (其中a的值分别为a=0.5和a=2)

四、  预习要求

1、 熟悉常见信号的意义、特性及用MATLAB软件表示的方法

2、 熟悉用MATLAB软件绘制信号波形的方法

3、编写MATLAB程序

五、实验报告要求

1、 简述实验目的及实验原理

2、 写出程序清单

3、 记录信号波形

4、收获与建议

实验二  连续时间信号的卷积积分

一、实验目的

1. 熟悉卷积积分的定义和性质

2. 了解卷积积分在系统分析中的应用

3. 熟悉用MATLAB实现卷积的方法

二、实验原理

信号的卷积是数学上的一种积分运算,两个信号的卷积定义为:

信号的卷积运算在系统分析中主要用于求解系统的零状态响应。

一般情况,卷积积分的运算比较困难,但在MATLAB中则变得十分简单,MATLAB中是利用conv函数来实现卷积的。

功能:

实现二个函数

的卷积。

格式:

g=conv(f1,f2)

说明:

f1=f1(t),f2=f2(t)    表示二个函数,g=g(t)表示两个函数的卷积结果。

例题:

已知两信号

,求卷积

MATLAB程序如下:

t1=1:

0.01:

2;

f1=ones(size(t1));              %高度为一的门函数,时间从t=1到t=2

t2=2:

0.01:

3;

f2=ones(size(t2));              %高度为一的门函数,时间从t=2到t=3

g=conv(f1,f2);                 %对f1和f2进行卷积

t3=3:

0.01:

5;

subplot(311);

plot(t1,f1);

subplot(312)

plot(t2,f2);

subplot(313)

plot(t3,g)

2.2实现卷积

,其中:

m21.m

p=0.01;%取样时间间隔

nf=0:

p:

1;%f(t)对应的时间向量

f=2*((nf>=0)-(nf>=1));%序列f(n)的值

nh=0:

p:

2;%h(t)对应的时间向量

h=(nh>=0)-(nh>=2);%序列h(n)的值

[y,k]=sconv(f,h,nf,nh,p);%计算y(t)=f(t)*h(t)

subplot(3,1,1),stairs(nf,f);%绘制f(t)的波形

title('f(t)');axis([0302.1]);

subplot(3,1,2),stairs(nh,h);%绘制h(t)的波形

title('h(t)');axis([0301.1]);

subplot(3,1,3),plot(k,y);%绘制y(t)=f(t)*h(t)的波形

title('y(t)=f(t)*h(t)');axis([0302.1]);

子程序sconv.m

%此函数用于计算连续信号的卷积y(t)=f(t)*h(t)

function[y,k]=sconv(f,h,nf,nh,p)

%y:

卷积积分y(t)对应的非零样值向量

%k:

y(t)对应的时间向量

%f:

f(t)对应的非零样值向量

%nf:

f(t)对应的时间向量

%h:

h(t)对应的非零样值向量

%nh:

h(t)对应的时间向量

%p:

取样时间间隔

y=conv(f,h);%计算序列f(n)与h(n)的卷积和y(n)

y=y*p;%y(n)变成y(t)

left=nf

(1)+nh

(1)%计算序列y(n)非零样值的起点位置

right=length(nf)+length(nh)-2%计算序列y(n)非零样值的终点位置

k=p*(left:

right);%确定卷积和y(n)非零样值的时间向量

2.3实现卷积

,其中:

m22.m

p=0.01;%取样时间间隔

nf=0:

p:

2;%f(t)对应的时间向量

f=2*((nf>=0)-(nf>=2));%序列f(n)的值

nh=0:

p:

4;%h(t)对应的时间向量

h=exp(-nh);%序列h(n)的值

[y,k]=sconv(f,h,nf,nh,p);%计算y(t)=f(t)*h(t)

subplot(3,1,1),stairs(nf,f);%绘制f(t)的波形

title('f(t)');axis([0602.1]);

subplot(3,1,2),plot(nh,h);%绘制h(t)的波形

title('h(t)');axis([0601.1]);

subplot(3,1,3),plot(k,y);%绘制y(t)=f(t)*h(t)的波形

title('y(t)=f(t)*h(t)');axis([0602.1]);

运行结果:

三、实验内容

1.已知两信号

,求卷积

,并与例题比较。

2.已知两信号

 ,求卷积

四、实验报告要求

1. 简述实验目的和原理。

4. 记录实验结果。

2. 理论上计算信号的卷积积分。

5.收获与建议

3.  写出程序清单。

实验三   连续时间信号的频域分析

一、 实验目的

1. 熟悉傅里叶变换的性质

2. 熟悉常见信号的傅里叶变换

3. 了解傅里叶变换的MATLAB实现方法

二、 实验原理

傅里叶变换是信号分析的最重要的内容之一。

从已知信号

求出相应的频谱函数

的数学表示为:

的傅里叶变换存在的充分条件是

在无限区间内绝对可积,即

满足下式:

但上式并非傅里叶变换存在的必要条件。

在引入广义函数概念之后,使一些不满足绝对可积条件的函数也能进行傅里叶变换。

   傅里叶反变换的定义为:

      在这一部分的学习中,大家都体会到了这种数学运算的麻烦。

在MATLAB语言中有专门对信号进行正反傅里叶变换的语句,使得傅里叶变换很容易在MATLAB中实现。

在MATLAB中实现傅里叶变换的方法有两种,一种是利用MATLAB中的SymbolicMathToolbox提供的专用函数直接求解函数的傅里叶变换和傅里叶反变换,另一种是傅里叶变换的数值计算实现法。

下面分别介绍这两种实现方法的原理。

1、直接调用专用函数法

①在MATLAB中实现傅里叶变换的函数为:

●        F=fourier(f)    对f(t)进行傅里叶变换,其结果为F(w)

②傅里叶反变换

●        f=ifourier(F)    对F(w)进行傅里叶反变换,其结果为f(x)

   由于MATLAB中函数类型非常丰富,要想了解函数的意义和用法,可以用mhelp命令。

如在命令窗口键入:

mhelpfourier回车,则会得到fourier的意义和用法。

 注意:

(1)在调用函数fourier()及ifourier()之前,要用syms命令对所有需要用到的变量(如t,u,v,w)等进行说明,即要将这些变量说明成符号变量。

对fourier()中的f及ifourier()中的F也要用符号定义符sym将其说明为符号表达式。

(2)采用fourier()及fourier()得到的返回函数,仍然为符号表达式。

在对其作图时要用ezplot()函数,而不能用plot()函数。

(3)fourier()及ifourier()函数的应用有很多局限性,如果在返回函数中含有δ(ω)等函数,则ezplot()函数也无法作出图来。

另外,在用fourier()函数对某些信号进行变换时,其返回函数如果包含一些不能直接表达的式子,则此时当然也就无法作图了。

这是fourier()函数的一个局限。

另一个局限是在很多场合,尽管原时间信号f(t)是连续的,但却不能表示成符号表达式,此时只能应用下面介绍的数值计算法来进行傅氏变换了,当然,大多数情况下,用数值计算法所求的频谱函数只是一种近似值。

例①:

求门函数

的傅里叶变换,并画出幅度频谱图

MATLAB程序如下:

symstw                              %定义两个符号变量t,w

Gt=sym('Heaviside(t+1)-Heaviside(t-1)');    %产生门宽为2的门函数

Fw=fourier(Gt,t,w);                     %对门函数作傅氏变换求F(jw)

FFw=maple('convert',Fw,'piecewise'); %数据类型转换,调用函数convert,将Fw转换为‘piecewise’

FFP=abs(FFw);                        %求振幅频谱|F(jw)|

ezplot(FFP,[-10*pi10*pi]);grid;           %绘制函数图形,并加网格

axis([-10*pi10*pi02.2])                %限定坐标轴范围

运行结果:

例②:

求函数

的傅里叶反变换f(t)

   MATLAB程序如下:

symstw      

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2