离散时间信号分析课设.docx

上传人:b****3 文档编号:3767526 上传时间:2022-11-25 格式:DOCX 页数:13 大小:262.46KB
下载 相关 举报
离散时间信号分析课设.docx_第1页
第1页 / 共13页
离散时间信号分析课设.docx_第2页
第2页 / 共13页
离散时间信号分析课设.docx_第3页
第3页 / 共13页
离散时间信号分析课设.docx_第4页
第4页 / 共13页
离散时间信号分析课设.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

离散时间信号分析课设.docx

《离散时间信号分析课设.docx》由会员分享,可在线阅读,更多相关《离散时间信号分析课设.docx(13页珍藏版)》请在冰豆网上搜索。

离散时间信号分析课设.docx

离散时间信号分析课设

 

摘要

离散时间信号是指信号在时间上是离散的,只在某些不连续的时刻给出信号的值,而其它时间则没有定义。

为了便于数字系统的接受、处理,需要对信号进行数字化处理,即出现了时间上离散,幅度上量化的信号。

在离散时间系统中,信号用序列表示。

有一些常见的典型序列,我们时刻都需要用到,同时需要掌握的还有序列的一些运算。

MATLAB在数值计算、符号运算、数据可视化、数字文件图形处理等方面有杰出优势,所以,我们需要了解常见序列的MATLAB实现,以及序列运算的MATLAB实现。

关键词:

离散时间信号,序列运算,编程实现

 

Abstract

Referstoadiscretetimesignalisdiscreteintime,andonlyinthemomentofsomediscretesignalvalueisgiven,andtheothertimeisnotdefined.Tofacilitatetheacceptanceofdigitalsystem,theprocessing,theneedfordigitalsignalprocessing,namelyadiscretetime,amplitudequantizationofthesignal.Indiscretetimesystem,thesignalisrepresentedbysequence.Therearesomecommontypicalsequence,weallneedtime,atthesametimealsoneedtoknowsomeoftheoperationsequence.Innumericalcalculation,MATLABsymbolicoperation,datavisualization,digitalfiles,graphics,etc,hasoutstandingadvantages,therefore,weneedtounderstandthecommonsequenceofMATLAB,andthesequenceofoperationofMATLAB.

Keywords:

discrete-timesignal,Sequenceofoperations,programmingrealization

 

1离散时间信号及MATLAB表示

1.1离散时间信号

在离散时间系统中,信号要用序列来表示,其特点是:

时间离散,幅值连续。

离散时间信号通常由对连续时间信号进行抽样获得。

离散时间信号表示方法有3种:

列表法、函数表示法、线图法。

1.2离散时间信号的MATLAB表示

一个序列有两个要素:

样值和位置。

在MATLAB中用样值向量和位置向量来表示一个序列。

要求两个向量长度相等。

例如:

,其MATLAB产生语句为:

n=0:

3;X=[5,6,7,8];

1.3常用的典型序列

(1)单位阶跃序列

单位阶跃序列定义如下:

在MATLAB中,可以用逻辑关系表达式产生,在

区间范围内,其产生方式为:

n=n1:

n2;x=((n-n0)>=0)

(2)矩形序列

矩形序列定义如下:

其中,N为矩形序列的长度。

它与单位阶跃序列的关系为

在MATLAB中,同样可以用逻辑关系表达式产生,其产生方式为:

x=(((n-n1)>=0)&((n-n2)<=0));其中n1,n2表示取值区间的范围,由这两个值可以确定该矩形序列的长度,公式为N=n2-n1+1。

(3)实指数序列

实指数序列定义为

,式中a为实数。

时,上式可表示为

例如

在MATLAB中可以用n=0:

10;x=0.8.^n;产生。

(4)复数指数序列

复数指数序列定义为

,式中

为数字域频率。

复指数序列换可以表示为:

例如,对于序列

,在MATLA中,可以用n=0:

10;alpha=(pi/8)*j;x=exp(alpha*n);来实现。

 

2程序设计

2.1序列的相加、相乘

给出两个序列

,x1=[0,1,2,3,4,3,2,1,0];n1=[-2:

6];x2=[2,2,0,0,0,-2,-2],n2=[2:

8]。

试求它们的和及乘积。

2.1.1原理分析

序列相加指两个不同序列,在同一时刻n,对幅度进行叠加。

序列相乘指在同一时刻n,对不同的两个序列做幅度乘法运算。

序列相加、相乘是对应序列值之间的相加、相乘。

MATLAB中可以用符号“+”、“.*”来实现序列的相加、相乘,但是要求序列的长度必须相等,否则需要通过补零来改变序列的长度。

2.1.2程序代码与结果

程序代码及部分注释如下:

x1=[0,1,2,3,4,3,2,1,0];

n1=[-2:

6];

x2=[2,2,0,0,0,-2,-2];

n2=[2:

8];

n=min(min(n1),min(n2)):

max(max(n1),max(n2));%确定新序列的长度

