实验五 线性卷积与循环卷积的计算

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验五 线性卷积与循环卷积的计算
一、实验目的
1、进一步加深对线性卷积的理解和分析能力;
2、通过编程,上机调试程序,进一步增强使用计算机解决问题的能力;
3、掌握线性卷积与循环卷积软件实现的方法,并验证二者之间的关系。

二、实验原理
1、线性卷积
线性时不变系统(Linear Time-Invariant System, or L. T. I 系统)输入、输出间的关系为:当系统输入序列为)(n x ,系统的单位脉冲响应为)(n h ,输出序列为)(n y ,则系统输出为:
∑∞
-∞==-=m n h n x m n h m x n y )
(*)()()()(

∑+∞
-∞
==-=
m n x n h m n x m h n y )
(*)()()()(
上式称为离散卷积或线性卷积。

图6.1示出线性时不变系统的输入、输出关系。

)(n δ→ L. T. I —→)(n h —→ —→
图6.1 线性时不变系统的输入、输出关系
2、循环卷积
设两个有限长序列)(1n x 和)(2n x ,均为N 点长
)(1n x )(1k X )(2n x )(2k X 如果)()()(213k X k X k X ⋅=
则 )
()(~)(~)(10213n R m n x m x n x N N m ⎥⎦⎤
⎢⎣⎡-=∑-=
[]
∑---=1
021)()(N m N m n x m x
)(1n x =N 10)(2-≤≤N n n x
上式称为循环卷积或圆周卷积
)(n x L. T. I h(n)
∑+∞
-∞
=-=m m n h m x n y )
()()(
D F T D F T
注:)(~1n x 为)(1n x 序列的周期化序列;)()(~1n R n x N 为)(~
1n x 的主值序列。

上机编程计算时,)(3n x 可表示如下:
∑∑-+==-++
-=1
1
2
1
0213)
()()()()(N n m n
m m n N x
m x m n x m x n x
3、两个有限长序列的线性卷积
序列)(1n x 为L 点长,序列)(2n x 为P 点长,)(3n x 为这两个序列的线性卷积,则)(3n x 为
∑+∞
-∞
=-=
m m n x
m x n x )
()()(2
1
3
且线性卷积)(3n x 的最大长1-+P L ,也就是说当1-≤n 和1-+≥P L n 时
0)(3=n x 。

4、循环卷积与线性卷积的关系
序列)(1n x 为L 点长,序列)(2n x 为P 点长,若序列)(1n x 和)(2n x 进行N 点的循环卷积,其结果是否等于该两序列的线性卷积,完全取决于循环卷积的长度:
当1-+≥P L N 时循环(圆周)卷积等于线性卷积,即
)(1n x N )(*)()(212n x n x n x =
当1-+<P L N 时,循环卷积等于两个序列的线性卷积加上相当于下式的时间混叠,即
⎪⎩
⎪⎨⎧-≤≤+=∑+∞
-∞
=n
N n rN n x n x r N 其它010)
()(33
三、实验方法
对于无限长序列不能用MATLAB 直接计算线性卷积,在MATLAB 内部只提供了一个conv 函数计算两个有限长序列的线性卷积。

对于循环卷积MATLAB 内部没有提供现成的函数,我们可以按照定义式直接编程计算。

例6.1:已知两序列:
求它们的线性卷积yl(n)=h(n)*x(n)和N 点的
循环卷积yc=[h(n)* x(n)]n ,并研究两者之间的关系.
MATLAB 实现程序: (1) 循环卷积的函数
⎩⎨
⎧≤≤=⎩⎨
⎧≤≤=其它
其它0
501)(01108.0)(n n h n n x n
function yc=circonv(x1,x2,N)
%realize circular convolution use direct method
%y=circonv(x1,x2,N)
%y:output sequences
%x1,x2:input sequences
%N:circulation length
if length(x1)>N
error(‘N must not be less than length of x1’);
end
if length(x2)>N
error(‘N must not be less than length of x2’);
end
%以上语句判断两个序列的长度是否小于N
x1=[x1,zeros(1,N-length(x1))]; %填充序列x1(n)使其长度为N1+N2-1(序列%h(n)的长度为N1,序列x(n)的长度为N2)
x2=[x2,zeros(1,N-length(x2))]; %填充序列x2(n)使其长度为N1+N2-1 n=[0:1:N-1];
x2=x2(mod(-n,N)+1); %生成序列x2((-n))N
H=zeros(N,N);
for n=1:1:N
H(n,:)=cirshiftd(x2,n-1,N); %该矩阵的k行为x2((k-1-n))N end
yc=x1*H’;%计算循环卷
function y=cirshiftd(x,m,N)
%directly realize circular shift for sequence x
%y=cirshiftd(x,m,N);
%x:input sequence whose length is less than N
%m:how much to shift
%N:circular length
%y:output shifted sequence
if length(x)>N
error('length of x must be less than N');
end
x=[x,zeros(1,N-length(x))];
n=[0:1:N-1];
y=x(mod(n-m,N)+1);
(2)研究两者之间的关系
clear all;
n=[0:1:11];
m=[0:1:5]; N1=length(n); N2=length(m); xn=0.8.^n;
%生成x(n) hn=ones(1,N2); %生成h(n)
yln=conv(xn,hn);
%直接用函数conv 计算线性卷积 ycn=circonv(xn,hn,N1);
%用函数circonv 计算N1点循环卷积
ny1=[0:1:length(yln)-1]; ny2=[0:1:length(ycn)-1]; subplot(2,1,1); %画图
stem(ny1,yln); subplot(2,1,2); stem(ny2,ycn); axis([0,16,0,4]); 运行结果
线性卷

循环卷积
四、实验语句及结果
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:1: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'; %计算圆周卷积
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);
①x(n)⑤y(n)
clear all
xn=[1 2 3 4 5];
hn=[1 2 1 2];
N1=length(xn);
N2=length(hn);
y1n=conv(xn, hn);
ycn=circonv(xn, hn, 5);
ny1=[0:1:length(y1n)-1];
ny2=[0:1:length(ycn)-1];
subplot(2,1,1);
stem(ny1, y1n);
subplot(2,1,2);
stem(ny2, ycn);
②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('圆周卷积');
五、思考题解答
(4)线性卷积运算一般步骤为:①求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)。

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

相关文档
最新文档