实验五 线性卷积与循环卷积的计算
一、实验目的
1、进一步加深对线性卷积的理解和分析能力;
2、通过编程,上机调试程序,进一步增强使用计算机解决问
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
的能力;
3、掌握线性卷积与循环卷积软件实现的方法,并验证二者之间的关系。
二、实验原理
1、线性卷积
线性时不变系统(Linear Time-Invariant System, or L. T. I系统)输入、输出间的关系为:当系统输入序列为,系统的单位脉冲响应为,输出序列为,则系统输出为:
或
上式称为离散卷积或线性卷积。
图6.1示出线性时不变系统的输入、输出关系。
→ L. T. I —→ —→ —→
图6.1 线性时不变系统的输入、输出关系
2、循环卷积
D F T
设两个有限长序列和,均为点长
D F T
如果
则
N
上式称为循环卷积或圆周卷积
注:为序列的周期化序列;为的主值序列。
上机编程计算时,可
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
示如下:
3、两个有限长序列的线性卷积
序列为点长,序列为点长,为这两个序列的线性卷积,则为
且线性卷积的最大长,也就是说当和时。
4、循环卷积与线性卷积的关系
序列为点长,序列为点长,若序列和进行N点的循环卷积,其结果是否等于该两序列的线性卷积,完全取决于循环卷积的长度:
当时循环(圆周)卷积等于线性卷积,即
N
当时,循环卷积等于两个序列的线性卷积加上相当于下式的时间混叠,即
三、实验方法
对于无限长序列不能用MATLAB直接计算线性卷积,在MATLAB内部只提供了一个conv函数计算两个有限长序列的线性卷积。对于循环卷积MATLAB内部没有提供现成的函数,我们可以按照定义式直接编程计算。
例6.1:已知两序列:
求它们的线性卷积yl(n)=h(n)*x(n)和N点的循环卷积yc=[h(n)* x(n)]n,并研究两者之间的关系.
MATLAB实现程序:
(1) 循环卷积的函数
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]);
运行结果
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),因此圆周卷积和线性卷积相比,计算速度可以得到提高。
文档已经阅读完毕,请返回上一页!