毕业设计信号处理线性卷积与圆周卷积演示程序的设计.docx

上传人:b****9 文档编号:25251344 上传时间:2023-06-06 格式:DOCX 页数:20 大小:161.01KB
下载 相关 举报
毕业设计信号处理线性卷积与圆周卷积演示程序的设计.docx_第1页
第1页 / 共20页
毕业设计信号处理线性卷积与圆周卷积演示程序的设计.docx_第2页
第2页 / 共20页
毕业设计信号处理线性卷积与圆周卷积演示程序的设计.docx_第3页
第3页 / 共20页
毕业设计信号处理线性卷积与圆周卷积演示程序的设计.docx_第4页
第4页 / 共20页
毕业设计信号处理线性卷积与圆周卷积演示程序的设计.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

毕业设计信号处理线性卷积与圆周卷积演示程序的设计.docx

《毕业设计信号处理线性卷积与圆周卷积演示程序的设计.docx》由会员分享,可在线阅读,更多相关《毕业设计信号处理线性卷积与圆周卷积演示程序的设计.docx(20页珍藏版)》请在冰豆网上搜索。

毕业设计信号处理线性卷积与圆周卷积演示程序的设计.docx

毕业设计信号处理线性卷积与圆周卷积演示程序的设计

 

信号处理课程设计

 

设计说明书

 

设计项目:

线性卷积与圆周卷积演示程序的设计

项目完成人:

姓名:

学号:

专业班级:

13级电子信息工程一班

指导教师:

提交日期:

2016.1.8

 

机电工程学院电子信息工程

1.设计基本原理

1.1课题研究的背景

卷积运算广泛的应用于通讯、电子、自动化等领域的线性系统的仿真、分析及数字信号处理等方面。

在MATLAB中可以使用线性卷积和圆周卷积实现离散卷积。

线性卷积是工程应用的基础,但圆周卷积实现线性离散卷积具有速度快等优势。

圆周卷积采用循环移位,在MATLAB中没有专用函数,需要根据圆周卷积的运算过程编制程序代码。

本实验主要围绕线性卷积和圆周卷积的演示程序设计来展开,给出了线性卷积和圆周卷积演示的程序及动态实现。

在线性时不变连续系统中,利用系统的冲激响应和叠加原理来求系统对任意激励信号作用时的零状态响应,这就是卷积方法的原理。

因此,在时域内,卷积运算是求解线性非时变系统零状态响应的重要方法,特别是激励信号为时限信号时尤其如此。

卷积运算的计算比较复杂,是信号与系统分析中的重点和难点,特别适合用于计算机来计算。

以往的卷积积分多用fortran、c、VB等语言编程,不仅编程繁琐,而且可视性差。

用MATLAB来计算卷积积分问题要比用C、FORTRAN等语言完成相同的事情简洁的多。

在MATLAB中,有很多现成的函数可以直接调用,而且在计算机方面,可以直接用相应的计算机符号即可。

在编写程序语言方面,它与其他语言相比更为简单。

正因为上述原因,使他深受工程技术人员及科学专家的欢迎,并很快成为应用学科计算机辅助分析、设计、仿真、教学等领域不仅可缺少的基础软件。

1.2课题研究意义

本课程为电子信息工程专业的独立实践课,是建立在信号与系统、数字信号处理等课程的基础上,加强实践环节而开设的。

其目的在于通过本课程设计使学生进一步巩固数字信号处理的基本概念、理论、分析方法和实现方法;使学生能有效地将理论和实际紧密结合;增强学生软件编程实现能力和解决实际问题的能力。

通过课程设计,主要达到以下的目的:

(1)使学生增进对MATLAB的认识,加深对信号处理理论的理解。

(2)使学生掌握数字信号处理中频谱分析的概念和方法。

(3)使学生掌握数字信号中IIR和FIR滤波器的设计。

(4)使学生理解并掌握MATLAB实现IIR和FIR滤波器的设计方法、过程。

