信号系统实验报告

 


电气信息工程学院

信号与线性系统

实验报告

                   

                

                     

指导老师               

2012  年  6  月    

                      目  录

实验1 常用连续信号的MATLAB 实现--------------------------------   2

实验2线性系统时域分析的MATLAB 实现-----------------------------4

实验3系统频域特性分析的MATLAB 实现------------------------

实验4连续系统复频域分析的MATLAB 实现-------------------------

实验1   常用连续信号的MATLAB 实现

·                    实验目的与要求

1、熟悉MATLAB 的运行环境及操作命令,认真完成基本数值算法的设计、编程和调试,分析运行结果,书写实验报告。

2、掌握连续与离散信号在MATLAB 环境下的可视化表示方法,能对常用信号进行时域特性分析及波形绘制,掌握信号的描述方法。

·                    实验内容

·         运用MATLAB绘制正弦信号信号;

2、运用MATLAB绘制单边衰减指数信号信号;

3、运用MATLAB绘制矩形脉冲以t=1为对称中心的矩形脉冲信号;

4、运用MATLAB绘制单位阶跃信号;

5、运用MATLAB绘制单位冲激信号;

·                    实验步骤

(一)实验原理

正弦信号调用形式为

A*;

指数信号在MATLAB中可用exp函数表示,其调用形式为

     矩形脉冲信号的调用形式为:

= rectpuls(t,width)

     该函数产生一个幅度值为1,宽度width t=0 为对称矩形波。width默认值为1

(二)实验程序

1、正弦信号信号

A=1;w=3*pi;

phi=pi/2;

t=0:0.001:8;

ft=A*sin(w*t+phi);

plot(t,ft);

title('正弦信号');grid on;

    2、单边衰减指数信号 信号

A=5;a=-0.2;

t=0:0.001:10;

ft=A*exp(a*t);

plot(t,ft);

title(‘单边衰减指数’);

grid on;

3、矩形脉冲以t=1为对称中心的矩形脉冲信号;

t=0:0.001:2;

ft=rectpuls(t-1,1);

  plot(t,ft);

  axis([0,4,0,1.1]);

  title('矩形脉冲信号');

grid on;

4、单位阶跃信号

t=0:0.001:4;

         ft=(t>2.0);

         plot(t,ft);

         axis([0,4,-0.1,1.2]);

         title('单位阶跃信号');

grid on;

   5、单位冲激信号

clear;

t0=0;dt=0.1;t1=-0.9;t2=-0.9;

         t=-1:0.1:5;

n=length(t);

         x=zeros(1,n);

         x(1,(t0-t1)/dt+1)=1/dt;

         stairs(t,x);%阶梯图 

axis([t1,t2,0,1/dt]);

         xlabel('时间(t)');ylabel('幅值(f)');title('单位冲激信号');

·                    实验仿真结果

仿真信号波形如下:

正弦信号

单边衰减指数信号

矩形脉冲信号

单位阶跃信号

单位冲激信号

实验2  线性系统时域分析的MATLAB 实现

一、实验目的与要求

1、熟悉MATLAB 的运行环境及操作命令,认真完成基本数值算法的设计、编程和调试,分析运行结果,书写实验报告。

2、掌握线性系统时域特性分析的仿真实现,重点掌握连续系统冲激响应和零状态响应的仿真实现方法,进一步加强对冲激响应物理含义和初始状态的理解。

·                    实验内容

·         运用MATLAB绘制连续系统:

的冲激响应;

·         运用MATLAB绘制连续系统:

的阶跃响应;

·         运用MATLAB绘制连续系统:

的零状态响应波形;

·         运用MATLAB绘制连续系统:

的全响应波形,已知输入信号

·                    实验步骤

·                      实验原理

1)连续系统冲激响应

系统冲激响应在MATLAB中的调用形式为:

y=impulse(sys,t)

式中:sys表示LTI系统模型,用来表示微分方程、差分方程、状态方程。

利用函数tf获得微分方程的LTI系统模型,其调用形式为:

sys=tf(b,a)

式中:b和a分别为微分方程的右端和左端的各项系数向量

