燕山大学课程设计说明书题目:移位与卷积学院(系):电气工程学院年级专业:检测(2)学号: 120103020122 学生姓名:赵家德指导教师:王娜教师职称:讲师电气工程学院《课程设计》任务书课程名称:数字信号处理课程设计说明:1、此表一式四份,系、指导教师、学生各一份,报送院教务科一份。
2、学生那份任务书要求装订到课程设计报告前面。
电气工程学院教务科目录第一章、MATLAB简述 (1)第二章、基本原理介绍 (2)第三章、命令介绍、仿真及结论 (4)3.1命令介绍 (4)3.2仿真 (4)3.2.1仿真总程序 (4)3.2.2仿真图 (8)3.3从程序仿真与仿真图得出的结论 (9)第四章、心得体会 (10)参考文献 (11)第一章 MATLAB简述MATLAB 是一个可视化的计算程序,被广泛地应用在科学运算领域里。
它具有功能强大、使用简单等特点,内容包括:数值计算、符号计算、数据拟合、图形图像处理、系统模拟和仿真分析等功能。
此外,用Matlab还可以进行动画设计、有限元分析等。
MATLAB系统包括五个主要部分:开发环境:这是一组帮助你使用MATLAB的函数和文件的工具和设备。
这些工具大部分是图形用户界面。
它包括MATLAB桌面和命令窗口,命令历史,和用于查看帮助的浏览器,工作空间,文件和查找路径。
MATLAB数学函数库:这里汇集了大量计算的算法,范围从初等函数如:求和,正弦,余弦和复数的算术运算,到复杂的高等函数如:矩阵求逆,矩阵特征值,贝塞尔(Bessel)函数和快速傅立叶变换等。
MATLAB语言:这是一种高水平的矩阵/数组语言,含有控制流语句,函数,数据结构,输入/输出,和面向对象编程特征。
它允许“小型编程”以迅速创立快速抛弃型程序,以及“大型编程”以创立完整的大型复杂应用程序。
句柄制图:这是MATLAB制图系统。
它包括高级别的二维、三维数据可视化,图像处理,动画,以及表现图形的命令。
它还包括低级别的命令,这使你不但能在MATLAB的应用中建立完整的图形用户界面,而且还能完全定制图形的外观。
MATLAB应用程序界面(API):这是使你编写与MATLAB相合的C或Fortran程序的程序库。
它包括从MATLAB中调用程序(动态链接),调用MATLAB为计算引擎,和读写MAT-文件的设备。
MATLAB的重要作用与此次课程设计的关系MATLAB是一款在数学类科技应用软件中特别是在数值计算方面首屈一指的软件,它可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
而线性卷积和循环卷积在工程上的应用亦非常广泛,在MATLAB软件处理下,实现任意两个序列的线性和循环卷积对于工程上的辅助是相当重要的。
卷积关系最重要的一种情况,就是在信号与线性系统或数字信号处理中的卷积定理。
利用该定理,可以将时间域或空间域中的卷积运算等价为频率域的相乘运算,从而利用FFT等快速算法,实现有效的计算,节省运算代价。
第二章 基本原理介绍2.1移位定义如果有限长序列为x(n),则序列()x n m ±表示将序列x (n )进行移位。
当m>0时,x (n-m )表示将序列x (n )依次右移m 位;x (n+m )表示将序列x (n )依次左移m 位。
2.2循环移位定义如果有限长序列为x(n),长度为N ,将x(n)左移m 位,则y(n)=x((n +m)L )R L (n)。
x(n)左移m 位的过程可由以下步骤获得:(1)将()x n 以N 为周期进行周期延拓,得到()(())L x n x n =;(2)将(n)x ~左移m 位,得到m )(n x ~+;(3)取m)(n x ~+的主值序列,得到x(n)循环移位序列y(n)。
有限长序列的移位也称为循环移位,原因是将x(n)左移m 位时,移出的m 位又依次从右端进入主值区。
2.3线性卷积的定义与计算这里先介绍系统的单位取样响应:设系统的输入x(n)=δ(n),系统输出y(n)的初始状态为零,定义这种条件下系统输出称为系统的单位取样响应,用h(n)表示。
换句话说,单位取样响应即是系统对于δ(n)的零状态响应。
用公式表示为:h(n)=T[δ(n)]。
设系统的输入用x(n)表示,表示成单位采样序列移位加权和为:()()()m x n X m n m δ∞=-∞=-∑那么系统输出为:()[()()]m y n T X m n m δ∞=-∞=-∑根据线性系统的叠加性质:()()[()]m y n X m T n m δ∞=-∞=-∑又根据时不变性质:()()()()*()l m y n X m h n m x n h n ∞=-∞=-=∑ (2-3-1)式中的符号“*”表示卷积运算,由式(1-3-1)可见在这类卷积运算中有翻转、移位、相乘和相加,因此称这类卷积为线性卷积,简称卷积。
式(1-3-1)表示线性是不变系统的输出等于输入序列的该系统的单位取样响应的卷积。
只要知道系统的单位取样响应,按照式(1-3-1),对于任意输入x(n)都可以求出系统的输出。
下面介绍图解法求解卷积运算的过程。
按照(1-3-1)可得,1)将x(n)和h(n)用x(m)和h(n)表示,并将h(n)进行翻转,形成h(-m)。
2)将h(-m)移位n ,得到h(n-m)。
当n>0时,序列x(m)右移;n<0时,序列左移。
3)x(m)和h(n-m)相同m 的序列值对应相乘后相加。
按照以上三个步骤可得到卷积结果y(n)。
为计算所有时刻的y(n),必须对所有的n,重复上述2)、3)步骤。
2、4 循环卷积定理两个序列离散傅里叶变换的乘积等于此两个序列的循环卷积的离散傅里叶变换,如果x1(n)和x2(n)满足X1(k)=DFT[x1(n)],X2(k)=DFT[x2(n)],且X(k)=X1(k)X2(k),N>max[N1,N2],则11201210()[()]()(())()[()(())]()N c L L m N L L m y n IDFT X k x m x n m R n x m x n m R n -=-===-=-∑∑ (2-4-1)一般称上式所表示的运算为x1(n)和x2(n)的循环卷积。
还可记为: x(n)=x1(n)⊗x2(n)=x2⊗x1(n)。
根据(2-4-1),L 称为循环卷积区间长度。
n 和m 的变化区间均是[0,L-1],直接计算该式比较麻烦。
计算机中采用矩阵相乘或快速傅里叶变换(FFT )的方法计算循环卷积。
用矩阵相乘的方法计算两个序列的循环卷积,这里关键是先形成循环卷积矩阵。
如果h(n)的长度N<L,则需要在h(n)末尾补L-N 个零。
3)线性卷积与循环卷积的关系()()()Lclq n n qL n yy R∞=-∞=+∑上式说明,yc(n)等于yl(n)以L 为周期的周期延拓序列的主值序列。
yl(n)的长度为N+M-1,因此仅当循环卷积长度L ≥N+M-1时,yl(n)以L 为周期进行周期延拓才无混叠。
因此取其主值序列就满足yc(n)=yl(n)。
即满足L ≥N+M-1。
第三章命令介绍及仿真3.1命令介绍1)zeros是用来表示线性代数的0矩阵。
比如:zeros(3,3)表示3行3列0矩阵。
2) mod(a,b)就是求的是a除以b的余数。
比方mod(100,3)=1,mod(17,6)=5。
3)length是求某一个矩阵或者向量的长度。
4)conv是系统自带的函数,用来卷积运算,同时也可以做多项式的乘法。
5)stem构建一组横轴和纵轴数据,方便画图。
6)subplot(a,b,c)函数,对图像空间进行子图划分,a表示行数,b表示列数,,c 表示子图序号。
7)f igure(n),为当前工作空间的第n个图像。
8)title('x1序列'),是规定子图名称,在图正中显示序列名称。
xlabel('n')和ylabel('幅度'),规定图的横纵坐标。
3.2仿真3.2.1仿真程序(1)仿真总程序clear allclose allclcfigure(1)n=0:1:9;x1=(0.8).^n;subplot(3,3,1);stem(n,x1);title('x1原图');xlabel('n');ylabel('x1(n)');n=0:1:9;x1=(0.8).^n;subplot(3,3,2);%移位stem(n+2,x1);title('x1(n-2)');xlabel('n');ylabel('x1(n-2)');subplot(3,3,3);title('x1(n+2)');xlabel('n');ylabel('x1(n+2)');y1=xuhuanyiwei(x1,2,15);%循环移位y2=xuhuanyiwei(x1,-2,15);y3=xuhuanyiwei(x1,2,19);y4=xuhuanyiwei(x1,-2,19);y5=xuhuanyiwei(x1,2,20);y6=xuhuanyiwei(x1,-2,20);n1=0:1:14;subplot(3,3,4);stem(n1,y1);title('x1循环移位m=-2N=15'); xlabel('n');ylabel('y1');subplot(3,3,5);stem(n1,y2);title('x1循环移位m=2N=15');xlabel('n');ylabel('y2');n2=0:1:18;subplot(3,3,6);stem(n2,y3);title('x1循环移位m=-2N=19'); xlabel('n');ylabel('y3');subplot(3,3,7);stem(n2,y4);title('x1循环移位m=2N=19');xlabel('n');ylabel('y4');n3=0:1:19;subplot(3,3,8);stem(n3,y5);title('x1循环移位m=-2N=20'); xlabel('n');ylabel('y5');subplot(3,3,9);title('x1循环移位m=2N=20');xlabel('n');ylabel('y6');%移位程序结束figure(2)x1=(0.8).^n;subplot(2,3,1);stem(n,x1);title('x1原图');xlabel('n');ylabel('x1(n)');x2=0.6.^n;subplot(2,3,2);stem(n,x2);title('x2原图');xlabel('n');ylabel('x2(n)');n1=0:1:18;y1=conv(x1,x2);%卷积subplot(2,3,3);stem(n1,y1);title('x1和x2线性卷积');xlabel('n');ylabel('y1(n)');N=length(x1)+length(x2);%N=20,循环卷积y2=xunhuanjuanji(x1,x2,N-1);%19y3=xunhuanjuanji(x1,x2,N);%20y4=xunhuanjuanji(x1,x2,N-5);%15n2=0:1:N-2;n3=0:1:N-1;n4=0:1:N-6;subplot(2,3,4);stem(n2,y2);title('x1和x2对N=19的循环卷积');xlabel('n');ylabel('y2(n)');subplot(2,3,5);stem(n3,y3);title('x1和x2对N=20的循环卷积');xlabel('n');ylabel('y3(n)');subplot(2,3,6);stem(n4,y4);title('x1和x2对N=15的循环卷积');xlabel('n');ylabel('y4(n)');%卷积结束(2)循环卷积函数function [ y] = xunhuanjuanji(x1,x2,N ) %N点循环卷积%y输出%x1输入1%x2输入2if length(x1)>Nerror('N必须>=x1的长度')endif length(x2)>Nerror('N必须>=x2的长度')endx1=[x1 zeros(1,N-length(x1))];x2=[x2 zeros(1,N-length(x2))];m=[0:1:N-1];x2=x2(mod(-m,N)+1);H=zeros(N,N);for n=1:1:NH(n,:)=xuhuanyiwei(x2,n-1,N);endy=x1*H';End(3)循环移位函数function [ y ] = xuhuanyiwei( x,m,N )%y为输出%x=长度<=N的序列%m=移位%N=周期if length(x)>Nerror('N必须>=x的长度')endx=[x zeros(1,N-length(x))];n=[0:1:N-1];y=x(mod(n-m,N)+1);End3.2.2仿真图图3.1移位与循环移位图图3.2卷积与循环卷积图3.3从程序仿真与仿真图得出的结论从3.2的程序仿真与仿真图中可以得出下面结论:设两个序列的长度分别为N和M,设较大的是N,则循环卷积区间长度L必须大于N,在仿真的过程中尝试L取N+1、N+2····、N+M-1、N+M、N+M+1等等。