通过本门课程的教学,学生能初步掌握应用Matlab软件编写数字信号处理的应用程序;用FFT对连续信号和离散信号进行谱分析;编程实现IIR数字滤波器和FIR数字滤波器;了解各种窗函数对滤波器特性的影响等,进一步明确数字信号处理的工程应用。

通过本次信号处理综合设计,综合运用数字信号处理、Matlab技术课程以及其他有关先修课程的理论和生产实际知识去分析和解决具体问题,并使所学知识得到进一步巩固、深化和发展。

初步培养学生对工程设计的独立工作能力,掌握电子系统设计的一般方法。

2.设计任务

2.1课题设计的任务

目的:

熟练掌握MATLAB工具软件在工程设计中的使用;

熟练掌握线性卷积与圆周卷积的关系,及线性时不变离散系统系统响应的求解方法;

要求:

动态演示线性卷积的完整过程;

动态演示圆周卷积的完整过程;

对比分析线性卷积与圆周卷积的结果;

2.2课题研究的内容

使用matlab软件线性卷积与圆周卷积演示程序的设计(线性移不变离散时间系统的求解)

卷积演示程序设计内容

(1)可输入任意2待卷积序列x1(n)、x2(n),长度不做限定。

测试数据为:

x1(n)={1,1,1,1,0,0,1,1,1,1,0,0},x2(n)={0,1,2,1,0,0,0,1,2,1,0,0};

(2)分别动态演示2序列进行线性卷积x1(n)﹡x2(n)和圆周卷积x1(n)x2(n)的过程;要求分别动态演示翻转、移位、乘积、求和的过程。

(3)圆周卷积默认使用2序列中的最大长度,但卷积前可以指定卷积长度N用以进行混叠分析。

(4)根据实验结果分析2类卷积的关系。

2.3课题研究的指标

指标要求:

动态演示线性卷积的完整过程;

动态演示圆周卷积的完整过程;

对比分析线性卷积与圆周卷积的结果;

3.课程设计的过程

3.1卷积演示程序设计思想

首先建立一个基本的框架,制作一个菜单,其中包括主程序菜单和子程序的菜单,子程序菜单可以选择回到主程序菜单选择功能。

菜单的框架完成后,实现可以任意输入两个序列,然后分别制作动态演示序列的线性卷积的程序、动态演示序列的圆周卷积、以及验证时域卷机定理以及比较运行速率的程序。

结合上面建立的框架完成菜单选择以及功能的调用,让整个设计完美。

3.2步骤

3.2.1线性卷积

线性时不变系统(LinearTime-InvariantSystem,orL.T.I系统)的输入、输出间的关系为:

当系统输入序列为x(n),系统的单位脉冲响应为h(n),输出序列为y(n),则系统输出为:

上式称为离散卷积或线性卷积。

3.2.2圆周卷积

设两个有限长序列x1(n)和x2(n),均为N点长

x1(n)

X1(K)

x2(n)

X2(K)

如果X3(K)=X1(K)﹒X2(K)则

N

上式称为循环卷积或圆周卷积

注:

为x1(n)序列的周期化序列;

的主值序列。

编程计算时,x3(n)可表示如下:

3.2.3两个有限长序列的线性卷积

序列x1(n)为L点长,序列x2(n)为P点长,x3(n)为这两个序列的线性卷积,则x3(n)为

且线性卷积x3(n)的最大长L+P-1,也就是说当

时x3(n)=0。

3.2.4两个有限长序列的圆周卷积

线性卷积是求离散系统响应的主要方法之一,许多重要应用都建立在这理论基础上,如卷积滤波等,专用函数conv(x,h)可完成线性卷积过程。

圆周卷积的计算速度远快于线性卷积,如果选择圆周卷积的长度

则可以用圆周卷积取代线性卷积。

方法如下:

定义圆周卷积的长度:

选择N=L+P-1。

将两个序列的长度都补足为N:

将长为L的序列x1(n)延长到N,补N-L个零;

将长为P的序列x2(n)延长到N,补N-P个零;