y1=zeros(1,length(n));%生成1行n列的矩阵

y2=y1;

y1(find((n>=min(n1))&(n<=max(n1))==1))=x1;%具有新长度的序列x1

y2(find((n>=min(n2))&(n<=max(n2))==1))=x2;

y3=y1+y2;%序列相加

y4=y1.*y2;%序列相乘

subplot(2,2,1),stem(n1,x1),axis([-6,10,0,5]),

title('x1序列'),xlabel('n1'),ylabel('x(n1)');

subplot(2,2,2),stem(n2,x2),axis([-6,10,-3,3]),

title('x2序列'),xlabel('n2'),ylabel('x(n2)');

subplot(2,2,3),stem(n,y3),axis([-6,10,-3,7]),

title('x1与x2的和'),xlabel('n'),ylabel('y3');

subplot(2,2,4),stem(n,y4),axis([-6,10,0,9]),

title('x1与x2的乘积'),xlabel('n'),ylabel('y4');

序列x1和x2的长度是不同的,首先确定运算之后的长度,min(n)与max(n)函数可获取向量n的最小值和最大值,通过程序,可得序列范围为-2到8,再将原序列x1和x2变为具有新序列长度的x1和x2,最后,在进行序列的相加、相乘。

程序运行结果如下图:

图2.1序列相加、相乘

 

2.2序列的合成和截取

编写产生矩形序列

的程序。

序列起点为

,矩形序列起点为

,长度为

(其中

由键盘输入),并用它截取一个复正弦序列

,最后画出波形。

2.2.1原理分析

首先,需要设计一个矩形序列,矩形序列与单位阶跃序列的关系为

在MATLAB中可以通过逻辑关系表达式产生,其产生方式为:

x=(((n-n1)>=0)&((n-n2)<=0));其中n1,n2表示取值区间的范围,由这两个值可以确定该矩形序列的长度,公式为N=n2-n1+1。

第二,设计一个复正弦序列,

对于序列

,在MATLAB中,可以用n=0:

10;alpha=(pi/8)*j;x=exp(alpha*n);来实现。

在本次设计中,将该复正弦序列的是不与虚部分开显示,便于观察。

第三,实现序列的截取,序列的合成与截取相当于序列的相加与相乘。

2.2.2程序代码与结果

矩形序列设计代码如下:

%m-file,juxing

n0=input('输入序列起点n0=');

n1=input('输入矩形序列起点n1=');

N=input('输入矩形序列长度N=');

n=n0:

10;

x=[((n-n1)>=0)&((n-N-n1+1)<=0)];

stem(n,x),axis([0,10,0,1]);

title('矩形序列');

juxing

输入序列起点n0=0

输入矩形序列起点n1=1

输入矩形序列长度N=8

根据设计要求,序列起点、矩形序列起点及长度要求键盘输入,所以利用input函数实现键盘输入,本段代码将主代码放倒M文件中,只需要进行调用即可获得所需的矩形序列。

矩形序列结果如下:

图2.2矩形序列

复正弦序列代码及结果如下:

n=[0:

20];

alpha=(pi/8)*j;

x=exp(alpha*n);

real_x=real(x);

image_x=imag(x);

subplot(2,1,1),stem(n,real_x),axis([0,20,-2,2]),xlabel('n'),

ylabel('real(x)'),title('实部');

subplot(2,1,2),stem(n,image_x),axis([0,20,-2,2]),xlabel('n'),

ylabel('imag(x)'),title('虚部');

图2.3复正弦序列

用矩形序列截取复正弦序列代码级结果如下:

%m-file,jie

n0=input('输入序列起点n0=');

n1=input('输入矩形序列起点n1=');

N=input('输入矩形序列长度N=');

n=0:

20;

x1=[((n-n1)>=0)&((n-N-n1+1)<=0)];

alpha=(pi/8)*j;

x2=exp(alpha*n);

y=x1.*x2;

real_y=real(y);

image_y=imag(y);

subplot(2,1,1),stem(n,real_y),axis([0,20,-2,2]),title('实部');

subplot(2,1,2),stem(n,image_y),axis([0,20,-2,2]),title('虚部');

jie

输入序列起点n0=0

输入矩形序列起点n1=1

输入矩形序列长度N=8

图2.4序列截取之后结果

由实验结果可知,矩形序列范围为0到8,所截取之后的结果也变为了0到8,序列的截取相当于序列相乘,在代码中,是通过相乘来实现截取的。

 

2.3序列的移位和周期延拓

已知

,利用MATLAB生成并图示

表示

以8周期的延拓)和

,其中

为一个整常数,

2.3.1设计原理

序列

的移位操作不影响x的值,只需要对向量进行加、减运算,就可以实现对序列的移位操作。

序列的周期延拓就是将某个区间上的序列拓展到整个区间上,在本次设计中,因为原序列长度为8,而又是以8为周期进行周期延拓,所以不会发生重叠现象。

2.3.2程序代码及结果

程序代码如下:

function[y,n]=sigshift(x,m,n0)

n=m+n0;

y=x;

n=0:

10;

N=8;

x1=[((n)>=0)&((n-N+1)<=0)];

x2=0.8.^n;

y=x1.*x2;

m=6;

[y1,n1]=sigshift(y,n,m);

subplot(1,2,1),stem(n,y),axis([0,10,0,1]),xlabel('n'),

ylabel('y'),title('x(n)');

subplot(1,2,2),stem(n1,y1),axis([0,15,0,1]),xlabel('n1'),

ylabel('y1'),title('x(n-m)m=6');

因为MATLAB中没有异味函数,所以需要先用M文件编写移位函数,只需要在主代码中直接调用移位函数即可实现移位。

设计结果如下:

图2.5原序列与移位后序列

序列的周期延拓就是将某个区间上的序列拓展到整个区间上,y=x(mod(n,m)+1)可以实现对序列以m为周期的周期延拓,加1是因为MATLAB向量下标从1开始。

原序列进行周期延拓代码及结果:

n=0:

25;

N1=8;

x1=[((n)>=0)&((n-N1+1)<=0)];

x2=0.8.^n;

y=x2.*x1;

y1=y(mod(n,8)+1);

N2=24;

x3=[((n)>=0)&((n-N2+1)<=0)];

y2=y1.*x3;

subplot(3,1,1),stem(n,y),axis([0,25,0,1]),xlabel('n'),

ylabel('y'),title('原序列');

subplot(3,1,2),stem(n,y1),axis([0,25,0,1]),xlabel('n'),

ylabel('y1'),title('周期延拓序列');

subplot(3,1,3),stem(n,y2),axis([0,25,0,1]),xlabel('n'),

ylabel('y2'),title('最终结果');

图2.6原序列与周期延拓序列

移位后序列进行周期延拓及结果:

n=0:

25;

N1=8;

x1=[((n)>=0)&((n-N1+1)<=0)];

x2=0.8.^n;

y=x1.*x2;

m=6;

[y1,n1]=sigshift(y,n,m);

y2=y1(mod(n-m,8)+1);

N2=24;

x2=[((n)>=0)&((n-N2+1)<=0)];

y3=y2.*x2;

subplot(3,1,1),stem(n1,y1),axis([0,25,0,1]),xlabel('n1'),

ylabel('y1'),title('移位后序列');

subplot(3,1,2),stem(n,y2),axis([0,25,0,1]),xlabel('n'),

ylabel('y2'),title('周期延拓序列');

subplot(3,1,3),stem(n,y3),axis([0,25,0,1]),xlabel('n'),

ylabel('y3'),title('最终结果');

图2.7移位后序列与其周期延拓序列

3.心得体会

经过这一次的信号分析与处理课程设计,我对离散时间信号的运算以及编程实现有了深入了解。

离散时间信号的运算包括序列相加,序列相乘,数乘运算,差分运算,累加运算,位移运算,反褶运算,重排运算,卷积和运算等,本次课程设计主要对其中的序列相加、相乘,序列合成与截取,序列移位以及周期延拓进行了原理分析与MATLAB实现。

当要进行序列的运算时,还需要了解一些常见的典型序列,例如单位采样序列,单位阶跃序列,矩形序列,实指数序列,复指数序列等相关序列。

通过本次课程设计,深入了解了相关离散时间信号运算的原理,同时,还学会了这些运算的MATLAB实现方法。

在课程设计的过程中,尤其是进行MATLAB实现时,有很多地方不明白,例如如何实现周期延拓,通过查找资料找到了几种方法,从而挑选了一种比较容易达到目标的方法来使用。

课程设计,让我们学会了思考问题,不单单是依靠课本知识,还需要联系实际,我们在课程设计的过程中,发现问题,并找出问题的原因,还需要自己动手将问题解决,这极大的调动了我们的积极性,扩展了我们的思维,对待出现的问题,我们学会了不逃避,而是努力将其解决,这对我们今后的学习生活有着重大影响。

这次课程设计,我收获很大,提高了我遇到问题解决问题的能力,加强了与同学就学习问题的交流讨论,加强了自己的动手能力,明白了团队合作的作用,同时也认识到了自己不足,最重要的是认识到了光有理论知识是远远不够的,理论需要结合实践才能发挥最大的作用。

这些问题的暴露让我知道了以后努力的方向,在加强理论学习的基础上,提高自己思考问题、解决问题的能力,提高自己动手实践的能力。

 

参考文献

[1]刘泉,阙大顺,郭志强.数字信号处理.北京:

电子工业出版社,2009.

[2]刘泉,江雪梅.信号与系统.北京:

高等教育出版社,2006.

[3]史林,赵树杰.数字信号处理.北京:

科学出版社,2007.

[4]陈佩青.数字信号处理教程.北京:

清华大学出版社,2007.

[5]王亚芳,董楠编.MATLAB仿真及电子信息应用.北京:

人民邮电出版社,2011.

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

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1