2)连续系统阶跃响应

当系统初始状态全部为0时,仅由单位阶跃信号输入系统所产生的输出所产生的响应,可利用函数step求阶跃响应,其调用形式为:

y=step(sys,t)

3)连续系统的一般零状态响应

在MATLAB中,可以利用函数lsim来求解,其调用形式为:

y=lsim(sys,x,t)

式中:t表示计算系统响应的抽样点向量;x是系统输入信号向量;sys表示LTI系统模型,用来表示微分方程、差分方程、状态方程。

求解微分方程时,微分方程的LTI系统模型sys要借助tf函数获得,其调用形式为:

sys=tf(b,a)

式中:b和a分别为微分方程的右端和左端各项系数向量

4)连续系统全响应

用MATLAB中的lsim可以计算全响应,其调用形式为:

lsim(sys,f,t,z)

式中:f为系统的输入;z为系统的初始状态。

·                      实验程序

1、连续系统:

的冲激响应;

clear all;

b=[3 4 5];a=[2 3 2 9];

sys=tf(b,a);

t=0:0.2:8;

y=impulse(sys,t);

plot(t,y);

xlabel('时间(t)');ylabel('y(t)');title('单位冲击响应');

2、连续系统:

的阶跃响应;

b=[4 6 7];a=[2 5 7 8];

sys=tf(b,a);

t=0:0.1:10;

y=step(sys,t);

plot(t,y);

xlabel('时间(t)');ylabel('y(t)');title('单位阶跃响应');

3、LTI连续系统微分方程:

的零状态响应波形;

clear all;

b=[2 2 5];a=[2 4 0 5];

sys=tf(b,a);

t=0:0.1:10;

x=sin(t);

y=lsim(sys,x,t);

plot(t,y);

xlabel('时间(t)');ylabel('y(t)');title('零状态响应');

        4、系统:

的全响应波形,已知输入信号

clear all;

b=[3 6];a=[2 4 2];

t=0:0.1:10;

[A B C D]=tf2ss(b,a);

sys=ss(A,B,C,D);

f=cos(t);z=[-1 0];

y=lsim(sys,f,t,z);

plot(t,y);

xlabel('时间(t)');ylabel('y(t)');title('全响应');

·                    实验仿真结果

连续系统的冲激响应

连续系统的阶跃响应

连续系统的零状态响应

连续系统的全响应

实验3  系统频域特性分析的MATLAB 实现

一、实验目的与要求

1、熟悉MATLAB 的运行环境及操作命令,认真完成基本数值算法的设计、编程和调试,分析运行结果,书写实验报告。

2、掌握信号与系统频域特性分析的仿真实现,重点掌握连续系统频率特性分析的仿真实现方法。能绘制出给定LTI系统频率响应的幅值和相位特性曲线。

·                    实验内容

某连续系统的频率响应为:

利用MATLAB绘出该系统的幅频域响应|H(j)|和相频响应

·                    实验步骤

·         实验原理

MATLAB信号处理工具箱提供的freqs函数可计算系统的频率响应,其一般调用形式为:

H=freqs(b,a,w)

式中:b和a分别为分子多项式和分母多项式的系数向量;w为需计算的的频率采样点向量

·         实验程序

某连续系统的频率响应为:

利用MATLAB绘出该系统的幅频域响应|H(j)|和相频响应

w=linspace(0,5,200);

b=[2];a=[2 5 7 3];

H=freqs(b,a,w);

subplot(2,1,1);plot(w,abs(H));

set(gca,'xtick',[0 1 2 3 4 5]);set(gca,'ytick',[0 0.4 0.707 1]);

title('幅值谱|H(\omega)|');

xlabel('\omega(rad/s)');ylabel('幅值');grid on;

subplot(2,1,2);plot(w,angle(H));

set(gca,'xtick',[0 1 2 3 4 5]);

xlabel('\omega(rad/s)');ylabel('相位');grid on;

四、实验仿真结果

         实验4    连续系统复频域分析的MATLAB 实现

一、实验目的与要求