翻转x1(n),周期延拓为序列

,取主周期。

循环移位:

与线性卷积不同,圆周卷积运算中采用的是循环移位,有限长序列x1(n)的循环移位定义为:

其含义如下:

表示x(n)的周期延拓序列

的移位:

表示对移位的周期序列

取主值序列。

所以f(n)仍然是一个长度为N的有限长序列。

3.3卷积演示程序

3.1程序实现

3.1.1线性卷积程序实现

x1=[1,1,1,1,0,0,1,1,1,1,0,0];

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

p=length(x1);

q=length(x2);

n=p+q-1;

a=0:

q-1;

y2(a+1)=x2(q-a);

forn=1:

p+q-1

k=-q+n:

1:

-1+n;

subplot(3,1,2)

stem(k,y2)

title('x2(n-m)');

axis([-16,16,0,24]);

以上部分是实现翻转并移位,在设计中是将序列x2进行翻转和移位。

y=conv(x1,x2);

t=1:

1:

n

h(t)=y(t);

subplot(3,1,3)

t=0:

n-1;

stem(t,h);

title('线性卷积y(n)')

axis([-16,16,0,24]);

pause

(1)

end

以上整个部分就是实现线性卷积的过程。

subplot(3,2,1)

stem(x1);

title('x1(m)')

axis([0,15,0,1]);

pause

(1)

subplot(3,2,2)

stem(x2);

title('x2(m)')

axis([0,15,0,2]);

pause

(1)

end

图像:

3.1.2圆周卷积程序实现

functiony=jjdtys(x,h)

x=input('输入信号,x=')

h=input('输入信号,h=')

lx=length(x);

lh=length(h);

lmax=max(lx,lh);

iflx>lhnx=0;nh=lx-lh;

elseiflx

elsenx=0;nh=0;

end

end

lt=lmax;

u=[zeros(1,lt),x,zeros(1,nx),zeros(1,lt)];

%m=[zeros(1,lt),h,zeros(1,nh),zeros(1,lt)];

t1=(-lt+1:

2*lt);

h=[zeros(1,lt),h,zeros(1,nh),zeros(1,lt)];

hf=zeros(1,length(h));

s=fliplr(h);

subplot(5,1,1);stem(t1,u)

set(gcf,'color','w')

axis([-lt,2*lt,min(u),max(u)])

holdon;ylabel('x[n]')

%subplot(5,1,2);stem(t1,h)

%axis([-lt,2*lt,min(h),max(h)])

%holdon;ylabel('h[n]')

fora=(1:

length(h));

hf(a)=s(a);

subplot(5,1,2);stem(t1,hf)

set(gcf,'color','w')

ylabel('h[-n]')

pause(0.5)

end

y=zeros(1,3*lt);

fork=(0:

2*lt);

p=[zeros(1,k),s(1:

end-k)];

y1=u.*p;

yk=sum(y1);

y(k+lt+1)=yk;

%%subpolt(6,1,2);stem(t1,u)

%set(gcf,'color','w')

%axis([-lt,2*lt,min(u),max(u)])

%holdon;ylabel('x[n]')

subplot(5,1,3);stem(t1,p)

set(gcf,'color','w')

axis([-lt,2*lt,min(p),max(p)])

ylabel('h[k-n]')

subplot(5,1,4);stem(t1,y1)

ylabel('s=u*h[k-n]')

subplot(5,1,5);stem(k,yk)

axis([-lt,2*lt,min(y1),max(y1)+eps])

axis([-lt,2*lt,floor(min(y)+eps),ceil(max(y+eps))]);

holdon;

ylabel('y[k]=sum(s)')

%subplot(5,1,6);stem(t1,hf)

ifk==round(0.8*lt)

%disp('暂停,按任意键继续');

pause

elsepause

(1)

end

end

end

图像:

3.6结果分析

开始运行程序,会进入主菜单,按照提示进行选择:

请输入x1:

[1,1,1,1,0,0,1,1,1,1,0,0]

请输入x2:

[0,1,2,1,0,0,0,1,2,1,0,0]

(1)、动态演示2序列的线性卷积

图2线性卷积结果

(2)、动态演示2序列的10点的圆周卷积

图3圆周卷积结果

设计思考

圆周卷积与线性卷积的关系:

若有x1(n)与x2(n)两个分别为N1与N2的有限长序列,则它们的线性卷积y1(n)为N1+N2-1的有限长序列,而它们的N点圆周卷积y2(n)则有以下两种情况:

1,当NN1+N2-1时,y2(n)的前N1+N2-1的点刚好是y1(n)的全部非零序列,而剩下的N-(N1+N2-1)个点上的序列则是补充的零。

线性卷积运算步骤:

求x1(n)与x2(n)的线性卷积:

对x1(m)或x2(m)先进行镜像移位x1(-m),对移位后的序列再进行从左至右的依次平移x(n-m),当n=0,1,2.…N-1时,分别将x(n-m)与x2(m)相乘,并在m=0,1,2.…N-1的区间求和,便得到y(n)

圆周卷积运算步骤:

圆周卷积过程中,求和变量为m,n为参变量,先将x2(m)周期化,形成x2((m))N,再反转形成x2((-m))N,取主值序列则得到x2((-m))NRN(m),通常称之为x2(m)的圆周反转。

对x2(m)圆周反转序列圆周右移n,形成x2((n-m))NRN(m),当n=0,1,2,…,N-1时,分别将x1(m)与x2((n-m))NRN(m)相乘,并在m=0到N-1区间内求和,便得到圆周卷积y(n)。

采用圆周卷积运算代替线性卷积运算:

时域圆周卷积在频域上相当于两序列的DFT的相乘,而计算DFT可以采快速傅立叶变换(FFT),因此圆周卷积和线性卷积相比,计算速度可以得到提高。

5.附录

5.1主程序流程图

5.2程序代码

5.2.1主程序实现

线性卷积程序实现

x1=[1,1,1,1,0,0,1,1,1,1,0,0];

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

p=length(x1);

q=length(x2);

n=p+q-1;

a=0:

q-1;

y2(a+1)=x2(q-a);

forn=1:

p+q-1

k=-q+n:

1:

-1+n;

subplot(3,1,2)

stem(k,y2)

title('x2(n-m)');

axis([-16,16,0,24]);

以上部分是实现翻转并移位,在设计中是将序列x2进行翻转和移位。

y=conv(x1,x2);

t=1:

1:

n

h(t)=y(t);

subplot(3,1,3)

t=0:

n-1;

stem(t,h);

title('线性卷积y(n)')

axis([-16,16,0,24]);

pause

(1)

end

以上整个部分就是实现线性卷积的过程。

subplot(3,2,1)

stem(x1);

title('x1(m)')

axis([0,15,0,1]);

pause

(1)

subplot(3,2,2)

stem(x2);

title('x2(m)')

axis([0,15,0,2]);

pause

(1)

end

圆周卷积程序实现

对于循环卷积,要求我们进行判断并根据情况做不同的分析:

方案一:

functiony=jjdtys(x,h)

x=input('输入信号,x=')

h=input('输入信号,h=')

lx=length(x);

lh=length(h);

lmax=max(lx,lh);

iflx>lhnx=0;nh=lx-lh;

elseiflx

elsenx=0;nh=0;

end

end

lt=lmax;

u=[zeros(1,lt),x,zeros(1,nx),zeros(1,lt)];

%m=[zeros(1,lt),h,zeros(1,nh),zeros(1,lt)];

t1=(-lt+1:

2*lt);

h=[zeros(1,lt),h,zeros(1,nh),zeros(1,lt)];

hf=zeros(1,length(h));

s=fliplr(h);

subplot(5,1,1);stem(t1,u)

set(gcf,'color','w')

axis([-lt,2*lt,min(u),max(u)])

holdon;ylabel('x[n]')

%subplot(5,1,2);stem(t1,h)

