搜索
您的当前位置:首页正文

实验三线性卷积与圆周卷积的计算

来源:星星旅游
* *

电信类课程试验报告

学 院:基础信息工程 姓 名: 实验三 一、实验目的 (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=conv(xn,hn); ycn=circonv(xn,hn,10); 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('圆周卷积'); (2)(3) clear all clc N=[5 6 9 10];%圆周卷积的长度向量 xn=[1 2 3 4 5]; * *

hn=[1 2 1 2]; y1n=conv(xn,hn)%计算线性卷积 ny1=0:length(y1n)-1; %分别计算x(n)和h(n)的5点,6点,9点和10点圆周卷积 yc1=circonv(xn,hn,N(1)) yc2=circonv(xn,hn,N(2)) yc3=circonv(xn,hn,N(3)) yc4=circonv(xn,hn,N(4)) %分别作出线性卷积和取不同点数的圆周卷积的图像比较 subplot(1,2,1) stem(ny1,y1n); xlabel('时间序号n'); ylabel('信号幅度'); title('线性卷积'); subplot(1,2,2) stem(0:N(1)-1,yc1); xlabel('时间序号n'); ylabel('信号幅度'); title('5点圆周卷积'); figure subplot(1,2,1) stem(ny1,y1n); * *

xlabel('时间序号n'); ylabel('信号幅度'); title('线性卷积'); subplot(1,2,2) stem(0:N(2)-1,yc2); xlabel('时间序号n'); ylabel('信号幅度'); title('6点圆周卷积'); figure subplot(1,2,1) stem(ny1,y1n); xlabel('时间序号n'); ylabel('信号幅度'); title('线性卷积'); subplot(1,2,2) stem(0:N(3)-1,yc3); xlabel('时间序号n'); ylabel('信号幅度'); title('9点圆周卷积'); figure subplot(1,2,1) stem(ny1,y1n); * *

xlabel('时间序号n'); ylabel('信号幅度'); title('线性卷积'); subplot(1,2,2) stem(0:N(4)-1,yc4); xlabel('时间序号n'); ylabel('信号幅度'); title('10点圆周卷积'); * *

* *

* *

四、实验小结 五、教师评语 教师签字: 年 月 日

因篇幅问题不能全部显示,请点此查看更多更全内容

Top