当n<0,x(n)=0时,上式可表示为x(n)=a^nu(n).例如x(n)=0.8^n,0≤n≤10在MATLAB中可以用n=0:
10;x=0.9.^n;产生。
例如:
n=[0:
10];
x=0.9.^n;%(运算符“.^”)
stem(n,x)
2设计要求
课程设计内容:
离散时间系统的输入输出描述的编程实现。
具体包括:
求系统的输出序列、验证系统的线性性质、求卷积。
设计内容如下:
1.给定因果稳定线性时不变系统的差分方程
,对下列输入序列
,求出系统的输出序列
。
(1)
,
(2)
,(3)
,(4)
,(5)
。
2设系统差分方程为
,要求用程序验证系统的线性性质。
3计算下列卷积,并图示各序列及其卷积结果。
3理论分析
3.1差分方程MATLAB实现
在《信号与系统》和《数字信号处理》课程中,我们知道描述线性移不变离散时间系统的数学模型是常系数差分方程,它与系统的结构流图之间可以互相推导。
迭代解法(也称递推解法)是求解差分方程的最简单也最适用的方法,也是实现数字滤波器的一种基本方法。
差分方程通式为:
,x(n)与y(n)分别为系统的激励和响应。
离散系统的响应可分为零输入响应分量和零状态响应分量,零输入分量仅由系统的初始状态 y(-1)、y(-2)、…、y(-N) 引起,外激励 x(n)=0 ;而零状态分量仅由外激励x(n)引起,初始状态 y(-1)、y(-2)、…、y(-N) 均为零。
初始条件是指计算差分方程所需的初始值 y(0)、y
(1)、…、y(N-1)。
如果已知 y(-1)、y(-2)、…、y(-N),欲求y(0)、y
(1)、…、y(N-1),可利用迭代法逐一导出。
这样我们可以由给定的差分方程以及已知的初始状态找到所需的初始值(包括零输入初始值、零状态初始值、全响应初始值),进而求出响应。
也可以利用系统单位冲激响应h(n)与输入信号x(n)的离散卷积求出。
MATLAB以函数filter(num , den , x),来计算在给定输入和差分方程系数时求差分方程的数值解。
num,den分别为系统方程的系数向量。
X是输入序列。
3.2系统的线性性质验证
线性系统是一个既具有分解特性,又具有零状态线性和零输入线性的系统,线性性质是线性系统所具有的本质特性,线性离散系统的数学模型是线性差分方程。
即满足叠加原理的系统称为线性系统。
线性性质实际上包含了可加性和齐次性两个性质。
设y1(n)和y2(n)分别是系统对输入x1(n)和x2(n)的响应,系统的激励x(n)与响应y(n)之间的关系可简记为y(n)=T[x(n)]即y1(n)=T[x1(n)]和y2(n) = T[x2(n)],若满足:
a1 y1(n) + a2 y2(n) = T[a1 x1(n) + a2 x2(n)] = a1 T[x1(n)] + a2 T[x2(n)]
则此系统称为线性系统。
验证系统的线性性质,即验证上式是否成立。
3.3直接卷积原理
1.离散时间序列f1(k)和f2(k)的卷积和定义:
2.在离散信号与系统分析中有两个与卷积和相关的重要结论:
(1)
即离散序列可分解为一系列幅度由f(k)决定的单位序列δ(k)及其平移序列之积。
(2)对线性时不变系统,设其输入序列为f(k),单位响应为h(k),其零状态响应为y(k),则有:
3.在Matlab中可以通过直接调用conv.m用来实现两个离散序列的线性卷积。
其调用格式是:
y=conv(x,h)
若x的长度为N,h的长度为M,则y的长度L=N+M-1。
4MATLAB程序设计与结果仿真
4.1题一
题目:
给定因果稳定线性时不变系统的差分方程
,对下列输入序列
,求出系统的输出序列
。
(1)
,
(2)
,(3)
,(4)
,(5)
。
4.1.1原理分析
MATLAB以函数filter(num,den,x),来计算在给定输入和差分方程系数时求差分方程的数值解。
num,den分别为系统方程的系数向量。
X是输入序列。
只需改变输入序列,便可以得到不同的输出。
由于题目中没有给定差分方程,设
该方程为:
2y[n]-1.7y[n-1]+1.1y[n-2]=2x[n],则num=[2];den=[2–1.71.1];
4.1.2程序代码与结果
第一小题代码如下:
n=[-20:
100];
num=[2];
den=[2-1.71.1];
x=impseq(-10,100,0);%x(n)为冲击函数
h=filter(num,den,x);%使用函数filter()求输出
stem(n,h)%绘制离散序列数据
xlabel('n');ylabel('y(n)');
title('响应y(n)电信1306胡容');
系统输出函数y(n)的图像如图4.1所示
4.1输出函数
第二小题代码如下:
n=[-20:
100];
num=[2];
den=[2-1.71.1];
x=impseq(-20,100,10);
h=filter(num,den,x);%使用函数filter()求输出
stem(n,h)
xlabel('n');ylabel('y(n)');
title('响应y(n)电信1306胡容');
系统输出函数y(n)的图像如图4.2所示。
图4.2系统输出响应
第三小题代码如下:
n=[-20:
100];
num=[2];
den=[2-1.71.1];
x=stepseq(-20,100,0);
h=filter(num,den,x);%使用函数filter()求输出
stem(n,h)
xlabel('n');ylabel('y(n)');
title('响应y(n)电信1306胡容');
系统输出函数y(n)的图像如图4.3所示。
图4.3系统输出响应图
第四小题代码如下:
n=[-20:
100];
num=[2];
den=[2-1.71.1];
x=stepseq(-20,100,0)-stepseq(-20,100,32);%两个阶跃序列之差
h=filter(num,den,x);%使用函数filter()求输出
stem(n,h)
xlabel('n');ylabel('y(n)');
title('响应y(n)电信1306胡容');
系统输出函数y(n)的图像如图4.4所示。
图4.4系统输出响应图
第五小题代码如下:
n=[-20:
100];
num=[2];
den=[2-1.71.1];
x0=stepseq(-20,100,0)-stepseq(-20,100,32);
x1=exp(pi*n*j/8);
x=x1.*x0;%对应项之间相乘,即点乘
h=filter(num,den,x);%使用函数filter()求输出
stem(n,h)
xlabel('n');ylabel('y(n)');
title('响应y(n)电信1306胡容');
系统输出函数y(n)的图像如图4.5所示。
图4.5系统输出函数
题目小结:
通过本题我们学会了如何在给定因果稳定线性时不变系统的差分方程情况下对给定的输入序列求输出序列。
4.2题二序列的相乘、相加
题目:
设系统差分方程为
,要求用程序验证系统的线性性质。
4.2.1理论分析
产生两种输入序列,分别乘以常数后:
1.分别激励系统,再求输出之和;
2.先相加,再激励系统求输出;
对两个结果进行比较,方法是求它们之差,按误差的绝对值是否极小进行判断。
如果二者误差绝对值极小则可忽略不计,即两序列为线性序列。
4.2.2程序代码与结果
本题MATLAB代码如下:
N=64;n=0:
N-1;m=20;
num=[1];den=[1,-0.8];%设定系统参数num,den
x1=0.9.^n;%产生输入信号x1(n)
x=[(n>=0)&(n<32)];
x1=x1.*x;%点乘
y1=filter(num,den,x1);%对x1(n)的响应y1(n)
x2=[(n-m)==0];
y2=filter(num,den,x2);%对x2(n)的响应y2(n)
x3=7*x1+2*x2;
y3=filter(num,den,x3);%对5x1(n)+3x2(n)的响应y3(n)
y=7*y1+2*y2;%y(n)=5y1(n)+3y2(n)
subplot(2,2,1);stem(n,y1,'.');line([0,N],[0,0])
axis([0,N,min(y1),max(y1)]);
ylabel('y1(n)]')
title(’电信1306胡容’)
subplot(2,2,2);stem(n,y2,'.');line([0,N],[0,0])
axis([0,N,min(y2),max(y2)]);
ylabel('y2(n)]')
title(’电信1306胡容’)
subplot(2,2,3);stem(n,y3,'.');line([0,N],[0,0])
axis([0,N,min(y3),max(y3)]);
xlabel('n');ylabel('y3(n)]')
title(’电信1306胡容’)
subplot(2,2,4);stem(n,y,'.');line([0,N],[0,0])
axis([0,N,min(y),max(y)]);
xlabel('n');ylabel('y(n))')
title(’电信1306胡容’)
e=y-y3,figure;stem(e)
运行结果如图4.6和4.7所示。
图4.6各输出响应图像
由图4.6可以看出y(n)和y3(n)的函数图像几乎一模一样,由图4.7可以看出y(n)与y3(n)之差非常小,验证了y1(n)和y3(n)满足可加性和齐次性,所以该系统是线性的。
图4.7序列e的图像
4.3题三
题目:
计算下列卷积,并图示各序列及其卷积结果。
4.3.1理论分析
卷积的计算
计算x1(n)和x2(n)的线性卷积的FFT算法可由下面步骤实现:
♦计算X1(k)=FFT[x1(n)];
♦计算X2(k)=FFT[x2(n)];
♦计算Y(k)=X1(k)X2(k);
♦计算x1(n)*x2(n)=IFFT[Y(k)].
在Matlab自带的系统函数中,Conv()可以很好的完成两个有限长序列的卷积运算,特别是对于N值较小的向量,是十分有效的。
4.3.2程序代码与结果
题二MATLAB代码如下:
>>Nx=20;Nh=10;m=5;%设定Nx,Nh和位移值m
n=0:
Nx-1;
x1=(0.9).^n;%产生x1(n)
x2=zeros(1,Nx+m);
fork=m+1:
m+Nx%产生x2(n)
x2(k)=x1(k-m);
end
nh=0:
Nh-1;h1=ones(1,Nh);%产生h1(n)
h2=h1;%产生h2(n)
y1=conv(x1,h1);%计算y1(n)=x1(n)*h1(n)
y2=conv(x2,h2);%计算y2(n)=x2(n)*h2(n)
subplot(321),
stem(x1,'.')
ylabel('x1')
title(’电信1306胡容’)
subplot(323),
stem(h1,'.')
ylabel('h1')
title(’电信1306胡容’)
subplot(325),
stem(y1,'.')
title(’电信1306胡容’)
subplot(322),
stem(x2,'.')
ylabel('x2')
title(’电信1306胡容’)
subplot(324),
stem(h2,'.')
ylabel('h2')
title(’电信1306胡容’)
subplot(326)
stem(y2,'.')
ylabel('y2')
title(’电信1306胡容’)
运行结果如图4.8所示
图4.8序列卷积结果图
5.心得体会
在前几次课设和实验中我们就认识到了Matlab的强大功能,本次信号分析与处理次课程设计也是利用它完成的。
Matlab作为一个功能强大,运算效率相当高的数学工具软件,经过了多年发展,目前几乎可以解决科学计算中的任何问题。
作为一种以数组与矩阵为核心的处理工具,Matlab还具有与高级语言相似的编程特性,在可视化方面,Matlab提供了图形用户界面,使得用户可以进行可视化编程。
可以这么说,Matlab把数据结构、编程特性与图形用户界面完美的结合在一起。
这次的课程设计运用了很多以前课堂中学习到的理论知识,使我对数字信号处理方面的知识有了进一步的加深。
如验证系统的线性性质,卷积的运算。
通过这次课程设计,我以前学习到的理论知识得到了进一步的了解和深入,我想这就是理论与实践相结合的作用吧!
单独的理论学习是比较枯燥的,这种模式不仅加深了我们的知识,而且增强了我们的动手能力,整个的过程中,也非常的有趣,使我对数字信号处理的兴趣大大提高。
对于我们电子信息工程专业而言,数字信号处理是一门很重要的学科,它要求在一定的理解和计算的基础上掌握其内容,领悟其要旨。
通过课程设计的学习,可以在掌握一定的理论知识的基础上通过实践加深理解,使得理论知识的学习在实践之中得到升华。
对于我个人来说,这是一次很好的学习和实践的机会。
Matlab有很多的库函数,这为我们开发学习提供了一个非常方便的平台。
同时,我们可以根据自己的需要,建立新的函数,然后储存起来,方便以后的使用。
课程设计,让我们学会了思考问题,不单单是依靠课本知识,还需要联系实际,理论需要结合实践才能发挥最大的作用。
我们在课程设计的过程中,发现问题,并找出问题的原因,还需要自己动手将问题解决,这极大的调动了我们的积极性,扩展了我们的思维,对待出现的问题,我们学会了不逃避,而是努力将其解决,这对我们今后的学习生活有着重大影响。
参考文献
[1] 薛山.MATLAB基础教程.北京:
清华大学出版社,2011
[2]艾冬梅编.MATLAB与数学实验[M].北京:
机械公业出版社,2010
[3] 高会生.MATLAB实用教程.北京:
电子工业出版社,2011
[4]王正盛编.MATLAB与科学计算[M].北京:
国防工业出版社,2011
[5] 张琨.MATLAB2010从入门到精通.北京:
电子工业出版社,2011
本科生课程设计成绩评定表
姓名
性别
专业、班级
课程设计题目:
课程设计答辩或质疑记录:
成绩评定依据:
最终评定成绩(以优、良、中、及格、不及格评定)
指导教师签字:
年月日