1、熟悉MATLAB 的运行环境及操作命令,认真完成基本数值算法的设计、编程和调试,分析运行结果,书写实验报告。

2、掌握连续系统复频域分析的仿真实现,重点掌握连续系统的零极点图绘制及拉普拉斯反变换的仿真实现方法,深入了解复平面极点位置对系统稳定性的影响。

·                    实验内容

已知系统函数 ,利用MATLAB求解系统的零极点分布,并判断系统稳定性

·                    实验步骤

1)实验原理

MATLAB信号处理工具箱提供zplane函数可以直接求解的零极点分布,其调用形式为:

zplane(b,a)

式中:b和a分别为系统函数分子多项式和分母多项式的系数向量,该函数的作用是在s平面上画出单位圆及系统的零点和极点。

2)实验程序

已知系统函数 ,利用MATLAB求解系统的零极点分布,并判断系统稳定性

clear all;

b=[2,1];

a=[2,4,6,2];

zplane(b,a);

legend('零点','极点');

四、实验仿真结果

 

 

第二篇:信号与系统课程设计报告--循环卷积和离散卷积的计算机计算

信号与系统

课程设计报告

学院电气与电子工程学院

班级电气1010

学号  

姓名 

目录

设计概述

   1 设计题目………………………………………………3

2 设计目的………………………………………………3

3 具体步骤………………………………………………3

4 实现方法………………………………………………4

设计目标…………………………………………………4

设计内容

   1 原理学习………………………………………………4

     1.1循环卷积…………………………………………..5

     1.2离散卷积…………………………………………..5

2 程序流程图……………………………………………6

   3 c语言编程与计算

3.1 c语言程序………………………………………...7

3.2计算结果…………………………………………..8

   4 验证计算结果

4.1 验算循环卷积……………………………………9

4.2 验算离散卷积……………………………………9

体会与感想……………………………………………..10

参考文献………………………………………………..10

一 设计概述

设计题目: 循环卷积和离散卷积的计算机计算

设计目的:1、自学C语言以及巩固信号与系统离散卷积与循环卷积的内容;

          2、培养独立思考以及灵活应用所学知识的能力;

          3、培养和掌握正确的设计思想和认真负责的设计态度;

          4、自行检验与调试出精确、简便、实用、可靠的设计方法。

具体步骤:①仔细分析设计题目、目的及内容;

          ②分析离散卷积与循环卷积的特点与异同;

          ③分析计算步骤并画出流程图;

          ④用C语言进行编程并用VC6.0进行演算;

          ⑤自行计算进行验算;

⑥分析结果并分享体会

运用软件:office word2003  VC6.0

实现方法: 通过学习课本及参阅相关书籍以及网络,从理论上分析离散卷积和循环卷积的特点;学习用Word设计程序流程图,C语言编程进行计算,并验证计算结果。

 

二 设计目标

设有两离散序列,则两序列的循环卷积和离散卷积分别为:

画出计算此两卷积的程序框图,并用C语言编写计算程序,计算出结果。

学生用C语言编程,分析计算结果。

三 设计内容

离散卷积和循环卷积的计算机计算

原理学习

卷积关系最重要的一种情况,就是在信号与线性系统或数字信号处理中的卷积定理。利用该定理,可以将时间域或空间域中的卷积运算等价为频率域的相乘运算,从而利用FFT等快速算法,实现有效的计算,节省运算代价。

1.1  循环卷积

循环卷积比起线性卷积,在运算速度上有很大的优越性,它可以采用快速傅里叶变换(FFT)技术,若能利用循环卷积求线性卷积,会带来很大的方便。一般情况下,n≧N时x[n]*v[n]并不等于零,x[n]*v[n]的N点DFT和这些值不一致。因此,有必要定义一种卷积运算,使得n=0,1,…,N-1之外的卷积信号x[n]*v[n]等于零,这就引出循环卷积的概念。离散卷积和循环卷积之间的唯一区别是:用折叠位移(模N)信号代替了离散卷积式中的折叠位移信号。

对于循环卷积来说,不仅要知道这两组数而且要确定N值。

