MATLAB计算卷积
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本科实验报告
实验名称:MATLAB计算卷积
学员:学号:
培养类型:技术类年级: 2008级
专业:电子工程所属学院:电子科学与工程学院指导教员:职称:教授
实验室:实验日期: 2010年12月23日
国防科学技术大学训练部制
实验一 MATLAB 计算卷积
一. 实验目的
通过MATLAB 卷积程序的编写, 学会使用计算机软件编程来处理信号(即信号的采样与计算)并进一步了解信号卷积计算的方法与步骤,以更好地理解信号与系统课程知识理论,加强理论与实践的结合。 二. 实验要求
使用MATLAB 编写主程序和卷积函数,实现两个信号的卷积运算。要求:
1. 程序必须对任意两个函数信号都适用;
2. 结果必须是至少两个信号的卷积。 三. 实验平台
笔记本电脑 MATLAB 软件平台 四. 实验原理
信号卷积的计算公式为
可通过图形变换的方法来计算两个信号的卷积。 用图解法求解卷积的步骤是:翻转、滑动、相乘、积分。 a. 确定卷积结果的分段时限; b. 确定每段中积分的上下限;
c. 确定每段中积分函数的表达式具体实现如下图
()()()()()c t f t g t f g t d τττ
∞-∞
=*=
-⎰
五. 实验内容
对于信号
计算其卷积 六. 实验分析
(1)根据题目要求输入信号,观察信号和卷积结果的波形表示。 信号f 的波形为
2000007
6
6
02 0 0 other Pair 1: = 15 w here 1010 1010
2010ππτ
τττ-⎧+≤≤=⎨
⎩-+-==⨯=⨯=⨯*
exp()()()()(.)()()
.,,./f t kt t s t s t s t s t g t s t f H z s k M H z s
00.20.40.60.81 1.2x 10
-5
-2
-1.5-1-0.500.511.5
2function f
信号g 的波形为
0.2
0.4
0.6
0.8
1
1.2x 10
-5
-1-0.8-0.6-0.4-0.200.20.40.60.8
1function g
卷积结果的波形为
00.51 1.52 2.5x 10
-5
-300
-250
-200
-150
-100
-50
the result of conv
由图形可知,卷积后结果信号的长度为两输入信号长度之和;且卷积结果(经db 转换)每一点都是两输入信号翻转平移后重叠区域的面积。
说明卷积函数编写正确,卷积结果波形符合理论。 七. 学习心得
通过编写MATLAB 程序计算卷积,使我对信号之间计算卷积的方法和步骤有了更深的理解。同时这次实验使我对MATLAB 这一数学软件有了进一步的理解,它除了功能强大且语言简单易懂外,尤其适合对信号的处理和计算。此次实验告诉我们在动手计算解决问题的同时要学会运用功能强大的计算机软件来解决问题并做仿真验证以进一步研究。 八. 程序源码
主程序:%UNTITLED Summary of this function goes here
% Detailed explanation goes here
clear all
% Parameters' definition
Tp=10.e-6; % transmitted pulse width
fc=1.e+7; % carrier frequency
Fs=200.e+6; % sampling frequency
kr=2.e+12; % chirp rate
tr=0:1/Fs:Tp; % discrete time array
%Functions' definition
s=exp(j*2*pi*fc*tr+j*pi*kr*(tr).^2);
f=exp(j*2*pi*fc*(tr-Tp)+j*pi*kr*(tr-Tp).^2)+exp(j*2*pi*fc*(tr-1.5*Tp) +j*pi*kr*(tr-1.5*Tp).^2);
g=conj(s);
% Processing
y=conv_myself(f,g); y=y/max(y); y=20*log10(abs(y));
% plot result
figure(1); plot(tr,f); title('function f');
figure(2); plot(tr,g); title('function g');
tc=0:1/Fs:2*Tp;
figure(3); plot(tc,y);title('the result of conv'); grid;
卷积程序
function w=conv_myself(f,g)
len=length(f)+length(g)-1;
fn=zeros(1,len);
gn=zeros(1,len);
fn(length(g):end)=f;
for m=1:length(g)
g1(m)=g(length(g)-m+1);
end
gn(1:length(g))=g1;
for n=1:len
gn1=circshift(gn,[0,n-1]);
w(n)=sum(fn.*gn1);
end