%axis([-lt,2*lt,min(h),max(h)])

%holdon;ylabel('h[n]')

fora=(1:

length(h));

hf(a)=s(a);

subplot(5,1,2);stem(t1,hf)

set(gcf,'color','w')

ylabel('h[-n]')

pause(0.5)

end

y=zeros(1,3*lt);

fork=(0:

2*lt);

p=[zeros(1,k),s(1:

end-k)];

y1=u.*p;

yk=sum(y1);

y(k+lt+1)=yk;

%%subpolt(6,1,2);stem(t1,u)

%set(gcf,'color','w')

%axis([-lt,2*lt,min(u),max(u)])

%holdon;ylabel('x[n]')

subplot(5,1,3);stem(t1,p)

set(gcf,'color','w')

axis([-lt,2*lt,min(p),max(p)])

ylabel('h[k-n]')

subplot(5,1,4);stem(t1,y1)

ylabel('s=u*h[k-n]')

subplot(5,1,5);stem(k,yk)

axis([-lt,2*lt,min(y1),max(y1)+eps])

axis([-lt,2*lt,floor(min(y)+eps),ceil(max(y+eps))]);

holdon;

ylabel('y[k]=sum(s)')

%subplot(5,1,6);stem(t1,hf)

ifk==round(0.8*lt)

%disp('暂停,按任意键继续');

pause

elsepause

(1)

end

end

end

方案二:

x1=[1,1,1,1,0,0,1,1,1,1,0,0];

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

p=length(x1);q=length(x2);k=max(p,q);%p

ifk>N

ifp

x11=[x1,zeros(1,N-p)];

n=0:

1:

N-1;

x22(n+1)=x2(n+1);

elseifp==q|p>N

n=0:

1:

N-1;

x11(n+1)=x1(n+1);

x22(n+1)=x2(n+1);

elsedisp('错误,x1的长度要比x2短')

end

6.总结(实习的心得体会)

通过本次实验,我掌握了线性卷积与圆周卷积软件实现的方法,并验证了两者之间的关系,同时,通过上机调试程序,进一步增强了我使用计算机解决问题的能力。

使我对MATLAB有了一定的了解,也理解了线性卷积的概念;同时通过在网上的查阅相关资料使我增强了收集资料的能力

此设计是针对卷积演示的程序进行设计,并给出了两个示例序进行线性卷积和圆周卷积的翻转、移位、乘机、求和的过程等。

圆周卷积是将所有数据限定一个固定的长度。

设线性卷积和圆周卷积有用信号部分长度分别为L、P,则当圆周卷积长度大于等于L+P-1时两者等价。

线性卷积和圆周卷积对运算有不同的要求:

线性卷积的对象可以是有限长或无限长非周期序列,若两个序列的长度分别为M和N,则卷积后的序列长度为L=M+N-1。

圆周卷积的对象是两个同长度(若长度不同可用补零的方法达到同长度)的有限长序列,圆周卷积的结果也是同一长度的有限长序列。

它们的关系是:

圆周卷积是线性卷积L点周期延拓的主值区间。

通过本次课程设计巩固了所学过的数字信号处理课程的有关知识,同时也对matlab这个软件有了更深的了解,它与数字信号处理这门课程之间有着紧密关系,matlab中是采用数组和距阵的方式处理数据,如何将数字信号处理有关的资料以数组和距阵进行编程是我们学习的一个方面,通过这次的课程设计,让我发现了数字信号处理在matlab中的应用,同时也激发了我利用这软件来实现数字信号处理有关问题的兴趣。

本次设计中,有机地结合了理论与实践,既考察了我们对理论知识的掌握情况,还反映出我们实际动手能力和编程能力,更主要的是它激起我们创新思维,提高了自己独立分析问题和解决问题的能力,这在无形中以及提高了我各方面的能力。

无论是在知识上,还是在思想上都给我烙下了深刻的印象。

 

指导教师评语:

设计成绩:

 

年月日

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

当前位置:首页 > 总结汇报 > 学习总结

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

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