用conv函数,求解连续函数的卷积
东华理工大学软件学院
课程设计报告
课程设计题目:用conv函数求连续信号的卷积运算
学生姓名:詹振华
专业:信息工程
班级:081132
学号: 08113227
指导教师:李金萍
2010年1月6日
目录
实验目的 (1)
MATLAB简介 (2)
实验原理 (4)
程序代码 (5)
实验效果图 (6)
心得体会 (7)
参考文献 (7)
评分表格 (8)
一、试验目的
1、通过实验前对MATLAB软件的学习,更好的掌握MATLAB
软件的使用;
2、理解并掌握信号系统中的卷积定义及其应用;
3、学习并掌握在MATLAB中使用conv函数求解卷积积分。
二、MATLAB简介
软件的功能特点:
在科学研究和工程应用中,往往要进行大量的数学计算,其中包括矩阵运算。这些运算一般来说难以用手工精确和快捷地进
行,而要借助计算机编制相应的程序做近似计算。
Matlab就解决这些问题。Matlab语言有如下特点:1.编程效率高
它是一种面向科学与工程计算的高级语言,允许用数学形式的语言编写程序,且比Basic、Fortran和C等语言更加接近我们书写计算公式的思维方式,用Matlab编写程序犹如在演算纸上排列出公式与求解问题。因此,Matlab语言也可通俗地称为演算纸式科学算法语言由于它编写简单,所以编程效率高,易学易懂。
2.用户使用方便
Matlab语言是一种解释执行的语言,它灵活、方便,其调试
程序手段丰富,调试速度快,需要学习时间少。人们用任何一种语言编写程序和调试程序一般都要经过四个步骤:编辑、编译、连接以及执行和调试。各个步骤之间是顺序关系,编程的过程就是在它们之间作瀑布型的循环。具体地说,Matlab运行时,如直接在命令行输入Mailab语句(命令),包括调用M文件的语句,每输入一条语句,就立即对其进行处理,完成绩译、连接和运行的全过程。又如,将Matlab源程序编辑为M文件,由于Mat1ab 磁盘文件也是M文件,所以编辑后的源文件就可直接运行,而不需进行编译和连接。在运行M文件时,如果有错,计算机屏幕上会给出详细的出锗信息,用户经修改后再执行,直到正确为止。所以可以说,Mat1ab语言不仅是一种语言,广义上讲是一种该语言开发系统,即语言调试系统。
3.扩充能力强
高版本的Matlab语言有丰富的库函数,在进行复杂的数学运算时可以直接调用,而且Matlab的库函数同用户文件在形成上一样,所以用户文件也可作为Matlab的库函数来调用。因而,用户可以根据自己的需要方便地
建立和扩充新的库函数,以便提高Matlab使用效率和扩充它的功能。
MATLAB是矩阵实验室(Matrix Laboratory)之意。除具备卓越的数值计算能力外,它还提供了专业水平的符号计算,文字处理,可视化建模仿真和实时控制等功能。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学,工程中常用的形式十分相似,故用MATLAB来解算问题要比用
C,FORTRAN等语言完相同的事情简捷得多.在新的版本中也加入了对C,FORTRAN,C++ ,JAVA的支持.可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用,非常的方便。
MATLAB的基础是矩阵计算,但是由于他的开放性,并且mathwork也吸收了像maple等软件的优点,使MATLAB成为一个强大的数学软件
三、实验原理
1、卷积的定义:数学中关于两个函数的一种无穷积分运算。
2、涉及的Matlab函数:conv函数:实现信号的卷积运算。
调用格式:w=conv(u,v)计算两个有限长度序列的卷积,
说明:该函数假定两个序列都从零开始。
3、采用把信号进行抽样离散化形成序列的方法,把积分转化
为求和运算,使得问题化为两个序列的卷积和,然后运用
MATLAB软件实现它的运算。
四、程序代码:
function[f,k] = sconv(f1,f2,k1,k2,p)
%计算连续信号卷积积分f(t)=f1(t)*f2(t)
%f:卷积积分f(t)的对应的非零样值向量;
%k:f(t)对应时间向量
%f1:f1(t) 非零样值向量;
%f2:f2(t) 非零样值向量;
%k1:f(1) 对应时间向量
%k2:f(2) 对应时间向量
%p:取样时间间隔
f = conv(f1,f2);
f = f*p;
k0 = k1(1)+k2(1);
k3 = length(f1)+length(f2)-2; k = k0:p:k3*p;
subplot 311;
plot(k1,f1);
title('f1(t)')
xlabel('t')
ylabel('f1(t)')
subplot 312
plot(k2,f2)
title('f2(t)')
xlabel('t')
ylabel('f2(t)')
subplot 313
plot(k,f)
h = get(gca,'position');
h(3) = 2.5*h(3);
set(gca,'position');
title('f(t)=f1(t)*f2(t)'); xlabel('t')
ylabel('f(t)')
上述子程序是求解连续时间信号的卷积。主源程序如下:
p = 0.005;
k1= 0:p:2;
f1 = 0.5*k1;
k2 = k1;
f2=f1;
[f,k]=sconv(f1,f2,k1,k2,p); 六、实验效果图:
七、心得体会
信号与系统的课程设计过程中用到的MATLB软件是以前未曾用过的,一切显的那么的陌生,无从下手,所以我们就从图书馆借来了大量的相关书籍,还有从网上找来了大量的资料,才让我有了点眉目,课程中要求使用的MATLB系统函数CONV 还是有点不懂的,随着我上机操作这些问题也迎刃而解了。此次
课程设计受益匪浅,相信对理解信号会有莫大的帮助.
回顾起此次信号与系统课程设计,至今我仍感慨颇多,的确,从理论到实践,在整整一个星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学的知识,而且学到了很多课本上没有的东西。通过这次课程设计使我懂得了理论知识与实践相结合是很重要的,只用理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
八、参考文献
1、参考资料:
《信号与系统实验》(PDF文件)
《信号与系统》(第二版)
《信号与系统(第二版)习题全解与实验指导》
《信号与系统——MATLAB综合实验》
东华理工大学软件学院
课程设计评分表
学生姓名:詹振华班级:081132 学号:08113227 课程设计题目:用conv函数求连续信号的卷积运算
实验三 卷积积分与卷积和运算
a=1000; t1=-5:1/a:5; f1=stepfun(t1,0); f2=stepfun(t1,-1/a)-stepfun(t1,1/a); subplot(231); plot(t1,f1); axis([-5,5,0,1.2]); xlabel('时间(t)');ylabel('幅值f1(t)');title('f1'); subplot(232); plot(t1,f2); ylabel('幅值f2(t)'); title('f2'); y=conv(f1,f2); r=2*length(t1)-1; t=-10:1/a:10; subplot(233); plot(t,y); axis([-5,5,0,1.2]); title('f1和f2的卷积'); ylabel('f(t)'); f11=conv(f1,f1);f22=conv(f2,f2); subplot(234); plot(t,f11); title('f1和f1的卷积'); ylabel('f11(t)'); axis([-5,5,0,5000]); subplot(235); plot(t,f22); title('f2和f2的卷积'); ylabel('f22(t)');
s=0.01; k1=0:s:2; k2=k1; f1=3*k1; f2=3*k2; f=conv(f1,f2); f=f*s; k0=k1(1)+k2(1); k3=length(f1)+length(f2)-2; k=k0:s:k3*s; subplot(3,1,1); plot(k1,f1); title('f1(t)'); subplot(3,1,2); plot(k2,f2); title('f2(t)'); subplot(3,1,3); plot(k,f); title('f(t)')