实验三_线性卷积与圆周卷积的计算
电信类课程试验报告
学 院:基础信息工程系 别:电子信息工程课程名称:数字信号处理姓 名:学 号:日 期:实验三实验名称:线性卷积与圆周卷积的计算一、实验目的
(1)通过编程,上机调试程序,进一不增强使用计算机解决问题的能力。
(2)掌握线性卷积与圆周卷积软件实现的方法,并实验两者之间的关系。二、主要函数简介
对于无限长序列不能用MATLAB直接计算线性卷积,在MATLAB内部只能提供了一个conv函数计算两个有限长序列的线性卷积。对于圆周卷积MATLAB内部没有提供现成的函数,我们可以按照定义式直接编程计算。
计算两个有限长序列的线性卷积函数:
y(n)=conv(x,h)
输入参数:x,h为已知两个有限长序列矢量。
输出参数:y为线性卷积所的序列矢量。三、实验内容及要求
已知两个有限长序列:
x(n)=δ(n)+2δ(n-1)+3δ(n-2)+4δ(n-3)+5δ(n-4)
h(n)=δ(n)+2δ(n-1)+δ(n-2)+2δ(n-3)
(1)实验前,预先笔算好这两个序列的线性卷积及下列几种情况的圆周卷积
① x(n)⑤h(n) ② x(n)⑥h(n) ③ x(n)⑨h(n) ④ x(n)⑽h(n)
(2)编制一个计算两个序列线性卷积的通用程序,计算x(n)*h(n).
(3)编制一个计算圆周卷积的通用程序,计算上述4种情况下两个序列x(n)与h(n)的圆周卷积。
(4)上机调试并打印或记录实验结果。
注:可在一个程序中用菜单形式实现上述两种卷积的计算。
(5)将实验结果与预先笔算的结果比较,验证其真确性。
首先定义圆周卷积的函数,保存为.m文件。
function yc=circonv(x1,x2,N)
if length(x1)>N
error('N必须大于等于x1的长度');
end
if length(x2)>N
error('N必须大于等于x2的长度');
end
x1=[x1,zeros(1,N-length(x1))];
x2=[x2,zeros(1,N-length(x2))];
n=[0:N-1];
x2=x2(mod(-n,N)+1);
H=zeros(N,N);
for n=1:1:N
H(n,:)=cirshiftd(x2,n-1,N);
end
yc=x1*H';
再次定义圆周移位的函数,保存为.m文件。
function y=cirshiftd(x,m,N)
if length(x)>N
error('x的长度必须小于N');
end
x=[x,zeros(1,N-length(x))];
n=[0:1:N-1];
y=x(mod(n-m,N)+1);
在此基础上运行MATLAB函数:
(1)
① x(n)⑤y(n)
clear all;
N1=5;
N2=4;
xn=[1 2 3 4 5];
hn=[1 2 1 2];
yln=conv(xn,hn);
ycn=circonv(xn,hn,5);
ny1=[0:1:length(yln)-1];
ny2=[0:1:length(ycn)-1];
subplot(2,1,1);
stem(ny1,yln);
ylabel('线性卷积');
subplot(2,1,2);
stem(ny2,ycn);
ylabel('圆周卷积');
② x(n)⑥y(n)
clear all;
N1=5;
N2=4;
xn=[1 2 3 4 5];
hn=[1 2 1 2];
yln=conv(xn,hn);
ycn=circonv(xn,hn,6);
ny1=[0:1:length(yln)-1];
ny2=[0:1:length(ycn)-1];
subplot(2,1,1);
stem(ny1,yln);
ylabel('线性卷积');
subplot(2,1,2);
stem(ny2,ycn);
ylabel('圆周卷积');
③ x(n)⑨y(n)
clear all;
N1=5;
N2=4;
xn=[1 2 3 4 5];
hn=[1 2 1 2];
yln=conv(xn,hn);
ycn=circonv(xn,hn,9);
ny1=[0:1:length(yln)-1];
ny2=[0:1:length(ycn)-1];
subplot(2,1,1);
stem(ny1,yln);
ylabel('线性卷积');
subplot(2,1,2);
stem(ny2,ycn);
ylabel('圆周卷积');
④ x(n)⑩y(n)
clear all;
N1=5;
N2=4;
xn=[1 2 3 4 5];
hn=[1 2 1 2];
yln