1.2离散卷积

信号与线性系统中,定义x[n],v[n],其卷积为 计算离散卷积时,首先将x[n],v[n]中的离散时间序号n改为i,得到信号x[i],v[i],下一步确定v[n-i]和乘积x[i]v[n-i]。信号v[n-i]是信号v[i]的反折和平移,通过对x[i]v[n-i]中的i求和即可计算出来,式中i取一定范围的的整数。

计算离散卷积时需要用户输入x[n]和v[m]的值,这样便可以得到所要求的离散卷积的值

3  c语言编程与计算

 3.1  c语言程序

#include<stdio.h>

#include<stdlib.h>

void discreat();

void circle(); 

void main()

{int i;

 printf("欢迎使用卷积计算程序\n");

 printf("请进行选择,输入1进行循环卷积计算,输入2进行离散卷积计算:");

scanf("%d",&i);

printf("\n");

while(i!=1&&i!=2)

{printf("输入错误,请重新选择:");

 scanf("%d",&i);

}

if(i=1)

circle();

else

discreat(),i--;

if(i=1)

discreat();

else

circle();

printf("感谢使用\n");

system("pause");

}

void circle()

{

       int i,j;

       i=j=0;

       int t;

       float a[100],b[100],c[200];

       printf("现在计算循环卷积y\n");

       printf("请输入N的值\n");

       scanf("%d",&t);

       printf("请输入x[n]\n");

       for(i=0;i<=t-1;i++)

              scanf("%f",&a[i]);

       printf("请输入v[m]\n");

       for(i=0;i<=t-1;i++)

              scanf("%f",&b[i]);

       for(j=0;j<=t-1;j++)c[j]=0;

           for(j=0;j<=t-1;j++)

              for(i=0;i<=t-1;i++)

                     if((j-i)>=0)

                            c[j]+=a[i]*b[j-i];

                     else if((j-i)<0)

                            c[j]+=a[i]*b[j-i+t];

       printf("循环卷积y[n]为\n");

       for(j=0;j<=t-1;j++)

              printf("y[%d]=%f\n",j,c[j]);

}

void discreat()

{int n,m,k,q;

       n=m=k=q=0;gg

       static float x[100],y[100],z[200];                     

       printf("计算离散卷积y\n");

       printf("请输入x[n]的长度\n");

       scanf("%d",&n);

       printf("请输入v[m]的长度\n");

       scanf("%d",&m);

       printf("请输入x[n]\n");

       for(k=0;k<=n-1;k++)

              scanf("%f",&x[k]);

       printf("请输入v[m]\n");

       for(k=0;k<=m-1;k++)

              scanf("%f",&y[k]);

       for(q=0;q<=m+n-2;q++)

              for(k=0;k<=n-1;k++)

                     if((q-k)>=0)

                            z[q]+=x[k]*y[q-k];

       printf("离散卷积y[n]为\n");

       for(q=0;q<=m+n-2;q++)

              printf("y[%d]=%f\n",q,z[q]);

       printf("其余值均为0\n");    

}

3.2计算结果

4 验证计算结果

 4.1 验算循环卷积

4.2 验算离散卷积

阵列方法:

1     2      3

3     2      1

3     2      1

      6      4

             9

3     8     14

  验算结果与编程计算结果一致。

四 体会与感想

本次课设花了不少心思,主要在细节问题上不能够做到一步到位,所以在检查过程中耗费了不少时间。同时对于C语言的学习,没有做到稳固。所以导致以前学的很多知识都已经忘记,不得不又拾起以前的课本。但至少这一次课设让我温习了以前的知识也懂得了知识需要时时刻刻去温习。免得以前的知识白学了,当然,在成功后还是蛮有成就感的。又是一个自己做的成果,很满足。

五 参考书目

1.Fundamentals of Signals and Systems -Using the Web and MATLAB

Edward W.Kamen Bonnie S.Heck著 科学出版社

2. 中文版office2003实用教程 徐贤军 著 清华大学出版社

3.《c程序设计(第三版)》 谭浩强 著 清华大学出版社

相关推荐